자바스크립트에서 동등한 Python Pandas
이 CSV 예제를 사용하면 다음과 같습니다.
Source,col1,col2,col3
foo,1,2,3
bar,3,4,5
Panda를 사용하는 표준 방법은 다음과 같습니다.
CSV 구문 분석
프레임으로 합니다(데이터 프레임에 열을 선택합니다).
col1
그리고.col3
)- 열을 처리합니다(예: 평균 값).
col1
그리고.col3
)
판다처럼 그렇게 할 수 있는 자바스크립트 라이브러리가 있습니까?
이 위키는 많은 판다와 같은 자바스크립트 라이브러리를 요약하고 비교할 것입니다.
일반적으로, 당신은 d3 자바스크립트 라이브러리를 확인해야 합니다. d3는 팬더가 파이썬에 도움이 되는 것처럼 자바스크립트의 데이터를 다루는 데 매우 유용한 "스위스 군대 나이프"입니다. DataFrame대체 되는 것을 볼 수 API를 않으며, 는 d3DataFrame/Pandas를 가지고 있지 ).Series
/DataFrame
판다 행동과 일치하는 방법이 있는 수업).
Ahmed의 답변은 d3를 사용하여 일부 DataFrame 기능을 달성하는 방법을 설명하며, 아래의 라이브러리 중 일부는 d3 및 lodash를 사용하는 LearnJsData와 같은 것에서 영감을 받았습니다.
DataFrame 스타일의 데이터 변환(분할, 결합, 그룹화 등)에 대해 다음은 일부 JavaScript 라이브러리의 빠른 목록입니다.
라이브러리는 다음과 같은 다양한 언어로 작성됩니다.
- 브라우저 호환 클라이언트 측 JavaScript
- Node.jsaka 서버 측 JavaScript
- 활자 원고
- 일부는 WebAssembly로 변환된 CPython을 사용하기도 합니다(그러나 Node.js 및/또는 브라우저와 함께 작동).
...고객에게 적합한 옵션을 사용하십시오.
- Pyodide(브라우저 지원 및 Nodejs 지원)
- danfo-js(브라우저-지원 및 NodeJS-지원)
되어 danfo로 이 붙습니다.)
dfd
플롯하는 인 DataFrame 구조를 있습니다); 는 DataFrame과 동일한 데이터 구조를 가지고 있습니다.Tensorflow의 팀에 의해 구축됨: "Danfo.js의 주요 목표 중 하나는 자바스크립트 개발자들에게 데이터 처리, 기계 학습 및 AI 도구를 제공하는 것입니다. ...Numpy 및 Pandas와 같은 오픈 소스 라이브러리.."
팬더는 numpy 위에 지어집니다; 마찬가지로 danfo-js는 텐서플로-js 위에 지어집니다.
danfo는 (아직) 다중 열 인덱스를 지원하지 않을 수 있습니다.
- 판다-제이
- dataframe-js
- "DataFrame-js는 자바스크립트와 데이터 과학을 위한 불변의 데이터 구조인 DataFrame을 제공하여 SQL 및 함수형 프로그래밍에서 영감을 받은 API로 행과 열에서 작업할 수 있습니다."
- 자료 수집의
- 애슐리 데이비스의 답변에서 볼 수 있습니다.
- "Pandas와 LINQ에서 영감을 얻은 JavaScript 데이터 변환 및 분석 툴킷"
- 이전 데이터 포징 JS 리포지토리는 더 이상 유지 관리되지 않습니다. 이제 새 리포지토리가 Typescript를 참조하십시오.
- jsdata 프레임
- "Jsdataframe은 R 및 Python Pandas의 데이터 프레임 기능에서 영감을 얻은 JavaScript 데이터 랭글 라이브러리입니다."
- 데이터 프레임
- "그룹화 및 축소를 통해 데이터 수집"
- SQL 프레임
- "Browser에서 데이터 프레임이 SQL을 충족합니다.
- "SQL Frame은 브라우저에 직접 내장하여 풍부한 데이터 시각화 및 UX를 제공할 수 있는 낮은 코드의 데이터 관리 프레임워크입니다.복잡한 데이터 프레임은 익숙한 SQL 구조를 사용하여 구성할 수 있습니다.강력한 내장 분석 엔진을 통해 데이터 소스는 모든 형태, 형태 및 빈도로 제공되며 브라우저 내에서 직접 분석할 수 있습니다.구성된 DataFrame 로직을 SQL로 변환하여 빅데이터 백엔드로 확장할 수 있습니다."
- Jandas (브라우저 및 NodeJS 지원, 2023년에 개발된 새로운 TypeScript 라이브러리)
- Panda와 매우 유사한 인덱싱 및 쿼리
- 음수 및 범위 인덱싱
- 행/열이 0인 DataFrame 지원
- 중복된 값을 가진 지원 인덱스
- 반복실험 행, sort_values, 그룹화 기준 및 요소별 연산
이 질문을 받고 다른 답변을 확인한 후 검색을 더 수행한 결과 다음과 같은 옵션을 발견했습니다.
- JS의 Apache Arrow
- Back2Basics 사용자 제안 덕분에:
- "Apache Arrow는 평평하고 중첩된 데이터의 벡터 및 테이블 모양 컨테이너를 인코딩하기 위한 기둥 모양 메모리 레이아웃 규격입니다.Apache Arrow는 대용량 메모리 기둥 데이터(Spark, Pandas, 드릴, Graphistry 등)에 대한 새로운 표준입니다."
- 극지
- Polars는 Apache Arrow Columnary Format을 메모리 모델로 사용하여 Rust에서 구현된 엄청나게 빠른 DataFrames 라이브러리입니다.
- 관찰 가능한
- portal.js(이전)
recline
루퍼스의 대답에서)- 오래되었을 수 있음: "DataFrame" API를 사용하지 않습니다.
- 구식일 수 있음:대신 jQuery가 필요하지 않지만 브라우저가 필요한 "Multiview"(UI) API(jQuery/DOM 모델과 유사)를 강조합니다!기타 예제
- 구식일 수 있음: 또한 백엔드(예: 데이터베이스 연결)를 포함한 MVC-ish 아키텍처를 강조합니다.
- js-data
- 미소 (루퍼스의 또 다른 제안)
- AlaSQL
- "AlaSQL"은 관계형 데이터와 스키마가 없는 데이터 모두에 대해 쿼리 속도와 데이터 소스 유연성에 중점을 둔 Javascript용 오픈 소스 SQL 데이터베이스입니다.브라우저인 Node.js 및 Cordova에서 작동합니다."
- 몇 가지 사고 실험:
위의 선택 사항을 고려하기 위해 사용한 기준은 다음과 같습니다.
- 일반 기준
- 언어(노드 JS 대 브라우저 JS 대 유형 스크립트)
- 종속성(즉, 기본 라이브러리 / AJAX/원격 API를 사용하는 경우)
- 능동 지원(능동 사용자 기반, 능동 소스 저장소 등)
- JS 라이브러리의 크기/속도
- 판다의 R 비교 기준
- 성능
- 기능성/유연성
- 사용 편의성
- Pandas / Dataframe API 제공
- 주요 기능을 구체적으로 소개합니다.
- 데이터 과학 강조
- 내장 시각화 기능
- Jupiter(대화형 노트북) 등과 같은 다른 툴과의 통합 입증
저는 자바스크립트를 위한 data-forge라는 데이터 논쟁 라이브러리를 연구하고 있습니다.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에서 확인할 수 있습니다.
다음은 d3 v3에만 적용되며 최신 d4 v4에는 적용되지 않습니다!
저는 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 요소로 변환됩니다.
@당신의 기다림이 끝난 것을 결코 성하지 않습니다.Tensorflow.js에 구축된 Javascript 라이브러리와 같은 팬더이며 텐서를 즉시 지원하는 Danfo.js에 오신 것을 환영합니다.즉, 단포 데이터 구조를 텐서로 변환할 수 있습니다.그룹화, 병합, 결합, 플롯 및 기타 데이터 처리를 수행할 수 있습니다.
현재 Pandas.js는 실험 라이브러리이지만 후드 불변.js 및 NumpPy 로직에서 사용할 가능성이 매우 높은 것으로 보이며, 데이터 객체 시리즈와 DataFrame 모두 그곳에 있습니다.
@jarthur가 언급한 2021년 2월 10일 업데이트는 지난 4년 동안 이 보고서에 대한 업데이트가 없는 것 같습니다.
아래는 파이썬 누피와 팬더입니다.
```
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와 Panda-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
*/
가장 가까운 것은 다음과 같은 도서관이라고 생각합니다.
리클라인은 특히 Pandas 데이터 프레임과 다소 유사한 구조를 가진 Dataset 객체를 가지고 있습니다.그런 다음 데이터 그리드, 그래프, 지도 등과 같은 "보기"로 데이터를 연결할 수 있습니다.보기는 일반적으로 D3, Flot, SlickGrid 등과 같은 기존 최고 수준의 시각화 라이브러리를 중심으로 한 얇은 래퍼입니다.
리클라인의 예는 다음과 같습니다.
일부 데이터 로드var 데이터 집합 = 뒤로 젖혀짐.Model.Dataset({)레코드: [값: 1, 날짜: '2012-08-07',값: 5, b: '2013-09-07' }]대신 CSV 데이터 로드(또한 Recline은 더 많은 데이터 소스 유형을 지원합니다.)url: 'my-local-csv-file.csv',백엔드: 'csv'}); HTML에서 뷰어에 대한 요소 가져오기var $el = $('#data-interval'); varallInOneDataViewer = 새 리클라인입니다.View.MultiView({모형: 데이터 집합,el: $el});새 데이터 뷰어가 활성화됩니다!
2023년은 공통 시대의 해이며, Pyodide는 전체 CPython 커널과 숫자 Python 생태계의 큰 부분을 교차 컴파일한 것으로 브라우저/Node.js에서 실행하기 위해 WebAssembly(wasm)로 이동합니다.여기에는 Pandas도 물론 포함되므로 Pandas + Pyodide로 구축할 수 있는 내용은 "Pandas Tutor: Pyodide를 사용하여 규모에 맞는 데이터 과학 교육"을 참조하고 Pyodide와 함께 즉시 제공되는 패키지의 전체 목록을 참조하십시오.
노드의 경우, 여기까지입니다.표디데를 경유하는 판다가 답입니다.브라우저의 경우 Pyodide 스택보다 브라우저의 기본적인 특성과 더 관련된 몇 가지 문제가 있습니다.예를 들어, Pandas에 CSV 파일을 로드하는 가장 쉬운 방법은 웹 요청(https://github.com/joyceerhl/vscode-pyolite/issues/12 및 참조 참조)이며, 마찬가지로 데이터를 "저장"하는 데에도 어려움이 있습니다(가능하다면 서버에 게시하는 것은 추가 설정입니다. 물론 Dropbox/Google Drive/등의 통합이 곧 출시될 예정입니다).
하지만 이 질문이 있은 지 거의 8년이 지난 지금, 자바스크립트 패키지가 판다를 데려오지도 않았습니다. 그리고 우리는 여기에 있습니다: 판다가 우리에게 왔습니다.할렐루야.
Arquero는 인기 있는 R 패키지와 유사한 구문을 가진 관계형 데이터를 처리하기 위한 라이브러리입니다.dplyr
(이것은 일종의 SQL과 유사합니다.)https://observablehq.com/ @uwdata/소개-arquero
Jandas라는 새로운 자바스크립트 패키지가 있는데, 다른 패키지보다 인덱싱 경험이 더 좋은 것 같습니다.(0,n) 또는 (n,0) 모양의 행/열이 0인 DataFrame과 중복된 값이 있는 인덱스를 지원합니다.인덱싱 기능에 대한 포괄적인 오버로드는 TypeScript에서 올바른 반환 유형을 보장합니다.몇 가지 예:
const df = new DataFrame([[1,2],
[3,4],
[5,6]],
{index:['a','b','b'],columns:['d',5]})
df.iloc(null,0) //output: new Series([1,3,5],{index:['a','b','b'],name:'d'})
df.iloc([0,1]).values //output: [[1,2],[3,4]]
df.iloc([2],[1]).values // [[6]]
df.iloc(-1).values // [5,6]
df.iloc([-3,-1]).values //[[1,2],[5,6]]
df.iloc(':2').values // [[1,2],[3,4]]
df.iloc('-3:-1').values //[[1,2],[3,4]]
df.iloc('::-1').values //[[5,6],[3,4],[1,2]]
df.iloc([true,false,false]).values // [[1,2]]
df.iloc([false,false,false]) // new DataFrame([],{index:[],columns:['d',5]})
df.iloc(null,[false,false]) // new DataFrame([[],[],[]],{index:['a','b','b'],columns:[]})
df.loc(['a']).values // [[1,2]]
df.loc('a').values // [1,2]
df.loc('b').values // [[3,4],[5,6]]
df.loc(null,['d',5]).values // [[1,2],[3,4],[5,6]]
df.loc(null,[true,false]).values //[[1],[3],[5]]
Panda보다 더 강력한 쿼리 기능을 구현합니다.
const ss = new Series([1,2,3],{index:['a','b','b'],name:'kk'})
ss.b('x > 2') // output is: [false,false,true]
ss.q('x>2') // output is: new Series([3],{index:['b'],name:'kk'})
ss.q('x>=1 && x<3').values // [1,2]
const df = new DataFrame([[1,2,3],
[3,8,9],
[5,6,7]],
{index:['a','b','b'],columns:['5',5,'e']})
df.b('[ "5" ]>3') // output: [false,false,true]
df.b('["a"]<=2',0) // [true,true,false]
df.q('["5"]>3') //output: new DataFrame([[5,6,7]],
// {index:['b'],columns:['5',5,'e']})
// pandas query function does not support numeric column names.
df.q('[5]>3') //output: new DataFrame([[3,8,9],[5,6,7]],
// {index:['b','b'],columns:['5',5,'e']})
df.q('[ "a"]>1 && ["a"]<3',null)
// output: new DataFrame([[2],[8],[6]],{index:['a','b','b'],columns:[5]})
df.q('[ "a" ]>1','[ 5 ]>3') //output: new DataFrame([[8,9],[6,7]],
// {index:['b','b'],columns:[5,'e']})
const dx = new DataFrame<number|string>(
[[1,'e',3],
[3,'a',9],
[5,'c',7]],
{index:['a','b','b'],columns:['5',5,'e']})
dx.q('["a","c"].includes([5]) && ["e"]>7')
//output: new DataFrame<number|string>([[3,'a',9]],
// {index:['b'],columns:['5',5,'e']})
여기 1호선의 기존 헤더를 가정한 동적 접근법이 있습니다.CSV에 로드된 데이터는d3.js
.
function csvToColumnArrays(csv) {
var mainObj = {},
header = Object.keys(csv[0]);
for (var i = 0; i < header.length; i++) {
mainObj[header[i]] = [];
};
csv.map(function(d) {
for (key in mainObj) {
mainObj[key].push(d[key])
}
});
return mainObj;
}
d3.csv(path, function(csv) {
var df = csvToColumnArrays(csv);
});
그런 다음 R, 파이썬 또는 Matlab 데이터 프레임과 유사한 데이터의 각 열에 액세스할 수 있습니다.df.column_header[row_number]
.
각 줄은 이미 기본적으로 자바스크립트 배열이기 때문에 자바스크립트에서 CSV를 구문 분석하는 것은 매우 쉽습니다.CSV를 문자열 배열(한 줄에 하나씩)에 로드하는 경우 다음 값을 사용하여 배열 배열을 로드하는 것이 매우 쉽습니다.
var pivot = function(data){
var result = [];
for (var i = 0; i < data.length; i++){
for (var j=0; j < data[i].length; j++){
if (i === 0){
result[j] = [];
}
result[j][i] = data[i][j];
}
}
return result;
};
var getData = function() {
var csvString = $(".myText").val();
var csvLines = csvString.split(/\n?$/m);
var dataTable = [];
for (var i = 0; i < csvLines.length; i++){
var values;
eval("values = [" + csvLines[i] + "]");
dataTable[i] = values;
}
return pivot(dataTable);
};
그리고나서getData()
열별 값의 다차원 배열을 반환합니다.
제가 이걸 jsFiddle에서 보여드렸습니다.
물론 입력을 신뢰하지 않는 경우에는 이렇게 쉽게 할 수 없습니다. 데이터에 평가 스크립트가 있을 수 있는 등의 작업을 수행할 수 있습니다.
언급URL : https://stackoverflow.com/questions/30610675/python-pandas-equivalent-in-javascript
'programing' 카테고리의 다른 글
numpy는 어떻게 사용하나요?어디서?제가 합격해야 하는 것은 무엇이고, 그 결과는 무엇을 의미합니까? (0) | 2023.07.20 |
---|---|
for 루프에서 생성된 판다 데이터 프레임 추가 (0) | 2023.07.20 |
오류: 함수 detect MultiScale의 (-215) !empty() (0) | 2023.07.20 |
하위 클래스에서 기본 클래스의 __init_ 메서드를 호출하는 방법은 무엇입니까? (0) | 2023.07.20 |
Excel이 프로그래밍 방식으로 인스턴스화될 때 추가 기능 로드 (0) | 2023.07.20 |