为每个日期选择前k个记录

时间:2014-12-31 00:19:57

标签: d3.js crossfilter

我的数据格式为[[date,value],...]。

例如:

[[date1, value1], [date1, value2], [date2, value3], ....]]

假设我想为每个日期仅选择5个值,这5个值应该是该日期的前5个值。

我的crossfilter / dimension应该是什么样的?

1 个答案:

答案 0 :(得分:1)

您可以使用{D3}使用d3.nest轻松完成此操作。

var topValuesByDate = d3.nest()
    .key(function(d){ return d.date; })
    .rollup(function(leaves){
        return leaves.map(function(d){
            return d.value;
        }).sort(d3.descending).slice(0, 5);
    })
    .entries(data);

基本思路是按日期对值进行分组,然后使用rollup确定每个日期的前5个值。

我还使用如下构造的模拟数据制作a demo

var data = [];
d3.range(1, 4).forEach(function(i){
    d3.range(10).forEach(function(j){
        data.push( {date: "2015/01/0" + i, value: j } );
    });
});