下采样时间序列:平均与最大三角形三桶
Downsampling Time Series: Average vs Largest-Triangle-Three-Buckets
我正在使用 Flot Charts 来显示时间序列来编写折线图。
为了减少要显示的点数,我通过在同一小时内对每个数据点应用平均函数来进行下采样。
最近,我发现了Largest-Triangle-Three-Buckets算法:
http://flot.base.is/
使用这种算法与使用像平均(每分钟、每小时、每天......)这样的简单函数有什么区别?
为了加快长期查询,通过在每个月的数据上应用 LTTB,在服务器端预先计算 sql table 是否有意义,并让客户端在聚合数据上应用另一个 LTTB?
1:就我的目的而言,平均值的问题在于它们会在样本之间产生巨大差异 - 我的峰值和谷值比它们之间发生的事情更重要。 3buckets 算法的要点是尝试保留那些拐点 (peaks/valleys),而不必担心在所有时间显示数据相似或相同。
因此,在我的例子中,数据通常都相同(或足够接近——温度数据)直到样本 X,此时小的百分比变化对于在图表中显示很重要,桶算法很完美。
此外-由于桶算法是参数化的,您可以更改值(保留多少数据)并查看哪些值在视觉上看起来几乎相同时破坏了最多的数据,并决定之前可以分配多少数据您的图表删除了太多数据。
天真的方法是抽取(从 N 个样本中删除 X),但如果它是您关心的异常值并且该算法对异常值进行核对会发生什么?所以你改变你的抽取,这样如果差异太大,那么它就不会破坏那个样本。这是该概念的更复杂版本。
2:取决于您计算所有内容的速度、数据是否发生变化以及其他各种因素。这取决于你。从我的角度来看,一旦我的数据是过去的并且样本是 'chosen' 来表示桶的值,它就不会改变,我可以保存它并且永远不会再次重新计算。
既然你的问题有点老了,你最后做了什么?
我正在使用 Flot Charts 来显示时间序列来编写折线图。
为了减少要显示的点数,我通过在同一小时内对每个数据点应用平均函数来进行下采样。
最近,我发现了Largest-Triangle-Three-Buckets算法: http://flot.base.is/
使用这种算法与使用像平均(每分钟、每小时、每天......)这样的简单函数有什么区别?
为了加快长期查询,通过在每个月的数据上应用 LTTB,在服务器端预先计算 sql table 是否有意义,并让客户端在聚合数据上应用另一个 LTTB?
1:就我的目的而言,平均值的问题在于它们会在样本之间产生巨大差异 - 我的峰值和谷值比它们之间发生的事情更重要。 3buckets 算法的要点是尝试保留那些拐点 (peaks/valleys),而不必担心在所有时间显示数据相似或相同。
因此,在我的例子中,数据通常都相同(或足够接近——温度数据)直到样本 X,此时小的百分比变化对于在图表中显示很重要,桶算法很完美。
此外-由于桶算法是参数化的,您可以更改值(保留多少数据)并查看哪些值在视觉上看起来几乎相同时破坏了最多的数据,并决定之前可以分配多少数据您的图表删除了太多数据。
天真的方法是抽取(从 N 个样本中删除 X),但如果它是您关心的异常值并且该算法对异常值进行核对会发生什么?所以你改变你的抽取,这样如果差异太大,那么它就不会破坏那个样本。这是该概念的更复杂版本。
2:取决于您计算所有内容的速度、数据是否发生变化以及其他各种因素。这取决于你。从我的角度来看,一旦我的数据是过去的并且样本是 'chosen' 来表示桶的值,它就不会改变,我可以保存它并且永远不会再次重新计算。
既然你的问题有点老了,你最后做了什么?