在d3中对csv文件进行分组

时间:2017-04-23 17:32:21

标签: csv d3.js

假设我有一个像这样的csv文件:

decade,year,cat1,cat2,cat3
1970,1971,2,3,6
1970,1972,3,8,4
1980,1981,5,8,7
1980,1982,9,2,4
1990,1991,7,9,5
1990,1992,9,5,6

我希望按"十年"对数据进行分组,删除"年份列",并添加" cat"柱。因此,最终数组看起来像在堆积条形图中使用:

decade,cat1,cat2,cat3
1970,5,11,10
1980,14,10,11
1990,16,14,11

1 个答案:

答案 0 :(得分:0)

您可以使用d3.nestd3.rollup来完成此操作。我们可以通过设置十年作为我们的关键,然后根据十年滚动/总结猫值来嵌套。生成的键值对将包括十进制作为键,值对象包含所有3个总计的cat值。查看下面的代码段:



var data = d3.csv.parse(d3.select('#data_csv').text());
var valuesByDecade;

data.forEach(function(d){
	//group and organize your data as needed here
  valuesByDecade = d3.nest()
  //set the decade as your key
  .key(function(d) {return d["decade"];}) 
  //rollup and sum your cat values by decade
  .rollup((function(d) {
    return {
        cat1: d3.sum(d, function(e) { return e["cat1"]; }),
        cat2: d3.sum(d, function(e) { return e["cat2"]; }),
        cat3: d3.sum(d, function(e) { return e["cat3"]; }),       
    };
  }))
  .entries(data);
});

console.log(valuesByDecade)

<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<pre id='data_csv'>decade,year,cat1,cat2,cat3
1970,1971,2,3,6
1970,1972,3,8,4
1980,1981,5,8,7
1980,1982,9,2,4
1990,1991,7,9,5
1990,1992,9,5,6
</pre>
&#13;
&#13;
&#13;