【问题标题】:d3.js How to get sum of array of objects data?d3.js 如何获取对象数据数组的总和?
【发布时间】:2017-10-28 12:17:58
【问题描述】:

我有 csv 文件

DATE OF ARREST, ARREST RESOLUTION, COUNT
01/01/1988, BONDED OUT, 1
01/01/1988, BONDED OUT, 1
01/01/1988, BONDED OUT, 1
02/01/1988, BONDED OUT, 1
02/01/1988, BONDED OUT, 1

我想用上面的数据创建一个图表视图。为此,我必须为每个日期求和“COUNT”。例如,我需要 01/01/1988, BONDED OUT, 3 ... 在这一天我有 3 个案例。解析我使用的日期

var parseDate = d3.timeParse("%m/%d/%Y");

 data.forEach(
  function(d){
  d.count = +d["COUNT"];
  d.date = parseDate(d["DATE OF ARREST"]);
})

图表正确显示年份,但病例数始终为 1。如何计算每年的“COUNT”?

【问题讨论】:

  • 您无法使用该变量 ("date of arrest") 制作直方图,这不是定量的(除非您正在测量时间的持续时间)。你能显示你的代码的直方图生成器(在 v4 中,它是d3.histogram)吗?你真的是在制作直方图,还是条形图?
  • 病例数为什么叫price?这听起来很奇怪。 price 是你图表的指标吗?
  • @trincot 上传了代码....变量是“count”。
  • @VasilescuCatalin 没什么区别,你可以随意命名。那么直方图生成器呢?
  • 好的,所以这里没有任何直方图...我刚刚编辑了您的问题,删除了对“直方图”的引用。

标签: javascript arrays d3.js


【解决方案1】:

如果我对您的理解正确,您想转换您的数据并将同一天的所有COUNT 相加。您可以使用d3.nest 来完成。

var dataAsCsv = `DATE OF ARREST,ARREST RESOLUTION,COUNT
01/01/1988,BONDED OUT,1
01/01/1988,BONDED OUT,1
01/01/1988,BONDED OUT,1
02/01/1988,BONDED OUT,1
02/01/1988,BONDED OUT,1`;

var data = d3.csvParse(dataAsCsv);

var parseDate = d3.timeParse("%m/%d/%Y");

var convertedData = d3.nest()
  .key(function(d) { return d["DATE OF ARREST"]; })
  .rollup(function(v) {
      return {
        date: parseDate(v[0]["DATE OF ARREST"]),
        count: d3.sum(v, function(d) { return +d["COUNT"]; })
      }
  })
  .entries(data).map(function(d) { return d.value});

console.log(convertedData);
<script src="https://d3js.org/d3.v4.min.js"></script>

【讨论】:

  • 是的。这正是我需要的。我可以使用代码 insided3.csv("Urbana_Police_Arrests_Since_1988.csv", function(error, data) { ... } ); ?
  • 可能是的。尝试一下。我得到了datad3.csvParse,你会得到data 作为回调函数的第二个参数。如果 csv 的结构相同,它应该可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-05
  • 2018-04-30
  • 2022-10-01
  • 1970-01-01
  • 2013-01-25
相关资源
最近更新 更多