Han*_*Han 28 d3.js crossfilter
是否可以过滤具有数组值的交叉过滤器数据集?
例如,假设我有以下数据集:
var data = [
{
bookname: "the joy of clojure",
authors: ["Michael Fogus", "Chris Houser"],
tags: ["clojure", "lisp"]
},
{
bookname: "Eloquent Ruby",
authors: ["Russ Olsen"],
tags: ["ruby"]
},
{
bookname: "Design Patterns in Ruby",
authors: ["Russ Olsen"],
tags: ["design patterns", "ruby"]
}
];
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法来访问由特定标签标记的书籍?还有特定作者的书籍?到目前为止我理解如何使用crossfilter的方式让我这样做:
var filtered_data = crossfilter(data);
var tags = filtered_data.dimension(function(d) {return d.tags});
var tag = tags.group();
Run Code Online (Sandbox Code Playgroud)
然后当我访问分组时(如此):
tag.all()
Run Code Online (Sandbox Code Playgroud)
我明白了:
[{key: ["clojure", "lisp"], value: 1},
{key: ["design patterns", "ruby"], value: 1},
{key: ["ruby"], value: 1}]
Run Code Online (Sandbox Code Playgroud)
当我宁愿这样做时:
[{key: "ruby", value: 2},
{key: "clojure", value: 1},
{key: "lisp", value: 1},
{key: "design patterns", value: 1}]
Run Code Online (Sandbox Code Playgroud)
num*_*ati 31
我在下面的代码中添加了注释.大图:使用reduce功能.
var data = ...
var filtered_data = crossfilter(data);
var tags = filtered_data.dimension(function(d) {return d.tags});
tags.groupAll().reduce(reduceAdd, reduceRemove, reduceInitial).value()
Run Code Online (Sandbox Code Playgroud)
注意我是如何使用groupAll()而不是group() b/c我们希望我们的reduce函数(在下面定义)在一个组而不是3个组上运行.
现在reduce函数应该如下所示:
/*
v is the row in the dataset
p is {} for the first execution (passed from reduceInitial).
For every subsequent execution it is the value returned from reduceAdd of the prev row
*/
function reduceAdd(p, v) {
v.tags.forEach (function(val, idx) {
p[val] = (p[val] || 0) + 1; //increment counts
});
return p;
}
function reduceRemove(p, v) {
//omitted. not useful for demonstration
}
function reduceInitial() {
/* this is how our reduce function is seeded. similar to how inject or fold
works in functional languages. this map will contain the final counts
by the time we are done reducing our entire data set.*/
return {};
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4009 次 |
| 最近记录: |