Функция Pandas Series.corr()

Pandas 常用函数Часто используемые функции Pandas


Series.corr()— это функция в Pandas, используемая для вычисления коэффициента корреляции между двумя Series. Коэффициент корреляции измеряет силу линейной связи между двумя переменными и принимает значения от -1 до 1.

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


Базовый синтаксис и параметры

corr()является методом объекта Series и требует передачи другого Series в качестве параметра.

Формат синтаксиса

Series.corr(other, method='pearson', min_periods=None, **kwargs)

Описание параметра

Параметр Type Описание Значение по умолчанию
other Серия Другой Series, используемый для вычисления коэффициента корреляции. Обязательный
method str Метод вычисления коэффициента корреляции. Возможные значения: 'pearson' (Pearson), 'spearman' (Spearman), 'kendall' (Kendall). 'pearson'
min_periods int Минимальное количество допустимых наблюдений, необходимое для вычисления. Если количество допустимых значений меньше этого, возвращается NaN. Отсутствует

Возвращаемое значение

  • Тип возвращаемого значения:float
  • Описание: Возвращает коэффициент корреляции между двумя Series в диапазоне от -1 до 1.

Примеры

Давайте с помощью серии примеров от простого к сложному тщательно освоимSeries.corr()использование.

Пример 1: Базовое использование — коэффициент корреляции Пирсона

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

Пример

import pandas as pd

# Создаём два Series: часы учёбы и оценки за экзамен
study_hours = pd.Series([1, 2, 3, 4, 5, 6, 7, 8])
exam_scores = pd.Series([55, 60, 65, 70, 75, 80, 85, 90])

print("Время учёбы (часы):")
print(study_hours)
print()

print("Результат экзамена (баллы):")
print(exam_scores)
print()

# Вычислить коэффициент корреляции Пирсона
correlation = study_hours.corr(exam_scores)

print(f"Коэффициент корреляции Пирсона: {correlation:.4f}")
print()
print("Анализ: коэффициент корреляции близок к 1, что указывает на сильную положительную корреляцию между временем учёбы и результатами экзамена.")

Вывод:

学习时间(小时):
0    1
1    2
2    3
3    4
4    5
5    6
6    7
7    8
dtype: int64

考试成绩(分):
0    55
1    60
2    65
3    70
4    75
5    80
6    85
7    90
dtype: int64

皮尔逊相关系数:1.0000

Пояснение к коду:

  • Коэффициент корреляции равен 1.0, что указывает на идеальную положительную корреляцию.
  • Это означает, что за каждый дополнительный час учёбы результат экзамена увеличивается на 5 баллов.

Пример 2: Примеры отрицательной корреляции и отсутствия корреляции

Показывает различные типы корреляции.

Пример

import pandas as pd

# Положительно коррелированные данные: возраст и доход
ages = pd.Series([25, 30, 35, 40, 45, 50])
income = pd.Series([4000, 5000, 6000, 7000, 8000, 9000])

print("Пример положительной корреляции — возраст и доход:")
print(f"Коэффициент корреляции: {ages.corr(income):.4f}")
print()

# Отрицательно коррелированные данные: время игры и академическая успеваемость
game_hours = pd.Series([1, 2, 3, 4, 5, 6])
grades = pd.Series([95, 90, 82, 75, 65, 55])

print("Пример отрицательной корреляции — время игры и академическая успеваемость:")
print(f"Коэффициент корреляции: {game_hours.corr(grades):.4f}")
print()

# Некоррелированные данные: размер обуви и IQ
shoe_sizes = pd.Series([36, 37, 38, 39, 40, 41])
iq_scores = pd.Series([100, 105, 95, 110, 98, 102])

print("Пример отсутствия корреляции - размер обуви и IQ:")
print(f"Коэффициент корреляции: {shoe_sizes.corr(iq_scores):.4f}")
print()

print("Интерпретация коэффициента корреляции:")
print(" |r| > 0.7: Сильная корреляция")
print(" 0.4 < |r| <= 0.7: Умеренная корреляция")
print(" 0.2 < |r| <= 0.4: Слабая корреляция")
print(" |r| <= 0.2: Почти нет корреляции")

Вывод:

正相关示例 - 年龄与收入:
相关系数:1.0000
负相关示例 - 游戏时间与学习成绩:
相关系数:-0.9856
无相关示例 - 鞋码与智商:
相关系数:0.0857

Пример 3: Использование различных методов коэффициента корреляции

Демонстрирует использование коэффициентов корреляции Спирмена и Кендалла.

Пример

import pandas as pd

# Создание данных с нелинейной зависимостью
x = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
# Использовать экспоненциальную зависимость, а не чисто линейную
y = pd.Series([1, 4, 9, 16, 25, 36, 49, 64, 81, 100])

print("Данные X:")
print(x)
print()

print("Данные Y (X в квадрате):")
print(y)
print()

# Коэффициент корреляции Пирсона (измеряет линейную зависимость)
pearson_corr = x.corr(y, method='pearson')
print(f"Коэффициент корреляции Пирсона: {pearson_corr:.4f}")

# Коэффициент корреляции Спирмена (измеряет монотонную зависимость)
spearman_corr = x.corr(y, method='spearman')
print(f"Коэффициент корреляции Спирмена: {spearman_corr:.4f}")

# Коэффициент корреляции Кендалла
kendall_corr = x.corr(y, method='kendall')
print(f"Коэффициент корреляции Кендалла: {kendall_corr:.4f}")
print()

