首页 > 解决方案 > 下采样时间序列:平均与最大三角形三桶

问题描述

我正在使用 Flot Charts 编写折线图来显示时间序列。

为了减少要显示的点数,我通过在同一小时内对每个数据点应用平均函数来进行下采样。

然而,最近,我发现了最大三角形三桶算法: http: //flot.base.is/

  1. 使用这种算法与使用像平均值这样的简单函数(每分钟、每小时、每天......)有什么区别?

  2. 为了加快长时间查询,在服务器端预先计算一个 sql 表,通过对每个月的数据应用 LTTB,并让客户端对聚合数据应用另一个 LTTB,是否有意义?

标签: javascriptgraphaverageflotdownsampling

解决方案


1:就我的目的而言,平均值的问题在于它们消除了样本之间的巨大差异——我的峰值和谷值比它们之间发生的情况更重要。3buckets 算法的重点是尝试保留那些拐点(峰/谷),而不用担心总是向您显示数据相似或相同的情况。

因此,在我的情况下,数据通常都是相同的(或足够接近 - 温度数据),直到样本 X 在图中显示小的百分比变化很重要,桶算法是完美的。

此外 - 由于桶算法是参数化的,您可以更改值(要保留多少数据)并查看哪些值在视觉上几乎相同的同时核对最多的数据,并决定在您的图表也有之前可以放弃多少数据删除了很多数据。

幼稚的方法是抽取(从 N 个样本中删除 X),但是如果它是您关心的异常值并且算法核对异常值会发生什么?所以然后你改变你的抽取,这样如果差异太大,那么它就不会破坏那个样本。这是该概念的一种更复杂的版本。

2:取决于您计算所有数据的速度、数据是否发生变化以及各种其他因素。随你(由你决定。从我的角度来看,一旦我的数据是过去的,并且“选择”了一个样本来代表存储桶的值,它就不会改变,我可以保存它而不再重新计算。

既然你的问题有点老了,你最终做了什么?


推荐阅读