[javascript] JavaScript에서 동등한 Python Pandas
이 CSV 예 :
Source,col1,col2,col3
foo,1,2,3
bar,3,4,5
내가 Pandas를 사용하는 표준 방법은 다음과 같습니다.
-
CSV 구문 분석
-
데이터 프레임으로 열 선택 (
col1
및col3
) - 열 처리 (예 :
col1
및 값 평균col3
)
Pandas와 같은 JavaScript 라이브러리가 있습니까?
답변
모든 답변이 좋습니다. 내 대답이 포괄적 이길 바랍니다 (즉, 모든 옵션 을 나열하려고합니다 ). 선택에 도움이되는 기준으로이 답변을 반환하고 수정하기를 바랍니다.
여기 오는 사람이 d3
. d3
자바 스크립트에서 데이터를 처리하는 데 매우 유용한 “스위스 군용 칼” pandas
은 Python에 유용합니다. 당신이 볼 수는 d3
자주 같이 사용하는 pandas
경우에도 d3
입니다 DataFrame / 팬더 교체 정확하지 (즉, d3
같은 API가없는이, d3
없는 Series
/ DataFrame
처럼하는 행동하라 pandas
)
아메드의 대답은 D3 사용 방법을 설명 일부 DataFrame 기능을 달성하기 위해, 아래의 라이브러리 중 일부는 같은 것들에서 영감을했다 LearnJsData 사용 d3
하고 lodash
.
DataFrame-focused-features에 관해서는 도움이되는 JS 라이브러리에 압도되었습니다. 다음은 여러분이 접했을 수있는 몇 가지 옵션에 대한 간단한 목록입니다. 아직 자세히 확인하지 않았습니다 (대부분 Google + NPM 검색 조합에서 찾았습니다).
작업 할 수있는 다양성을 사용하도록주의하십시오. 일부는 Node.js 일명 서버 측 자바 스크립트이고 일부는 브라우저 호환 일명 클라이언트 측 자바 스크립트입니다. 일부는 Typescript입니다.
- pandas-js
- dataframe-js
- “DataFrame-js는 자바 스크립트 및 데이터 과학을위한 불변 데이터 구조 인 DataFrame을 제공하여 SQL 및 함수형 프로그래밍에서 영감을받은 API로 행과 열에서 작업 할 수 있습니다.”
- 데이터 포지
- Ashley Davis의 대답 에서 본
- “Pandas 및 LINQ에서 영감을 얻은 JavaScript 데이터 변환 및 분석 도구”
- 메모 JS 저장소가 이전 데이터 – 단조 더 이상 유지됩니다; 이제 새 저장소는 Typescript를 사용합니다.
- jsdataframe
- “Jsdataframe은 R 및 Python Pandas의 데이터 프레임 기능에서 영감을받은 JavaScript 데이터 랭 글링 라이브러리입니다.”
- 데이터 프레임
- “그룹화 및 축소하여 데이터 탐색”
그런 다음이 질문에 와서 여기에서 다른 답변을 확인하고 더 많은 검색을 수행 한 후 다음과 같은 옵션을 찾았습니다.
- JS의 Apache Arrow
- 사용자 Back2Basics 제안에 감사드립니다 :
- “Apache Arrow는 플랫 및 중첩 데이터의 벡터 및 테이블 형 컨테이너를 인코딩하기위한 컬럼 형 메모리 레이아웃 사양입니다. Apache Arrow는 대규모 인 메모리 컬럼 형 데이터 (Spark, Pandas , Drill, Graphistry 등) 의 새로운 표준입니다 .”
- 주목할 만한
- 기대다 ( Rufus의 대답에서 )
- Pandas 자체가 시도하는 DataFrame의 API에 대한 강조를 기대했습니다.
R에서 보존모든 R 기능에 대한 교체 / 개선 / 대응을 문서화합니다 . - 대신 나는 Recline의 예가 강조하는 강조를 찾습니다.
DOM으로 데이터를 가져 오는 jQuery 방식jQuery가 필요하지 않지만 브라우저가 필요한 (멋진) Multiview (UI)! 더 많은 예 - … 또는 MVC-ish 아키텍처 에 대한 강조 ; 백엔드 항목 포함 (예 : 데이터베이스 연결)
- 나는 아마도 너무 가혹할 것입니다. 결국 Pandas의 좋은 점 중 하나는 시각화를 쉽게 만들 수 있다는 것입니다. 상자 밖으로.
- Pandas 자체가 시도하는 DataFrame의 API에 대한 강조를 기대했습니다.
- Node.js 데이터
- 된장 ( Rufus의 또 다른 제안 )
- AlaSQL
- “AlaSQL”은 관계형 데이터와 스키마없는 데이터 모두에 대한 쿼리 속도와 데이터 소스 유연성에 중점을 둔 Javascript 용 오픈 소스 SQL 데이터베이스입니다. 브라우저, Node.js 및 Cordova에서 작동합니다. “
- 몇 가지 생각 실험 :
이 게시물이 커뮤니티 위키가되어 다음과 같은 다른 기준에 대해 평가 (즉, 위의 다른 옵션을 비교) 할 수 있기를 바랍니다.
- R 비교 에서 Panda의 기준
- 공연
- 기능성 / 유연성
- 사용의 용이성
- 내 제안
- Pandas / Dataframe API와의 유사성
- 특히 주요 기능 에 대한 히트
- 데이터 과학 강조> UI 강조
Jupyter
(대화 형 노트북) 등과 같은 다른 도구와 결합하여 입증 된 통합
JS 라이브러리가 결코 할 수없는 일들 (하지만 할 수 있습니까?)
- 동급 최고의 자바 스크립트 숫자 / 수학 라이브러리 인 기본 프레임 워크를 사용하십니까? (즉, NumPy 와 동등 )
- 더 빠른 코드를 생성 할 수있는 최적화 / 컴파일러를 사용하십시오 (예 : Pandas의 Cython 사용과 동일 ).
- 데이터 과학 기반 컨소시엄, ala Pandas 및 NumFocus에서 후원
답변
저는 data-forge라는 JavaScript 용 데이터 랭 글링 라이브러리를 작업하고 있습니다. LINQ 및 Pandas에서 영감을 얻었습니다.
다음과 같이 설치할 수 있습니다.
npm install --save data-forge
귀하의 예는 다음과 같이 작동합니다.
var csvData = "Source,col1,col2,col3\n" +
"foo,1,2,3\n" +
"bar,3,4,5\n";
var dataForge = require('data-forge');
var dataFrame =
dataForge.fromCSV(csvData)
.parseInts([ "col1", "col2", "col3" ])
;
데이터가 CSV 파일에있는 경우 다음과 같이로드 할 수 있습니다.
var dataFrame = dataForge.readFileSync(fileName)
.parseCSV()
.parseInts([ "col1", "col2", "col3" ])
;
이 select
방법을 사용하여 행을 변환 할 수 있습니다 .
열을 추출한 getSeries
다음 select
메서드를 사용하여 해당 열의 값을 변환 할 수 있습니다 .
다음과 같이 데이터 프레임에서 데이터를 다시 가져옵니다.
var data = dataFrame.toArray();
열을 평균화하려면 :
var avg = dataFrame.getSeries("col1").average();
이것으로 할 수있는 일이 훨씬 더 많습니다.
npm에서 더 많은 문서를 찾을 수 있습니다 .
답변
Ceaveat 다음은 최신 d4v4가 아닌 d3 v3에만 적용됩니다!
나는 d3.js에 부분적 이며 Pandas를 완전히 대체하지는 않지만 패러다임을 배우는 데 시간을 할애하면 모든 데이터 랭 글링 을 처리 할 수 있습니다. (브라우저에 결과를 표시하고 싶은 경우에는 이에 적합합니다.)
예. 내 CSV 파일 data.csv
:
name,age,color
Mickey,65,black
Donald,58,white
Pluto,64,orange
동일한 디렉토리 index.html
에서 다음을 포함하는을 만듭니다 .
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>My D3 demo</title>
<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
</head>
<body>
<script charset="utf-8" src="demo.js"></script>
</body>
</html>
또한 demo.js
다음을 포함 하는 파일 :
d3.csv('/data.csv',
// How to format each row. Since the CSV file has a header, `row` will be
// an object with keys derived from the header.
function(row) {
return {name : row.name, age : +row.age, color : row.color};
},
// Callback to run once all data's loaded and ready.
function(data) {
// Log the data to the JavaScript console
console.log(data);
// Compute some interesting results
var averageAge = data.reduce(function(prev, curr) {
return prev + curr.age;
}, 0) / data.length;
// Also, display it
var ulSelection = d3.select('body').append('ul');
var valuesSelection =
ulSelection.selectAll('li').data(data).enter().append('li').text(
function(d) { return d.age; });
var totalSelection =
ulSelection.append('li').text('Average: ' + averageAge);
});
디렉토리 에서을 실행 python -m SimpleHTTPServer 8181
하고 브라우저에서 http : // localhost : 8181 을 열어 연령과 평균에 대한 간단한 목록을 확인합니다.
이 간단한 예는 d3의 몇 가지 관련 기능을 보여줍니다.
- 온라인 데이터 ( CSV , TSV, JSON 등) 수집을위한 탁월한 지원
- 데이터 랭 글링 스마트 베이크 인
- 데이터 기반 DOM 조작 (머리를 감싸는 것이 가장 어려울 수 있음) : 데이터가 DOM 요소로 변환됩니다.
답변
현재 Pandas.js
는 실험용 라이브러리이지만 immutable.js 및 NumpPy 로직에서 사용하는 것이 매우 유망 해 보입니다. 데이터 개체 시리즈와 DataFrame이 모두 있습니다.
답변
아래는 Python numpy와 pandas입니다.
“`
import numpy as np
import pandas as pd
data_frame = pd.DataFrame(np.random.randn(5, 4), ['A', 'B', 'C', 'D', 'E'], [1, 2, 3, 4])
data_frame[5] = np.random.randint(1, 50, 5)
print(data_frame.loc[['C', 'D'], [2, 3]])
# axis 1 = Y | 0 = X
data_frame.drop(5, axis=1, inplace=True)
print(data_frame)
“`
JavaScript *에서도 동일한 결과를 얻을 수 있습니다. [ numjs는 Node.js에서만 작동합니다 ] 그러나 D3.js에는 훨씬 고급 데이터 파일 세트 옵션이 있습니다. numjs와 Pandas-js 모두 아직 작동 중입니다 ..
import np from 'numjs';
import { DataFrame } from 'pandas-js';
const df = new DataFrame(np.random.randn(5, 4), ['A', 'B', 'C', 'D', 'E'], [1, 2, 3, 4])
// df
/*
1 2 3 4
A 0.023126 1.078130 -0.521409 -1.480726
B 0.920194 -0.201019 0.028180 0.558041
C -0.650564 -0.505693 -0.533010 0.441858
D -0.973549 0.095626 -1.302843 1.109872
E -0.989123 -1.382969 -1.682573 -0.637132
*/
답변
가장 가까운 것은 다음과 같은 라이브러리라고 생각합니다.
특히 Recline에는 Pandas 데이터 프레임과 다소 유사한 구조를 가진 Dataset 개체가 있습니다. 그런 다음 데이터 그리드, 그래프,지도 등과 같은 “보기”와 데이터를 연결할 수 있습니다.보기는 일반적으로 D3, Flot, SlickGrid 등과 같은 기존 최고의 시각화 라이브러리를 둘러싼 얇은 래퍼입니다.
다음은 Recline의 예입니다.
// 일부 데이터로드 var dataset = recline.Model.Dataset ({ 기록 : [ {값 : 1, 날짜 : '2012-08-07'}, {값 : 5, b : '2013-09-07'} ] // 대신 CSV 데이터로드 // (그리고 Recline은 더 많은 데이터 소스 유형을 지원합니다) // URL : 'my-local-csv-file.csv', // 백엔드 : 'csv' }); // 뷰어를 위해 HTML에서 요소를 가져옵니다. var $ el = $ ( '# data-viewer'); var allInOneDataViewer = new recline.View.MultiView ({ 모델 : 데이터 세트, el : $ el }); // 새 데이터 뷰어가 활성화됩니다!
답변
@neversaint 당신의 기다림이 끝났습니다. Tensorflow.js에 구축 된 Javascript 라이브러리와 같은 팬더 인 Danfo.js에 오신 것을 환영하며 즉시 사용 가능한 텐서를 지원합니다. 즉, danfo 데이터 구조를 Tensor로 변환 할 수 있습니다. 그리고 groupby, 병합, 결합, 플로팅 및 기타 데이터 처리를 수행 할 수 있습니다.