Як розрахувати кореляцію в python
Одним із способів кількісного визначення зв’язку між двома змінними є використання коефіцієнта кореляції Пірсона , який є мірою лінійного зв’язку між двома змінними . Він завжди приймає значення від -1 до 1, де:
- -1 вказує на абсолютно негативну лінійну кореляцію між двома змінними
- 0 означає відсутність лінійної кореляції між двома змінними
- 1 вказує на абсолютно позитивну лінійну кореляцію між двома змінними
Чим далі коефіцієнт кореляції від нуля, тим сильніший зв’язок між двома змінними.
Цей посібник пояснює, як обчислити кореляцію між змінними в Python.
Як розрахувати кореляцію в Python
Щоб обчислити кореляцію між двома змінними в Python, ми можемо використати функцію Numpy corrcoef() .
import numpy as np np.random.seed(100) #create array of 50 random integers between 0 and 10 var1 = np.random.randint(0, 10, 50) #create a positively correlated array with some random noise var2 = var1 + np.random.normal(0, 10, 50) #calculate the correlation between the two arrays 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 ABC 0 8 0 9 1 4 0 7 2 9 6 8 3 1 8 1 4 8 0 8 #calculate correlation coefficients for all pairwise combinations data.corr() ABC 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:
Як створити кореляційну матрицю в Python
Як обчислити кореляцію рангів Спірмена в Python
Як обчислити автокореляцію в Python