javascript - dc.js:使用reduceCount方法的堆积面积图

标签 javascript mapreduce dc.js crossfilter

我对 dc.js/crossfilter/d3 三连胜相当陌生,并且对构建堆积面积图的变量分组有疑问。我一直在关注类似 this one 的教程显示如何生成时间序列图表。这确实很有用,但是我定义 .group() 的方法图表的方法略有不同。在示例中,作者拥有 {'date': somedate, 'http_404': 20, 'total': 340 ... } 形式的数据。其中每种类型的 http 请求都有某种与 http 键关联的显式值。然后就可以直接使用 .reduceSum()按日期对总体 http 请求数进行分组的方法,如下所示 var hits = dateDim.group().reduceSum(function(d) {return d.total})

然后,作者为每种类型的 http 请求定义一个变量,以便为每种类型定义一系列,如下所示 var http_404 = dateDim.group().reduceSum(function(d) {return d.http_404}) 。然后将这些变量输入 .group().stack()代码中图表部分中的方法。这对我来说很有意义。但是,我使用的数据没有预先计算出我想要绘制的变量值,而是需要简单地计算数据中包含特定值的记录数。所以我有以下形式的东西:

'name', 'occupation', 'group', 'date_joined' 'John', 'plumber', 'A', '12/01/01' 'Jane', 'programmer', 'B', '12/22/04' 'Jim', 'manager', 'B', '1/8/05' 'Jill', 'motivational speaker', 'A', '5/14/12'

我需要能够计算某个组中有多少人,并将每个组随着时间的推移绘制为一个系列,并将它们用作 .stack()在我创建的时间表中。我知道我需要使用.reduceCount()方法,这适用于简单地计算按天划分的记录总数,但我不确定如何划分不同的组。我怀疑我的误解源于缺乏关于 map 缩减启发式的整体知识,因此任何有关其基础知识的指示,特别是与交叉过滤器有关的指示,将不胜感激。任何帮助将不胜感激。感谢您的阅读。

更新:我已经能够绘制多个系列,但生成的图表不正确。我尝试实现一个条件来检查记录所在的组并将它们分配给变量,如下所示: var group_A = dateDim.group().reduceCount(function(d) {if (d.group == "A") {return d.group} }) B组也同样如此。然而,当我绘制这些数据时,我得到两个系列,它们在每个数据点上重复相同的值,并堆叠在一起。任何对此问题的见解将不胜感激。

最佳答案

有多种方法可以做到这一点。为了让它按照你尝试的方式工作,你会希望你的reduce函数(总是)返回一个值,所以

var group_A = dateDim.group().reduceCount(function(d) {
    if (d.group == "A") return 1; 
    else return 0; 
});

人们通常做的另一件事是将所有值减少到一个复合组中:

var group = dateDim.group().reduce(function(p, d) {
    p[d.group] = (p[d.group] || 0) + 1;
    return p;  
  },
  function(p, d) {
    --p[d.group];
    return p;
  },
  function() { return {}; }
);

然后你可以使用 stack calls 的访问器:

.stack(group, function(d) { return d["A"] || 0; })

关于javascript - dc.js:使用reduceCount方法的堆积面积图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24415665/

相关文章:

javascript - 从一个 div 滚动到另一个 div

python - hadoop 中的拆分和映射任务数

d3.js - 如何在呈现图表后为 dc.js 图表应用工具提示

javascript - 在javascript中删除字符串中的空格

javascript - 如何解锁输入?

javascript - jQuery mousedown() 函数无法触发拖动事件

linux - 从主节点执行命令 "hadoop namenode -format "时出错?

amazon-web-services - 使用 Elastic MapReduce 进行文件处理 - 没有 Reducer 步骤?

d3.js - 从另一个数据集在 dc.js 中添加过滤器

javascript - 在嵌套 JSON 上使用 dc.js 创建条形图