在 python 中预处理不规则的高频时间序列数据

数据挖掘 机器学习 Python 时间序列 大数据 熊猫
2022-03-13 13:50:08

...最初发布在 StackOverflow 中(可能更适合这里)

  • 小图:

我正在预处理不规则的高频时间序列数据。在一秒钟内,我可以拥有多个数据点,如下图所示timestamp

"timestamp": "2018-06-03T12:27:54.253" 
"timestamp": "2018-06-03T12:27:54.409"
"timestamp": "2018-06-03T12:27:54.548"

我正在为此时间序列数据开发采样方案,以便我可以减少数据点的数量,并在不丢失信息或引入任何偏差的情况下标准化时间步长。

到目前为止,我一直在pd.resample()我们数据的一小部分(5 天 ~ 200 万条记录)上使用 Pandas,将mean其用作聚合函数和线性插值。为了实验目的,我正在按秒、分钟和小时对数据进行下采样,以处理原始数据的不规则时间步长。

  • 大图:

我正在处理从 elasticsearch 查询的数百万条记录(从 4 月到今天的数据),理想情况下,我希望在这个大型时间序列数据池中进行预处理/采样,以便仅获得具有统计意义的数据点。这个预处理步骤的目的是为了未来的数据探索/建模。

  • 问题:

如何修改我当前的预处理方案以确保对数百万条记录进行最佳处理并仍然保持它们的统计属性(不引入偏差)?

我知道可能有更好的方法来处理此类数据。非常感谢任何输入...谢谢!

1个回答

请记住,下采样总是有损的。我会给你两个提示。

  1. 奈奎斯特-香农定理。简而言之,您可以在采样信号中观察到的最大频率是采样频率的一半这意味着如果您每 1 小时对数据进行一次下采样,则可以观察到 2 小时(或更长)周期的动态现象。查看该定理的另一种方法是“您必须以至少两倍于您期望在其中看到的最大频率的速度对信号进行采样”

    工程经验法则:对信号的采样速度至少比预期的最高频率快 10 倍,而不仅仅是 2 倍。

  2. 直方图表示由于您拥有庞大的数据库,因此将变量转换为直方图可能很有意义!这样,您将大大减小它们的大小。您将每个实值变量离散化到 bin 中,然后不存储变量的确切值,而是将相应 bin 的计数增加 1。有很多机器学习算法可以处理直方图表示,例如:

    https://pdfs.semanticscholar.org/b8c8/347f9c33935b97703ecd35a67af5c5508487.pdf

希望能帮助到你 :) !