crossfilter多重分组

时间:2014-06-12 10:15:09

标签: javascript dc.js crossfilter

我的数据是这样的。

{ date : "25-1-2012",
  sentiment : "Positive", could be positive,negative or neutral
  year: 2012
}

我的代码就像这样

var dateDim = ndx.dimension(function(d) {return d.date;});

我想要达到的目标是在日期分组,我可以在所有日期知道有多少情绪是积极的,有多少是消极的。 然后我想将日期作为x轴,并将该日期的正,负和中性计数用作Y轴 我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:4)

  

我想用日期作为X轴和正数,负数和   在该特定日期中性,作为dc.js线图中的Y轴 -   user3614894

如果您需要使用dc.js显示它,我会使用reduce,请参阅http://jsbin.com/fisawaqa/2/edit上的示例

var ndx = crossfilter(sentimentData);
var dateDimension = ndx.dimension(function (d) {
    return d.date;
});
function reduceAdd(p, v) {
    console.log(v);
    ++p.count;
    p.positive += v.sentiment == "Positive" ? 1 : 0;
    p.negative += v.sentiment == "Negative" ? 1 : 0;
    p.neutral += v.sentiment == "Neutral" ? 1 : 0;
    return p;
}
function reduceRemove(p, v) {
    --p.count;
    p.positive -= v.sentiment == "Positive" ? 1 : 0;
    p.negative -= v.sentiment == "Negative" ? 1 : 0;
    p.neutral -= v.sentiment == "Neutral" ? 1 : 0;
    return p;
}

function reduceInitial() {
    return {count: 0, positive: 0,negative:0,neutral:0};
}
var dateGroup = dateDimension.group().reduce(reduceAdd,reduceRemove,reduceInitial);

答案 1 :(得分:2)

按日期和情绪创建两个维度,按日期过滤,然后按情绪分组:

"use strict";

var data = [
    { date: "25-1-2012",
        sentiment: "Positive",
        year: 2012
    },
    { date: "25-1-2012",
        sentiment: "Negative",
        year: 2012
    },
    { date: "25-1-2012",
        sentiment: "Positive",
        year: 2012
    },
    { date: "26-1-2012",
        sentiment: "Positive",
        year: 2012
    },
    { date: "27-1-2012",
        sentiment: "Negative",
        year: 2012
    }
];

var ndx  = crossfilter(data);

var dateDim = ndx.dimension(function(d) {return d.date;});
dateDim.filterExact("25-1-2012");
var sentimentDim = ndx.dimension(function(d) {return d.sentiment;});
var sentimentGroup = sentimentDim.group().reduceCount();
console.log(sentimentGroup.top(Infinity));