javascript - 下采样时间序列:平均与最大三角形三桶
问题描述
我正在使用 Flot Charts 编写折线图来显示时间序列。
为了减少要显示的点数,我通过在同一小时内对每个数据点应用平均函数来进行下采样。
然而,最近,我发现了最大三角形三桶算法: http: //flot.base.is/
使用这种算法与使用像平均值这样的简单函数(每分钟、每小时、每天......)有什么区别?
为了加快长时间查询,在服务器端预先计算一个 sql 表,通过对每个月的数据应用 LTTB,并让客户端对聚合数据应用另一个 LTTB,是否有意义?
解决方案
1:就我的目的而言,平均值的问题在于它们消除了样本之间的巨大差异——我的峰值和谷值比它们之间发生的情况更重要。3buckets 算法的重点是尝试保留那些拐点(峰/谷),而不用担心总是向您显示数据相似或相同的情况。
因此,在我的情况下,数据通常都是相同的(或足够接近 - 温度数据),直到样本 X 在图中显示小的百分比变化很重要,桶算法是完美的。
此外 - 由于桶算法是参数化的,您可以更改值(要保留多少数据)并查看哪些值在视觉上几乎相同的同时核对最多的数据,并决定在您的图表也有之前可以放弃多少数据删除了很多数据。
幼稚的方法是抽取(从 N 个样本中删除 X),但是如果它是您关心的异常值并且算法核对异常值会发生什么?所以然后你改变你的抽取,这样如果差异太大,那么它就不会破坏那个样本。这是该概念的一种更复杂的版本。
2:取决于您计算所有数据的速度、数据是否发生变化以及各种其他因素。随你(由你决定。从我的角度来看,一旦我的数据是过去的,并且“选择”了一个样本来代表存储桶的值,它就不会改变,我可以保存它而不再重新计算。
既然你的问题有点老了,你最终做了什么?
推荐阅读
- php - 为 Hangouts Webhook 构建 PHP 数组
- excel - 将工作表对象传递给另一个子获取“对象不支持此属性或方法”
- sql - 如何将表更新为子查询中的值
- java - 是否可以在 Android 中将图像拆分为多个部分?
- python - 根据条件和其他列的聚合值创建新的数据框列
- node.js - Nodemon 在 Node 中仅启动 webserver(不是 db server)
- python - 如何使用python下载文件,请求模块
- php - 即使它在那里,seeElement 也找不到对象
- swift - 匹配两个 UILabel 的字体大小
- excel - 如何在另一个工作表上查找单元格值并将值放置在找到第一个值的行的另一列上