相关系数矩阵是一种用于衡量两个变量之间关系的统计技术。我们可以利用 Pandas 轻松生成相关系数矩阵,从而深入理解特征之间的关系——无论它们是同向变动、反向变动,还是没有明显的趋势。让我们来探索使用 Pandas、NumPy 和 SciPy 创建相关系数矩阵的几种有效方法。
目录
使用 DataFrame.corr()
该方法计算皮尔逊相关系数,用于衡量列之间的线性关系。其取值范围从 -1(完全负相关)到 1(完全正相关),0 表示没有线性关系。对角线上的值始终为 1,因为每一列与自身都是完全相关的。
Python
CODEBLOCK_641973a5
Output
A B C
A 1.0 -1.0 0.0
B -1.0 1.0 0.0
C 0.0 0.0 1.0
解释: 列 A 和 B 呈现出完全负相关(-1),因为随着 A 的增加,B 会减少。列 C 与其他列没有显示出线性相关性,其值接近于 0。
使用 DataFrame.corr(method=‘spearman‘) 或 ‘kendall‘
这些方法计算的是基于秩的相关系数,而不是直接使用原始值。斯皮尔曼衡量的是单调关系的拟合程度(对于非线性但趋势一致的数据非常有用),而肯德尔则通过不同的方式比较数据的排序。这两种方法都适用于非线性或有序数据。
Python
CODEBLOCK_ef9c53a3
Output
!Output使用 DataFrame.corr(method=‘spearman‘) 或 ‘kendall‘
解释: X 和 Y 具有完全负相关(-1)。Z 与 X 呈现中度正相关,与 Y 呈现中度负相关,这反映了在斯皮尔曼和肯德尔矩阵中都存在一致但非完美的单调关系。
使用 numpy.corrcoef()
该方法直接基于 NumPy 数组计算皮尔逊相关系数矩阵。它的速度很快,但不处理标签,为了清晰起见,我们可以将结果转换回 DataFrame。
Python
CODEBLOCK_5c5ed0dc
Output
!Output使用 numpy.corrcoef()
解释: M 和 N 呈现弱负相关,M 和 O 显示中度正相关,而 N 和 O 具有强负相关。该矩阵反映了这些不同的线性关系。
使用 scipy.stats.pearsonr
该方法为每对列单独计算皮尔逊相关系数,并返回系数和用于显著性的 p 值。它提供了详细的统计信息,但需要手动遍历列对。
Python
CODEBLOCK_eba41642
Output
!Output使用 scipy.stats.pearsonr
解释: A 和 B 具有完全负相关(-1),反映了它们相反的线性趋势。A 和 C 以及 B 和 C 均显示无相关性(0),表明没有线性关系。该矩阵清晰地捕捉到了这些变量之间的关系。
相关文章:
> – dataframe.corr()
> – numpy
> – SciPy