
Корреляция показывает степень зависимости между двумя переменными и позволяет оценить, насколько изменения одной переменной связаны с изменениями другой. В Python для этого чаще всего используют библиотеки pandas и scipy, которые предоставляют готовые функции для вычисления коэффициентов Пирсона, Спирмена и Кендалла.
При анализе числовых признаков удобно применять метод .corr() в pandas. Он позволяет мгновенно получить матрицу корреляции для всех пар числовых столбцов в DataFrame. Например, вызов df.corr(method=»pearson») вычисляет линейные зависимости, а method=»spearman» подходит для выявления монотонных связей, даже если они не линейные.
В задачах, где требуется точечное вычисление зависимости между двумя переменными, используют pearsonr или spearmanr из модуля scipy.stats. Эти функции возвращают не только коэффициент корреляции, но и p-value, что позволяет проверить статистическую значимость найденной связи.
Подготовка набора данных для расчета корреляции

Перед вычислением коэффициентов корреляции необходимо привести данные к однородному и числовому виду. В pandas это выполняется с помощью .select_dtypes(include=[‘number’]), что позволяет исключить текстовые и категориальные признаки.
Отсутствующие значения искажают результаты. Оптимально применить .dropna() для удаления строк или .fillna() для заполнения медианой/средним, если потеря строк нежелательна. Выбор зависит от распределения признаков и их важности.
Для категориальных признаков, которые необходимо включить в анализ, используют One-Hot Encoding (pandas.get_dummies()), так как строковые значения не участвуют в расчёте корреляции.
Перед анализом стоит проверить наличие константных признаков с помощью DataFrame.nunique(). Столбцы, где число уникальных значений равно 1, удаляются, так как их корреляция с другими всегда равна нулю.
Чтобы уменьшить влияние выбросов, полезно применить методы нормализации или стандартизации (например, StandardScaler из sklearn). Это особенно важно для признаков с различными масштабами.
После этих шагов датафрейм содержит только числовые, очищенные и сопоставимые данные, готовые к корректному вычислению корреляции.
Загрузка и проверка данных с помощью pandas
Для работы с корреляцией необходимо заранее подготовить данные. В pandas чаще всего используют функцию read_csv() для загрузки таблиц в формате CSV: df = pd.read_csv("data.csv"). При необходимости можно указать разделитель (sep=";"), кодировку (encoding="utf-8") и типы столбцов через параметр dtypes.
Отсутствующие значения следует выявить через df.isnull().sum(), чтобы определить, в каких переменных требуется очистка или заполнение. Часто встречаются дубликаты строк, их наличие проверяется функцией df.duplicated().sum(). Если такие записи не нужны, удаление выполняется командой df.drop_duplicates(inplace=True).
Перед расчетом корреляции убедитесь, что категориальные признаки закодированы численно, а числовые данные не содержат текстовых артефактов. Проверка уникальных значений с помощью df["column"].unique() позволяет быстро выявить несоответствия формата.
Применение метода.corr() для вычисления коэффициентов
Метод .corr() библиотеки pandas рассчитывает корреляцию между столбцами DataFrame, по умолчанию используя коэффициент Пирсона. Для получения матрицы достаточно вызвать df.corr(), где df – таблица с числовыми признаками.
Если требуется изменить метод, можно указать параметр method. Допустимые значения: 'pearson', 'kendall', 'spearman'. Например: df.corr(method='spearman') вычислит ранговую корреляцию Спирмена.
Чтобы вычислить коэффициент только между двумя переменными, можно выбрать столбцы напрямую: df['x'].corr(df['y']). Такой вызов возвращает одно числовое значение.
Практическая рекомендация – перед применением .corr() удалить или заполнить пропуски, так как NaN по умолчанию игнорируются, что может исказить структуру данных. Для анализа больших таблиц стоит ограничить список признаков, оставив только числовые поля.
Полученная матрица корреляций используется для построения тепловых карт и отбора признаков с высокой взаимосвязью. Это помогает исключить мультиколлинеарные переменные при подготовке данных к моделированию.
Выбор типа корреляции: Pearson, Spearman или Kendall

Корреляция Пирсона применима, если переменные имеют метрическую шкалу, распределение близкое к нормальному и предполагается линейная зависимость. Например, при анализе роста и веса выборки людей этот метод позволяет выявить силу и направление линейной связи.
Корреляция Спирмена используется, когда данные представлены в ранговой шкале или содержат выбросы, искажающие линейную зависимость. Метод оценивает монотонность: если одна переменная растет вместе с другой, даже без строгой линейности, коэффициент даст корректную оценку. Подходит для сравнения уровня удовлетворенности клиентов по шкале от 1 до 10 с вероятностью повторной покупки.
Коэффициент Кендалла учитывает количество согласованных и несогласованных пар рангов и более устойчив к малым выборкам. Этот метод предпочтителен при анализе данных с большим количеством одинаковых значений или небольшим числом наблюдений. Например, для сопоставления результатов экспертов при оценке качества продукта.
Практически: для количественных данных с нормальностью – Pearson; для ранговых или данных с выбросами – Spearman; для малых выборок и оценок экспертов – Kendall.
Визуализация матрицы корреляции через heatmap

