Один из способов количественной оценки взаимосвязи между двумя переменными – использовать Коэффициент корреляции Пирсона, который является мерой линейной связи между двумя переменными.\u00a0Он всегда принимает значение от -1 до 1, где:\n
-1 указывает на совершенно отрицательную линейную корреляцию между двумя переменные
- 0 указывает на отсутствие линейной корреляции между двумя переменными
- 1 указывает на совершенно положительную линейную корреляцию между двумя переменными
Чем дальше коэффициент корреляции от нуля, тем сильнее Связь между двумя переменными.
В этом руководстве объясняется, как вычислить корреляцию между переменными в Python.
Как рассчитать корреляцию в Python
Чтобы вычислить корреляцию между двумя переменными в Python, мы можем использовать функцию Numpy corrcoef()
import numpy as np
np.random.seed(100)
#создать массив из 50 случайных целых чисел от 0 до 10
var1 = np.random.randint(0, 10, 50)
#создать положительно коррелированный массив с некоторым случайным шумом
var2 = var1 + np.random.normal(0, 10, 50)
#рассчитать корреляцию между двумя массивами
np.corrcoef(var1, var2)
# [[ 1. 0.335]
# [ 0.335 1. ]]
Мы видим, что коэффициент корреляции между этими двумя переменными составляет 0,335
, что является положительной корреляцией.
По умолчанию эта функция создает матрицу коэффициентов корреляции. Если бы мы только хотели вернуть коэффициент корреляции между двумя переменными, мы могли бы используйте следующий синтаксис:
np.corrcoef(var1, var2)[0,1]
#0.335
Чтобы проверить, является ли эта корреляция статистически значимой, мы можем рассчитать p-значение, связанное с коэффициентом корреляции Пирсона, с помощью Scipy pearsonr(), которая возвращает коэффициент корреляции Пирсона вместе с двусторонним p-значением.
from scipy.stats.stats import pearsonr
pearsonr(var1, var2)
#(0.335, 0.017398)
Коэффициент корреляции – 0,335, а двустороннее значение p – 0,017. Поскольку это значение p меньше 0,05, мы можем заключить, что существует статистически значимая корреляция между двумя переменными.
Если вас интересует вычисление корреляции между несколькими переменными в Pandas DataFrame, вы можете просто использовать функцию .corr()
import pandas as pd
data = pd.DataFrame(np.random.randint(0, 10, size=(5, 3)), columns=['A', 'B', 'C'])
data
# A B C
#0 8 0 9
#1 4 0 7
#2 9 6 8
#3 1 8 1
#4 8 0 8
#рассчитать коэффициенты корреляции для всех попарных комбинаций
data.corr()
# A B C
# A 1.000000 -0.775567 -0.493769
# B -0.775567 1.000000 0.000000
# C -0.493769 0.000000 1.000000
И если вас интересует только расчет корреляции между двумя конкретными переменными в DataFrame, вы можете указать переменные:
data['A'].corr(data['B'])
#-0.775567
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные задачи в Python: