当前位置: 首页 > news >正文

如何用python进行相关性分析_Python 相关性分析 显著性检验

Pandas中有pandas.DataFrame.corr和pandas.Series.corr两个方法进行相关性的计算,第一个针对整个dataframe数据返回一个矩阵,第二个针对不同的column。下面对第二个方法的函数内容、使用方法以及重要的显著性检验三个方面进行介绍。

第一部分:相关性系数计算方法及相应函数介绍

Pandas函数:

Series.corr(self, other, method='pearson', min_periods=None)[source]

参数:

otherSeries: 需要用来计算相关性的Series

method{‘pearson’, ‘kendall’, ‘spearman’} :用来计算相关性的方法,可以是这三种,或者其他的可调动函数,默认是皮尔森相关系数。

min_periodsint:可选参数,为了获得有效结果所需要的最小的观察数量

返回:float类型的相关系数

主要参数methods介绍:

pearson correlation coefficient(皮尔逊相关性系数)。

常用的相关系数求法,采用协方差cov(X,Y)/标准差的乘积(σX, σY)。

数据要求: 线性数据、连续且符合正态分布;数据间差异不能太大;变量准差不能为0,即两变量中任何一个值不能都是相同。

spearman correlation coefficient(斯皮尔曼秩相关性系数)。

根据原始数据的排序位置进行计算。

数据要求:用于解决称名数据和顺序数据相关的问题,适用于两列变量,而且具有等级变量性质具有线性关系的数据,能够很好处理序列中相同值和异常值。

kendall correlation coefficient(肯德尔相关性系数)。

等级相关系数,适用于两个变量均为有序分类的情况

数据要求:肯德尔相关性系数,它也是一种秩相关系数,不过它所计算的对象是分类变量。

所以针对【连续、正态分布、线性】数据,采用pearson相关系数;针对【非线性的、非正态】数据,采用spearman相关系数;针对【分类变量、无序】数据,采用Kendall相关系数。一般来讲,线性数据采用pearson,否则选择spearman,如果是分类的则用kendall。

第二部分:Pandas包Series.corr()调用

import pandas as pd

x = [1,2,3,4,5]

y = [6,7,8,9,6]

df = pd.DataFrame({'x':x, 'y':y})

df

Out[138]:

x y

0 1 6

1 2 7

2 3 8

3 4 9

4 5 6

df.x.corr(df.y)

Out[139]: 0.24253562503633297

df.x.corr(df.y, method='spearman')

Out[140]: 0.20519567041703082

df.x.corr(df.y, method='kendall')

Out[141]: 0.31622776601683794

df.corr()

Out[142]:

x y

x 1.000000 0.242536

y 0.242536 1.000000

可以看出,构造出的数据采用顺序方法即Kendall相关系数最高。最后调用DataFrame.corr()可以得到一个相关性矩阵。

第三部分:显著性检验

显著性检验的目的是为了 将从样本中得到的结论推广到总体中,通过“小概率事件是不可能事件”这一原理进行推断。一般而言是对总体做出原假设,然后通过对随机的样本数据对原假设进行分析,判断其与原假设是否存在显著性的差异。

调用Python代码计算相关系数是非常简单的,但是如果没有显著性检验,那么所得的结果是没有意义的。不方便的是pandas内嵌的函数中不提供p值的统计,需要采用其他的统计软件包。

在对相关性检验前,需要先画一个散点图,看看两个变量是否具有线性关系。关于方差齐性的问题,采用 stats.levene() 方法进行检验。如果同方差性结果不满足的话,则不能采用pearson 这总参数性的方法,需要采用separsman或者是Kendall这两种非参数性的方法进行计算。

在scipy这一个统计包中,采用scipy.stats.spearmanr()等函数可以直接获得相关系数以及双边检验的P值。

correlation, p-value = scipy.stats.pearsonr(x, y)

correlation, p-value = scipy.stats.spearmanr(x, y)

correlation, p-value = scipy.stats.kendalltau(x, y)

采用这种方法,可以直接得到相关系数和P值,如下所示:

import scipy

import pandas as pd

x = [1,2,3,4,5]

y = [6,7,8,9,6]

df = pd.DataFrame({'x':x, 'y':y})

df

Out[138]:

x y

0 1 6

1 2 7

2 3 8

3 4 9

4 5 6

