DC.js - Crossfilter简介

Crossfilter是一个多维数据集.它支持与包含一百万或更多记录的数据集进行极快速的交互.

基本概念

Crossfilter在crossfilter命名空间下定义.它使用语义版本控制.考虑一个交叉过滤器对象,其中加载了以下定义的水果集合;

var fruits = crossfilter ([
   { name: "Apple", type: "fruit", count: 20 },
   { name: "Orange", type: "fruit", count: 10 },
   { name: "Grapes", type: "fruit", count: 50 },
   { name: "Mango",  type: "fruit", count: 40 }
]);

如果我们需要在一个组中执行总记录,我们可以使用以下函数 :

var count = fruits .groupAll().reduceCount().value();

如果我们想按特定类型过滤 :

var filtering = fruits.dimension(function(d){return d.type;}); 
filtering.filter("Grapes")

同样,我们可以使用Crossfilter进行分组.为此,我们可以使用以下函数 :

var grouping = filtering.group().reduceCount(); 
var first = grouping.top(2);

因此,Crossfilter的速度非常快.如果要在应用过滤器时重新计算组,则会逐步计算. Crossfilter维度非常昂贵.

Crossfilter API

让我们详细介绍一下着名的Crossfilter API.

  • crossfilter([records]) : 它用于构建新的交叉滤波器.如果指定了记录,则它同时添加指定的记录.记录可以是任何JavaScript对象或基元数组.

  • crossfilter.add(记录) : 将指定的记录添加到交叉过滤器.

  • crossfilter.remove() : 从crossfilter中删除与当前过滤器匹配的所有记录.

  • crossfilter.size() : 返回交叉过滤器中的记录数.

  • crossfilter.groupAll() : 它是一个用于对所有记录进行分组并减少为单个值的函数.

  • crossfilter.dimension(value) : 它用于使用指定的值访问器函数构造新维度.

  • dimension.filter(value) : 它用于过滤维度匹配值的记录,并返回维度.

  • dimension.filterRange(范围) : 过滤尺寸值大于或等于范围[0]且小于范围[1]的记录.

  • dimension.filterAll( ) : 清除此维度上的所有过滤器.

  • dimension.top(k) : 它用于根据此维度的自然顺序返回包含前k个记录的新数组.

  • dimension.bottom(k) : 它用于根据此维度的自然顺序返回包含底部k记录的新数组.

  • dimension.dispose() : 它用于从交叉过滤器中删除尺寸.

在下一章中,我们将简要了解D3.js.