当前位置: 首页 > news >正文

python:如何计算皮尔森相关系数

在 Python 中,可以使用 ‌NumPy‌、‌SciPy‌ 或 ‌Pandas‌ 库快速计算皮尔森相关系数(Pearson correlation coefficient)。
以下是具体方法:

方法 1:使用 NumPy

# -*- coding: utf-8 -*-
""" numpy 计算皮尔森相关系数 """
import numpy as np# 示例数据
x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
y = np.array([2, 4, 6, 8, 10, 12, 14, 15, 16])# 计算皮尔森相关系数
r = np.corrcoef(x, y)[0, 1]
print(f"Pearson r (NumPy): {r:.3f}")
说明:
  • np.corrcoef(x, y) 返回一个 ‌2x2 矩阵‌,其中:
    • [0, 0] 是 x 与 x 的相关系数(恒为 1),
    • [1, 1] 是 y 与 y 的相关系数(恒为 1),
    • [0, 1] 和 [1, 0] 是 x 与 y 的相关系数。

运行  python test_pearson_1.py
Pearson r (NumPy): 0.9950

方法 2:使用 SciPy

# -*- coding: utf-8 -*-
""" scipy 计算皮尔森相关系数 """
import numpy as np
from scipy.stats import pearsonr# 示例数据
x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
y = np.array([2, 4, 6, 8, 10, 12, 14, 15, 16])# 计算皮尔森相关系数及 p 值
r, p_value = pearsonr(x, y)
print(f"Pearson r (SciPy): {r:.4f}, p-value: {p_value:.4f}")
说明:
  • pearsonr(x, y) 返回两个值:
    • r: 相关系数,
    • p_value: 显著性检验的 p 值(用于判断相关性是否显著)。

 运行  python test_pearson_2.py
Pearson r (SciPy): 0.9950, p-value: 0.0000

方法 3:使用 Pandas(适用于 DataFrame 数据)

# -*- coding: utf-8 -*-
""" pandas 计算皮尔森相关系数 """
import numpy as np
import pandas as pd# 示例数据
x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
y = np.array([2, 4, 6, 8, 10, 12, 14, 15, 16])# 创建 DataFrame
data = pd.DataFrame({"X": x, "Y": y})# 计算相关系数矩阵
corr_matrix = data.corr()
print("相关系数矩阵:\n", corr_matrix)
D:\python> python test_pearson_3.py
相关系数矩阵:X         Y
X  1.000000  0.995029
Y  0.995029  1.000000
说明:
  • data.corr() 默认计算所有数值列之间的皮尔森相关系数矩阵。
  • 若只需两列的相关系数,可直接提取:
    r = data["X"].corr(data["Y"])
     

方法 4:手动计算(理解原理)

# -*- coding: utf-8 -*-
""" numpy 计算皮尔森相关系数 """
import numpy as np# 示例数据
x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
y = np.array([2, 4, 6, 8, 10, 12, 14, 15, 16])# 手动计算(验证公式)
mean_x = np.mean(x)
mean_y = np.mean(y)covariance = np.sum((x - mean_x) * (y - mean_y))
std_x = np.sqrt(np.sum((x - mean_x)**2))
std_y = np.sqrt(np.sum((y - mean_y)**2))r_manual = covariance / (std_x * std_y)
print(f"Manual Pearson r: {r_manual:.4f}")

注意事项

  1. 数据要求‌:

    • 数据应为连续变量,且近似正态分布。
    • 需要线性关系(非线性关系可能被低估)。
    • 数据长度需一致,无 NaN 值。
  2. 结果解释‌:

    • r = 1: 完全正相关,
    • r = -1: 完全负相关,
    • r = 0: 无线性相关。
  3. 显著性检验‌:

    • 使用 SciPy 的 pearsonr 可同时获得 p 值,通常:
      • p < 0.05 表示相关性显著,
      • p > 0.05 表示相关性不显著。

 ‌处理缺失值(Pandas 示例)

# -*- coding: utf-8 -*-
""" 处理缺失值,计算皮尔森相关系数 """
import numpy as np
import pandas as pd# 含缺失值的数据
data = pd.DataFrame({"X": [1, 2, None, 4,5,6], "Y": [2, None, 6, 8,10,11]})# 删除缺失值后计算相关系数
r = data["X"].corr(data["Y"], method="pearson", min_periods=1)
print(r)

运行 python test_pearson_5.py
0.9952267030562387

相关文章:

  • 商场防损部绩效考核制度与管理方法
  • Spring MVC常见注解详解
  • JAVA组织/岗位拉取多段时间属性到一张表上时,时间段分隔问题
  • C语言 指针(5)
  • 不定长滑动窗口(求最短/最小)
  • 【quantity】11 体积单位模块(volume.rs)
  • Kubernetes(k8s)学习笔记(五)--部署Ingress实现域名访问和负载均衡
  • C++23 std::tuple与其他元组式对象的兼容 (P2165R4)
  • 每天五分钟深度学习框架PyTorch:基于Dataset封装自定义数据集
  • 用哈希表封装出unordered_set/_map
  • MySQL基础关键_007_DQL 练习
  • MOS管极间电容参数学习
  • 华中科技大学系统结构慕课部分答案
  • 250504_VsCode使用
  • Mybatis执行流程知多少
  • WEB 前端学 JAVA(二)Java 的发展与技术图谱简介
  • Linux网络编程:套接字
  • Spring AI支持的聊天模型全方位比较与分析
  • 利用n8n、DeepSeek、AI Agent、子工作流生成统计图
  • PyTorch_张量形状操作
  • 各地各部门贯彻落实习近平总书记重要指示精神坚决防范遏制重特大事故发生
  • 朝中社:美在朝鲜半岛增兵将进一步增加其本土安全不确定性
  • 新华每日电讯头版聚焦上海:科创高地向未来
  • 五一假期多地政府食堂对外开放:部分机关食堂饭菜“秒没”
  • 空间方法:一周城市生活
  • 澎湃读报丨央媒头版头条集中刊发:大国应有的样子