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

【数学建模学习笔记】相关性分析

用 Scipy 做相关性分析:零基础小白入门指南

如果你是刚接触数据分析的小白,不用怕!这篇总结会用最通俗的语言,带你搞懂 “相关性分析” 是什么、用 Scipy 怎么做,以及不同方法该怎么选。

一、先搞懂:什么是 “相关性分析”?

简单说,相关性分析就是看两个数据之间有没有 “关联”。比如:

  • 身高和体重:是不是身高越高,体重通常也越重?
  • 学习时间和考试分数:是不是学得越久,分数可能越高?

相关性有 “强度” 和 “方向”:

  • 强度:关联有多紧密?比如身高和体重的关联很强,而 “每天喝奶茶量” 和 “头发长度” 的关联就很弱;
  • 方向:是 “同增同减”(正相关,比如身高↑体重↑),还是 “一增一减”(负相关,比如 “运动时间↑体重↓”)。

我们接下来要学的 3 种方法,就是用数字(“相关系数”)来量化这种 “关联”—— 系数越接近 1 或 - 1,关联越强;越接近 0,关联越弱。

二、3 种常用相关性方法:怎么选、怎么用?

我们用 “身高 - 体重” 数据来举例(就是文中导入的 Excel 数据),先记住一个核心结论:不同方法对应不同的数据类型,选对方法才有用!

1. 皮尔逊相关系数:看 “线性关系”(最常用)

什么时候用?
  • 数据是 “连续型” 的(比如身高:176cm、164cm;体重:73kg、67kg,不是 “男 / 女”“好 / 中 / 差” 这种分类);
  • 两个数据的关系是 “线性的”(画成散点图,点大概沿着一条直线分布,比如身高越高体重越重,且趋势接近直线)。
怎么用 Scipy 计算?

代码很简单,核心就是调用pearsonr函数,输入两个要分析的变量(身高和体重):

# 从Scipy里导入皮尔逊相关系数的工具
from scipy.stats import pearsonr
# 计算身高和体重的皮尔逊相关系数
pearson_corr, _ = pearsonr(df['Height'], df['Weight'])
# 打印结果
print('皮尔逊相关系数:', pearson_corr)
结果解读:

文中算出的结果是0.886,接近 1,说明 “身高” 和 “体重” 是 “强正相关”—— 身高越高,体重通常也越重。

2. 斯皮尔曼秩相关系数:看 “单调关系”(不怕极端值)

什么时候用?
  • 数据不是严格的 “线性关系”,但有 “单调趋势”(比如 “年龄” 和 “收入”:30 岁前收入随年龄增长而增加,30 岁后增长变慢,但整体还是 “年龄↑收入↑”,这种趋势叫 “单调递增”);
  • 数据里有 “极端值”(比如大部分人体重 60-80kg,但有一个人 200kg,用皮尔逊会受影响,用斯皮尔曼就不怕);
  • 数据是 “排名型” 的(比如 “比赛名次”:1 名、2 名、3 名,不是具体数值)。
怎么用 Scipy 计算?

和皮尔逊类似,调用spearmanr函数就行:

# 从Scipy里导入斯皮尔曼相关系数的工具
from scipy.stats import spearmanr
# 计算身高和体重的斯皮尔曼相关系数
spearman_corr, _ = spearmanr(df['Height'], df['Weight'])
# 打印结果
print('斯皮尔曼秩相关系数:', spearman_corr)
结果解读:

文中算出的结果是0.877,也接近 1,说明 “身高” 和 “体重” 的 “单调正相关” 很强 —— 即使不考虑线性关系,整体趋势还是 “身高越高体重越重”。

3. Kendall Tau-b 系数:看 “分类变量的关联”(适合有序分类)

什么时候用?
  • 数据是 “有序分类变量”(比如 “满意度”:非常满意、满意、一般、不满意、非常不满意;“成绩等级”:A、B、C、D,这类数据有顺序,但不是具体数值);
  • 想知道两个分类变量之间的 “一致程度”(比如 “产品评分” 和 “购买意愿”:评分越高,购买意愿越强,这种一致的趋势)。
怎么用 Scipy 计算?

调用kendalltau函数:

# 从Scipy里导入Kendall Tau-b系数的工具
from scipy.stats import kendalltau
# 计算身高和体重的Kendall Tau-b系数
kendall_corr, _ = kendalltau(df['Height'], df['Weight'])
# 打印结果
print('Kendall Tau-b 系数:', kendall_corr)
结果解读:

