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

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

http://www.xdnf.cn/news/3841.html

相关文章:

  • LynxHub开源程序是您的一体化 AI 平台
  • **Java面试:技术大比拼**
  • 初试C++报错并解决记录
  • 【win11 】win11 键盘测试
  • K230的摄像头使用通道
  • SAM2-Unet
  • 【Java学习笔记】构造器
  • IPv6地址分类
  • uniswap v4 hooks标志位
  • 重排和重绘
  • 广东省考备考(第一天5.4)—判断(对称)
  • 组合模式深度解析:构建灵活树形结构的终极指南
  • Spring AI 实战:第四章、Spring AI多模态之看图说话
  • 四、shell脚本--流程控制语句:指挥脚本“走哪条路”
  • C++ 建造者模式详解
  • 第13章:陈默再访海奥华
  • QT下根据深度信息计算物体尺寸并UI显示的简单方案
  • 【翻译、转载】MCP 核心架构
  • Docker 容器化部署
  • 信息系统监理师第二版教材模拟题第三组(含解析)
  • CSS定位详解
  • 【Linux系统】条件变量
  • Cona编译问题
  • Web网页布局
  • 赋予网页健壮的灵魂 —— TypeScript(下)
  • Circular Plot系列(五): circle plot展示单细胞互作
  • 电动调节V型球阀的作用:专为颗粒状含碱浆液介质打造的高效解决方案-耀圣
  • 第 14 届蓝桥杯 C++ 青少组省赛中 / 高级组真题解析
  • 开源项目:optimum-quanto库介绍
  • 全面掌握 Jetpack Compose 的 State 体系:核心用法与最佳实践