使用group()计算crossfilter.js中的总数.reduceCount和groupAll()。reduceSum

时间:2014-05-22 00:06:30

标签: json dc.js crossfilter

我有一个大型JSON文件,其值与此示例类似:

[
  {"date": "12/27/2012",  "temp": 23,  "pH": ".4"},
  {"date": "12/27/2012",  "temp": 23,  "pH": ".7"},
  {"date": "12/27/2012",  "temp": 23,  "pH": ".2"},
  {"date": "12/27/2012",  "temp": 23}
]

有些情况下pH值不存在。我需要在页面上跟踪“temp”和“pH”的实例数。使用JavaScript循环执行此操作时没有问题,但我也想知道是否可以使用crossfilter执行此操作。

基本上,是否有类似于groupAll()。reduceCount()。value()的东西,它只计算字符串的各个实例?

这是d3.json()块中的代码示例:

 var tempDim = xFilter.dimension(function(d) {return d.temp;}); 
 var tempGroup = tempDim.group().reduceCount(function(d) {return d.temp;});

 var tempCount = tempDim.groupAll().reduceCount().value();
 console.log("tempCount :"+tempCount); // 4

 var tempSum = tempDim.groupAll().reduceSum(function(d) {return d.temp;}).value();
 console.log("tempSum :"+tempSum); // 92

 //pH 
 var phDim = xFilter.dimension(function(d) {return d.pH;});
 var phGroup = phDim.group().reduceCount(function(d) {return d.pH;}); 

 var pHCount = phDim.groupAll().reduceCount().value();
 console.log("pHCount :"+pHCount); // Equal to 4, looking for 3

2 个答案:

答案 0 :(得分:1)

赢得了这个不同的临时和phs的数量?

var tempDim = xFilter.dimension(function(d) {return d.temp;}); 
var tempGroup = tempDim.group();
console.log(tempGroup.top(Infinity).length);

var phDim = xFilter.dimension(function(d) {return d.pH;});
var phGroup = phDim.group()
console.log(phGroup.top(Infinity).length);

答案 1 :(得分:0)

或者,如果您需要计算值的数量,无论它们是否不同,您可以使用自定义缩减功能,例如:

tempDim.groupAll().reduce(
    function(p,v) { return (v.temp !== undefined) ? p+1 : 0; },
    function(p,v) { return (v.temp !== undefined) ? p-1 : 0; },
    function() { return 0; })\

然后您可以使用reusable reduce function pattern进行概括。