如何在多列数据上使用Reductio的异常聚合功能?

时间:2016-07-09 15:39:44

标签: dc.js crossfilter reductio

我正在开展数据可视化项目,并且我正在使用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指数,PM 2.5,PM 10)的唯一值?这样做会影响我的医疗数据图表吗?

1 个答案:

答案 0 :(得分:1)

我认为这应该有效:

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/