scipy.stats.pearsonr(x, y)

Out[144]: (0.24253562503633297, 0.6942488516293593)

scipy.stats.spearmanr(x, y)

Out[145]: SpearmanrResult(correlation=0.20519567041703082, pvalue=0.7405819415910722)

scipy.stats.kendalltau(x, y)

Out[146]: KendalltauResult(correlation=0.31622776601683794, pvalue=0.44848886103153185)

虽然看着相关性系数达到了0.3, P-value高达0.4,所以结果是不显著的。

附录

在网上搜到了一些关于相关性计算方法对数目要求的描述,对相关性的检验描述非常详细,下面截取部分内容:

Pearson correlation assumptions

Pearson correlation test is a parametric test that makes assumption about the data. In order for the results of a Pearson correlation test to be valid, the data must meet these assumptions:

1. The sample is independently and randomly drawn. 【正态】

2. A linear relationship between the two variables is present【线性】

3. When plotted, the lines form a line and is not curved【成对】

4. There is homogeneity of variance【方差齐性】

The variables being used in the correlation test should be continuous and measured either on a ratio or interval sale, each variable must have equal number of non-missing observations, and there should be no outliers present.【无异常值、缺失个数一致、变量连续】

Spearman Rank correlation assumptions

The Spearman rank correlation is a non-parametric test that does not make any assumptions about the distribution of the data. The assumption for the Spearman rank correlation test is:

There is a monotonic relationship between the variables being tested【单调性】

A monotonic relationship exists when one variable increases so does the other

For the Spearman rank correlation, the data can be used on ranked data, if the data is not normally distributed, and even if the there is not homogeneity of variance.

Kendall’s Tau correlation assumptions

The Kendall’s Tau correlation is a non-parametric test that does not make any assumptions about the distribution of the data. The only assumption is:

There should be a monotonic relationship between the variables being tested【单调性】

The data should be measured on either an ordinal, ratio, or interval scale.

相关文章:

  • idea maven search for class_Maven是什么?为什么使用
  • tensorflow contrib模块_OpenCV DNN 模块-风格迁移
  • python人脸检测代码_10行代码实现python人脸识别
  • python正则表达式教程_Python正则表达式高级使用方法汇总
  • js修改style样式_jsx组件样式隔离的最佳实践
  • 易语言和python混合编程_C语言可以和Python一起混合编程?两者相加无敌了!
  • python粘性拓展_Python Numpy 数组扩展 repeat和tile
  • 麦肯锡ppt模板 306页黑白_图解钢筋、模板、混凝土细部做法,123页PPT可下载!...
  • selenium判断是否出现弹窗_如何判断宝宝是否有蛔虫?若出现这6种“表现”,可以考虑驱虫了...
  • 怎么查看页面跳转过程_CICD/服务部署完成通知优化-v2.1追加跳转按钮
  • python3实用编程技巧_给Python初学者的一些编程技巧
  • 异常将上下文初始化事件发送到类的侦听器实例_Springboot源码——应用程序上下文分析...
  • python中re.split_python模块之re正则表达式详解
  • python第三方库安装最常用的方式是_Python安装第三方库及常见问题处理方法汇总...
  • cat命令详解_每日命令 | cp
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • HTML-表单
  • Java面向对象及其三大特征
  • js学习笔记
  • Nodejs和JavaWeb协助开发
  • Python学习之路16-使用API
  • Service Worker
  • uni-app项目数字滚动
  • 工作中总结前端开发流程--vue项目
  • 关于for循环的简单归纳
  • 聊聊redis的数据结构的应用
  • 人脸识别最新开发经验demo
  • 微服务框架lagom
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 我从编程教室毕业
  • 学习JavaScript数据结构与算法 — 树
  • 一天一个设计模式之JS实现——适配器模式
  • ​io --- 处理流的核心工具​
  • ​Spring Boot 分片上传文件
  • #14vue3生成表单并跳转到外部地址的方式
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (十一)c52学习之旅-动态数码管
  • (四)鸿鹄云架构一服务注册中心
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • .chm格式文件如何阅读
  • .NET Core 成都线下面基会拉开序幕
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NET处理HTTP请求
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • @RequestBody与@ResponseBody的使用
  • [bug总结]: Feign调用GET请求找不到请求体实体类
  • [CF494C]Helping People
  • [Design Pattern] 工厂方法模式