【问题标题】:Returning max value in a DC.js / Crossfilter group返回 DC.js / Crossfilter 组中的最大值
【发布时间】:2014-03-24 12:51:40
【问题描述】:

我想知道如何从 dc.js 组返回最大值。

例如:

  var dateDim = data.dimension(function(d) {return d.page_id;});
  var hits = dateDim.group().reduceSum(function(d) {return d.commodity_id;}); 

这将返回一个条形图,在 X 轴上绘制 page_ids,在 Y 轴上绘制商品 ID。

但是,我希望它返回 Y 轴上特定页面上的商品 ID 数量。

会用类似于最大和最小尺寸功能的东西来完成吗?

 var minDate = dateDim.bottom(1)[0].page_id;
 var maxDate = dateDim.top(1)[0].page_id;

如果描述不清楚,请致歉。

谢谢

【问题讨论】:

  • 找到最大值很清楚,但是如何返回组的最小值?由于 hits.bottom 不存在...
  • 如果问题是如何获取每个组中行的最小值/最大值,我刚刚添加了a FAQan example

标签: crossfilter dc.js


【解决方案1】:

我至少会尝试为您指明正确的方向。

以下代码行将返回按page_id 分组的commodity_id 的总和:

    var dateDim = data.dimension(function(d) {return d.page_id;});
    var hits = dateDim.group().reduceSum(function(d){return d.commodity_id;});

如果一个页面有三个商品具有以下commodity_id: [ 1, 2, 5 ] reduceSum 将返回该页面的值 8 (1+2+5=8);它将添加每个后续的commodity_id,直到到达页面末尾。

假设数据集中的每个条目都包含一个必须计数的commodity_id,那么您只需分组并使用reduceCount,因为您只关心每页的商品总数:

    var hits = dateDim.group().reduceCount();

这将计算每个page_id 在数据库中出现的次数,对应于该页面上commodity_id 的数量。

如果您想查看此分组的结果,您可以使用:

    hits.all();

这将返回一个对象数组此数组中的每个对象都包含一个key 和一个valuekey对应page_idvalue对应page_id在数据集中出现的次数。

此时,如果您想获取最大值的page_id,可以使用top() 函数。 (group() 包含一个 top() 函数,就像 dimension() 一样,它返回计数最多的组。)以下是如何访问数据库中条目最多的page_id(应该对应最多commodity_id's) 和对应条目的数量:

    var page_id_with_most_entries = hits.top(1)[0].key;
    var number_of_entries = hits.top(1)[0].value;

如果您还没有,请查看 crossfilter.js API wiki:

https://github.com/square/crossfilter/wiki/API-Reference

我还发现 DC.js 页面上显示的 DC.js Nasdaq 示例的带注释源代码很有帮助:

http://nickqizhu.github.io/dc.js/docs/stock.html

(只需从链接中删除“docs/stock.html”即可访问纳斯达克示例。)

【讨论】:

  • 重要的是要注意 var hits = dateDim.group().reduceCount() 与商品 ID 无关,并假定每一行中都存在该数据。如果这不是真的,你可以做一个自定义减少,其添加看起来像 reduceAdd(p,v) {if (v.commodity_id != undefined) p.commodities++}
猜你喜欢
  • 1970-01-01
  • 2015-12-21
  • 2018-11-02
  • 2016-08-31
  • 2015-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多