【问题标题】:Crossfilter.js: Creating Dimensions/Groups With Nested AttributesCrossfilter.js:使用嵌套属性创建维度/组
【发布时间】:2014-11-11 01:51:09
【问题描述】:

我正在使用 crossfilter.js 库进行可视化,但我对如何从数据集中的嵌套属性创建一些维度感到有些困惑。例如,数据集的每个实例都有多个与之关联的日期,从而产生如下所示的数据结构:

[ { name: 'instance_name',
  dates: ['2014-11-11', '2013-07-06', '2011-02-04'],
  category: 'category 1' },
{ name: 'instance_name2',
  dates: ['2012-01-01', '2013-03-07'],
  category: 'category 2' } ]

我希望能够创建允许基于日期和类别进行过滤的维度,并且维度是使用交叉过滤器执行此操作的简单方法。但是,我不确定如何解析日期。我首先尝试使用以下方法创建日期维度:

var cf = crossfilter(data);
var dateDim = cf.dimension(function(d) { return d.dates; });

然后尝试使用.map() 方法将日期仅存储为变量,如下所示:

var date = dateDim.top(Infinity).map(function(d) { return d.dates; });

上面确实只检索日期并将它们存储为变量,但是(a)这只是一个日期数组,每个日期都是一个字符串,并且(b)这并没有让我更接近链接dateDim 到我想为可视化创建的其他交叉过滤器维度。任何帮助将不胜感激。感谢阅读。

【问题讨论】:

    标签: javascript json d3.js nested crossfilter


    【解决方案1】:

    我的建议是在将结构加载到 Crossfilter 之前将其展平。因此,您的第一条记录将变为 3 条记录(每个日期 1 条),而您的第二条记录将变为 2 条记录。然后,您可以解析日期并将它们视为 Crossfilter 中的一个维度,而不会有太多麻烦。缺点是计数是个问题,但可以通过自定义分组函数进行管理。

    【讨论】:

    • 什么样的自定义分组功能可以缓解这里的计数问题?
    • 只计算它在组中看到的每个唯一键(在本例中为“名称”字段)中的第一个的分组。 Reductio 的异常聚合就是一个例子,虽然名称容易混淆:github.com/esjewett/…
    • 我认为这只是被标记为正确的,但实际上它不再是最佳的 :-) 在 Crossfilter 1.4.0 alphas 中,您可以使用维度数组来处理此问题而无需展平。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-29
    • 2015-03-20
    相关资源
    最近更新 更多