2017-04-23 68 views
0

說我有一個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 

回答

0

您可以通過使用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