相关性分析:
对两个或多个具备相关性的元素变量进行分析,从而衡量两个变量之间的密切相关程度,相关性的元素之间要存在一定的联系或概率才可以进行相关性分析。
相关性分析的几个方法:
- 图示初判(散点图,基本呈一条直线分布)
- Pearson相关系数(皮尔逊相关系数)
- Sperman秩相关系数(斯皮尔曼相关系数)
相关系数:
相关系数是变量间关联程度的最基本的测度之一。
基本特征:
方向:
-
正相关,两个变量变化方向相同。
-
负相关,两个变量变化方向相反。
量级: -
低度相关:0<=|r|<0.3
-
中度相关:0.3<=|r|<0.8
-
高度相关:0.8<=|r|<=1
下面是代码演示:
#构建样本数据
data1=pd.Series(np.random.rand(100)*100).sort_values()#标准正态分布100个样本
data2=pd.Series(np.random.rand(100)*50).sort_values()
data=pd.DataFrame({'values1':data1.values,'values2':data2.values})
print(data.head())
#计算皮尔逊相关系数
#均值
data1MEAN=np.mean(data1)
data2MEAN=np.mean(data2)
#标准差
data1SD=np.std(data1)
data2SD=np.std(data2)
#Z分数
Zdata1=(data['values1']-data1MEAN)/data1SD
Zdata2=(data['values2']-data2MEAN)/data2SD
#相关系数
r=np.sum(Zdata1*Zdata2)/(len(data1))
r
values1 values2
0 0.638332 2.292015
1 1.709476 2.300971
2 1.938157 4.131932
3 3.200516 4.922981
4 3.212151 5.056043
Out[91]: 0.9941237467740188
也可以直接调用pandas的内置函数计算:
data.corr()
Out[92]:
values1 values2
values1 1.000000 0.994124
values2 0.994124 1.000000
或者Numpy的内置函数:
np.corrcoef(data['values1'], data['values2'])
Out[4]:
array([[1. , 0.98719845],
[0.98719845, 1. ]])