分组CSV文件D3

问题描述:

说我有一个CSV文件是这样的:分组CSV文件D3

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 

我想按“十年”的数据,去掉“一年栏”,然后添加“猫”列。所以,最终的阵列看起来像这样的叠置条形图中使用:

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

您可以通过使用d3.nestd3.rollup做到这一点。我们可以将十年设定为关键,然后基于十年来滚动/总结猫值。生成的键值对将包括十进制作为键和一个值对象,包含所有3个总和的cat值。检查下面的代码片段:

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

 
data.forEach(function(d){ 
 
\t //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>

+0

感谢您的答复。但它似乎没有做我想要的笏。我希望它能够输出十进制分组数据的树状行,并将cat值加起来,并删除年份列。像我以上 – ronmac

+0

@ronmac所以你想分组的数据和出口到CSV文件?为什么你使用d3呢? – sparta93

+0

对不起,我感到困惑。我不想将它导出为.csv文件。我希望它输出三个对象数组以在堆叠条形图中使用。不知道这是正确的语法,但这样的: 对象 十年: “1970年” CAT1: “5” CAT2: “10” CAT3: “11” 对象 十年: “1980年” CAT1 : “14” CAT2: “10” CAT3: “11” 对象 十年: “1990” CAT1: “16” CAT2: “14” CAT3: “11” – ronmac