Метод corr аксессора expanding
Метод corr аксессора expanding применяется к DataFrame
и вычисляет расширяющуюся корреляцию Пирсона между двумя столбцами
или между столбцом и переданным рядом. Расширяющаяся корреляция
показывает, как меняется коэффициент корреляции по мере добавления
новых наблюдений в окно. Метод возвращает Series с
коэффициентами корреляции для каждой позиции, начиная с первой,
для которой можно вычислить корреляцию. Первым параметром
передаётся второй столбец или Series, с которым вычисляется
корреляция. Вторым параметром можно указать метод вычисления
корреляции, по умолчанию используется метод Пирсона.
Синтаксис
df['a'].expanding().corr(df['b'])
df['a'].expanding(min_periods=3).corr(df['b'])
df['a'].expanding().corr(df['b'], method='pearson')
Пример
Давайте вычислим расширяющуюся корреляцию между двумя столбцами таблицы:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [2, 4, 6, 8, 10]
})
res = df['a'].expanding().corr(df['b'])
print(res)
Результат выполнения кода:
0 NaN
1 1.000000
2 1.000000
3 1.000000
4 1.000000
dtype: float64
В первой позиции корреляция не определена, так как для вычисления требуется минимум две пары значений. Вторая позиция показывает корреляцию на основе двух точек, далее корреляция пересчитывается с каждым новым значением.
Пример
Давайте изменим минимальное количество наблюдений с помощью параметра min_periods:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [2, 3, 5, 7, 11]
})
res = df['a'].expanding(min_periods=3).corr(df['b'])
print(res)
Результат выполнения кода:
0 NaN
1 NaN
2 0.981981
3 0.989743
4 0.991241
dtype: float64
Параметр min_periods задаёт минимальное количество
наблюдений, необходимое для вычисления корреляции. До
достижения этого порога возвращается NaN.
Пример
Давайте используем метод корреляции Спирмена для нелинейной зависимости:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [1, 4, 9, 16, 25]
})
res = df['a'].expanding().corr(df['b'], method='spearman')
print(res)
Результат выполнения кода:
0 NaN
1 1.000000
2 1.000000
3 1.000000
4 1.000000
dtype: float64
Метод Спирмена оценивает монотонную связь между переменными и хорошо работает для нелинейных зависимостей. В данном примере квадратичная зависимость даёт идеальную корреляцию Спирмена.
Пример
Давайте вычислим расширяющуюся корреляцию для всего DataFrame:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [2, 4, 6, 8, 10],
'c': [5, 4, 3, 2, 1]
})
res = df.expanding().corr()
print(res)
Результат выполнения кода:
a b c
0 a NaN NaN NaN
b NaN NaN NaN
c NaN NaN NaN
1 a 1.0 1.0 -1.0
b 1.0 1.0 -1.0
c -1.0 -1.0 1.0
2 a 1.0 1.0 -1.0
b 1.0 1.0 -1.0
c -1.0 -1.0 1.0
3 a 1.0 1.0 -1.0
b 1.0 1.0 -1.0
c -1.0 -1.0 1.0
4 a 1.0 1.0 -1.0
b 1.0 1.0 -1.0
c -1.0 -1.0 1.0
dtype: float64
При вызове corr на Expanding объекте, полученном
из DataFrame, возвращается многомерный DataFrame
с корреляционной матрицей для каждого шага расширения.