我正在做一个数据可视化项目,我正在使用dc.js库。将数据转换为平面数据结构(用于交叉筛选)后,数据如下所示:
[{"date":"2015-01-01","region":1,"cancer":10,"diabetes":5,"aqi_index":66,"pm2_5":20,"pm10":35},{"date":"2015-01-01","region":2,"cancer":30,"diabetes":25,"aqi_index":66,"pm2_5":20,"pm10":35}]我有一个用来显示空气污染数据的折线图和一个用来显示医疗记录的堆积面积图。
这就是我面临的一个问题。如您所见,我的表包含每个日期的两行,每个区域一行。医疗数据因地区而异;然而,在同一日期,两个地区的空气污染数据是相同的。因为我使用以下代码来获得空气污染物与时间的关系图:
var ndx = crossfilter(data);
var dateDim = ndx.dimension(function(d) {return d["date"];});
var aqi = dateDim.group().reduceSum(function(d) {return d["aqi_index"];});
var pm2_5 = dateDim.group().reduceSum(function(d) {return d["pm2_5"];});
var pm10 = dateDim.group().reduceSum(function(d) {return d["pm10"];});我的空气污染数据图表变得不准确,因为我显示的污染物数量是每个日期的两倍。如何使用Reductio的异常聚合功能显示每个日期的每个污染物读数(AQI指数、PM2.5、PM10)的唯一值?这样做会影响我的医疗数据图表吗?
发布于 2016-07-10 00:30:44
我认为这应该行得通:
var ndx = crossfilter(data);
var dateDim = ndx.dimension(function(d) {return d["date"];});
var dateGroup = dateDim.group()
var reducer = reductio()
// Value allows multiple aggregations on the same group.
// Here aggregate all values on the "cancer" property for a date.
reducer.value("cancer").sum("cancer")
// Here aggregate only the first value of the "aqi_index" property for a date to
// avoid double-counting
reducer.value("aqi_index").exception("date").exceptionSum("aqi_index")
reducer(dateGroup)添加任意数量的值聚合,以聚合组上的所有度量。如果出现错误,请告诉我。
示例JSFiddle (请参阅控制台查看结果):https://jsfiddle.net/esjewett/5onebhsd/1/
https://stackoverflow.com/questions/38283468
复制相似问题