python 相关性分析_数据分析---用Python进行相关性分析(兼谈假设检验)
一、相關(guān)關(guān)系和相關(guān)系數(shù)
世上除了因果關(guān)系,還有相關(guān)關(guān)系。
有一個(gè)叫“相關(guān)系數(shù)”的指標(biāo)來(lái)量化兩個(gè)事物之間的相關(guān)程度。
其中相關(guān)系數(shù)用“r”表示,取值范圍介于-1和1之間。
當(dāng)(X,Y)正相關(guān)的時(shí)候,r=1;當(dāng)(X,Y)負(fù)相關(guān)的時(shí)候,r=-1;當(dāng)(X,Y)不相關(guān)的時(shí)候,r=0。
當(dāng)然一般的線性相關(guān)有更嚴(yán)格的劃分:
- r|<0.3 不存在線性關(guān)系
- 0.3<|r|<0.5 低度線性關(guān)系
- 0.5<|r|<0.8 顯著線性關(guān)系
- |r|>0.8 高度線性關(guān)系
二、相關(guān)性和假設(shè)檢驗(yàn)
有指標(biāo)來(lái)衡量?jī)烧咧g的相關(guān)程度,不代表能夠去衡量相關(guān)程度。
因引入兩個(gè)概念:
現(xiàn)在,針對(duì)我們分析的兩組數(shù)據(jù)(X,Y)(兩組數(shù)據(jù)被稱為抽樣),我們的疑問(wèn)來(lái)了:
抽樣的(X,Y)是否可以正確反應(yīng)總體的情況呢?
這里涉及:假設(shè)檢驗(yàn)。
具體操作如下:
零假設(shè)H0:總體的數(shù)據(jù)不呈相關(guān)性(相關(guān)系數(shù)為0),并先認(rèn)為H0正確 備選假設(shè)H1:總體的數(shù)據(jù)呈現(xiàn)相關(guān)性(相關(guān)系數(shù)不為0) 引入一個(gè)指標(biāo):顯著性水平p,一般將其設(shè)定為0.05或者0.01 當(dāng)p<0.05,拒絕原假設(shè),備選假設(shè)正確; 當(dāng)p>0.05,原假設(shè)正確。 所以,在進(jìn)行相關(guān)性分析實(shí)驗(yàn)的之前,我們需要分兩步走: 1.進(jìn)行假設(shè)檢驗(yàn),獲得p值<0.05,得到結(jié)論:總體的數(shù)據(jù)呈現(xiàn)相關(guān)性 2.進(jìn)行相關(guān)性分析,得到r值 如果p值>0.05(或者0.01),則實(shí)驗(yàn)失敗,抽樣數(shù)據(jù)無(wú)法反應(yīng)整體情況。不管r值表現(xiàn)如何都是偶然事件。 只有在p值<0.05(或者0.01)的前提下,才可以參考r值,進(jìn)而判斷相關(guān)程度。三、兼談假設(shè)檢
假設(shè)檢驗(yàn)的3種類型
假設(shè)檢驗(yàn)的套路:
四、利用Python進(jìn)行相關(guān)性分析
判定兩者相關(guān)的方式有兩種:
我們用第二種
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 #讀入數(shù)據(jù) 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('相關(guān)系數(shù)r為 = %6.3f,p值為 = %6.3f'%(r,p))相關(guān)系數(shù)r為 = 0.254,p值為 = 0.004得到:相關(guān)系數(shù)r=0.021,p值為=0.004
結(jié)論:總體的數(shù)據(jù)呈相關(guān)性,且相關(guān)系數(shù)為:0.021,但不是線性相關(guān)。
五、拓展
對(duì)于多維數(shù)據(jù),需要計(jì)算兩兩之間的相關(guān)性。
比如是思維數(shù)據(jù),列名分別為:A、B、C、D
就需要計(jì)算:
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# 導(dǎo)入數(shù)據(jù) data = pd.DataFrame(數(shù)據(jù)地址) #或者 data=pd.read_csv(數(shù)據(jù)地址) # 相關(guān)性計(jì)算 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()假設(shè)檢驗(yàn)
Python真香:用Python作假設(shè)檢驗(yàn)?zhuanlan.zhihu.com總結(jié)
以上是生活随笔為你收集整理的python 相关性分析_数据分析---用Python进行相关性分析(兼谈假设检验)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 什么是方向图乘积定理_初中数学竞赛试题—
- 下一篇: c++ substr截取中间部分字符串_