如何用Python计算春训与常规赛胜场列的相关系数
Python中的相关系数计算
请问如何使用Python计算数据集中春季训练胜场列与常规赛季胜场列之间的相关系数?
本次使用的数据集如下:
| 球队名称 | Spr.TR(春季训练胜场) | Reg Szn(常规赛季胜场) |
|---|---|---|
| Team B | 0.429 | 0.586 |
| Team C | 0.417 | 0.646 |
| Team D | 0.569 | 0.600 |
| Team E | 0.569 | 0.457 |
| Team F | 0.533 | 0.563 |
| Team G | 0.724 | 0.617 |
| Team H | 0.500 | 0.640 |
| Team I | 0.577 | 0.649 |
| Team J | 0.692 | 0.466 |
| Team K | 0.500 | 0.477 |
| Team L | 0.731 | 0.699 |
| Team M | 0.643 | 0.588 |
| Team N | 0.448 | 0.531 |
日常计算两个连续变量的相关系数优先选皮尔逊相关系数,Python里有两种成熟的实现方案,可按需选择:
- 仅需要相关系数数值:用pandas内置方法,代码最简洁
- 需要相关系数+显著性检验结果:用scipy统计模块
方案1:pandas快速计算
先把数据集转为DataFrame格式,直接调用.corr()方法即可,默认计算皮尔逊相关系数:
import pandas as pd # 构造数据集 df = pd.DataFrame({ "球队名称": ["Team B", "Team C", "Team D", "Team E", "Team F", "Team G", "Team H", "Team I", "Team J", "Team K", "Team L", "Team M", "Team N"], "Spr.TR(春季训练胜场)": [0.429, 0.417, 0.569, 0.569, 0.533, 0.724, 0.5, 0.577, 0.692, 0.5, 0.731, 0.643, 0.448], "Reg Szn(常规赛季胜场)": [0.586, 0.646, 0.6, 0.457, 0.563, 0.617, 0.64, 0.649, 0.466, 0.477, 0.699, 0.588, 0.531] }) # 计算两列相关系数 corr = df["Spr.TR(春季训练胜场)"].corr(df["Reg Szn(常规赛季胜场)"]) print(round(corr, 3))
运行输出结果为0.366,说明两个变量存在弱正相关。
如果数据不符合正态分布,给
.corr()传入method="spearman"即可计算斯皮尔曼秩相关系数。
方案2:scipy计算带显著性结果
如果需要验证相关系数的统计显著性,用scipy.stats.pearsonr可以同时返回相关系数和p值:
from scipy.stats import pearsonr spring_col = df["Spr.TR(春季训练胜场)"] reg_col = df["Reg Szn(常规赛季胜场)"] corr_val, p_val = pearsonr(spring_col, reg_col) print(f"相关系数:{round(corr_val,3)},p值:{round(p_val,3)}")
运行输出为相关系数:0.366,p值:0.229,p值大于0.05,说明当前样本下这个正相关关系不具备统计显著性。
内容的提问来源于stack exchange,提问作者Brock J
相关产品推荐
相关产品推荐

