我在交叉过滤器中计算了一个平均值,但它是错误的。我不明白为什么。你能指出我的错误吗?



您可以在这里看到我的gistup: http://bl.ocks.org/markarios/058f85800d598fc9f2b6

在检查还原时,我计算了每种设备类型的平均PPI,下面的代码产生了错误的结果。我能想到的唯一一件事是我需要如何使用ppi_device_sum[I]的索引。关键字,但我不知道如何引用它。

提前感谢您的时间!

// What's the average PPI per device?
write("");
write("Average PPI By Type");
for (var i = 0; i < type_device_count.length; i++) {
write(ppi_device_sum[i].key + "(s): " + ppi_device_sum[i].value/type_device_count[i].value);
};
产品类型

7平板(s):

桌面监视器:4

笔记本电脑(s): 2

智能手机(s): 2

桌面(s): 1

按设备类型划分的PPI总量

平板(s): 1997

智能手机(s): 770

桌面监视器(s): 444

笔记本电脑(s): 350

桌面(s): 108

按类型划分的PPI平均值

tablet(s): 285.2857142857143(正确)

智能手机(s): 192.5(错误,应该是385)

桌面监视器:222(不正确,应该是111)

laptop(s): 175(正确)

desktop(s): 108(正确)

可能最好在迭代之前按键对数组进行排序,以便它们的键以相同的顺序排列(JavaScript Array.prototype.sort()方法对此很好)。

如果你在Reductio中发现任何计算问题,请在Github上提交问题。现在它非常粗糙。在接下来的几周内,我将把它集成到一个更大的应用程序中,所以到那时它将得到更多的使用和关注。

另一个注意事项:在你的要点中,你正在做的事情让我认为你在一个关于交叉过滤器如何工作的非常常见的误解下工作。这不是很直观,但是这个

// calculate the number of device types
    var type_count = type.group().reduceCount().size();
// how many of each device are there?
    var type_device_count = type.group()
    .reduceCount()
    .top(type_count);

的作用是一样的
// Build the Crossfilter group.
var typeGroup = type.group();                    // .reduceCount() is the default
// calculate the number of device types
var type_count = typeGroup.size();               // Now redundant
// how many of each device are there?
var type_device_count = typeGroup.top(Infinity); // Returns all groups

后者是更好的处理方法,因为一旦创建了Crossfilter组,当新数据添加到Crossfilter时以及在其他维度上进行过滤时,该组将被更新。所以typeGroup.size()和typeGroup.top(Infinity)会随着Crossfilter上的内容和过滤器的变化而返回不同的结果。保持这些组的更新使用资源,因此您希望创建尽可能少的维度和组来完成任务。

相关内容

最新更新