- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
更新:jsfiddle 示例说明了问题:http://jsfiddle.net/T8SuH/
我是 D3js 和 JavaScript 的新手,但对 Java 很熟悉。我有一个来自自行车共享系统的大型 CSV 数据集,组织如下:
event_id, station_id, timestamp, number_of_bikes, number_of_empty_docks
为了减小文件大小,我的数据文件只包含各个站点的新事件。因此,不同站点的时间戳既不是固定的时间间隔,也不是重合的。例如,连续条目可能如下所示:
31044955, 08, 2012-05-01 00:00:00, 9, 6
31044965, 23, 2012-05-01 00:32:00, 2, 6
31044972, 02, 2012-05-01 00:44:00, 10, 5
31044999, 17, 2012-05-01 02:10:10, 12, 6
...
我想创建一个堆积面积图,其中 x 轴是时间(24 小时),y 轴是(堆积)来自选定站点的库存。 D3 Wiki 提到应该在计算堆栈之前对数据进行插值。我考虑了两种方法:- 在 D3 外部插入我的数据集(使用 Java)并将其保存为一个新的 CSV 文件,其中所有站点都有并发时间戳。这种方法会使我的文件大小增加 6 倍以上(目前是 25MB),我担心 D3 处理它的速度会变慢。- 在进行堆栈或绘制区域/路径之前,在 D3/Javascript 中插入数据。
虽然我觉得第二种方式会更快(在性能方面),但我不知道该怎么做,也没有找到任何相关的教程/示例。我只是想我必须创建一个范围 (d3.time.minute.range),然后将它与 map() 函数一起使用来创建一个新数组?有人可以提供一个建议,说明如何在 D3 中以不规则的时间间隔插入多个数据集(例如,对于每个站点),然后再将它们堆叠起来吗?
提前谢谢你。
最佳答案
我以前遇到过同样的问题。稍微巧妙一点,您可以添加缺失值,以便每个系列都具有相同的 x 坐标集(时间戳)。在将数据发送到堆栈布局之前,我向您的 jsfiddle 添加了几行以处理数据。
首先,我需要 super 时间集:
var times = [];
myData.forEach(function(d) {
if(times.indexOf(d.date.getTime()) === -1) {
times.push(d.date.getTime());
}
});
times.sort();
这会产生数组(来自您的数据):
0:00, 4:00, 4:30, 4:45, 8:08, 12:08, 13:08, 16:08, 20:08
请注意,最后我对其进行了排序,因为这将真正简化在站点数据系列中查找缺失值的过程。我打算进行一种排序列表合并,以将无变化的数据值填充到系列中。这是您的系列直接从数据(时间值对)看起来的样子:
Initial series
Station_1 0:00 37, 4:30 36, 8:08 18, 12:08 10, 16:08 32, 20:08 35
Station_2 0:00 32, 4:00 29, 8:08 6, 12:08 12, 16:08 29, 20:08 32
Station_3 0:00 36, 4:45 30, 8:08 10, 13:08 13, 16:08 32, 20:08 36
Station_4 0:00 31, 4:00 28, 8:08 12, 12:08 14, 16:08 28, 20:08 31
因此对于每个系列,遍历时间数组并插入缺失值,很可能有更有效的方法来执行此操作:
myNestedData.forEach(function(stationData) {
stationData.values.sort(function(a,b) {
return d3.ascending(a.date.getTime(), b.date.getTime());
});
var j = 0;
var lastStationValue = 0;
for(var i = 0; i < times.length; i++) {
// If the station series is too short I should not equal any
// value from the times array
stationTime = j <= stationData.values.length ?
stationData.values[j].date.getTime() : 0;
if(times[i] !== stationTime) {
// Missing values need to be spliced in.
stationData.values.splice(j, 0, {
date: new Date(times[i]),
inventory: lastStationValue,
station_id: stationData.key
});
j++;
}
else {
// We have a value for this time, move along.
lastStationValue = stationData.values[j].inventory;
j++;
}
}
});
现在系列应该全部排好!
Station_1 0:00 37, 4:00 37, 4:30 36, 4:45 36, 8:08 18, 12:08 10, 13:08 10, 16:08 32, 20:08 35
Station_2 0:00 32, 4:00 29, 4:30 29, 4:45 29, 8:08 6, 12:08 12, 13:08 12, 16:08 29, 20:08 32
Station_3 0:00 36, 4:00 36, 4:30 36, 4:45 30, 8:08 10, 12:08 10, 13:08 13, 16:08 32, 20:08 36
Station_4 0:00 31, 4:00 28, 4:30 28, 4:45 28, 8:08 12, 12:08 14, 13:08 14, 16:08 28, 20:08 31
您可以查看更新的 fiddle here
关于javascript - D3js : How to interpolate datasets with irregular time intervals before stacking them?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20806789/
如果我用 dataset.batch(n).prefetch(m), 将预提取m个批次或m个 sample ? 最佳答案 Dataset.prefetch(m) 转换预取其直接输入的m元素。在这种情况
根据 TensorFlow documentation 、tf.contrib.data.Dataset 类的 prefetch 和 map 方法,都有一个名为 buffer_size 的参数. 对于
我正在使用 Flink 0.10.1 的 DataSet API 编写应用程序。我可以在 Flink 中使用单个运算符获取多个收集器吗? 我想做的是如下所示: val lines = env.read
为了使用 Google Colabs TPU,我需要一个 tf.dataset.Dataset .那么如何在这样的数据集上使用数据增强? 更具体地说,到目前为止我的代码是: def get_datas
我有一个包含 2 个相关数据表(主数据表和详细信息)的数据集。我想将与我的过滤器匹配的数据(例如主数据列 A =“XXX”)复制到另一个数据集。 现在我发现这个过程需要很长时间(1k 条记录大约需要一
我正在使用 .pvd文件同时加载多个文件到 Paraviw。对于具有单个数据集的时间序列,该文件看起来像这样: 我想指定要与 a.*.vtu 一起加载的其他文件(
我听说 Google 主办(或将举办)一场网络分类竞赛,他们提供了一个大型(170k+ 文档)网站数据集,这些网站被分为多个类别(体育、计算机、科学等),我尝试环顾四周在他们的 2009 年到 201
谁能给我解释一下 DataSet.Copy() vs Dataset.Clone()也让我知道一些我们可以使用这些的场景 最佳答案 Clone 将创建一个新的空数据集,其架构(表和列)与旧数据集相同。
dataset = dataset.batch(50) dataset = dataset.prefetch(buffer_size=1) 是预取 1 个批次还是 1 个元素? 根据 tensorfl
在 Delphi 中,与 Dataset.Next 相比,使用 Dataset.Prior 是否会降低性能? 背景: 我有一个在数据集中搜索特定记录的例程。我从数据集中的最后一条记录开始,然后使用 D
我正在使用 Spark(2.0) 开发 Spark SQL,并使用 Java API 读取 CSV。 CSV 文件中有一个双引号、逗号分隔的列。例如:“Express Air,Delivery Tru
为什么要使用DataSet.BeginInit 和DataSet.EndInit? 我已经经历了official msdn documentation ,它说 Begins the initializ
我正在尝试向新的数据集 X 添加一个位于不同数据集 Y 中的数据表。如果我直接添加它,我会得到以下错误: DataTable already belongs to another DataSet. 我
我有一个表示为形状为 (num_features, num_examples) 的 NumPy 矩阵的数据集,我希望将其转换为 TensorFlow 类型 tf.Dataset。 我正在努力理解这两种
这是 question 的转发在 ai.stackexchange 中询问。由于该论坛没有太多吸引力,我想我可以在这里尝试一下机会。 我有一个特定对象的不同尺寸的图像数据集。该物体的一些图像也处于不同
我有两个数据集: main_ds = tf.data.Dataset.from_tensor_slices(list(range(1000, 1100))) backgroud_ds = tf.dat
拥有Dataset单列 json 字符串: +--------------------+ | value| +--------------------+ |{"Contex
我正在尝试解决 Azure 数据工厂中的以下场景: 我在 Azure Blob 存储中有大量文件夹。每个文件夹包含不同数量的 parquet 格式的文件。文件夹名称包含生成该文件夹中包含的数据的日期,
我正在尝试解决 Azure 数据工厂中的以下场景: 我在 Azure Blob 存储中有大量文件夹。每个文件夹包含不同数量的 parquet 格式的文件。文件夹名称包含生成该文件夹中包含的数据的日期,
我有一个顺序数据集,我可以从中创建窗口来训练 RNN。在某些情况下,我想扔掉某些 window 。但是,当我使用 dataset.window 和 dataset.filter 时,管道内部会出现一些
我是一名优秀的程序员,十分优秀!