【问题标题】:How to use Reductio's Exception Aggregation function on multiple columns of data?如何在多列数据上使用 Reductio 的异常聚合函数?
【发布时间】:2016-07-09 15:39:44
【问题描述】:

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

【问题讨论】:

    标签: dc.js crossfilter reductio


    【解决方案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/

    【讨论】:

    • 我在尝试您的代码时收到以下错误消息:TypeError: group.all is not a function. (In 'group.all()', 'group.all' is undefined)
    • 我没有在您的问题或我的示例中看到将调用 group.all 的位置。您是否发布了完整的代码?
    • 实际上,当我添加您的代码时,错误消息是在引用 dc.js 文件时抛出的。但是,我确实设法通过将数据分成两个表并使用两个单独的交叉过滤器实例来规避该问题,然后添加一个事件侦听器方法以在过滤时将两个图表链接在一起(这对我的项目来说足够好)。非常感谢您的帮助! :)
    • 我怀疑我的示例代码实际上有问题。如果没有工作示例(例如 JSFiddle)和一些数据,很难说。很高兴你有一些工作!
    • 不,这个例子似乎有效。我已经发布了一个指向 JSFiddle 的链接。很可能代码中的其他东西在某个地方坏了。如果你想发布一个完整的例子,我们可能会让它工作。如果你已经很好了,那就太好了:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    • 2012-06-12
    • 1970-01-01
    • 2019-10-19
    • 2021-09-27
    • 2021-04-02
    • 1970-01-01
    相关资源
    最近更新 更多