Функция Pandas Series.corr()
Часто используемые функции 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: Базовое использование — коэффициент корреляции Пирсона
Коэффициент корреляции Пирсона — наиболее часто используемый коэффициент корреляции, измеряющий линейную связь между двумя переменными.
Пример
# Создаём два 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: Примеры отрицательной корреляции и отсутствия корреляции
Показывает различные типы корреляции.
Пример
# Положительно коррелированные данные: возраст и доход
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: Использование различных методов коэффициента корреляции
Демонстрирует использование коэффициентов корреляции Спирмена и Кендалла.
Пример
# Создание данных с нелинейной зависимостью
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 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: Практическое применение - Анализ корреляций экономических показателей
Демонстрирует применение коэффициентов корреляции в анализе реальных данных.
Пример
# Создать смоделированные макроэкономические данные
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()Это мощный инструмент для анализа связи между двумя переменными. Его основные возможности включают:
- Поддерживает три метода расчёта коэффициента корреляции: Пирсона, Спирмена и Кендалла.
- Коэффициент корреляции Пирсона подходит для измерения линейных связей.
- Коэффициенты корреляции Спирмена и Кендалла подходят для измерения монотонных связей.
- Вы можете контролировать минимальное количество валидных наблюдений.
В практических приложениях коэффициенты корреляции часто используются для отбора признаков, исследования данных и проверки гипотез. Однако обратите внимание, что корреляционный анализ может выявлять только статистические связи и не позволяет напрямую делать выводы о причинно-следственных связях.
Другие расширения