今天就跟大家聊聊有關(guān)怎樣用Python進(jìn)行相關(guān)性分析,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:空間域名、網(wǎng)頁(yè)空間、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、灤州網(wǎng)站維護(hù)、網(wǎng)站推廣。
1.相關(guān)和因果是一回事嗎
相關(guān)性不等于因果。用x1和x2作為兩個(gè)變量進(jìn)行解釋?zhuān)嚓P(guān)意味著x1和x2是邏輯上的并列相關(guān)關(guān)系,而因果聯(lián)系可以解釋為因?yàn)閤1所以x2(或因?yàn)閤2所以x1)的邏輯關(guān)系,二者是完全不同的。
用一個(gè)運(yùn)營(yíng)示例來(lái)說(shuō)明二者的關(guān)系:做商品促銷(xiāo)活動(dòng)時(shí),通常都會(huì)以較低的價(jià)格進(jìn)行銷(xiāo)售,以此來(lái)實(shí)現(xiàn)較高的商品銷(xiāo)量;隨著商品銷(xiāo)售的提升,也給線下物流配送體系帶來(lái)了更大的壓力,在該過(guò)程中通常會(huì)導(dǎo)致商品破損量的增加。
本案例中,商品低價(jià)與破損量增加并不是因果關(guān)系,即不能說(shuō)因?yàn)樯唐穬r(jià)格低所以商品破損量增加;二者的真實(shí)關(guān)系是都是基于促銷(xiāo)這個(gè)大背景下,低價(jià)和破損量都是基于促銷(xiāo)產(chǎn)生的。
相關(guān)性的真實(shí)價(jià)值不是用來(lái)分析“為什么”的,而是通過(guò)相關(guān)性來(lái)描述無(wú)法解釋的問(wèn)題背后真正成因的方法。相關(guān)性的真正的價(jià)值是能知道“是什么”,即無(wú)論通過(guò)何種因素對(duì)結(jié)果產(chǎn)生影響,最終出現(xiàn)的規(guī)律就是二者會(huì)一起增加或降低等。
仍然是上面的案例,通過(guò)相關(guān)性分析我們可以知道,商品價(jià)格低和破損量增加是相伴發(fā)生的,這意味著當(dāng)價(jià)格低的時(shí)候(通常是做銷(xiāo)售活動(dòng),也有可能產(chǎn)品質(zhì)量問(wèn)題、物流配送問(wèn)題、包裝問(wèn)題等),我們就想到破損量可能也會(huì)增加。但是到底由什么導(dǎo)致的破損量增加,是無(wú)法通過(guò)相關(guān)性來(lái)得到的。
2.相關(guān)系數(shù)低就是不相關(guān)嗎
R(相關(guān)系數(shù))低就是不相關(guān)嗎?其實(shí)不是。
R的取值可以為負(fù),R=-0.8代表的相關(guān)性要高于R=0.5。負(fù)相關(guān)只是意味著兩個(gè)變量的增長(zhǎng)趨勢(shì)相反,因此需要看R的絕對(duì)值來(lái)判斷相關(guān)性的強(qiáng)弱。
即使R的絕對(duì)值低,也不一定說(shuō)明變量間的相關(guān)性低,原因是相關(guān)性衡量的僅僅是變量間的線性相關(guān)關(guān)系,變量間除了線性關(guān)系外,還包括指數(shù)關(guān)系、多項(xiàng)式關(guān)系、冪關(guān)系等,這些“非線性相關(guān)”的相關(guān)性不在R(相關(guān)性分析)的衡量范圍之內(nèi)。
3.代碼實(shí)操:Python相關(guān)性分析
本示例中,將使用Numpy進(jìn)行相關(guān)性分析。源文件data5.txt位于“附件-chapter3”中。附件下載地址:
http://www.dataivy.cn/book/python_book_v2.zip
import numpy as np # 導(dǎo)入庫(kù) data = np.loadtxt('data5.txt', delimiter='\t') # 讀取數(shù)據(jù)文件 x = data[:, :-1] # 切分自變量 correlation_matrix = np.corrcoef(x, rowvar=0) # 相關(guān)性分析 print(correlation_matrix.round(2)) # 打印輸出相關(guān)性結(jié)果
示例中實(shí)現(xiàn)過(guò)程如下:
先導(dǎo)入Numpy庫(kù);
使用Numpy的loadtxt方法讀取數(shù)據(jù)文件,數(shù)據(jù)文件以tab分隔;
矩陣切片,切分出自變量用來(lái)做相關(guān)性分析;
使用Numpy的corrcoef方法做相關(guān)性分析,通過(guò)參數(shù)rowvar = 0控制對(duì)列做分析;
打印輸出相關(guān)性矩陣,使用round方法保留2位小數(shù)。結(jié)果如下:
[[ 1. -0.04 0.27 -0.05 0.21 -0.05 0.19 -0.03 -0.02] [-0.04 1. -0.01 0.73 -0.01 0.62 0. 0.48 0.51] [ 0.27 -0.01 1. -0.01 0.72 0. 0.65 0.01 0.02] [-0.05 0.73 -0.01 1. 0.01 0.88 0.01 0.7 0.72] [ 0.21 -0.01 0.72 0.01 1. 0.02 0.91 0.03 0.03] [-0.05 0.62 0. 0.88 0.02 1. 0.03 0.83 0.82] [ 0.19 0. 0.65 0.01 0.91 0.03 1. 0.03 0.03] [-0.03 0.48 0.01 0.7 0.03 0.83 0.03 1. 0.71] [-0.02 0.51 0.02 0.72 0.03 0.82 0.03 0.71 1. ]]
相關(guān)性矩陣的左側(cè)和頂部都是相對(duì)的變量,從左到右、從上到下依次是列1到列9。從結(jié)果看出:
第5列和第7列相關(guān)性較高,系數(shù)達(dá)到0.91。
第4列和第6列相關(guān)性較高,系數(shù)達(dá)到0.88。
第8列和第6列相關(guān)性較高,系數(shù)達(dá)到0.83。
為了更好地展示相關(guān)性結(jié)果,我們可以配合Matplotlib展示圖像。代碼如下:
fig = plt.figure() # 調(diào)用figure創(chuàng)建一個(gè)繪圖對(duì)象 ax = fig.add_subplot(111) # 設(shè)置1個(gè)子網(wǎng)格并添加子網(wǎng)格對(duì)象 hot_img = ax.matshow(np.abs(correlation_matrix), vmin=0, vmax=1) # 繪制熱力圖,值域從0到1 fig.colorbar(hot_img) # 為熱力圖生成顏色漸變條 ticks = np.arange(0, 9, 1) # 生成0~9,步長(zhǎng)為1 ax.set_xticks(ticks) # 生成x軸刻度 ax.set_yticks(ticks) # 設(shè)置y軸刻度 names = ['x' + str(i) for i in range(x.shape[1])] # 生成坐標(biāo)軸標(biāo)簽文字 ax.set_xticklabels(names) # 生成x軸標(biāo)簽 ax.set_yticklabels(names) # 生成y軸標(biāo)簽
上述代碼的功能都已經(jīng)在注釋中注明。有以下幾點(diǎn)需要注意:
由于相關(guān)性結(jié)果中看的是絕對(duì)值的大小,因此需要對(duì)correlation_matrix做取絕對(duì)值操作,其對(duì)應(yīng)的值域會(huì)變?yōu)閇0, 1]。
原始數(shù)據(jù)中由于沒(méi)有列標(biāo)題,因此這里使用列表推導(dǎo)式生成從x0到x8代表原始的9個(gè)特征。
展示結(jié)果如圖所示。
從圖像中配合顏色可以看出:顏色越亮(彩色顏色為越黃),則相關(guān)性結(jié)果越高,因此從左上角到右下角呈現(xiàn)一條黃色斜線;而顏色較亮的第5列和第7列、第4列和第6列及第8列和第6列分別對(duì)應(yīng)x4和x6、x3和x5、x7和x5。
上述過(guò)程中,主要需要考慮的關(guān)鍵點(diǎn)是:如何理解相關(guān)性和因果關(guān)系的差異,以及如何應(yīng)用相關(guān)性。相關(guān)性分析除了可以用來(lái)分析不同變量間的相關(guān)伴生關(guān)系以外,也可以用來(lái)做多重共線性檢驗(yàn)。
看完上述內(nèi)容,你們對(duì)怎樣用Python進(jìn)行相關(guān)性分析有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。