关于mapreduce:2个字段上的交叉过滤器维度

crossfilter dimension on 2 fields

我的数据看起来像这样

1
2
3
4
5
6
field1,field2,value1,value2
a,b,1,1
b,a,2,2
c,a,3,5
b,c,6,7
d,a,6,7

我没有很好的方法来重新排列数据,所以让我们假设数据必须保持这样。

我想在合并的field1field2上创建一个尺寸:一个尺寸将采用field1field2的所有值的并集(在我的示例中,值应为)

作为归约函数,您可以假设在value2上使用reduceSum(现在允许重复计算)。

(已标记dc.js和Reductio,因为它可能对那些库的用户有用)


首先,我需要指出的是,您的数据是非规范化的,因此,无论使用哪种技术,您获得的计数都可能会有些混乱。

在交叉过滤器的标准用法中,每一行将精确地计入一个bin中,并且一组中的所有bin总计为100%。但是,在您的情况下,每行将被计数两次(除非两个字段相同),因此例如饼图将毫无意义。

也就是说,"标签尺寸"功能非常适合您要执行的操作。

尺寸声明可以很简单:

1
var tagDimension = cf.dimension(function(d) { return [d.field1,d.field2]; }, true);

现在每行将被计数两次-此维度及其相关组将完全像每行都被重复一样操作,一个副本由field1索引,另一副本由field2索引。

如果使用此方法制作了条形图,则总数为2N减去field1 === field2处的行数。如果单击栏" b",则在任一字段中都具有" b"的所有行都将被选中。这仅影响基于此维度的组,因此任何其他图表将仅看到每一行的一个副本。