python 相关性分析_数据分析---用Python进行相关性分析(兼谈假设检验)

一、相关关系和相关系数

世上除了因果关系,还有相关关系。

有一个叫“相关系数”的指标来量化两个事物之间的相关程度。

python 相关性分析_数据分析---用Python进行相关性分析(兼谈假设检验)_第1张图片

其中相关系数用“r”表示,取值范围介于-1和1之间。

当(X,Y)正相关的时候,r=1;当(X,Y)负相关的时候,r=-1;当(X,Y)不相关的时候,r=0。

当然一般的线性相关有更严格的划分:

  • r|<0.3 不存在线性关系
  • 0.3<|r|<0.5 低度线性关系
  • 0.5<|r|<0.8 显著线性关系
  • |r|>0.8 高度线性关系

二、相关性和假设检验

有指标来衡量两者之间的相关程度,不代表能够去衡量相关程度。

因引入两个概念:

python 相关性分析_数据分析---用Python进行相关性分析(兼谈假设检验)_第2张图片

现在,针对我们分析的两组数据(X,Y)(两组数据被称为抽样),我们的疑问来了:

抽样的(X,Y)是否可以正确反应总体的情况呢?

这里涉及:假设检验。

具体操作如下:

零假设H0:总体的数据不呈相关性(相关系数为0),并先认为H0正确
备选假设H1:总体的数据呈现相关性(相关系数不为0)
引入一个指标:显著性水平p,一般将其设定为0.05或者0.01
当p<0.05,拒绝原假设,备选假设正确;
当p>0.05,原假设正确。
所以,在进行相关性分析实验的之前,我们需要分两步走:
1.进行假设检验,获得p值<0.05,得到结论:总体的数据呈现相关性
2.进行相关性分析,得到r值
如果p值>0.05(或者0.01),则实验失败,抽样数据无法反应整体情况。不管r值表现如何都是偶然事件。
只有在p值<0.05(或者0.01)的前提下,才可以参考r值,进而判断相关程度。

三、兼谈假设检

假设检验的3种类型

python 相关性分析_数据分析---用Python进行相关性分析(兼谈假设检验)_第3张图片

假设检验的套路:

python 相关性分析_数据分析---用Python进行相关性分析(兼谈假设检验)_第4张图片

四、利用Python进行相关性分析

判定两者相关的方式有两种:

  1. 图形观测法:通过绘制散点图判断两者是否存在一定相关关系
  2. 科学计算法:通过计算相关性系数r

我们用第二种

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns 
from scipy.stats import kstest
from scipy import stats
#读入数据
data=pd.read_csv('http://jse.amstat.org/datasets/normtemp.dat.txt',header=None,sep='s+',names=['Temperature','sex','heart'])

print(data.describe())

Temperature_data = data['Temperature']
u = data['Temperature'].mean()
std = data['Temperature'].std()

r,p = stats.pearsonr(data.Temperature, data.heart)
print('相关系数r为 = %6.3f,p值为 = %6.3f'%(r,p))

相关系数r为 =  0.254,p值为 =  0.004

得到:相关系数r=0.021,p值为=0.004

结论:总体的数据呈相关性,且相关系数为:0.021,但不是线性相关。

五、拓展

对于多维数据,需要计算两两之间的相关性。

比如是思维数据,列名分别为:A、B、C、D

就需要计算:

A:B、C、D

B:A、C、D

C:A、B、D

D:A、B、C

代码如下:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import scipy.stats as stats

# 导入数据
data = pd.DataFrame(数据地址)
#或者
data=pd.read_csv(数据地址)
# 相关性计算
print(data.corr())
# 绘图
fig = pd.plotting.scatter_matrix(data,figsize=(6,6),c ='blue',marker = 'o',diagonal='',alpha = 0.8,range_padding=0.2)  # diagonal只能为'hist'/'kde'
plt.show()

假设检验

Python真香:用Python作假设检验​zhuanlan.zhihu.com

你可能感兴趣的:(python,相关性分析)