Javascript 按日历月分组数据

Javascript 按日历月分组数据,javascript,d3.js,Javascript,D3.js,我对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

我对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_a
tot_b
tot_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],
}
我已经查过了,但是我没有找到任何类似的。任何参考资料都将不胜感激。

是您总结此类数据的朋友

首先,汇总您的数据,以获得总计a和总计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]
}
这里是a中的一个演示。

是您总结此类数据的朋友

首先,汇总您的数据,以获得总计a和总计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]
}
这里是一个演示在一个