Пропустить до содержимого

Как использовать корреляцию в Python?

[

NumPy, SciPy и pandas: Корреляция с помощью Python

by Mirko Stojiljković

Коэффициенты корреляции количественно характеризуют взаимосвязь между переменными или признаками набора данных. Эти статистики имеют большое значение для науки и технологии, и в Python есть отличные инструменты, с помощью которых можно их рассчитывать. Методы корреляции SciPy, NumPy и pandas являются быстрыми, всесторонними и хорошо задокументированными.

В этом руководстве вы узнаете:

  • Что такое коэффициенты корреляции Пирсона, Спирмена и Кенделла
  • Как использовать функции корреляции SciPy, NumPy и pandas
  • Как визуализировать данные, линии регрессии и матрицы корреляции с помощью Matplotlib

Вы начнете с объяснения корреляции, затем увидите три кратких вводных примера, и, наконец, погрузитесь в детали корреляции с использованием NumPy, SciPy и pandas.

Бесплатный бонус: Нажмите здесь, чтобы получить доступ к бесплатному руководству по ресурсам NumPy, которое поможет вам найти лучшие учебники, видео и книги для совершенствования ваших навыков работы с NumPy.

Корреляция

Статистика и наука о данных часто интересуются взаимосвязью между двумя или более переменными (или признаками) набора данных. Каждая точка данных в наборе данных является наблюдением, а признаки являются свойствами или атрибутами этих наблюдений.

Каждый набор данных, с которым вы работаете, использует переменные и наблюдения. Например, вам может быть интересно понять:

В приведенных выше примерах рост, точность бросков, годы опыта работы, зарплата, плотность населения и валовой внутренний продукт являются признаками или переменными. Данные, относящиеся к каждому игроку, сотруднику и каждой стране являются наблюдениями.

Когда данные представлены в виде таблицы, строки этой таблицы обычно являются наблюдениями, а столбцы - это признаки или переменные. Помимо этого, каждое наблюдение часто имеет значения различных признаков, и эти значения могут быть числовыми или категориальными.

Корреляция - это статистическая мера, которая указывает на силу и направление связи между двумя переменными. Коэффициент корреляции принимает значения от -1 до 1, где -1 означает полную отрицательную корреляцию, 1 - положительную, а 0 - отсутствие корреляции.

Корреляция может быть линейной (потому что она измеряет степень линейной связи) или нелинейной. Некоторые методы корреляции измеряют только линейную зависимость, тогда как другие могут также определять нелинейную связь.

Пример: Расчет корреляции с помощью NumPy

Для расчета корреляции в NumPy мы можем использовать функцию np.corrcoef(), которая возвращает матрицу корреляции. Каждый элемент этой матрицы представляет собой коэффициент корреляции между парами переменных.

Вот пример кода, демонстрирующий расчет корреляции с помощью NumPy:

import numpy as np
x = np.array([1, 2, 3, 4, 5])
y = np.array([5, 4, 3, 2, 1])
correlation_matrix = np.corrcoef(x, y)
correlation_coefficient = correlation_matrix[0, 1]
print(f"Correlation coefficient: {correlation_coefficient}")

В этом коде мы сначала импортируем модуль NumPy и задаем два массива x и y, представляющих две переменные. Затем мы используем функцию np.corrcoef() для расчета матрицы корреляции, а затем записываем коэффициент корреляции между x и y в переменную correlation_coefficient. Наконец, мы выводим этот коэффициент на экран.

В этом примере результатом будет -1, что указывает на полную отрицательную корреляцию между x и y.

Пример: Расчет корреляции с помощью SciPy

Для расчета корреляции в SciPy мы можем использовать функцию scipy.stats.pearsonr(), которая возвращает коэффициент корреляции Пирсона и p-значение. Коэффициент корреляции Пирсона может принимать значения от -1 до 1, где -1 означает полную отрицательную корреляцию, 1 - положительную, а 0 - отсутствие корреляции.

Вот пример кода, демонстрирующий расчет корреляции с помощью SciPy:

from scipy import stats
x = [1, 2, 3, 4, 5]
y = [5, 4, 3, 2, 1]
correlation_coefficient, p_value = stats.pearsonr(x, y)
print(f"Correlation coefficient: {correlation_coefficient}")
print(f"P-value: {p_value}")

В этом коде мы импортируем модуль stats из SciPy и задаем два массива x и y, представляющих две переменные. Затем мы используем функцию stats.pearsonr() для расчета коэффициента корреляции Пирсона и p-значения. Наконец, мы выводим эти значения на экран.

В этом примере результатом будет -1, что указывает на полную отрицательную корреляцию между x и y, а также очень маленькое p-значение, что указывает на высокую статистическую значимость этой корреляции.

Пример: Расчет корреляции с помощью pandas

В pandas предоставляется удобный способ расчета корреляции с помощью метода corr(). Этот метод возвращает матрицу корреляции для всех числовых признаков в наборе данных.

Вот пример кода, демонстрирующий расчет корреляции с помощью pandas:

import pandas as pd
data = {'x': [1, 2, 3, 4, 5], 'y': [5, 4, 3, 2, 1]}
df = pd.DataFrame(data)
correlation_matrix = df.corr()
correlation_coefficient = correlation_matrix.loc['x', 'y']
print(f"Correlation coefficient: {correlation_coefficient}")

В этом коде мы импортируем модуль pandas и задаем словарь данных data, содержащий два массива x и y, представляющих две переменные. Затем мы создаем DataFrame с помощью этих данных и вызываем метод corr() для расчета матрицы корреляции. Наконец, мы находим коэффициент корреляции между x и y в матрице корреляции и выводим его на экран.

В этом примере результатом будет -1, что указывает на полную отрицательную корреляцию между x и y.

Линейная корреляция

Коэффициент корреляции Пирсона

Коэффициент корреляции Пирсона - это мера линейной зависимости между двумя переменными. Он находится в диапазоне от -1 до 1, где -1 означает полную отрицательную линейную зависимость, 1 - положительную, а 0 - отсутствие линейной зависимости.

Чтобы вычислить коэффициент корреляции Пирсона с помощью NumPy, мы можем использовать функцию np.corrcoef(), как показано в примере выше.

Для расчета коэффициента корреляции Пирсона с использованием SciPy, мы можем воспользоваться функцией stats.pearsonr(), как показано в примере выше.

Для расчета коэффициента корреляции Пирсона с использованием pandas, мы можем использовать метод corr() объекта DataFrame, как показано в примере выше.

Линейная регрессия: реализация в SciPy

Линейная регрессия - это метод анализа, который используется для определения статистической связи между двумя наборами переменных. В SciPy линейная регрессия может быть реализована с использованием функции linregress(), которая возвращает значения наклона (slope), пересечения (intercept), коэффициента корреляции (r-value), p-значения (p-value) и стандартной ошибки оценки (standard error) регрессии.

Вот пример кода, демонстрирующий реализацию линейной регрессии с использованием SciPy:

from scipy import stats
x = [1, 2, 3, 4, 5]
y = [5, 4, 3, 2, 1]
slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)
print(f"Slope: {slope}")
print(f"Intercept: {intercept}")
print(f"R-value (correlation coefficient): {r_value}")
print(f"P-value: {p_value}")
print(f"Standard error: {std_err}")

