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
猜你喜欢
- 如何制作一个安全的页面?随后,让我们来编程:manage.asp' 登录页面<%@ Language=VB
- Go微服务网关从核心原理理解网关的本质网关具备的基本功能:支持多种协议代理:tcp/http/ websocket/grpc支持多种负载均衡
- 本文给大家介绍PHP中Http协议post请求参数,具体内容如下所示:WEB开发中信息基本全是在POST与GET请求与响应中进行,GET因其
- 前言在自学机器学习或者是深度学习的过程中,有的时候总想把执行过程或者执行结果显示出来,所以就想到了动画。好在用 Python 实现动画有许多
- 不知大家对精华区的表格排序终极优化是否还有记忆,当时讨论的结果曾以为是最快的JS排序了,实则不然,按前段时间我发的DHTML性能提升帖(转译
- 引子Tornado 是一个网络异步的的web开发框架, 并且可以利用多进程进行提高效率, 下面是创建一个多进程 tornado 程序的例子.
- 一、介绍实现的是把某个文件夹下的所有文件名提取出来,放入一个列表,在与excel中的某列进行对比,如果一致的话,对另一列进行操作,比如我们在
- 先看一个需求from collections import defaultdict"""需求: 统计user_
- 一、闭包闭包相当于函数中,嵌套另一个函数,并返回。代码如下:def func(name): # 定义外层函数 def inner
- 工作中发现表单提交方便的问题,很多时候IE下提交好好的,打了火狐下就出现了问题,利用提交按钮就不成功了,于是利用JS的方式就成功了,也不知道
- 生成一列sum_age 对age 进行累加df['sum_age'] = df['age'].cumsum(
- 本文实例讲述了python实现linux下使用xcopy的方法。分享给大家供大家参考。具体如下:这个python函数模仿windows下的x
- python中,为了方便字符串的大小写转换,为我们提供了三种方法:title()lower()upper()python title()方法
- 本文实例为大家分享了python实现opencv+scoket网络实时图传的具体代码,供大家参考,具体内容如下服务器分析:1.先通过在服务器
- Notepad++是一款不错的编辑器,很轻巧,我很喜欢它。再换个主题,加个代码高亮,看上去就更专业了。如果你是Mac用户,应该听说或使用过T
- 装饰器模式(Decorator Pattern)是什么装饰器模式是一种结构型模式,它允许你在运行时为一个对象动态地添加新的行为,而不影响其原
- 自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。Traits 是一种为类似 PHP 的单继承语言而准备的代
- SMTP协议首先了解SMTP(简单邮件传输协议),邮件传送代理程序使用SMTP协议来发送电邮到接收者的邮件服务器。SMTP协议只能用来发送邮
- 很多网友在浏览网页时应该会发现很多网页有显示时间和日期的功能,这个不难,使用可视化网页制作软件Drea
- php代码很简单:$server="127.0.0.1";println("Begin");$lin