DataFrame的.corr()与数组相关性分析:哪种方案更优?
关于相关性分析的三个问题解答
1. DataFrame.corr() vs 数组相关性分析:哪个更合适?
这取决于你的数据形态和需求:
- 如果你处理的是带列名的结构化数据集(比如CSV导入的表格数据),优先用
DataFrame.corr():它直接输出带列名的相关性矩阵,可读性极强,不用手动映射数组索引和特征名称,还能通过method参数切换皮尔逊、斯皮尔曼等相关性计算方法,上手成本低。 - 如果是纯数值矩阵(无特征标签),用numpy的
np.corrcoef()更高效:省去了DataFrame的封装开销,适合处理原始数值数组,比如深度学习里的特征张量预处理阶段。
2. 能否对数组执行相关性分析?
当然可以,最常用的是numpy的np.corrcoef()函数。注意它的rowvar参数:
- 默认
rowvar=True:表示每行代表一个变量,每列是样本 - 如果你的数组是每列一个特征(和DataFrame结构一致),要设置
rowvar=False
示例代码:
import numpy as np # 生成100个样本、5个特征的数组 arr = np.random.randn(100, 5) # 计算特征间的相关性矩阵 corr_matrix = np.corrcoef(arr, rowvar=False)
3. StandardScaler归一化后,变量相关性会变化吗?
不会。StandardScaler做的是线性变换:x' = (x - 均值) / 标准差,而皮尔逊相关性衡量的是变量间的线性关联程度,线性变换不会改变这种线性关系的强度和方向。
验证代码:
import pandas as pd import numpy as np from sklearn.preprocessing import StandardScaler # 创建测试数据集 df = pd.DataFrame(np.random.randn(100, 3), columns=["feat1", "feat2", "feat3"]) # 原始相关性 orig_corr = df.corr() # 归一化处理 scaler = StandardScaler() scaled_data = scaler.fit_transform(df) # 归一化后的相关性 scaled_corr = pd.DataFrame(scaled_data).corr() # 对比结果(忽略浮点误差) print(np.allclose(orig_corr, scaled_corr)) # 输出True
内容的提问来源于stack exchange,提问作者Usama Waseem
相关产品推荐
相关产品推荐

