d3.js如何获取对象数据数组的总和?

问题描述:

我有csv文件d3.js如何获取对象数据数组的总和?

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。我怎么能算每一年的“计数”的日期?

+0

你不能让一个直方图与该变量('“逮捕日期”'),这是不定量的(除非你测量的时间* *长) 。你能展示你的代码的直方图生成器(在v4中,它是'd3.histogram')吗?你真的在制作一个直方图,还是这是一张条形图? –

+0

为什么叫做'价格'的案例数量?这听起来很奇怪。价格是你图表的指标吗? – trincot

+0

@trincot上传了代码....变量是“count”。 –

如果我的理解正确无误,您希望将您的数据转换为同一天的所有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>

+0

是的。这正是我需要的。我可以使用代码insided3.csv(“Urbana_Police_Arrests_Since_1988.csv”,函数(错误,数据){ ... }); ? –

+0

可能是的。尝试一下。我用'd3.csvParse'得到了'data',你将得到'data'作为回调函数的第二个参数。如果csv的结构相同,它应该可以工作。 –