python皮尔逊相关性数据分析分析及实例代码
作者:fanstuck 发布时间:2021-03-12 13:23:34
前言
相关性分析算是很多算法以及建模的基础知识之一了,十分经典。关于许多特征关联关系以及相关趋势都可以利用相关性分析计算表达。其中常见的相关性系数就有三种:person相关系数,spearman相关系数,Kendall's tau-b等级相关系数。各有各自的用法和使用场景。当然关于这以上三种相关系数的计算算法和原理+代码我都会在我专栏里面写齐全。目前关于数学建模的专栏已经将传统的机器学习预测算法、维度算法、时序预测算法和权重算法写的七七八八了,有这个需求兴趣的同学可以去看看。
数值类型
之前在我上篇文章说过关于数据特征是一个很重要的例子,任何分析算法都需要建立在其符合使用场景之上,我们需要对症下药,从数据特征开始分析。
按照数据存储的数据格式可以归纳为两类:
按照特征数据含义又可分为:
离散型随机变量:取值只能是可取范围内的指定数值类型的随机变量,比如年龄、车流量此类数据。
连续随机变量:按照测量或者计算方法得到,在某个范围内连取n个值,此类数据可化为定类数据。
二分类数据:此类数据仅只有两类:例如是与否、成功与失败。
多分类数据:此类数据有多类:例如天气出太阳、下雨、阴天。
周期型数据:此类数据存在一个周期循环:例如周数月数。
那么问题来了,关于这三种系数到底适用于哪种数据场景呢?
皮尔逊系数使用场景
首先使用皮尔逊系数的情况包含以下三种特性,我们从scipy的函数pearsonr的相关说明就可以看出:
The Pearson correlation coefficient [1] measures the linear relationship between two datasets. Like other correlation coefficients, this one varies between -1 and +1 with 0 implying no correlation. Correlations of -1 or +1 imply an exact linear relationship. Positive correlations imply that as x increases, so does y. Negative correlations imply that as x increases, y decreases.
也就是说:皮尔逊相关系数测量两个数据集之间的线性关系。与其他相关系数一样,该系数在-1和+1之间变化,0表示不相关。-1或+1的相关性意味着精确的线性关系。正相关意味着x增加,y也增加。负相关意味着随着x增加,y减少。 总结一下对于皮尔逊相关系数的使用场景,有三种必要的特性使用皮尔逊系数最佳:
连续数据
正态分布
线性关系
上述三个条件均满足才能使用pearson相关系数,否则就用spearman相关系数。定序数据之间也只用spearman相关系数,不能用pearson相关系数。
皮尔逊相关系数(Pearson correlation)
1.定义
两个变量之间的皮尔逊相关系数定义为两个变量之间的协方差和标准差的商:
变量相关强度:
相关程度 | 极强相关 | 强相关 | 中等强度相关 | 弱相关 | 极弱相关或无相关 |
---|---|---|---|---|---|
相关系数绝对值 | 1-0.8 | 0.8-0.6 | 0.6-0.4 | 0.4-0.2 | 0.2-0 |
2.线性关系判定
一般可以利用散点图加上最小二乘法拟合大体看出线性关系:
3.正态检验
1.KS检验
假设检验的基本思想:
若对总体的某个假设是真实的,那么不利于或者不能支持这一假设的事件A在一次试验中是几乎不可能发生的。如果事件A真的发生了,则有理由怀疑这一假设的真实性,从而拒绝该假设。
实质分析: 假设检验实质上是对原假设是否正确进行检验,因此检验过程中要使原假设得到维护,使之不轻易被拒绝;否定原假设必须有充分的理由。同时,当原假设被接受时,也只能认为否定该假设的根据不充分,而不是认为它绝对正确。
借助假设检验的思想,利用K-S检验可以对数列的性质进行检验:
def normal_test(data):
u = data.mean()
std = data.std()
result = stats.kstest(data, 'norm', (u, std))
print(result)
normal_test()
此时,pvalue > 0.05,不拒绝原假设。因此数据服从正态分布。
4.计算代码
若以上验证均成功则采取皮尔逊相关系数进行相关性分析,可以使用pandas的函数corr:
DataFrame.corr(method='pearson',
min_periods=1,
numeric_only=_NoDefault.no_default)
参数说明:
method: {‘pearson’, ‘kendall’, ‘spearman’} or callable。Method of correlation。
pearson : standard correlation coefficient,皮尔逊系数
kendall : Kendall Tau correlation coefficient,肯德尔系数
spearman :Spearman rank correlation,斯皮尔曼系数
min_periods:int, optional。每对列所需的最小样本数。目前仅适用于Pearson和Spearman相关性。 numeric_only:bool, default True。仅包含浮点、整型或布尔型数据。
rho =df_test.corr(method='pearson')
rho
plt.rcParams['font.family'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
sns.heatmap(rho, annot=True)
plt.title('Heat Map', fontsize=18)
来源:https://juejin.cn/post/7196290097549361209


猜你喜欢
- 效果图展示:源码查看【功能说明】利用insertBefore制作简单的循环插空效果【HTML代码说明】<ul class="
- import turtle as tt.setup(800,600,0,0,)t.pensize(2)t.speed(1)t.color(&
- 本文实例为大家分享了Python实现俄罗斯方块游戏的具体代码,供大家参考,具体内容如下玩法:童年经典,普通模式没啥意思,小时候我们都是玩加速
- (在lua中通过loadfile, setfenv实现)python当然也可以:cat config.pybar = 10foo=100ca
- 问题如下python pip安装模块提示错误failed to create process原因:报这个错误的原因,是因为python的目录
- 代码如下:arr = array(12,52,14,43,24,58,15,64,24,57,17,56,45)&nbs
- 本文实例讲述了php生成随机数/生成随机字符串的方法。分享给大家供大家参考,具体如下:有时候我们的项目需要生成随机数,但是又不想那么麻烦,那
- 之前需要做一些目标检测的训练,需要自己采集一些数据集,写了一个小demo来实现图片的采集使用方法:指定name的名称,name为分类的标签按
- 视频加密流程图:后端获取保利威的视频播放授权token,提供接口api给前端参考文档:http://dev.polyv.net/2019/v
- js删除数组中某一项或几项的几种方法一、删除第一个元素1、shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。注意:
- tornado中的协程是如何工作的协程定义Coroutines are computer program components that g
- SWFObject的使用是非常简单的,只需要包含 swfobject.js这个js文件,然后在DOM中插入一些简单的JS代码,就能嵌入Fla
- Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 Lucene 可能是目
- 初学python,我们必须干点有意思的事!从微信下手吧!头像集样例如下: 大家可以发朋友圈开启辨认大赛哈哈~话不多说,直接上代码,注释我写了
- 本文实例讲述了python切片的步进、添加、连接简单操作。分享给大家供大家参考,具体如下:步进切片:#coding:utf-8a="
- 文件提交页面既已生成,下面任务就很明确了:将提交的文件内容保存到服务器上。 下面我们用两种方法来实现这个功能: 1. 用 PHP 来保存:
- 使用在Safari和WebKit中可用的CSS高级特性,你可以为你的网站和网络应用带来一个新的级别的令人兴奋的东西。WebKit是Safar
- 一. 10句话1.不要依赖register_global=ON的环境,从你刚懂得配置php运行环境甚至尚不明白register_global
- asp之家注:学习javascript(js),免不了要用到打开新窗口,方法很多,总的来说是使用window.open。不同与HTML中的t
- 1,检查默认安装的mysql的字符集mysql> show variables like '%char%';+----