文中算出的结果是0.705,还是正的且不低,说明从 “分类趋势” 看,身高和体重也有较强的正相关 —— 但比前两种方法的系数低,因为它更侧重 “分类一致性”,不是直接用数值计算。

三、怎么直观看相关性?用 “热力图”

光看数字可能没感觉,我们可以用 “热力图” 把相关性画出来,红色越浓代表正相关越强,蓝色越浓代表负相关越强。

怎么做热力图?

seaborn库(文中已导入),核心是先算 “相关矩阵”,再画图:

# 1. 计算相关矩阵(这里用皮尔逊,也可以换成spearman或kendall)
corr_matrix = df.corr(method='pearson')
# 2. 画热力图
plt.figure(figsize=(10, 8))  # 设置图的大小
sns.heatmap(corr_matrix, annot=True,  # 在图上显示相关系数的数值cmap='coolwarm',  # 用红-蓝配色vmin=-1, vmax=1  # 颜色范围:-1(最强负相关)到1(最强正相关)
)
plt.show()  # 显示图

热力图能看到什么?

对于 “身高 - 体重” 数据,热力图上会显示一个格子,里面写着 0.886(皮尔逊系数),颜色是深红色 —— 一眼就能看出两者强正相关。

四、小白必记:3 种方法对比表

怕记混?直接看这个表,按 “数据类型” 选方法就行:

方法核心用途适合的数据类型优点
皮尔逊相关系数衡量 “线性关系” 强度连续型数据(如身高、体重、分数)计算简单,适合线性关系场景
斯皮尔曼秩相关系数衡量 “单调关系” 强度有序数据、有极端值的数据不受极端值影响,适用范围广
Kendall Tau-b 系数衡量 “有序分类变量” 的一致程度有序分类数据(如等级、名次)适合分类数据,结果易解释

五、总结:零基础怎么上手?

  1. 明确数据类型:先看你的数据是 “连续型”(如温度)、“有序分类”(如满意度)还是 “有极端值”;
  2. 选对方法:按上面的表格选皮尔逊、斯皮尔曼或 Kendall;
  3. 复制代码改参数:文中的代码可以直接用,只需要把df['Height']df['Weight']换成你的数据列名;
  4. 看结果:系数接近 1 或 - 1 就是强相关,接近 0 就是弱相关;
  5. 画热力图:更直观地展示相关性。
http://www.dtcms.com/a/364971.html

相关文章:

  • Git在idea中的实战使用经验(二)
  • Elasticsearch 数字字段随机取多值查询缓慢-原理分析与优化方案
  • 408考研——单链表代码题常见套路总结
  • [光学原理与应用-375]:ZEMAX - 分析 - 物理光学图
  • Debezium报错处理系列之第130篇:OutOfMemoryError: Java heap space
  • 复杂网络环境不用愁,声网IoT多通道传输实战经验丰富
  • 数据结构---双向链表
  • 明确用户提问的核心
  • 【计算机网络】TCP状态转移
  • AI随笔番外 · 猫猫狐狐的尾巴式技术分享
  • 醋酸铕:点亮现代生活的“隐形之光“
  • Java jar 如何防止被反编译?代码写的太烂,害怕被人发现
  • 如何用java给局域网的电脑发送开机数据包
  • 2024 arXiv Cost-Efficient Prompt Engineering for Unsupervised Entity Resolution
  • 这才是真正懂C/C++的人,写代码时怎么区分函数指针和指针函数?
  • Masonry
  • 少儿编程C++快速教程之——1. 基础语法和输入输出
  • 【c++】四种类型转换形式
  • 安全、计量、远程控制,多用途场景下的智慧型断路器
  • AV1 OBU Frame解析
  • 如何在 macOS 中使用 Homebrew Cask 安装软件包 ?
  • 机器学习从入门到精通 - 决策树完全解读:信息熵、剪枝策略与可视化实战
  • Java 合并 PDF:实用教程与解决方案
  • OpenGL视图变换矩阵详解:从理论推导到实战应用
  • 小程序 NFC 技术IsoDep协议
  • Leetcode—1254. 统计封闭岛屿的数目【中等】
  • 轻轻一个字母差别,就能把首屏时间砍半——为什么90%的人还不知道?
  • 游戏总监级“AI炼金术”!Firefly+NB创造不存在的神级材质
  • 小迪web自用笔记25
  • 【第三方软件项目验收中的安全漏洞(SQL注入/XSS)修复】