📜  如何在Python中计算滚动相关性?

📅  最后修改于: 2022-05-13 01:55:40.266000             🧑  作者: Mango

如何在Python中计算滚动相关性?

相关性通常决定了两个变量之间的关系。滚动相关性衡量滚动窗口上两个时间序列数据之间的相关性滚动相关性可以应用于特定窗口宽度以确定短期相关性。

在Python中计算滚动相关性

让我们使用两个产品 A 和 B 在过去 60 个月内的销售数据来计算滚动相关性。 Pandas 包提供了一个名为rolling.corr()的函数来计算滚动相关性。

句法:

data1.rolling(width).corr(data2)

在哪里,

  • data1, data2 –感兴趣的数据/列(类型系列)
  • width - 滚动窗口宽度(int)

注意:滚动窗口的宽度应为3 或更大,以便计算相关性。

使用的数据:

Python3
# import pandas module
import pandas as pd
 
# read the data
data = pd.read_csv('product_sales.csv')
 
# display top 10 rows
print(data.head(10))
 
# display column names
print(data.columns)


Python3
data['Product A'].rolling(6).corr(data['Product B'])
 
# formatting the output
k = 1
for i, j in enumerate(data['Product A'].rolling(6).corr(data['Product B'])):
    if (i >= 5 and i < 12):
        print(f'The correlation in sales during months\
        {k} through {i+1} is {j}')
        i = 0
        k += 1


Python3
data['Product A'].rolling(3).corr(data['Product B'])
 
# formatting the output
k = 1
for i, j in enumerate(data['Product A'].rolling(3).corr(data['Product B'])):
    if (i >= 3 and i < 12):
        print(
            f'The correlation in sales during months {k} \
            through {i+1} is {j}')
        i = 0
        k += 1


输出:

示例 2:

在这里,我们使用了 6 的窗口宽度,它显示了连续 6 个月的滚动相关性。我们可以看到两种产品销售之间的显着相关性,任何突然下降或相关性上升都预示着一个不寻常的事件,导致了下降。

Python3

data['Product A'].rolling(6).corr(data['Product B'])
 
# formatting the output
k = 1
for i, j in enumerate(data['Product A'].rolling(6).corr(data['Product B'])):
    if (i >= 5 and i < 12):
        print(f'The correlation in sales during months\
        {k} through {i+1} is {j}')
        i = 0
        k += 1

输出:

现在让我们尝试相同的 3 个月相关性,如下所示,

示例 3:

Python3

data['Product A'].rolling(3).corr(data['Product B'])
 
# formatting the output
k = 1
for i, j in enumerate(data['Product A'].rolling(3).corr(data['Product B'])):
    if (i >= 3 and i < 12):
        print(
            f'The correlation in sales during months {k} \
            through {i+1} is {j}')
        i = 0
        k += 1

输出