2016-11-28 51 views
0

我對JavaScript很新,我正在嘗試學習D3。按日曆月組數據

我有一個json文件(或csv)結構如下:

[{"tot_b": "172", "tot_a": "91", "datetime": "2012-01-01"}, 
{"tot_b": "116", "tot_a": "69", "datetime": "2012-01-02"}, 
{"tot_b": "122", "tot_a": "88", "datetime": "2012-02-01"}, 
{"tot_b": "30", "tot_a": "116", "datetime": "2012-02-02"}, 
{"tot_b": "19", "tot_a": "99", "datetime": "2012-03-01"}, 
{"tot_b": "116", "tot_a": "84", "datetime": "2012-03-02"},] 

除其他外,目的是顯示一些條形圖與tot_atot_btot_b/tot_a值。

如何讀取json文件並獲得一個數據結構,其中我將相同日曆月份中的日期相對應的數據進行求和?例如,我喜歡這樣的東西:

{ 
    'data': ['2012-01', '2012-02', '2012-03'], 
    'tot_a': [91+69, 88+116, 99+84], 
    'tot_b': [172+116, 122+30, 19+116], 
} 

我已經看過所以,但我還沒有找到類似的東西。任何參考將不勝感激。

回答

1

d3.nest是您的朋友,用於總結您的數據。

首先,彙總數據,以獲得總計爲tot_atot_b

var nested_data = d3.nest() 
    .key(function(d) { return d.datetime.split('-').slice(0, 2).join('-'); }) 
    .sortKeys(d3.ascending) 
    .rollup(function(leaves) { 
     return { 
     tot_b: d3.sum(leaves, function(d){ return d.tot_b }), 
     tot_a: d3.sum(leaves, function(d){ return d.tot_a; }) 
     }; 
    }) 
    .entries(data); 

然後,拆開包裝成你指定的數據結構:

var keys = nested_data.map(function(d){ return d.key; }); 
var bar_chart_data = { 
    data: keys, 
    tot_a: nested_data.map(function(d){ return d.values.tot_a; }), 
    tot_b: nested_data.map(function(d){ return d.values.tot_b; }) 
}; 

,你會得到:

{ 
"data":["2012-01","2012-02","2012-03"], 
"tot_a":[160,204,183], 
"tot_b":[288,152,135] 
} 

下面是演示Fiddle