Тепловая карта (heatmap) позволяет быстро оценить силу связей между признаками. Для построения удобно использовать библиотеку seaborn, которая поверх pandas и matplotlib обеспечивает наглядность результата.
Пример построения тепловой карты:
import seaborn as sns
import matplotlib.pyplot as plt
corr = df.corr(numeric_only=True)
sns.heatmap(corr, annot=True, fmt=".2f", cmap="coolwarm", cbar=True)
plt.show()
Интерпретация значений:
| Коэффициент | Сила связи |
|---|---|
| 0.0 – 0.3 | Слабая |
| 0.3 – 0.7 | Средняя |
| 0.7 – 1.0 | Сильная |
Для больших наборов данных полезно ограничить матрицу только ключевыми признаками, чтобы избежать перегрузки графика и ускорить визуализацию.
Интерпретация значений коэффициентов корреляции

Коэффициент корреляции отражает силу и направление линейной связи между двумя переменными. В Python чаще используют коэффициент Пирсона, значения которого лежат в диапазоне от -1 до 1.
- r = 1: идеальная положительная линейная зависимость. Каждое увеличение одной переменной на единицу сопровождается строго пропорциональным увеличением другой.
- r = -1: идеальная отрицательная линейная зависимость. Увеличение одной переменной строго сопровождается уменьшением другой.
- r ≈ 0: отсутствие линейной зависимости. Значение переменных не связано линейно, но возможны нелинейные зависимости.
Для практического анализа используют следующие диапазоны:
- 0.0–0.3 (или -0.3–0.0): слабая линейная связь. Изменения одной переменной мало объясняют изменения другой.
- 0.3–0.5 (или -0.5–-0.3): умеренная связь. Полезно при выявлении трендов, но не гарантирует точных прогнозов.
- 0.5–0.7 (или -0.7–-0.5): заметная линейная связь. Подходит для аналитики и построения простых моделей.
- 0.7–0.9 (или -0.9–-0.7): высокая связь. Значения переменных сильно коррелируют, использование для прогнозирования оправдано.
- 0.9–1.0 (или -1.0–-0.9): очень высокая связь. В реальных данных встречается редко, часто указывает на дублирование информации.
Важно учитывать контекст данных и визуализировать корреляцию через диаграммы рассеяния. Высокий коэффициент не означает причинно-следственную связь, а низкий – отсутствие интересной зависимости. Рекомендуется дополнительно проверять значимость корреляции с помощью p-value.
Обработка пропусков и выбросов перед расчетом
Перед вычислением корреляции важно корректно обработать пропуски и выбросы, так как они могут существенно искажать результаты.
Пропуски:
- Метод удаления строк: pandas `df.dropna(subset=[‘колонка1’, ‘колонка2’])` удаляет строки с NaN в указанных столбцах. Подходит, если пропусков меньше 5–10%.
- Метод замены средним/медианой: `df[‘колонка’].fillna(df[‘колонка’].mean())` или `.median()`. Эффективно при нормальном распределении данных и небольшом количестве пропусков.
- Метод интерполяции: `df[‘колонка’].interpolate(method=’linear’)` для временных рядов, сохраняет тренд и последовательность значений.
Выбросы:
- Метод IQR: вычисляем первый и третий квартиль `Q1`, `Q3`, границы выбросов `Q1 — 1.5*IQR` и `Q3 + 1.5*IQR`. Строки за пределами границ удаляются.
- Метод Z-score: `scipy.stats.zscore(df[‘колонка’])` позволяет отсеять значения с |z| > 3, особенно для нормального распределения.
- Логарифмическое преобразование: для сильно скошенных данных `df[‘колонка_log’] = np.log1p(df[‘колонка’])` уменьшает влияние экстремальных значений.
Рекомендации:
- Сначала устраняйте пропуски, затем проверяйте выбросы – это снижает риск удаления полезных данных.
- Для категориальных переменных заменяйте пропуски на отдельную категорию, а не на среднее.
- Документируйте изменения: сохраняйте копии исходных данных и фиксируйте примененные методы обработки.
- После обработки визуализируйте распределения с помощью `boxplot` или `hist` для проверки корректности удалений и замен.
Пример использования корреляции для выбора признаков

