數據分析:有關相關性分析的混沌

  相關分析是指對多個具備相關關係的變量進行分析,從而衡量變量間的相關程度或密切程度。相關性可以應用到所有數據的分析過程中,任何事物之間都存在一定的聯繫。相關性用R(相關係數)表示,R的取值範圍是[-1,1]

相關和因果的差異

  相關性不等於因果,用x1和x2作爲兩個變量逆行解釋,相關意味着x1和x2是邏輯上的並列相關關係,而因果聯繫可以解釋爲因爲x1所以x2(或因爲x2所以x1)的邏輯關係,二者是完全不同的。

  相關性的真實價值不是用來分析“爲什麼”,而是通過相關性來描述無法解釋的問題背後真正成因。相關性的真實價值是能知道“是什麼”,即無論通過何種因素對結果產生影響,最終出現的規律就是二者會一起增加,降低等。

相關係數低就是不相關嗎

  R(相關係數)低就是不相關麼?其實不是。
  首先,R的取值可以爲負,R=-0.8代表的相關性要高於R=0.5,負相關性只是意味着兩個變量的增長趨勢相反。因此需要看R的絕對值來判斷相關性的強弱。

  其次,即使R的絕對值低,也不一定說明變量間的相關性低,原因是相關性衡量的僅僅是變量間的線性相關關係,變量間除了線性關係外,還包括指數關係,多項式關係,冪關係等,這些非線性相關的相關性不在R(相關性分析)衡量範圍內。

Python 相關性分析

import numpy as np

data = np.loadtxt('/Users/nxcjh/learn/python-yunying/python_book/chapter3/data5.txt', delimiter='\t')
x = data[:, :-1] # 切分自變量
print(x)
correlation_matrix = np.corrcoef(x, rowvar=0) # 相關性分析
print("相關性結果:")
print(correlation_matrix.round(2)) # 打印輸出相關性結果
[[9.74500000e+01 6.91560000e+02 3.17747000e+03 ... 2.50230850e+05
  1.48545545e+06 1.48517277e+06]
 [1.01760000e+02 9.20360000e+02 1.57680100e+04 ... 6.39772285e+06
  5.72076300e+05 5.71978860e+05]
 [9.82100000e+01 8.94760000e+02 8.82403000e+03 ... 1.61567885e+06
  1.05798051e+06 1.05838664e+06]
 ...
 [1.00580000e+02 5.22320000e+02 7.88055000e+03 ... 5.72337040e+05
  2.25482960e+05 4.10655250e+05]
 [9.95600000e+01 5.03000000e+02 4.02205000e+03 ... 7.15016400e+05
  2.08891280e+05 3.95942710e+05]
 [1.00420000e+02 7.14510000e+02 7.79795000e+03 ... 2.77508514e+06
  5.97421660e+05 2.26286140e+05]]
相關性結果:
[[ 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.  ]]

相關性矩陣的左側和頂部都是相對變量,從左到右,從上到下依次是列1到列9,從結果看出:

  1. 第5列和第7列相關性最高,係數達到0.91
  2. 第4列和第6列相關性比較高,係數達到0.88

主要知識點

  1. 通過Numpy的loadtxt方法讀取文本數據文件,並制定分隔符。
  2. 對Numpy矩陣做切塊處理;
  3. 使用Numpy中的corrcoef做相關性分析;
  4. 使用round方法保留2位小數。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章