图形绘制:仅保留最相关数据

10
为了节省带宽并避免自己生成图片/图表,我计划使用谷歌的图表API:http://code.google.com/apis/chart/,它通过发出(可能很长的)GET(或POST),然后由谷歌生成和提供图表。
目前,我已经制作了大约两千个条目的图表,并希望将其缩减到某个任意数量的条目(例如仅保留原始条目的50%或原始条目的10%)。
如何决定我应该保留哪些条目,以使我的新图表最接近原始图表?
这是某种曲线拟合问题吗?
注意,我知道我可以使用高达16K的数据对Google的图表API进行POST,这可能足以满足我的需求,但我仍然很好奇。
3个回答

7

flot-downsample插件是适用于Flot JavaScript绘图库的插件,可以在一定程度上实现您要求的功能。

其目的是尽可能保留原始线条的视觉特征,同时使用较少的数据点。

这个算法背后的研究记录在作者的论文中。

请注意,它并不适用于任何类型的系列,并且在我使用过程中,当您需要超出10倍的降采样因子时,将无法给出有意义的结果。

问题在于它将系列划分为相等大小的窗口,然后每个窗口保留一个点。由于某些窗口中可能具有更密集的数据,因此结果不一定最优。但它是高效的(以线性时间运行)。


2
README中有其他编程语言/框架的实现列表。 - thirdender

4
你想要做的是所谓的“下采样”或“降采样”。基本上,你需要对数据进行滤波,然后在每N个样本中去掉N-1个样本(即按因子N进行降采样)。一个简单的滤波器就是取一个局部移动平均值。例如,如果你想要按N=10的因子进行降采样,则用这10个点的平均值替换每10个点。
请注意,使用上述方案可能会丢失一些高频数据(因为你实际上正在低通滤波数据)——如果重要的是要看到短期变异性,那么另一种方法是将每N个点作为一个垂直条形图绘制,该条形图代表了这N个点的范围(即最小值..最大值)。

你指的是上述两种提出的解决方案中的哪一个?是降采样/抽取还是绘图范围? - Paul R
无论是哪种方法,您都只是修改数据,这在统计学家眼中始终是不允许的,因为这些点“不是真实数据点”。如果您想保持图表的“精神”,这些方法是行不通的,您需要采用更智能的方法。但是,如果数据的忠实度对 OP 不重要,那么是的,这些简单的方法就可以使用。 - Dervin Thunk
@Dervin Thunk:我说过我想让新图形“接近”原始图形,而不是完全相同。当然,我正在修改数据,这也是我提问的重点... - SyntaxT3rr0r
@Paul... 不,不是这样的...我好像没有很好地解释清楚:我的方法有一个原则性的方法论来确定我正在丢失的一些信息。你的方法是全面的,而这是不好的,在我看来。 - Dervin Thunk
1
@Dervin:我认为你可能假设了在这种情况下无效的要求。也许你有一个特定的方法对你很重要,但在一般情况下,当人们创建图形概述表示时,大多数人不关心高频组件(通常只是噪音)。 - Paul R
显示剩余5条评论

1

图形(时间序列数据)汇总是一个非常困难的问题。这就像在文本中决定哪一部分是“相关”的,以便在自动摘要中保留它。我建议您使用Eamonn Keogh最受尊敬的库之一,在时间序列数据中查找“感兴趣的模式”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接