Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用d3.js和dc.js将记录拆分并分组为每日集合_D3.js_Dc.js_Crossfilter - Fatal编程技术网

使用d3.js和dc.js将记录拆分并分组为每日集合

使用d3.js和dc.js将记录拆分并分组为每日集合,d3.js,dc.js,crossfilter,D3.js,Dc.js,Crossfilter,我是和的新手,我花了一周的大部分时间阅读和。它有一个相对陡峭的学习曲线,但我(慢慢地)开始熟悉个人操作。也就是说,我仍然缺乏实践经验来构建我所需要的东西 我有一个JSON文件,其中包含以下数据结构(记录集相对较大,约200万个对象): 我试图实现的是对数据进行组织,这样我就可以为每个设备创建一个每日正常运行时间报告,从中收集每个设备每天的累计事件时间 实际上,我正在尝试将原始数据(如上)转换为如下所示的新数据集: [ {"device":"device_1", "date

我是和的新手,我花了一周的大部分时间阅读和。它有一个相对陡峭的学习曲线,但我(慢慢地)开始熟悉个人操作。也就是说,我仍然缺乏实践经验来构建我所需要的东西

我有一个JSON文件,其中包含以下数据结构(记录集相对较大,约200万个对象):

我试图实现的是对数据进行组织,这样我就可以为每个设备创建一个每日正常运行时间报告,从中收集每个设备每天的累计事件时间

实际上,我正在尝试将原始数据(如上)转换为如下所示的新数据集:

    [
        {"device":"device_1", "date": "01/01/2014", "cumulative": 2530},
        {"device":"device_2", "date": "01/01/2014", "cumulative": 1234},
        {"device":"device_1", "date": "01/02/2014", "cumulative": 456},
        {"device":"device_2", "date": "01/02/2014", "cumulative": 198},
        ...
    ]
*其中,*累计*是该设备当天发生的所有累计事件的秒数

一旦我进入这个阶段,我可以使用类似于:
d3.nest().key().rollup().entries()
的方法对准备显示的数据进行排序和分组

我怀疑d3有一个内置的机制来处理这种情况,但我目前的方法如下:

  • 导入数据集

    d3.json("data.json", function(error, json_data) {
    if (error)return console.warn(error);
    ...
    }
    
  • 将字符串转换为日期对象

    var dateFormat = d3.time.format("%m/%d/%Y %H:%M:%S");
    json_data.forEach(function(d) {
    
            d.dstart = d.events.map(function(x) {
                return dateFormat.parse(x.start);
            });
    
            d.dend = d.events.map(function(x) {
                return dateFormat.parse(x.end);
            });
    
        });
    
  • 每天为报告指定一个开始结束日期范围

  • 确定事件是否跨越1天以上,如果是,将事件分为几个部分
  • 对每日设备事件的累计持续时间求和

(注意,我可以控制JSON数据格式!我可以直接从技术上创建最终的数据集。但是,当前的格式对于其他报表非常有用,我希望避免使用两个数据文件,因为它们是。我想到的数据结构是一个区间树。我没有尝试过这个库,但它可能会有所帮助-)


否则,至少你可以跳过最后一步,按日中断事件。累积是交叉筛选的优势所在-使用
reduceSum

可能还有其他库可以帮助你做到这一点,但d3并不是一个真正的数据预处理库。我认为你的做法是正确的。你不需要改变格式除非文件大小会导致速度变慢。您是否碰巧遇到过一个可以实现这一点的库?
var dateFormat = d3.time.format("%m/%d/%Y %H:%M:%S");
json_data.forEach(function(d) {

        d.dstart = d.events.map(function(x) {
            return dateFormat.parse(x.start);
        });

        d.dend = d.events.map(function(x) {
            return dateFormat.parse(x.end);
        });

    });