【问题标题】:dc.js - how to get the average of a column in data setdc.js - 如何获取数据集中列的平均值
【发布时间】:2014-02-26 11:54:33
【问题描述】:

我有以下数据。

col1 col2 值 14 年 1 月 1 日 10 2014 年 1 月 1 日 35 14 年 1 月 1 日 68 14 年 1 月 1 日 21 日 14 年 1 月 1 日 24 日 b 14 年 1 月 1 日 26 日 b 2014 年 1 月 1 日 35 b 2014 年 1 月 1 日 39 b 2014 年 1 月 1 日 87 14 年 1 月 1 日 25 日 2014 年 1 月 1 日 63 2014 年 1 月 1 日 11 日 14 年 1 月 1 日 25 日 2014 年 1 月 1 日 35 日

如果我想取 col1 的总和。我可以通过使用col1Dim.group().reduceSum(function(d) { return d.value }) 来做到这一点。如果我需要计数,我可以用计数替换 sum。

但我在这里寻找平均水平。所以到那个。我需要计算 col1 的总和和 col1 的计数。

知道如何划分并获得平均值吗?

请帮忙。坚持了将近 3 天。

【问题讨论】:

  • 如何得到总和和计数,然后平均是总和/计数?
  • 如何使用dc.js

标签: javascript d3.js dc.js crossfilter


【解决方案1】:

你需要使用group.reduce(add, remove, initial)方法,比如:

var col1DimTotal = col1Dim.group().reduce(reduceAdd, reduceRemove, reduceInitial);

function reduceAdd(p, v) {
  ++p.count;
  p.total += v.value;
  return p;
}

function reduceRemove(p, v) {
  --p.count;
  p.total -= v.value;
  return p;
}

function reduceInitial() {
  return {count: 0, total: 0};
}

因为您使用的是 dc.js,所以您需要使用 chart.valueAccessor 方法来使用图表中的平均值,例如:

chart.valueAccessor(function(p) { return p.value.count > 0 ? p.value.total / p.value.count : 0; });

【讨论】:

  • 如果我希望它出现在col1 上,请告诉我如何绘制x-axis 标签。例如:在x-axis 中,我需要'a,b,c,d'。
  • 你有机会发布一些代码来呈现一些上下文吗?我很难理解您的问题,因为您的维度/组选择应该已经为您提供了 x 轴标签,例如 a、b、c、d。
  • @davidshinn:很好的答案大卫,我正在使用这段代码,但无法绘制图表并在控制台上获取随机/垃圾数据。如果你能在这里看看就太好了:stackoverflow.com/questions/34188115/…
猜你喜欢
  • 1970-01-01
  • 2017-10-12
  • 2016-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-02
  • 2022-01-08
  • 1970-01-01
相关资源
最近更新 更多