В этом коде мы импортируем модуль stats из SciPy и задаем два массива x и y, представляющих две переменные. Затем мы используем функцию stats.linregress() для реализации линейной регрессии и получаем значения наклона, пересечения, коэффициента корреляции, p-значения и стандартной ошибки. Наконец, мы выводим эти значения на экран.

Визуализация корреляции

Графики X-Y с линией регрессии

Для визуализации линейной корреляции между двумя переменными можно построить график X-Y с линией регрессии. Линия регрессии показывает направление и силу зависимости между переменными.

Для построения графика X-Y с линией регрессии с помощью Matplotlib мы можем использовать функцию matplotlib.pyplot.plot() для построения точечного графика и функцию matplotlib.pyplot.plot() для построения линии регрессии.

Вот пример кода, демонстрирующий построение графика X-Y с линией регрессии с помощью Matplotlib:

import numpy as np
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [5, 4, 3, 2, 1]
slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)
line = slope * np.array(x) + intercept
plt.plot(x, y, 'o', label='Data points')
plt.plot(x, line, label='Regression line')
plt.xlabel('X')
plt.ylabel('Y')
plt.title('X-Y Plot with Regression Line')
plt.legend()
plt.show()

В этом коде мы импортируем модули numpy и matplotlib.pyplot и задаем два массива x и y, представляющих две переменные. Затем мы реализуем линейную регрессию с помощью stats.linregress(), как показано в предыдущем примере.

Затем мы вычисляем значения линии регрессии, умножая наклон на каждое значение x и добавляя пересечение. Далее, мы используем функции matplotlib.pyplot.plot() для построения точечного графика и линии регрессии, и функции plt.xlabel(), plt.ylabel(), plt.title() и plt.legend() для добавления подписей и заголовка графика. Наконец, мы используем функцию plt.show() для отображения графика.

Тепловые карты матриц корреляции

Для визуализации матрицы корреляции между несколькими переменными можно построить тепловую карту. Тепловая карта показывает визуальное представление коэффициентов корреляции в виде цветовой шкалы.

Для построения тепловых карт с помощью Matplotlib мы можем использовать функцию matplotlib.pyplot.imshow() для отображения матрицы корреляции как изображение.

Вот пример кода, демонстрирующий построение тепловых карт матрицы корреляции с помощью Matplotlib:

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
data = np.array([[1, 0.8, 0.6], [0.8, 1, 0.4], [0.6, 0.4, 1]])
sns.heatmap(data, cmap='coolwarm', annot=True, cbar=True)
plt.xlabel('Variables')
plt.ylabel('Variables')
plt.title('Correlation Heatmap')
plt.show()

В этом коде мы импортируем модули numpy, seaborn и matplotlib.pyplot и задаем массив data, представляющий матрицу корреляции между тремя переменными. Затем мы используем функцию seaborn.heatmap() для построения тепловой карты матрицы корреляции, а также функции plt.xlabel(), plt.ylabel() и plt.title() для добавления подписей и заголовка к графику. Наконец, мы используем функцию plt.show() для отображения графика.

Заключение

Корреляция - это статистическое понятие, которое помогает понять взаимосвязь между двумя переменными или признаками набора данных. Python предоставляет мощные библиотеки NumPy, SciPy и pandas, которые позволяют легко рассчитывать коэффициенты корреляции и визуализировать их.

В этом руководстве были представлены примеры использования NumPy, SciPy и pandas для расчета корреляции, включая линейную корреляцию, регрессию и визуализацию данных. Теперь у вас есть все необходимые инструменты для работы с корреляцией в Python.