DC.js - Crossfilter 簡介



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]) - 用於構造新的 crossfilter。如果指定了記錄,則會同時新增指定的記錄。記錄可以是任何 JavaScript 物件或原語的陣列。

  • crossfilter.add(records) - 將指定的記錄新增到 crossfilter。

  • crossfilter.remove() - 從 crossfilter 中刪除與當前過濾器匹配的所有記錄。

  • crossfilter.size() - 返回 crossfilter 中的記錄數。

  • crossfilter.groupAll() - 用於對所有記錄進行分組並簡化為單個值的函式。

  • crossfilter.dimension(value) - 用於使用指定的 value 訪問器函式構造新的維度。

  • dimension.filter(value) - 用於過濾維度匹配值的記錄,並返回維度。

  • dimension.filterRange(range) - 過濾維度值為大於等於 range[0] 且小於 range[1] 的記錄。

  • dimension.filterAll() - 清除此維度上的任何過濾器。

  • dimension.top(k) - 用於返回一個新陣列,其中包含根據此維度的自然順序排列的前 k 條記錄。

  • dimension.bottom(k) - 用於返回一個新陣列,其中包含根據此維度的自然順序排列的最後 k 條記錄。

  • dimension.dispose() - 用於從 crossfilter 中刪除維度。

在下一章中,我們將簡要了解 D3.js。

廣告
© . All rights reserved.