Для выбора признаков в задаче регрессии на наборе данных о ценах на жильё можно использовать коэффициент корреляции Пирсона. Предположим, у нас есть DataFrame df с колонками: ‘Цена’, ‘Площадь’, ‘Количество_комнат’, ‘Возраст_дома’, ‘Удалённость_от_центра’.
Сначала вычисляем корреляционную матрицу:
corr_matrix = df.corr()
Затем выбираем признаки, сильно коррелирующие с целевой переменной ‘Цена’:
corr_target = corr_matrix[‘Цена’].sort_values(ascending=False)
Если коэффициент корреляции > 0.5 или < -0.5, признак считается значимым. Например, ‘Площадь’ может иметь корреляцию 0.82, ‘Количество_комнат’ – 0.65, а ‘Возраст_дома’ – -0.47. На основе этого выбираем ‘Площадь’ и ‘Количество_комнат’ для построения модели.
Для выявления избыточных признаков применяем корреляцию между ними. Если ‘Площадь’ и ‘Количество_комнат’ имеют корреляцию 0.78, стоит рассмотреть удаление одного из них или объединение в новый признак “Площадь на комнату”.
Этот подход помогает сократить количество признаков, улучшить интерпретируемость модели и снизить мультиколлинеарность без сложных методов отбора.
Вопрос-ответ:
Что такое коэффициент корреляции и как его использовать в анализе данных?
Коэффициент корреляции показывает степень взаимосвязи между двумя переменными. Он принимает значения от -1 до 1: отрицательные значения указывают на обратную зависимость, положительные — на прямую, а ноль — на отсутствие линейной связи. В анализе данных это помогает определить, какие показатели могут влиять друг на друга и выявлять закономерности перед построением моделей. В Python для вычисления корреляции обычно используют библиотеку pandas и метод DataFrame.corr().
Какие методы расчета корреляции доступны в Python и в чем их различие?
В Python чаще всего применяются три метода: Пирсона, Спирмена и Кендалла. Метод Пирсона измеряет линейную зависимость и подходит для числовых данных с нормальным распределением. Спирмен учитывает ранговые значения и позволяет оценивать монотонные зависимости, даже если они нелинейные. Кендалл также работает с рангами и показывает вероятность согласованности пар данных. Выбор метода зависит от структуры данных и целей анализа.
Как посчитать корреляцию между двумя столбцами в pandas?
Для расчета корреляции между двумя столбцами достаточно использовать метод corr(). Например, если есть DataFrame df с колонками 'A' и 'B', можно написать df['A'].corr(df['B']). По умолчанию используется метод Пирсона, но можно указать method='spearman' или method='kendall' для других типов корреляции. Результат будет числом от -1 до 1, которое отражает степень взаимосвязи.
Можно ли визуализировать корреляцию в Python?
Да, визуализация часто помогает быстрее понять взаимосвязи. Наиболее популярный способ — это тепловая карта с помощью библиотеки seaborn и функции heatmap(). Для этого сначала вычисляют матрицу корреляций df.corr(), а затем строят график. Цветовая шкала позволяет сразу заметить сильные положительные и отрицательные связи между переменными, что упрощает анализ большого объема данных.
Что делать, если данные содержат пропуски перед расчетом корреляции?
Методы корреляции не работают с пропущенными значениями, поэтому их нужно обработать. В pandas можно использовать dropna(), чтобы удалить строки с пропусками, или fillna(), чтобы заменить их на среднее, медиану или другое значение. Важно понимать, как выбранный способ повлияет на результаты: удаление уменьшает количество данных, а заполнение может исказить связь. После обработки пропусков корреляцию можно вычислять обычным способом.
Как в Python рассчитать коэффициент корреляции между двумя наборами данных?
Для вычисления коэффициента корреляции в Python часто используют библиотеку pandas или scipy. В pandas можно создать DataFrame и вызвать метод df.corr(), который по умолчанию возвращает корреляцию Пирсона между столбцами. В scipy используется функция pearsonr(x, y), которая принимает два списка или массива и возвращает коэффициент корреляции и значение p-value. Такой подход позволяет быстро оценить, насколько связаны данные переменные и определить направление этой связи.
Можно ли в Python оценивать нелинейную связь между переменными?
Да, для изучения нелинейной зависимости применяют коэффициент корреляции Спирмена или Кендалла. В pandas это делается с помощью df.corr(method='spearman') или df.corr(method='kendall'). Эти методы учитывают ранги значений и позволяют обнаруживать закономерности, которые не видны через стандартную корреляцию Пирсона. Для больших наборов данных такой способ часто помогает выявить скрытые зависимости, которые линейные показатели могут пропустить.
