このCSVの例では:
Source,col1,col2,col3
foo,1,2,3
bar,3,4,5
私が使用する標準的な方法Pandasはこれです:
CSVを解析
データフレームに列を選択します(col1
およびcol3
)
col1
およびcol3
)PandasのようなJavaScriptライブラリはありますか?
私は、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以下はd3 v3にのみ適用され、最新のd4v4には適用されません!
私は 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のいくつかの関連機能を示しています。
Pandas.js 現時点では実験的なライブラリですが、データオブジェクトシリーズとDataFrameの両方が存在するimmutable.jsとNumpPyロジックの内部で使用することは非常に有望です。
以下は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
*/
最も近いものは次のようなライブラリだと思います:
特にリクライニングには、Pandasデータフレームに似た構造のDatasetオブジェクトがあります。これにより、データグリッド、グラフ、マップなどの「ビュー」にデータを接続できます。通常、D3、Flot、SlickGridなどの既存の最善の可視化ライブラリを囲む薄いラッパーです。
リクライニングの例を次に示します。
//いくつかのデータをロードする var dataset = recline.Model.Dataset({ records: {value:1、date: '2012-08- 07 '}、 {value: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 }); //新しいデータビューアーは生きている!
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、pythonまたはMatlabデータフレームにdf.column_header[row_number]
。
各行はすでに本質的にJavaScript配列であるため、JavaScriptでCSVを解析するのは非常に簡単です。 csvを文字列の配列(1行に1つ)にロードする場合、値を持つ配列の配列をロードするのは非常に簡単です。
_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 でこれを実証しました。
もちろん、入力を信頼しない場合、evalが取得する可能性のあるスクリプトがデータにある場合など、これを簡単に行うことはできません。