gpt4 book ai didi

python - 如何使用 Pandas 获取两个时间序列之间的相关性

转载 作者:太空狗 更新时间:2023-10-29 17:18:23 24 4
gpt4 key购买 nike

我有两组温度日期,它们有规律(但不同)时间间隔的读数。我正在尝试获取这两组数据之间的相关性。

我一直在玩 Pandas尝试这样做。我创建了两个时间序列,并且正在使用 TimeSeriesA.corr(TimeSeriesB)。但是,如果 2 个 timeSeries 中的时间不完全匹配(它们通常相差几秒),我会得到 Null 作为答案。如果可以的话,我可以获得一个像样的答案:

a) 在每个 TimeSeries 中插入/填充缺失的时间(我知道这在 Pandas 中是可能的,我只是不知道该怎么做)

b) 从 python 日期时间对象中去除秒数(将秒数设置为 00,不更改分钟数)。我会失去一定程度的准确性,但不会损失很大

c) 在 Pandas 中使用其他东西来获取两个时间序列之间的相关性

d) 在 python 中使用一些东西来获得两个 float 列表之间的相关性,每个 float 都有一个相应的日期时间对象,同时考虑到时间。

有人有什么建议吗?

最佳答案

使用 pandas 您有多种选择,但您必须决定对齐数据的意义,因为它们不会同时出现。

使用其中一个时间序列中“截至”时间的值,这是一个示例:

    In [15]: ts
Out[15]:
2000-01-03 00:00:00 -0.722808451504
2000-01-04 00:00:00 0.0125041039477
2000-01-05 00:00:00 0.777515530539
2000-01-06 00:00:00 -0.35714026263
2000-01-07 00:00:00 -1.55213541118
2000-01-10 00:00:00 -0.508166334892
2000-01-11 00:00:00 0.58016097981
2000-01-12 00:00:00 1.50766289013
2000-01-13 00:00:00 -1.11114968643
2000-01-14 00:00:00 0.259320239297



In [16]: ts2
Out[16]:
2000-01-03 00:00:30 1.05595278907
2000-01-04 00:00:30 -0.568961755792
2000-01-05 00:00:30 0.660511172645
2000-01-06 00:00:30 -0.0327384421979
2000-01-07 00:00:30 0.158094407533
2000-01-10 00:00:30 -0.321679671377
2000-01-11 00:00:30 0.977286027619
2000-01-12 00:00:30 -0.603541295894
2000-01-13 00:00:30 1.15993249209
2000-01-14 00:00:30 -0.229379534767

您可以看到它们关闭了 30 秒。 reindex 函数使您能够在填充正向值(获取“截至”值)时对齐数据:

    In [17]: ts.reindex(ts2.index, method='pad')
Out[17]:
2000-01-03 00:00:30 -0.722808451504
2000-01-04 00:00:30 0.0125041039477
2000-01-05 00:00:30 0.777515530539
2000-01-06 00:00:30 -0.35714026263
2000-01-07 00:00:30 -1.55213541118
2000-01-10 00:00:30 -0.508166334892
2000-01-11 00:00:30 0.58016097981
2000-01-12 00:00:30 1.50766289013
2000-01-13 00:00:30 -1.11114968643
2000-01-14 00:00:30 0.259320239297

In [18]: ts2.corr(ts.reindex(ts2.index, method='pad'))
Out[18]: -0.31004148593302283

请注意,“pad”也被称为“ffill”(但目前仅在 GitHub 上最新版本的 pandas 中使用!)。

从所有日期时间中去除秒数。最好的方法是使用 rename

    In [25]: ts2.rename(lambda date: date.replace(second=0))
Out[25]:
2000-01-03 00:00:00 1.05595278907
2000-01-04 00:00:00 -0.568961755792
2000-01-05 00:00:00 0.660511172645
2000-01-06 00:00:00 -0.0327384421979
2000-01-07 00:00:00 0.158094407533
2000-01-10 00:00:00 -0.321679671377
2000-01-11 00:00:00 0.977286027619
2000-01-12 00:00:00 -0.603541295894
2000-01-13 00:00:00 1.15993249209
2000-01-14 00:00:00 -0.229379534767

请注意,如果重命名导致重复日期,则会抛出 Exception

对于更高级的东西,假设您想关联每分钟的平均值(每秒有多个观察值):

    In [31]: ts_mean = ts.groupby(lambda date: date.replace(second=0)).mean()

In [32]: ts2_mean = ts2.groupby(lambda date: date.replace(second=0)).mean()

In [33]: ts_mean.corr(ts2_mean)
Out[33]: -0.31004148593302283

如果您没有来自 https://github.com/wesm/pandas 的最新代码,这些最后的代码片段可能无法工作.如果 .mean() 对上述 GroupBy 对象不起作用,请尝试 .agg(np.mean)

希望这对您有所帮助!

关于python - 如何使用 Pandas 获取两个时间序列之间的相关性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6467832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com