看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
窗口计算相关性系统的平均值可以用于衡量两个时间序列之间的相关性程度,比如通过计算两个时间序列的相关性,可以预测它们未来的变化趋势。例如,如果两个股票的相关性很高,那么它们未来的价格变动很可能是相似的。本例中,我们来用 pandas 实现此操作。
我们先构造测试数据如下:
import pandas as pd
import pandas._testing as tm
import numpy as np
np.random.seed(42)
df = tm.makeTimeDataFrame(5)
df
'''
                   A         B         C         D
2000-01-03  0.496714 -0.234137 -0.463418 -0.562288
2000-01-04 -0.138264  1.579213 -0.465730 -1.012831
2000-01-05  0.647689  0.767435  0.241962  0.314247
2000-01-06  1.523030 -0.469474 -1.913280 -0.908024
2000-01-07 -0.234153  0.542560 -1.724918 -1.412304
'''
需求需要得到移动窗口大小为 4 的 Spearman 相关性系数的平均值,组成一个新的 DataFrame,由源数据分析可知道满足的共有两个窗口,共两行数据。
可以先利用 DataFrame 的 rolling() 方法构造移动窗口,然后迭代计算每个窗口的相关性系数矩阵的平均值,每个窗口产生一个 Series,最后将这些 Series 拼接为一个需求中需要的 DataFrame。
根据思路,先计算每个窗口的数据,并将它们存入列表中。代码如下:
data = []
for i in df.rolling(4):
    if len(i) == 4:
        foo = i.corr(method='spearman').mean().rename(i.index[-1])
        data.append(foo)
data
'''
[A    0.1
 B    0.1
 C    0.5
 D    0.5
 Name: 2000-01-06 00:00:00, dtype: float64,
 A    0.30
 B    0.35
 C    0.50
 D    0.55
 Name: 2000-01-07 00:00:00, dtype: float64]
'''
代码应用了 DataFrame 滚动窗口函数 rolling(),其作用是对 DataFrame 进行滚动窗口计算。代码的逻辑如下:
因此,代码的作用是计算 DataFrame df 中所有长度为 4 的滚动窗口的列之间的 Spearman 相关系数矩阵的平均值,并将结果存储在一个列表 data 中。
最后,将这个元素为 Series 的列表构造为一个 DataFrame:
pd.DataFrame(data)
'''
              A     B    C     D
2000-01-06  0.1  0.10  0.5  0.50
2000-01-07  0.3  0.35  0.5  0.55
'''
这样就得到了最终的数据。
(完)
更新时间:2024-08-18 16:12:40 标签:pandas python 窗口计算 相关性