Crossfilter平均组
我试图计算总和(查询时间)的平均查询时间,然后将它们除以一个计数。我怎样才能得到计数?
var querytimeByMonthGroup = moveMonths.group().reduceSum(function (d) {
return d.querytime;
});
var querytimeByMonthGroup = moveMonths.group().reduceSum(function (d) {
return d.querytime / d.count; ???
});
我对crossfilter不熟悉,只是刚开始玩。 可能有更好的方法,但是这提供了一种方法来计算用于分组的维数(我不是100%清楚地知道d.count指的是用于分组的维数,使用如果需要另一个分组)。
示例源自以下代码:https://github.com/square/crossfilter/wiki/API-Reference
var payments = crossfilter([
{date: "2011-11-14T16:17:54Z", quantity: 2, total: 190, tip: 100, type: "tab"},
{date: "2011-11-14T16:20:19Z", quantity: 2, total: 190, tip: 100, type: "tab"},
{date: "2011-11-14T16:28:54Z", quantity: 1, total: 300, tip: 200, type: "visa"},
{date: "2011-11-14T16:30:43Z", quantity: 2, total: 90, tip: 0, type: "tab"},
{date: "2011-11-14T16:48:46Z", quantity: 2, total: 90, tip: 0, type: "tab"},
{date: "2011-11-14T16:53:41Z", quantity: 2, total: 90, tip: 0, type: "tab"},
{date: "2011-11-14T16:54:06Z", quantity: 1, total: 100, tip: 0, type: "cash"},
{date: "2011-11-14T16:58:03Z", quantity: 2, total: 90, tip: 0, type: "tab"},
{date: "2011-11-14T17:07:21Z", quantity: 2, total: 90, tip: 0, type: "tab"},
{date: "2011-11-14T17:22:59Z", quantity: 2, total: 90, tip: 0, type: "tab"},
{date: "2011-11-14T17:25:45Z", quantity: 2, total: 200, tip: 0, type: "cash"},
{date: "2011-11-14T17:29:52Z", quantity: 1, total: 200, tip: 100, type: "visa"}
]);
var paymentsByType = payments.dimension(function(d) { return d.type; }),
paymentVolumeByType = paymentsByType.group(),
counts = paymentVolumeByType.reduceCount().all(),
countByType = {};
// what is returned by all is a pseudo-array. An object that behaves like an array.
// Trick to make it a proper array
Array.prototype.slice.call(counts).forEach(function(d) { countByType[d.key] = d.value; })
var paymentVolumeByType = paymentVolumeByType.reduceSum(function(d, i) {
console.log(d.total, d.type, countByType[d.type])
return d.total / countByType[d.type];
});
// accessing parentVolumeByType to cause the reduceSum function to be called
var topTypes = paymentVolumeByType.top(1);
我认为一个更好的(以及预期的)做法是通过定义你自己的reduce函数(add,remove,initial)。 然后,您可以将运行总和,计数等存储在减少功能中,并在筛选器从组中删除数据时适当调整它们。
在这个类似的问题中给出了使用平均值和最小值和最大值的示例:使用Crossfilter,分组时是否可以跟踪最大值/最小值?
链接地址: http://www.djcxy.com/p/32749.html上一篇: Crossfilter average group
下一篇: Draw the line use the same y values, plots line at the bottom