1

読み込んだデータをCSVとして集計したい。d3.nest を試してみましたが、動作しますが、データを JSON 構造に変換するため、探しているものではありません。私にとって重要なことは、生の CSV データを使用する場合でも集計された CSV データを使用する場合でも、再利用可能なグラフが機能するように、CSV インターフェイスをそのまま維持することです。集計にmap reduceが使えたらいいなと思います。

たとえば、これを変換します。

a,b,c
1,1,1
1,2,1
1,3,1
1,4,1
2,1,1
2,2,1
2,3,1
2,4,1
3,1,1
3,2,1
3,3,1
3,4,1
3,5,1
3,6,1
4,1,1
4,2,1

これに:

a,d
1,4
2,4
3,6
4,2

Adam Pearce によって提案されたソリューションを試してみましたが、データを文字列形式に集約するため、うまくいきませんでした。Adams のアイデアに基づいて、コードを少し変更しました。集約とマップにネストを使用して、必要なデータ構造を取得しました。最終的に思いついたのは次のとおりです。

    var aggregated = d3.nest()
        .key(function(d) {
            var ts;
            var key = new Date(parseInt(d.ms_since_epoch));
            key.setMinutes(0);
            key.setSeconds(0);
            key.setMilliseconds(0);
            return key.getTime();
        })
        .rollup(function(leaves) { return leaves.length; })
        .entries(data)
        .map(function(d) { return {'ms_since_epoch': d.key, 'requests_hour': d.values}; })
4

2 に答える 2

1

Alasqlライブラリでそれを行うことができます。

CSV ファイル (および XLSX ファイル) からデータを読み取ることができます。

alasql('SELECT a, COUNT(*) AS d FROM CSV("mydata.csv",{headers:true}) GROUP BY a',
    [],function(data){
    // use data in d3.
});

または、すでにデータがメモリにロードされている場合は、同期バージョンの alasql() を使用できます。

var csvData = [{a:1,b:1,c:1},{a:1,b:2,c:1},{a:1,b:3,c:1}];

var data = alasql('SELECT a, COUNT(*) AS d FROM ? GROUP BY a',[csvData]);

jfFiddle でこの例を試してください。

于 2014-12-19T06:02:17.613 に答える