用python進(jìn)行相關(guān)性分析應(yīng)該主要根據(jù)數(shù)據(jù)的內(nèi)容進(jìn)行分析,如果是帶標(biāo)注的數(shù)據(jù)可以通過模型訓(xùn)練的方式來獲取進(jìn)行分析,找出對目標(biāo)結(jié)果有最大影響的因素。如果沒有標(biāo)注的話,可以用python構(gòu)建網(wǎng)絡(luò)知識圖譜手動分析,或者自己構(gòu)建數(shù)據(jù)表格,人為觀察數(shù)據(jù)分布圖找到其中規(guī)律。一般來說相關(guān)性分析,主要依靠人為的觀察,并用數(shù)據(jù)和模型來輔助計算,從而獲得相對準(zhǔn)確的結(jié)果。
創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)與策劃設(shè)計,尼瀘西網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:尼瀘西等地區(qū)。尼瀘西做網(wǎng)站價格咨詢:028-86922220
1. 運算優(yōu)先級
括號、指數(shù)、乘、除、加、減
2
如果你使用了非 ASCII 字符而且碰到了編碼錯誤,記得在最頂端加一行 # -- coding: utf-8 --
3. Python格式化字符
使用更多的格式化字符。例如 %r 就是是非常有用的一個,它的含義是“不管什么都打印出來”。
%s -- string
%% 百分號標(biāo)記 #就是輸出一個%
%c 字符及其ASCII碼
%s 字符串
%d 有符號整數(shù)(十進(jìn)制)
%u 無符號整數(shù)(十進(jìn)制)
%o 無符號整數(shù)(八進(jìn)制)
%x 無符號整數(shù)(十六進(jìn)制)
%X 無符號整數(shù)(十六進(jìn)制大寫字符)
%e 浮點數(shù)字(科學(xué)計數(shù)法)
%E 浮點數(shù)字(科學(xué)計數(shù)法,用E代替e)
%f 浮點數(shù)字(用小數(shù)點符號)
%g 浮點數(shù)字(根據(jù)值的大小采用%e或%f)
%G 浮點數(shù)字(類似于%g)
%p 指針(用十六進(jìn)制打印值的內(nèi)存地址)
%n 存儲輸出字符的數(shù)量放進(jìn)參數(shù)列表的下一個變量中
%c 轉(zhuǎn)換成字符(ASCII 碼值,或者長度為一的字符串)
%r 優(yōu)先用repr()函數(shù)進(jìn)行字符串轉(zhuǎn)換(Python2.0新增)
%s 優(yōu)先用str()函數(shù)進(jìn)行字符串轉(zhuǎn)換
%d / %i 轉(zhuǎn)成有符號十進(jìn)制數(shù)
%u 轉(zhuǎn)成無符號十進(jìn)制數(shù)
%o 轉(zhuǎn)成無符號八進(jìn)制數(shù)
%x / %X (Unsigned)轉(zhuǎn)成無符號十六進(jìn)制數(shù)(x / X 代表轉(zhuǎn)換后的十六進(jìn)制字符的大小寫)
%e / %E 轉(zhuǎn)成科學(xué)計數(shù)法(e / E控制輸出e / E)
%f / %F 轉(zhuǎn)成浮點數(shù)(小數(shù)部分自然截斷)
%g / %G : %e和%f / %E和%F 的簡寫
%% 輸出%
輔助符號 說明
* 定義寬度或者小數(shù)點精度
- 用做左對齊
+ 在正數(shù)前面顯示加號(+)
sp 在正數(shù)前面顯示空格
# 在八進(jìn)制數(shù)前面顯示零(0),在十六進(jìn)制前面顯示“0x”或者“0X”(取決于用的是“x”還是“X”)
0 顯示的數(shù)字前面填充“0”而不是默認(rèn)的空格
m.n m 是顯示的最小總寬度,n 是小數(shù)點后的位數(shù)(如果可用的話)
參考文獻(xiàn):
1. python 皮爾森相關(guān)系數(shù)
2. 統(tǒng)計學(xué)之三大相關(guān)性系數(shù)(pearson、spearman、kendall)
皮爾森系數(shù)
重點關(guān)注第一個等號后面的公式,最后面的是推導(dǎo)計算,暫時不用管它們??吹?jīng)]有,兩個變量(X, Y)的皮爾森相關(guān)性系數(shù)(ρX,Y)等于它們之間的協(xié)方差cov(X,Y)除以它們各自標(biāo)準(zhǔn)差的乘積(σX, σY)。
公式的分母是變量的標(biāo)準(zhǔn)差,這就意味著計算皮爾森相關(guān)性系數(shù)時,變量的標(biāo)準(zhǔn)差不能為0(分母不能為0),也就是說你的兩個變量中任何一個的值不能都是相同的。如果沒有變化,用皮爾森相關(guān)系數(shù)是沒辦法算出這個變量與另一個變量之間是不是有相關(guān)性的。
皮爾森相關(guān)系數(shù)(Pearson correlation coefficient)也稱皮爾森積矩相關(guān)系數(shù)(Pearson product-moment correlation coefficient) ,是一種線性相關(guān)系數(shù)。皮爾森相關(guān)系數(shù)是用來反映兩個變量線性相關(guān)程度的統(tǒng)計量。相關(guān)系數(shù)用r表示,其中n為樣本量,分別為兩個變量的觀測值和均值。r描述的是兩個變量間線性相關(guān)強(qiáng)弱的程度。r的絕對值越大表明相關(guān)性越強(qiáng)。
簡單的相關(guān)系數(shù)的分類
0.8-1.0 極強(qiáng)相關(guān)
0.6-0.8 強(qiáng)相關(guān)
0.4-0.6 中等程度相關(guān)
0.2-0.4 弱相關(guān)
0.0-0.2 極弱相關(guān)或無相關(guān)
r描述的是兩個變量間線性相關(guān)強(qiáng)弱的程度。r的取值在-1與+1之間,若r0,表明兩個變量是正相關(guān),即一個變量的值越大,另一個變量的值也會越大;若r0,表明兩個變量是負(fù)相關(guān),即一個變量的值越大另一個變量的值反而會越小。r 的絕對值越大表明相關(guān)性越強(qiáng),要注意的是這里并不存在因果關(guān)系。
斯皮爾曼相關(guān)性系數(shù),通常也叫斯皮爾曼秩相關(guān)系數(shù)?!爸取?,可以理解成就是一種順序或者排序,那么它就是根據(jù)原始數(shù)據(jù)的排序位置進(jìn)行求解,這種表征形式就沒有了求皮爾森相關(guān)性系數(shù)時那些限制。下面來看一下它的計算公式:
計算過程就是:首先對兩個變量(X, Y)的數(shù)據(jù)進(jìn)行排序,然后記下排序以后的位置(X’, Y’),(X’, Y’)的值就稱為秩次,秩次的差值就是上面公式中的di,n就是變量中數(shù)據(jù)的個數(shù),最后帶入公式就可求解結(jié)果
帶入公式,求得斯皮爾曼相關(guān)性系數(shù):ρs= 1-6 (1+1+1+9)/6 35=0.657
而且,即便在變量值沒有變化的情況下,也不會出現(xiàn)像皮爾森系數(shù)那樣分母為0而無法計算的情況。另外,即使出現(xiàn)異常值,由于異常值的秩次通常不會有明顯的變化(比如過大或者過小,那要么排第一,要么排最后),所以對斯皮爾曼相關(guān)性系數(shù)的影響也非常小!
由于斯皮爾曼相關(guān)性系數(shù)沒有那些數(shù)據(jù)條件要求,適用的范圍就廣多了。
肯德爾相關(guān)性系數(shù),又稱肯德爾秩相關(guān)系數(shù),它也是一種秩相關(guān)系數(shù),不過它所計算的對象是分類變量。
分類變量可以理解成有類別的變量,可以分為
無序的,比如性別(男、女)、血型(A、B、O、AB);
有序的,比如肥胖等級(重度肥胖,中度肥胖、輕度肥胖、不肥胖)。
通常需要求相關(guān)性系數(shù)的都是有序分類變量。
舉個例子。比如評委對選手的評分(優(yōu)、中、差等),我們想看兩個(或者多個)評委對幾位選手的評價標(biāo)準(zhǔn)是否一致;或者醫(yī)院的尿糖化驗報告,想檢驗各個醫(yī)院對尿糖的化驗結(jié)果是否一致,這時候就可以使用肯德爾相關(guān)性系數(shù)進(jìn)行衡量。
pandas.DataFrame.corr()
DataFrame.corr(method='pearson', min_periods=1)[source]
Compute pairwise correlation of columns, excluding NA/null values
Parameters:
method : {‘pearson’, ‘kendall’, ‘spearman’}
pearson : standard correlation coefficient
kendall : Kendall Tau correlation coefficient
spearman : Spearman rank correlation
min_periods : int, optional
Minimum number of observations required per pair of columns to have a valid result. Currently only available for pearson and spearman correlation
Returns:
y : DataFrame
numpy.corrcoef(x,y = None,rowvar = True,bias = class'numpy._globals._NoValue',ddof = class'numpy._globals._NoValue' )
返回Pearson乘積矩相關(guān)系數(shù)。
cov有關(guān)更多詳細(xì)信息,請參閱文檔。相關(guān)系數(shù)矩陣R和協(xié)方差矩陣C之間的關(guān)系為
R的值在-1和1之間(含)。
參數(shù):
x:array_like
包含多個變量和觀察值的1維或2維數(shù)組。x的每一行代表一個變量,每一列都是對所有這些變量的單獨觀察。另請參閱下面的rowvar。
y:array_like,可選
一組額外的變量和觀察。y的形狀與x相同。
rowvar:布爾,可選
如果rowvar為True(默認(rèn)),則每行表示一個變量,并在列中有觀察值。否則,該關(guān)系將被轉(zhuǎn)置:每列表示一個變量,而行包含觀察值。
bias : _NoValue, optional Has no effect, do not use. Deprecated since version 1.10.0.
ddof : _NoValue, optional Has no effect, do not use. Deprecated since version 1.10.0.
返回:
R:ndarray 變量的相關(guān)系數(shù)矩陣。
線性相關(guān):主要采用皮爾遜相關(guān)系數(shù)來度量連續(xù)變量之間的線性相關(guān)強(qiáng)度;
線性相關(guān)系數(shù)|r| 相關(guān)程度
0=|r|0.3 低度相關(guān)
0.3=|r|0.8 中度相關(guān)
0.8=|r|1 高度相關(guān)
1 函數(shù)
相關(guān)分析函數(shù):
DataFrame.corr()
Series.corr(other)
說明:
如果由數(shù)據(jù)框調(diào)用corr方法,那么將會計算每個列兩兩之間的相似度
如果由序列調(diào)用corr方法,那么只是計算該序列與傳入序列之間的相關(guān)度
返回值:
dataFrame調(diào)用:返回DataFrame
Series調(diào)用: 返回一個數(shù)值型,大小為相關(guān)度
2 案例
import pandas
data=pandas.read_csv('C:\\Users\\Desktop\\test.csv')
print(data.corr())
#由數(shù)據(jù)框調(diào)用corr方法,將會計算每個列兩兩之間的相似度,返回的是一個矩形
print(data['人口'].corr(data['文盲率']))
#由某一列調(diào)用corr方法,只是計算該序列與傳入序列(本例中的'文盲率')之間的相關(guān)度
print(data['超市購物率','網(wǎng)上購物率','文盲率','人口']).corr()
假如你有兩個表格:每個表格中有至少兩列或者好多列,如下圖例子中用到的表格只有3列,以空格分隔,第一列是名稱,第二列是觀察值,第三列也是觀測值。
你想根據(jù)兩個文件中共有的某一列的值算相關(guān)性:
首先根據(jù)兩個文件中共同列求交集,然后輸出交集部分的指定列的信息。
比如,兩個文件中都有第一列的信息,然后輸出第一個文件中第三列,和第二個文件中第三列的信息。
輸出文件為一個新生成的表格。
該表格具有三列:
第一列為兩個文件中共有列的共有數(shù)據(jù);
第二列和第三列分別是來自第一個文件中指定列和第二個文件中的指定列。
然后用第二個腳本(R腳本)畫相關(guān)性圖:
畫相關(guān)性的腳本也支持將數(shù)據(jù)取對數(shù)log或者非log形式:
基本參數(shù) -a -b,兩個輸入文件,必須加
選擇性參數(shù):這些參數(shù)都有默認(rèn)值,看清楚即可。
-ka,-kb 表示a文件的key列,b文件的key列,就是共有列,要以這兩列為key去提取。
-va,-vb 表示a文件的value列,b文件的value列,就是你要比較的數(shù)據(jù)的值所在的列,可以使數(shù)字類型,也可以是字符串類型的值。
-sa,-sb 表示a文件的分割符,b文件的分隔符。
-headera,-headerb 加了哪個表示那個文件有header,不加表示沒有header。
-f [布爾類型] 表示是否計算數(shù)值占總體的比例,默認(rèn)False不計算。
-u [布爾類型] 表示輸出key列的并集(合集),默認(rèn)不加-u參數(shù)。
1)美化圖片,配色,線條需要美化一下下。
2)偏離點如何查看,什么意義?
*20200501:支持以“comma”,“,”分割的文件,只需在參數(shù)-sa或-sb中設(shè)置comma即可
該腳本已經(jīng)發(fā)展成為了根據(jù)兩個文件中共有的某一列來提取相關(guān)信息的腳本。
這兩個腳本在個人的項目中非常實用。經(jīng)常用來做相關(guān)性圖,因此寫成通用工具更加方便。
當(dāng)然如果你已經(jīng)有了第一步結(jié)果的表格,直接用第二個R腳本畫圖即可。
python腳本使用的全部為python內(nèi)置的包,無需安裝其他包,測試使用的是python 2.7及python3中都適用。
R腳本需要安裝ggplot2. 測試使用的R版本為 3.5.1
需要腳本的點贊并私信我哦。