首页 > 解决方案 > 如何在 Pandas 中拟合/移动和测量 2 个时间序列的相似性?

问题描述

我有一个给定的信号given和一个测量时间序列measured

给定信号最初处于另一个频率,我设法将其转换为正确的时间戳,但我被困在如何将信号与测量结果“匹配”并计算它们的“相似性”,我会使用动态时间扭曲或与np.correlate这方面的相关性。

所以实际数据由大约 700k 个数据点组成。但是,我尝试使用以下方法以较小的规模复制数据:

df = pd.DataFrame({"measured": [20, 20, 9.8, 10.1, 4.8, 4.9, 9.7, 9.9, 2.9, 3.0, 3.1, 10.1, 10.0, 20, 20],
                   "given": [np.nan, 10, 10, 5, 5, 10, 10, 3, 3, 3, 10, 10,np.nan, np.nan, np.nan,]},
                  index=pd.date_range("2018-01-01", periods=15, freq="s"))

看起来像这样:

                      measured  given
2018-01-01 00:00:00     20.0    NaN
2018-01-01 00:00:01     20.0    10.0
2018-01-01 00:00:02     9.8     10.0
2018-01-01 00:00:03     10.1    5.0
2018-01-01 00:00:04     4.8     5.0
2018-01-01 00:00:05     4.9     10.0
2018-01-01 00:00:06     9.7     10.0
2018-01-01 00:00:07     9.9     3.0
2018-01-01 00:00:08     2.9     3.0
2018-01-01 00:00:09     3.0     3.0
2018-01-01 00:00:10     3.1     10.0
2018-01-01 00:00:11     10.1    10.0
2018-01-01 00:00:12     10.0    NaN
2018-01-01 00:00:13     20.0    NaN
2018-01-01 00:00:14     20.0    NaN

点击这里查看图片

我正在考虑计算它们的相似性和滞后性,并通过迭代解决它以找到最佳解决方案/最佳相似性。将如何实现这一点?

标签: pythonpandastime-series

解决方案


您在此处查找的关键字是Dynamic Time Warping. 这将匹配 2 个信号,而不受在同一时间戳上匹配它们的约束。创建的模块可以为您完成此操作,例如,Darts具有该实用程序以及有关如何实现它的教程。

这是对 DTW 的快速直观解释: 在此处输入图像描述


推荐阅读