python二维散点分布图_深入理解皮尔逊相关系数amp;python代码
1.常見理解誤區
(1)計算出變量A和變量B的皮爾遜相關系數為0,不代表A和B之間沒有相關性,只能說明A和B之間不存在線性相關關系。
例:溫度和冰淇淋銷量之間的散點圖像如下,可以發現大致成二次函數圖像,隨著溫度升高,銷量也會增加,達到峰值后,隨著溫度升高,銷量反而下降。也就是說,銷量和溫度之間是有關系的。
不過,計算溫度和銷量之間的皮爾遜相關系數卻為0。這只能說明溫度和銷量之間沒有線性相關關系,而不能說二者不存在相關關系。
圖片來自于網絡博客(2)皮爾遜相關系數并不穩定,會受到異常點的影響。
例:如果不考慮最右側的異常點,x和y之間的相關系數應該為0,即無論y取何值,x都為固定值8。但是,考慮了異常點后,x和y的相關系數變為0.816。
這也說明,在進行數據分析之前,需要對數據進行清洗,去掉異常點、噪聲數據,使得分析結果更為可靠。
(3)皮爾遜相關系數絕對值越大,二者相關性越強?
答案是不一定。除了相關系數的大小,我們更要關心相關系數的顯著性。
2.皮爾遜相關系數正確使用步驟
第一步:繪制散點圖,是否存在異常點。如果有異常點,刪除異常點。然后再看觀察變量x和變量y之間的關系是否近似為一條直線,如果是,則計算皮爾遜相關系數。相關系數為(0,1]的正數,表明x和y之間呈線性正相關;相關系數為0,表明二者不存在線性相關關系,但不排除存在其他非線性相關關系;相關系數為[-1,0)的負數,表明x和y之間存在線性負相關關系。
如果散點圖并不類似于一條直線,而是其他類型圖像,如二次函數圖像、指數圖像,即使計算出皮爾遜相關系數也沒有意義。
3.python代碼示例
python sklearn庫中datasets模塊中有一個boston房價數據集,可以使用load_boston()函數進行加載。
print(load_boston().DESCR)#查看boston數據集基本信息#加載數據集并進行數據處理 from sklearn.datasets import load_boston import pandas as pd rawdata = load_boston()#加載數據 features = pd.DataFrame(rawdata.data,columns = rawdata.feature_names)#提取特征集 label = pd.DataFrame(rawdata.target,columns = ['target'])#提取標簽列boston = pd.concat([features,label],axis =1)#合并特征集和標簽列 print(boston)#繪制散點矩陣圖,由于boston矩陣共有14個屬性,全部屬性兩兩繪制散點圖過于龐大,因此選擇其中3個屬性進行兩兩組合繪制散點圖 import matplotlib.pyplot as plt import seaborn as sb sb.pairplot(data = boston,vars = ['CRIM','INDUS','target'])#'CRIM','INDUS','target'三個變量之間兩兩組合繪制散點圖 plt.savefig('C:UsersCaraDesktopscatter fig.png')#繪圖結果存到本地繪圖如下:
3個變量,兩兩組合繪制出6幅散點圖,其中有3幅會是重復的,我們只需要看左下角3幅,或右上角3幅即可。
藍色柱形圖是變量的數值頻率分布圖。
從散點圖可以看出,CRIM和INDUS并沒有線性相關性。
CRIM和target(房價)大致成負相關性,圖像接近指數函數(非線性函數),因此,計算出的相關系數可能并不可靠。
INDUS和target之間大致成負線性相關,同時右側存在幾個異常點,最終計算出的相關系數會受到異常點的影響。
直觀的認識需要精確的相關系數作為檢驗:
注釋:corr()方法默認的相關系數為皮爾遜,也可以設置method 參數為其他類型的相關系數,如 'kendall', 'spearman'。
由于寬度限制,中間列顯示不完全,可以設置參數:
#更改顯示設置,打印全部列 pd.set_option('display.max_columns',None)#若單行不夠顯示全部列,將會換行顯示 print(boston.corr())查看單個變量與其他變量間的皮爾遜相關系數:
由上可見,犯罪率確實與房價呈負相關。不過,沒有顯著性指標作為支持。
如果需要同時返回皮爾遜相關系數和顯著性指標,則可以使用scipy庫中stats模塊中的stats模塊下的pearsonr 函數。stats是一系列統計方法的集合,如峰度、t檢驗、相關性、F檢驗……
from scipy.stats import stats help(stats.pearsonr)#使用scipy中的函數計算相關系數及顯著性 from scipy.stats import stats r,p_value = stats.pearsonr(boston['CRIM'],boston['target'])#計算CRIM和target之間的相關系數和對應的顯著性 print('相關系數為{:.3f},p值為{:.5f}'.format(r,p_value))#相關系數保留3位小數,p值保留5位小數p值遠小于0.01,表明CRIM和target 在1%的水平上存在顯著的線性相關,對應的相關系數為-0.388。
不過,使用這種方法缺點很明顯,不能一次性計算所有變量兩兩組合的相關性。
最后,繪制熱力圖,直觀展示變量間的線性相關性:
#繪制相關系數的熱力圖 import seaborn as sb r_pearson = boston.corr() sb.heatmap(data = r_pearson)換個色系:
sb.heatmap(data = r_pearson,cmap="YlGnBu")全部代碼如下:
from sklearn.datasets import load_boston import pandas as pd #查看Boston數據集的基本信息 print(load_boston().DESCR)rawdata = load_boston()#加載數據集 features = pd.DataFrame(rawdata.data,columns = rawdata.feature_names)#提取特征列 label = pd.DataFrame(rawdata.target,columns = ['target'])#提取房價列(target列) boston = pd.concat([features,label],axis =1)#組合特征列和房價列#繪制散點圖 import matplotlib.pyplot as plt import seaborn as sb sb.pairplot(data = boston,vars = ['CRIM','INDUS','target']) plt.savefig('C:UsersCaraDesktopscatter fig.png')#計算全部變量的相關性矩陣 print(boston.corr())#查看目標變量‘房價’與其他變量間的相關性 print(boston.corr()['target'])#查看犯罪率CRIM與其他變量之間的關系 print(boston.corr()['CRIM'])#更改顯示設置,打印全部列 pd.set_option('display.max_columns',None) print(boston.corr())#使用scipy中的函數計算CRIM和target的相關系數及顯著性 from scipy.stats import stats r,p_value = stats.pearsonr(boston['CRIM'],boston['target']) print('相關系數為{:.3f},p值為{:.5f}'.format(r,p_value))#繪制相關系數的熱力圖 import seaborn as sb r_pearson = boston.corr() sb.heatmap(data = r_pearson,cmap="YlGnBu")#cmap設置色系參考:
【強烈推薦】清風:數學建模算法、編程和寫作培訓的視頻課程以及Matlab等軟件教學_嗶哩嗶哩 (゜-゜)つロ 干杯~-bilibili?www.bilibili.compython畫熱力圖(相關系數矩陣圖)_henbile的博客-CSDN博客_python 相關性熱力圖?blog.csdn.net總結
以上是生活随笔為你收集整理的python二维散点分布图_深入理解皮尔逊相关系数amp;python代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: db2有主键时默认hash分区_MySQ
- 下一篇: 吴志强院士:CIM与城市未来