我是d3.js和dc.js的新手,我花了一周的最佳时间阅读tutorials和API。它有一个相对陡峭的学习曲线,但是我(慢慢地)熟悉单个操作。这就是说我仍然缺乏构建我所需要的实践经验。使用d3.js和dc.js将记录拆分并分组到每日集合
我有一个包含以下数据结构的JSON文件(该记录集比较大〜2个亿个对象):
[
{
"index": "device_1",
"state": -1,
"frequencies": [
"800PS"
],
"events": [
{
"start": "04/07/2014 04:24:19",
"end": "07/21/2014 08:53:19",
"name": "event_1234"
}
]
},
{
"index": "device_2",
"state": 1,
"frequencies": [
"2100AWS",
"1900PCS"
],
"events": [
{
"start": "02/20/2014 04:03:20",
"end": "04/30/2014 07:24:35",
"name": "event_3456"
},
{
"start": "04/30/2014 07:25:37",
"end": "07/01/2014 06:35:44",
"name": "event_766"
},
{
"start": "06/02/2014 00:02:16",
"end": "06/02/2014 00:04:25",
"name": "event_8967"
},
{
"start": "06/11/2014 15:38:59",
"end": "06/11/2014 15:41:15",
"name": "event_385"
},
{
"start": "06/28/2014 07:37:00",
"end": "06/28/2014 07:39:34",
"name": "event_8959"
},
{
"start": "07/01/2014 07:06:06",
"end": "07/03/2014 03:27:55",
"name": "event_2654"
},
{
"start": "07/03/2014 04:16:55",
"end": "07/21/2014 08:53:19",
"name": "event_94768"
}
]
},
...
]
我所试图实现的是对数据进行组织,所以我可以创建一个每天的正常运行时间每台设备的报告,我收集每台设备每天的累计事件时间。
有效我想原始数据(上图)转换成一个新的数据集,看起来是这样的:
[
{"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天跨越,如果是的话打破了事件成若干段
- 总和的累计时间报告日常设备事件
(NB我确实可以控制JSON数据格式!我可以从技术上直接创建最终的数据集。然而,目前的格式在其他报告中非常有用,我很希望避免两个数据文件,因为它们是< 20MB每个所以最好我需要避免改变JSON设计。)
可能有其他库可以帮助解决这个问题,但d3并不是真正的数据预处理库。我认为你在正确的轨道上。而且,除非文件大小减慢,否则不需要更改格式。 – Gordon
你有没有偶然遇到一个可能能够实现这个目标的图书馆? – tarka