Pandas Datathinning:如何有效地减少序列中的点数,同时仍保持原始的总体趋势?

dgiusagp  于 2023-05-12  发布在  其他
关注(0)|答案(1)|浏览(123)

我有一些时间序列数据和一个 Dataframe 中的感兴趣的参数-有数十万行,但对于其中的大部分,从一个点到下一个点只有非常小的变化(如果有的话)。当观察趋势线时,这些点变得不重要了--有没有一个好的方法可以通过修剪掉一些不重要的点来减少我的系列的大小?
”””那么,你会把这个过程称为什么?(这样我就可以去搜索/了解更多关于它的信息)数据细化?重采样?**
我发现了一个叫做Ramer Douglas Peucker Algorithm的东西,它似乎做了我想做的事情,但我不确定是否从我现有的数据中采样会更好,在变化更快的时候抓住更多的点,当它是恒定的时候抓住更少的点。
TLDR:我想删除一个系列中的行数,当数据变化较多时保留更多的点,当数据变化不大时保留更少的点。

z0qdvdin

z0qdvdin1#

@JaPa
我会先从原生的Pandas功能开始,然后再尝试更细致入微的算法方法。
在没有看到实际数据的情况下,我想到了两个选项。
选项1 -应用滚动窗口或移动平均来平滑数据并减少噪声。

# calculate rolling mean with window of 10 days
df_rolled = df.rolling(window=10, min_periods=1).mean()

reference
选项2 -使用重采样技术,例如在某个时间间隔内平均或取数据的最大值或最小值。

# resample to monthly frequency and calculate mean
df_resampled = df.set_index('date').resample('M').mean().reset_index()

reference
如果您以前尝试过这些,并且正在寻找新的东西,您可以尝试tslearn package中提供的PAA(分段聚合近似)。它的工作原理是通过将时间序列划分为大小相等的窗口并将每个窗口内的值替换为它们的平均值来缩短时间序列。

相关问题