设为首页 - 加入收藏 常州站长网 (http://www.52changzhou.com)- 国内知名站长资讯网站,提供最新最全的站长资讯,创业经验,网站建设等!
热搜: 2019 平台 select 为啥
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

用Python进行相关性分析,5行代码就够了

发布时间:2019-10-13 17:10 所属栏目:[优化] 来源:宋天龙
导读:1.相关和因果是一回事吗 相关性不等于因果。用x1和x2作为两个变量进行解释,相关意味着x1和x2是逻辑上的并列相关关系,而因果联系可以解释为因为x1所以x2(或因为x2所以x1)的逻辑关系,二者是完全不同的。 用一个运营示例来说明二者的关系:做商品促销活动

1.相关和因果是一回事吗

相关性不等于因果。用x1和x2作为两个变量进行解释,相关意味着x1和x2是逻辑上的并列相关关系,而因果联系可以解释为因为x1所以x2(或因为x2所以x1)的逻辑关系,二者是完全不同的。

用Python进行相关性分析,5行代码就够了

用一个运营示例来说明二者的关系:做商品促销活动时,通常都会以较低的价格进行销售,以此来实现较高的商品销量;随着商品销售的提升,也给线下物流配送体系带来了更大的压力,在该过程中通常会导致商品破损量的增加。

本案例中,商品低价与破损量增加并不是因果关系,即不能说因为商品价格低所以商品破损量增加;二者的真实关系是都是基于促销这个大背景下,低价和破损量都是基于促销产生的。

相关性的真实价值不是用来分析“为什么”的,而是通过相关性来描述无法解释的问题背后真正成因的方法。相关性的真正的价值是能知道“是什么”,即无论通过何种因素对结果产生影响,最终出现的规律就是二者会一起增加或降低等。

仍然是上面的案例,通过相关性分析我们可以知道,商品价格低和破损量增加是相伴发生的,这意味着当价格低的时候(通常是做销售活动,也有可能产品质量问题、物流配送问题、包装问题等),我们就想到破损量可能也会增加。但是到底由什么导致的破损量增加,是无法通过相关性来得到的。

2.相关系数低就是不相关吗

R(相关系数)低就是不相关吗?其实不是。

R的取值可以为负,R=-0.8代表的相关性要高于R=0.5。负相关只是意味着两个变量的增长趋势相反,因此需要看R的绝对值来判断相关性的强弱。

即使R的绝对值低,也不一定说明变量间的相关性低,原因是相关性衡量的仅仅是变量间的线性相关关系,变量间除了线性关系外,还包括指数关系、多项式关系、幂关系等,这些“非线性相关”的相关性不在R(相关性分析)的衡量范围之内。

3.代码实操:Python相关性分析

本示例中,将使用Numpy进行相关性分析。源文件data5.txt位于“附件-chapter3”中。附件下载地址:

http://www.dataivy.cn/book/python_book_v2.zip

  1. import?numpy?as?np?#?导入库?
  2. data?=?np.loadtxt('data5.txt',?delimiter='\t')?#?读取数据文件?
  3. x?=?data[:,?:-1]?#?切分自变量?
  4. correlation_matrix?=?np.corrcoef(x,?rowvar=0)?#?相关性分析?
  5. print(correlation_matrix.round(2))?#?打印输出相关性结果?

示例中实现过程如下:

  1. 先导入Numpy库;
  2. 使用Numpy的loadtxt方法读取数据文件,数据文件以tab分隔;
  3. 矩阵切片,切分出自变量用来做相关性分析;
  4. 使用Numpy的corrcoef方法做相关性分析,通过参数rowvar = 0控制对列做分析;
  5. 打印输出相关性矩阵,使用round方法保留2位小数。结果如下:
  1. [[?1.?-0.04?0.27?-0.05?0.21?-0.05?0.19?-0.03?-0.02]?
  2. ?[-0.04?1.?-0.01?0.73?-0.01?0.62?0.?0.48?0.51]?
  3. ?[?0.27?-0.01?1.?-0.01?0.72?0.?0.65?0.01?0.02]?
  4. ?[-0.05?0.73?-0.01?1.?0.01?0.88?0.01?0.7?0.72]?
  5. ?[?0.21?-0.01?0.72?0.01?1.?0.02?0.91?0.03?0.03]?
  6. ?[-0.05?0.62?0.?0.88?0.02?1.?0.03?0.83?0.82]?
  7. ?[?0.19?0.?0.65?0.01?0.91?0.03?1.?0.03?0.03]?
  8. ?[-0.03?0.48?0.01?0.7?0.03?0.83?0.03?1.?0.71]?
  9. ?[-0.02?0.51?0.02?0.72?0.03?0.82?0.03?0.71?1.?]]?

相关性矩阵的左侧和顶部都是相对的变量,从左到右、从上到下依次是列1到列9。从结果看出:

  • 第5列和第7列相关性较高,系数达到0.91。
  • 第4列和第6列相关性较高,系数达到0.88。
  • 第8列和第6列相关性较高,系数达到0.83。

为了更好地展示相关性结果,我们可以配合Matplotlib展示图像。代码如下:

  1. fig?=?plt.figure()?#?调用figure创建一个绘图对象?
  2. ax?=?fig.add_subplot(111)?#?设置1个子网格并添加子网格对象?
  3. hot_img?=?ax.matshow(np.abs(correlation_matrix),?vmin=0,?vmax=1)?
  4. ?#?绘制热力图,值域从0到1?
  5. fig.colorbar(hot_img)?#?为热力图生成颜色渐变条?
  6. ticks?=?np.arange(0,?9,?1)?#?生成0~9,步长为1?
  7. ax.set_xticks(ticks)?#?生成x轴刻度?
  8. ax.set_yticks(ticks)?#?设置y轴刻度?
  9. names?=?['x'?+?str(i)?for?i?in?range(x.shape[1])]?#?生成坐标轴标签文字?
  10. ax.set_xticklabels(names)?#?生成x轴标签?
  11. ax.set_yticklabels(names)?#?生成y轴标签?

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章