分组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.nest
和d3.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>
感谢您的答复。但它似乎没有做我想要的笏。我希望它能够输出十进制分组数据的树状行,并将cat值加起来,并删除年份列。像我以上 – ronmac
@ronmac所以你想分组的数据和出口到CSV文件?为什么你使用d3呢? – sparta93
对不起,我感到困惑。我不想将它导出为.csv文件。我希望它输出三个对象数组以在堆叠条形图中使用。不知道这是正确的语法,但这样的: 对象 十年: “1970年” CAT1: “5” CAT2: “10” CAT3: “11” 对象 十年: “1980年” CAT1 : “14” CAT2: “10” CAT3: “11” 对象 十年: “1990” CAT1: “16” CAT2: “14” CAT3: “11” – ronmac