相关分析是指对多个具备相关关系的变量进行分析,从而衡量变量间的相关程度或密切程度。相关性可以应用到所有数据的分析过程中,任何事物之间都存在一定的联系。相关性用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位小数。