Pandas计算相关性系数corr()方法详解与参数对比
本文详细介绍Pandas中计算相关性系数的corr()方法。涵盖相关性的定义、正负相关判断及系数范围[-1,1]。重点解析method参数的三种选项:pearson(线性)、kendall(分类/无序)和spearman(非线性),并通过一元二次方程示例对比各系数在非线性数据下的表现差异,强调相关性与因果性的区别。
在Pandas中,可以使用corr()方法来计算数据列之间的相关性系数。
相关性是指数据变量之间存在关联,彼此相互影响。
例如,若变量A与B存在相关性,则A的变化会对B产生一定影响,导致B随之发生相应变化。
- 当A与B完全相等,或B可以通过A经过确定的数学计算得出时,两者表现为完全相关。
- 若B由A和C共同计算得出,且A能解释B的大部分变化,则判定A与B为强相关。
- 若B由A和C共同计算得出,但A仅能解释B的一小部分变化,则判定A与B为弱相关。
- 若A与B之间没有任何关联,则判定为不相关。
当B与A存在相关性时,需进一步判断相关方向:
- 若A增大导致B减小,则称为负相关。
- 若A增大导致B也增大,则称为正相关。
相关性系数是用于量化相关性强弱的数值指标。
该系数的取值范围在[-1, 1]之间。绝对值越接近0,表示相关性越弱;绝对值越接近1,表示相关性越强。
具体而言,系数小于0表示负相关,大于0表示正相关。
为了演示计算过程,首先构造如下示例数据:
import pandas as pd
data = pd.DataFrame(
data={
'age': [2,7,10,16,20],
'height': [70,90,143,166,178],
'score': [98,37,103,76,53]
}
)接下来使用corr()方法计算相关性系数。
# 计算相关性系数的列 必须都是数值型的数据!
corr = data.loc[:, ["age","height"]].corr() # 会计算两两列之间的相关性系数
print("corr\n", corr)
"""
corr
age height
age 1.00000 0.96043
height 0.96043 1.00000
"""需要注意的是,变量与自身的相关性系数恒为1。
若要计算多列之间的两两相关性系数,操作如下:
corr = data.loc[:, ["age","height","score"]].corr()
print("corr\n", corr)
"""
corr
age height score
age 1.000000 0.960430 -0.340053
height 0.960430 1.000000 -0.096782
score -0.340053 -0.096782 1.000000
"""Pandas中DataFrame.corr()方法支持以下参数配置。
DataFrame.corr(method='pearson', min_periods=1)各参数的具体说明如下:
method:该参数可选值为{‘pearson’, ‘kendall’, ‘spearman’},用于指定计算方法。pearson:Pearson相关系数用于衡量两个数据集是否呈线性关系,即针对线性数据计算相关系数;对于非线性数据,该方法的计算结果可能存在误差。kendall:Kendall系数用于反映分类变量(无序序列)之间的相关性,适用于非正态分布的数据。spearman:Spearman系数适用于非线性且非正态分布的数据相关性计算。min_periods:指定计算相关系数时所需的最少样本数据量。- 返回值类型为DataFrame表格,包含各变量类型之间的相关系数矩阵。
为了区分不同参数之间的区别,我们进行如下实验验证:
from pandas import DataFrame
import pandas as pd
x=[a for a in range(100)]
#构造一元二次方程,非线性关系
def y_x(x):
return 2*x**2+4
y=[y_x(i) for i in x]
data=DataFrame({'x':x,'y':y})
#查看下data的数据结构
data.head()
Out[34]:
x y
0 0 4
1 1 6
2 2 12
3 3 22
4 4 36
data.corr()
Out[35]:
x y
x 1.000000 0.967736
y 0.967736 1.000000
data.corr(method='spearman')
Out[36]:
x y
x 1.0 1.0
y 1.0 1.0
data.corr(method='kendall')
Out[37]:
x y
x 1.0 1.0
y 1.0 1.0由于y值由函数构造得出,x与y的理论相关系数应为1。但从实验结果可知,Pearson系数针对非线性数据存在一定的误差,而Spearman和Kendall系数在此场景下表现更为准确。
需要特别说明的是,数据之间的相关关系并不等同于因果关系。即使相关系数为1,仅说明二者具备完全相关性,并不能推断y是x的结果或x导致y。
以上为个人经验分享,希望能为大家提供参考,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