print("Анализ:")
print("Хотя X и Y имеют идеальную монотонную зависимость (y = x^2),")
print("Но коэффициент корреляции Пирсона не равен 1, потому что они не связаны линейно.")
print("Коэффициенты корреляции Спирмена и Кендалла равны 1, потому что они измеряют монотонные зависимости.")

Вывод:

数据 X:
0    1
1    2
2    3
3    4
4    5
5    6
6    7
7    8
8    9
9   10
dtype: int64

数据 Y(X 的平方):
0      1
1      4
2      9
3     16
4     25
5     36
6     49
7     64
8     81
9    100
dtype: int64

皮尔逊相关系数:0.9746
斯皮尔曼相关系数:1.0000
肯德尔相关系数:1.0000

Пример 4: Использование параметра min_periods

Управляет минимальным количеством допустимых наблюдений, необходимых для вычисления.

Пример

import pandas as pd
import numpy as np

# Создайте два Series, содержащих пропущенные значения
s1 = pd.Series([1, 2, np.nan, 4, 5, np.nan, 7, 8])
s2 = pd.Series([2, 4, 6, 8, 10, 12, 14, 16])

print("Series 1:")
print(s1)
print()

print("Series 2:")
print(s2)
print()

# По умолчанию требуется как минимум 2 допустимых значения
corr_default = s1.corr(s2)
print(f"Коэффициент корреляции по умолчанию (min_periods=None): {corr_default:.4f}")

# Задайте минимум 6 допустимых значений
corr_6 = s1.corr(s2, min_periods=6)
print(f"min_periods=6 коэффициент корреляции: {corr_6:.4f}")

# Установить минимум 7 допустимых значений (только 6 допустимых значений, возвращает NaN)
corr_7 = s1.corr(s2, min_periods=7)
print(f"min_periods=7 коэффициент корреляции: {corr_7}")

Вывод:

Series 1:
0    1.0
1    2.0
2       NaN
3    4.0
4    5.0
5       NaN
6    7.0
7    8.0
dtype: float64

Series 2:
0     2
1     4
2     6
3     8
4    10
5    12
6    14
7    16
dtype: int64

默认(min_periods=None)相关系数:1.0000
min_periods=6 相关系数:1.0000
min_periods=7 相关系数:nan

Пример 5: Практическое применение - Анализ корреляций экономических показателей

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

Пример

import pandas as pd

# Создать смоделированные макроэкономические данные
gdp_growth = pd.Series([6.5, 7.2, 8.1, 7.8, 6.9, 5.5, 4.8])
unemployment = pd.Series([4.2, 3.8, 3.5, 3.7, 4.0, 4.8, 5.2])
inflation = pd.Series([2.1, 2.5, 3.2, 3.0, 2.4, 1.8, 1.5])
stock_index = pd.Series([3000, 3200, 3500, 3400, 3100, 2800, 2600])

print("Макроэкономические данные:")
print(f"Темп роста ВВП: {gdp_growth.values}")
print(f"Уровень безработицы: {unemployment.values}")
print(f"Уровень инфляции: {inflation.values}")
print(f"Фондовый индекс: {stock_index.values}")
print()

# Анализ корреляции между показателями
print("Корреляционный анализ:")
print(f"Темп роста ВВП против уровня безработицы: {gdp_growth.corr(unemployment):.4f}")
print(f"Темп роста ВВП против фондового индекса: {gdp_growth.corr(stock_index):.4f}")
print(f"Уровень безработицы против фондового индекса: {unemployment.corr(stock_index):.4f}")
print(f"Уровень инфляции против фондового индекса: {inflation.corr(stock_index):.4f}")
print()

print("Вывод:")
print("- Темп роста ВВП отрицательно коррелирует с уровнем безработицы (когда экономика в хорошем состоянии, безработица низкая)")
print("- Темп роста ВВП сильно положительно коррелирует с фондовым индексом (когда экономика хороша, фондовый рынок растёт)")
print("- Уровень безработицы отрицательно коррелирует с фондовым индексом")

Вывод:

宏观经济数据:
GDP 增长率:[6.5 7.2 8.1 7.8 6.9 5.5 4.8]
失业率:[4.2 3.8 3.5 3.7 4.  4.  5.2]
通胀率:[2.1 2.5 3.2 3.  2.4 1.8 1.5]
股指:[3000 3200 3500 3400 3100 2800 2600]

相关性分析:
GDP 增长率 vs 失业率:-0.9036
GDP 增长率 vs 股指:0.9434
失业率 vs 股指:-0.9712
通胀率 vs 股指:-0.9712

Пояснение к коду:

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

Примечания

  • Коэффициент корреляции может измерять только линейные связи и может быть неточным для нелинейных связей.
  • Коэффициент корреляции, близкий к 0, не означает отсутствие связи; может существовать нелинейная связь.
  • Корреляция не означает причинно-следственную связь; её следует оценивать в сочетании с бизнес-логикой.
  • Коэффициент корреляции Спирмена подходит для ранжированных данных или нелинейных монотонных связей.
  • Коэффициент корреляции Кендалла более устойчив к шуму в данных, но медленнее вычисляется.

Итог

Series.corr()Это мощный инструмент для анализа связи между двумя переменными. Его основные возможности включают:

  • Поддерживает три метода расчёта коэффициента корреляции: Пирсона, Спирмена и Кендалла.
  • Коэффициент корреляции Пирсона подходит для измерения линейных связей.
  • Коэффициенты корреляции Спирмена и Кендалла подходят для измерения монотонных связей.
  • Вы можете контролировать минимальное количество валидных наблюдений.

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

Pandas 常用函数Pandas: общие функции

Другие расширения