我有一个我希望在折线图上显示的时间序列数据的数据集。数据当前存储在oracle表中,数据以1点/秒的速率进行采样。问题是如何在6个月的时间内绘制数据?有没有办法在从oracle返回数据后对数据进行下采样(这可以在各种图表中完成,但我不想通过网络移动数据)?例如,如果一个查询返回10K点,我怎样才能将其取样到1K点并仍然有线图并保持10K点的视觉特征(峰值/谷值)?
我查看了apache的公地但却不知道具体的统计名称是什么,我有点不知所措。
我正在采样的数据确实是时间序列数据,例如页面点击。
答案 0 :(得分:0)
听起来你想要的是将10K数据点分割成1K桶 - 每个桶的值可能是对你的数据有意义的任何统计计算(对不起,没有实际的上下文,很难说)例如,如果要查看数据的趋势,您可能希望使用Median Percentile来汇总每个桶中的10个点。 Apache Commons Math有辅助功能。然后,使用1K下采样数据点,您可以绘制图表。
例如,如果我有10K数据点的页面加载时间,我可以通过每10个点做一个中位数将其映射到1K数据点 - 这将告诉我该范围内最常见的加载时间 - 和指出。或者,也许我可以使用Max来查找期间的最大加载时间。
答案 1 :(得分:0)
有两种选择:你可以像@Adrian Pang那样建议并使用时间仓,这意味着你们之间有垃圾箱和硬边界。这非常好,如果您正在使用时间序列,则称为下采样。</ p>
您还可以通过将滑动窗口平均值/函数卷积应用于点来使用平滑的bin定义。这将为您提供与原始采样率相同的时间序列,但更加平滑。突出的例子是滑动窗口平均值(窗口中所有点的平均值/中值,等加权平均值)和高斯卷积(加权平均值,其中权重来自高斯密度曲线)。
答案 2 :(得分:0)
我的建议是在较短的时间间隔内对值进行平均。使较短间隔的长度取决于整个时间范围。如果总时间范围足够短,只需显示原始数据。 E.g:
你必须做出一些选择,从一个子区间转移到另一个子区间,例如,整体= 5个月,子区间= 1天还是1小时?
我的建议是制定一个简单的方案,以便其他人容易理解。请记住,情节的目的是帮助其他人(而不是你)理解数据。一个简单的平均方案将帮助您实现这一目标。
答案 3 :(得分:0)
如果您只需减少视觉点而不会丢失任何视觉信息,我建议您使用代码here。这种方法的棘手部分是找到正确的阈值。其中阈值是您在下采样后要定位的数据点数量。阈值越小,您丢失的视觉信息就越多。然而,从10K到1K,是可行的,因为我已经尝试了类似数量的数据。
作为旁注,你应该记住