Как рассчитать скользящую корреляцию в Pandas (с примерами)


Скользящие корреляции — это корреляции между двумя временными рядами в скользящем окне. Одним из преимуществ этого типа корреляции является то, что вы можете визуализировать корреляцию между двумя временными рядами во времени.

В этом руководстве объясняется, как рассчитать и визуализировать скользящие корреляции для кадра данных pandas в Python.

Как рассчитать скользящие корреляции в Pandas

Предположим, у нас есть следующий фрейм данных, который отображает общее количество продуктов, проданных для двух разных продуктов ( x и y ) за 15-месячный период:

import pandas as pd
import numpy as np

#create DataFrame
df = pd.DataFrame({'month': np.arange (1, 16),
 'x': [13, 15, 16, 15, 17, 20, 22, 24, 25, 26, 23, 24, 23, 22, 20],
 'y': [22, 24, 23, 27, 26, 26, 27, 30, 33, 32, 27, 25, 28, 26, 28]})

#view first six rows
df.head ()

 month x y
1 1 13 22
2 2 15 24
3 3 16 23
4 4 15 27
5 5 17 26
6 6 20 26

Чтобы вычислить скользящую корреляцию в pandas, мы можем использовать функцию roll.corr() .

Эта функция использует следующий синтаксис:

df['x'].rolling(width).corr(df['y'])

куда:

  • df: имя фрейма данных
  • ширина: целое число, указывающее ширину окна для скользящей корреляции.
  • x, y: имена двух столбцов для расчета скользящей корреляции между

Вот как использовать эту функцию для расчета 3-месячной скользящей корреляции продаж между продуктом x и продуктом y :

#calculate 3-month rolling correlation between sales for *x* and *y*
df['x']. rolling (3).corr(df['y'])

0 NaN
1 NaN
2 0.654654
3 -0.693375
4 -0.240192
5 -0.802955
6 0.802955
7 0.960769
8 0.981981
9 0.654654
10 0.882498
11 0.817057
12 -0.944911
13 -0.327327
14 -0.188982
dtype: float64

Эта функция возвращает корреляцию между продажами двух продуктов за предыдущие 3 месяца. Например:

  • Корреляция в продажах с 1 по 3 месяц составила 0,654654 .
  • Корреляция в продажах со 2-го по 4-й месяцы составила -0,693375.
  • Корреляция в продажах с 3-го по 5-й месяцы составила -0,240192.

И так далее.

Мы можем легко изменить эту формулу, чтобы рассчитать скользящую корреляцию для другого периода времени. Например, в следующем коде показано, как рассчитать скользящую корреляцию продаж за 6 месяцев между двумя продуктами:

#calculate 6-month rolling correlation between sales for *x* and *y*
df['x']. rolling (6).corr(df['y']) 
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
5 0.558742
6 0.485855
7 0.693103
8 0.756476
9 0.895929
10 0.906772
11 0.715542
12 0.717374
13 0.768447
14 0.454148
dtype: float64

Эта функция возвращает корреляцию между продажами двух продуктов за предыдущие 6 месяцев. Например:

  • Корреляция в продажах с 1 по 6 месяц составила 0,558742 .
  • Корреляция в продажах со 2-го по 7-й месяц составила 0,485855.
  • Корреляция в продажах с 3 по 8 месяцы составила 0,693103.

И так далее.

Заметки

Вот несколько замечаний по функциям, используемым в этих примерах:

  • Ширина (т. е. скользящее окно) должна быть 3 или больше для расчета корреляций.
  • Полную документацию по функции roll.corr() можно найти здесь .

Дополнительные ресурсы

Как рассчитать скользящую корреляцию в R
Как рассчитать скользящую корреляцию в Excel

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.