d3.js CSV数据聚合

d3.js CSV数据聚合,d3.js,D3.js,我想将读取的数据聚合为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,

我想将读取的数据聚合为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提出的解决方案,但没有成功,因为它将数据聚合为字符串格式。基于亚当斯的想法,我对代码做了一些修改。我使用nest进行聚合和映射,以获得所需的数据结构。下面是我最后想到的:

    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}; })

我不确定这是否是一个好主意-您可能希望将读取数据的方式与显示数据的方式分离-但是从d3.nest创建CSV并不太复杂

d3.nest()
  .key(function(d){ return d.a; })
  .rollup(function(leaves) { return leaves.length; })
  .entries(data)
  .map(function(d){ return d.key + ',' + d.values; })
  .join("\n")
你可以用图书馆来做

您可以从CSV文件(以及XLSX文件)读取数据:

或者,如果已经在内存中加载了数据,则可以使用alasql()的同步版本:


试试jffidle。

D3.js背后的想法是操纵数据的显示/可视化方式。如果您想要/需要操纵数据本身,那么D3.js有一定的回旋余地,但这不是它背后的意图<代码>d3。嵌套可能是您需要的。转换只影响您提供给D3.js的数据,而不影响数据本身的源。此外,我注意到您的配置文件中有
python
标记。也许这会有帮助:
alasql('SELECT a, COUNT(*) AS d FROM CSV("mydata.csv",{headers:true}) GROUP BY a',
    [],function(data){
    // use data in d3.
});
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]);