Как рассчитать корреляцию между двумя столбцами в Pandas
Вы можете использовать следующий синтаксис для вычисления корреляции между двумя столбцами в кадре данных pandas:
В следующих примерах показано, как использовать этот синтаксис на практике.
Пример 1: расчет корреляции между двумя столбцами
В следующем коде показано, как вычислить корреляцию между столбцами в кадре данных pandas:
import pandas as pd #create DataFrame df = pd.DataFrame() #view first five rows of DataFrame df.head () points assists rebounds 0 25 5 11 1 12 7 8 2 15 7 10 3 14 9 6 4 19 12 6 #calculate correlation between points and assists df['points']. corr(df['assists']) -0.359384
Коэффициент корреляции равен -0,359.Поскольку эта корреляция отрицательна, это говорит нам о том, что очки и передачи имеют отрицательную корреляцию.
Другими словами, по мере увеличения значений в столбце очков значения в столбце помощи имеют тенденцию к уменьшению.
Пример 2: расчет значимости корреляции
Чтобы определить, является ли коэффициент корреляции статистически значимым, вы можете использовать функцию pearsonr(x, y) из библиотеки SciPy .
Следующий код показывает, как использовать эту функцию на практике:
import pandas as pd from scipy. stats import pearsonr #create DataFrame df = pd.DataFrame() #calculate p-value of correlation coefficient between points and assists pearsonr(df['points'], df['assists']) (-0.359384, 0.38192)
Первое значение в выходных данных отображает коэффициент корреляции (-0,359384), а второе значение отображает p-значение (0,38192), связанное с этим коэффициентом корреляции.
Поскольку p-значение не меньше α = 0,05, можно сделать вывод, что корреляция между очками и передачами не является статистически значимой.
Как рассчитать корреляцию в Python
Один из способов количественной оценки взаимосвязи между двумя переменными – использовать Коэффициент корреляции Пирсона, который является мерой линейной связи между двумя переменными.\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, вы можете указать переменные:
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные задачи в Python:
pandas.DataFrame.corr#
Compute pairwise correlation of columns, excluding NA/null values.
Parameters method or callable
- pearson : standard correlation coefficient
- kendall : Kendall Tau correlation coefficient
- spearman : Spearman rank correlation
- callable: callable with input two 1d ndarrays and returning a float. Note that the returned matrix from corr will have 1 along the diagonals and will be symmetric regardless of the callable’s behavior.
Minimum number of observations required per pair of columns to have a valid result. Currently only available for Pearson and Spearman correlation.
numeric_only bool, default False
Include only float , int or boolean data.
Changed in version 2.0.0: The default value of numeric_only is now False .
Compute pairwise correlation with another DataFrame or Series.
Compute the correlation between two Series.
Pearson, Kendall and Spearman correlation are currently computed using pairwise complete observations.
>>> def histogram_intersection(a, b): . v = np.minimum(a, b).sum().round(decimals=1) . return v >>> df = pd.DataFrame([(.2, .3), (.0, .6), (.6, .0), (.2, .1)], . columns=['dogs', 'cats']) >>> df.corr(method=histogram_intersection) dogs cats dogs 1.0 0.3 cats 0.3 1.0
>>> df = pd.DataFrame([(1, 1), (2, np.nan), (np.nan, 3), (4, 4)], . columns=['dogs', 'cats']) >>> df.corr(min_periods=3) dogs cats dogs 1.0 NaN cats NaN 1.0