数据特征分析-相关性分析

相关性分析是指对两个或多个具备相关性的变量元素进行分析,从而衡量两个变量的相关密切程度。

相关性的元素之间需要存在一定的联系或者概率才可以进行相关性分析。

相关系数在[-1,1]之间。

一、图示初判

通过pandas做散点矩阵图进行初步判断

df1 = pd.DataFrame(np.random.randn(200,4)*100,columns=['A','B','C','D'])
pd.plotting.scatter_matrix(df1,figsize=(12,12),diagonal='kde',marker='o',range_padding=0.1)

 

二、Pearson相关系数(皮尔森相关系数)

前提条件:数据满足正太分布

皮尔森相关系数,也称皮尔森积矩相关系数,是一种线性相关关系。

衡量向量相似度的一种方法,输出范围为-1到1,0,0代表无相关性,负值为负相关,正值为正相关。

公式意义:分子为,(x-x的均值) 乘以 (y-y的均值)的累计和;分母为,(x-x的均值)的累计和的平方根 乘以 (y-y的均值)的累计和的平方根

|r| <= 0.3  → 不存在线性相关

0.3 < |r| <= 0.5  → 低度线性相关

0.5 < |r| <= 0.8  → 显著线性相关

|r| > 0.8  → 高度线性相关

 

1.皮尔森相关系数的推导

from scipy import stats
s1 = pd.Series(np.random.rand(100)*100).sort_values()
s2 = pd.Series(np.random.rand(100)*50).sort_values()
df = pd.DataFrame({'value1':s1.values,'value2':s2.values}) 
u1,u2 = df['value1'].mean(),df['value2'].mean()
std1,std2 = df['value1'].std(),df['value2'].std()
print('value1正太性检验结果:',stats.kstest(df['value1'],'norm',(u1,std1))) #需要先验证满足正太分布
print('value2正太性检验结果:',stats.kstest(df['value2'],'norm',(u2,std2)))df['(x-u1)*(y-u2)'] = (df['value1'] - u1) * (df['value2'] - u2)
df['(x-u1)**2'] = (df['value1'] - u1) ** 2
df['(y-u2)**2'] = (df['value2'] - u2) ** 2
print(df.head(3))
r = df['(x-u1)*(y-u2)'].sum()/(np.sqrt(df['(x-u1)**2'].sum()) * np.sqrt(df['(y-u2)**2'].sum()))
print('皮尔森相关系数为%.4f'%r)
value1正太性检验结果: KstestResult(statistic=0.09073501372253845, pvalue=0.36300244109659735)
value2正太性检验结果: KstestResult(statistic=0.11608587123064174, pvalue=0.12471026010748129)value1    value2  (x-u1)*(y-u2)    (x-u1)**2   (y-u2)**2
0  2.727329  0.101045    1163.135987  1864.420003  725.633345
1  4.566353  0.296802    1105.504546  1708.987866  715.125206
2  6.132681  0.308134    1063.167351  1581.937521  714.519254
皮尔森相关系数为0.9699
结果输出

 

2.pandas的corr()方法

上述方法为计算过程,可使用pandas的corr()方法直接生成相关系数矩阵

s1 = pd.Series(np.random.rand(100)*100).sort_values()
s2 = pd.Series(np.random.rand(100)*50).sort_values()
df = pd.DataFrame({'value1':s1.values,'value2':s2.values})
r = df.corr()  #参数默认为pearson
print(r)
#           value1    value2
# value1  1.000000  0.988596
# value2  0.988596  1.000000

 

三、Sperman秩相关系数(斯皮尔曼相关系数)

皮尔森相关系数只能用于分析服从正态分布的连续变量的相关性,对于不服从正态分布的变量,可采用Sperman秩相关系数进行相关性分析。

Sperman秩相关系数,也称等级相关系数。如果数据中没有重复值, 并且当两个变量完全单调相关时,斯皮尔曼相关系数则为+1或−1。

计算逻辑:对两个变量的取值按照从小到大顺序编秩,如果两个值大小相等,则秩次为(index1+index2)/2,

1.spearman相关系数的推导

df = pd.DataFrame({'智商':[106,86,100,101,99,103,97,113,112,110],'每周看电视小数':[7,0,27,50,28,29,20,12,6,17]})
n = len(df)
df.sort_values('智商',inplace = True)
df['range1'] = np.arange(1,n+1)
df.sort_values('每周看电视小数',inplace = True)
df['range2'] = np.arange(1,n+1)
df['d'] = df['range1'] - df['range2']
df['d**2'] = df['d'] ** 2
rs = 1 - 6 * (df['d**2'].sum())/(n*(n**2-1))
print('斯皮尔曼相关系数为%.4f'%rs)
# 斯皮尔曼相关系数为-0.1758

 

2.pandas的corr()方法

corr()默认为pearson相关系数,添加参数method='spearman'转化为spearman相关系数。

df = pd.DataFrame({'智商':[106,86,100,101,99,103,97,113,112,110],'每周看电视小数':[7,0,27,50,28,29,20,12,6,17]})
rs = df.corr(method='spearman')
print(rs)
#                   智商        每周看电视小数
# 智商            1.000000       -0.175758
# 每周看电视小数   -0.175758       1.000000

 

转载于:https://www.cnblogs.com/Forever77/p/11361213.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/391671.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode 354. 俄罗斯套娃信封问题(dp+二分)

给定一些标记了宽度和高度的信封&#xff0c;宽度和高度以整数对形式 (w, h) 出现。当另一个信封的宽度和高度都比这个信封大的时候&#xff0c;这个信封就可以放进另一个信封里&#xff0c;如同俄罗斯套娃一样。 请计算最多能有多少个信封能组成一组“俄罗斯套娃”信封&#…

fastlane use_legacy_build_api true

fastlane版本号&#xff1a;fastlane 1.108.0 Xcode版本号&#xff1a;8.1 MacOS版本号&#xff1a;10.12 使用fastlane打包 - Release / Ad-Hoc包时报错: [13:36:59]: There was an error exporting your application [13:36:59]: Unfortunately the new Xcode export API is …

获取所有权_住房所有权经济学深入研究

获取所有权Note from Towards Data Science’s editors: While we allow independent authors to publish articles in accordance with our rules and guidelines, we do not endorse each author’s contribution. You should not rely on an author’s works without seekin…

scala 单元测试_Scala中的法律测试简介

scala 单元测试Property-based law testing is one of the most powerful tools in the scala ecosystem. In this post, I’ll explain how to use law testing and the value it’ll give you using in-depth code examples.基于财产的法律测试是scala生态系统中最强大的工具…

getBoundingClientRect说明

getBoundingClientRect用于获取某个元素相对于视窗的位置集合。 1.语法&#xff1a;这个方法没有参数。 rectObject object.getBoundingClientRect() 2.返回值类型&#xff1a;TextRectangle对象&#xff0c;每个矩形具有四个整数性质&#xff08; 上&#xff0c; 右 &#xf…

robot:接口入参为图片时如何发送请求

https://www.cnblogs.com/changyou615/p/8776507.html 接口是上传图片&#xff0c;通过F12抓包获得如下信息 由于使用的是RequestsLibrary&#xff0c;所以先看一下官网怎么传递二进制文件参数&#xff0c;https://2.python-requests.org//en/master/user/advanced/#post-multi…

开发小Tips-setValue

字典添加数据请用 [dict setValue:value forKey:key] 代替 [dict setObject:value forKey:key] 复制代码这样在一些网络传参时不用考虑nil的情况&#xff0c;?

浏览器快捷键指南_快速但完整的IndexedDB指南以及在浏览器中存储数据

浏览器快捷键指南Interested in learning JavaScript? Get my JavaScript ebook at jshandbook.com有兴趣学习JavaScript吗&#xff1f; 在jshandbook.com上获取我JavaScript电子书 IndexedDB简介 (Introduction to IndexedDB) IndexedDB is one of the storage capabilities …

Java-Character String StringBuffer StringBuilder

Java Character 类 Character 类用于对单个字符进行操作character 类在对象包装一个基本类型char的值 char ch "a";char uniChar \u039A;char[] charArray {a, b, c};使用Character的构造方法创建一个Character类对象 Character ch new Character(a);Charact…

已知两点坐标拾取怎么操作_已知的操作员学习-第3部分

已知两点坐标拾取怎么操作有关深层学习的FAU讲义 (FAU LECTURE NOTES ON DEEP LEARNING) These are the lecture notes for FAU’s YouTube Lecture “Deep Learning”. This is a full transcript of the lecture video & matching slides. We hope, you enjoy this as mu…

缺失值和异常值处理

一、缺失值 1.空值判断 isnull()空值为True&#xff0c;非空值为False notnull() 空值为False&#xff0c;非空值为True s pd.Series([1,2,3,np.nan,hello,np.nan]) df pd.DataFrame({a:[1,2,np.nan,3],b:[2,np.nan,3,hello]}) print(s.isnull()) print(s[s.isnull() False]…

leetcode 503. 下一个更大元素 II(单调栈)

给定一个循环数组&#xff08;最后一个元素的下一个元素是数组的第一个元素&#xff09;&#xff0c;输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序&#xff0c;这个数字之后的第一个比它更大的数&#xff0c;这意味着你应该循环地搜索它的下一个更…

setNeedsDisplay看我就懂!

前言&#xff1a; setNeedsDisplay异步执行的。它会自动调用drawRect方法&#xff0c;这样可以拿到 UIGraphicsGetCurrentContext&#xff0c;就可以绘制了。而setNeedsLayout会默认调用layoutSubViews&#xff0c;处理子视图中的一些数据。 一、着手 我定义了一个UIView的子类…

如何使用ArchUnit测试Java项目的体系结构

by Emre Savcı由EmreSavcı 如何使用ArchUnit测试Java项目的体系结构 (How to test your Java project’s architecture with ArchUnit) In this post, I will show you an interesting library called ArchUnit that I met recently. It does not test your code flow or bu…

解决ionic3 android 运行出现Application Error - The connection to the server was unsuccessful

在真机上启动ionic3打包成的android APK,启动了很久结果弹出这个问题&#xff1a; Application Error - The connection to the server was unsuccessful 可能是我项目资源太多东西了&#xff0c;启动的时间太久了&#xff0c;导致超时了。 解决方案是在项目目录下的config.xml…

特征工程之特征选择_特征工程与特征选择

特征工程之特征选择&#x1f4c8;Python金融系列 (&#x1f4c8;Python for finance series) Warning: There is no magical formula or Holy Grail here, though a new world might open the door for you.警告 &#xff1a; 这里没有神奇的配方或圣杯&#xff0c;尽管新世界可…

搭建Harbor企业级docker仓库

https://www.cnblogs.com/pangguoping/p/7650014.html 转载于:https://www.cnblogs.com/gcgc/p/11377461.html

leetcode 131. 分割回文串(dp+回溯)

给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读都一样的字符串。 示例 1&#xff1a; 输入&#xff1a;s “aab” 输出&#xff1a;[[“a”,“a”,“b”],[“aa”,“b”]]…

[翻译练习] 对视图控制器压入导航栈进行测试

译自&#xff1a;swiftandpainless.com/testing-pus… 上个月我写的关于使用 Swift 进行测试驱动开发的书终于出版了&#xff0c;我会在本文和接下来的一些博文中介绍这本书撰写过程中的一些心得和体会。 在本文中&#xff0c;我将会展示一种很好的用来测试一个视图控制器是否因…

python多人游戏服务器_Python在线多人游戏开发教程

python多人游戏服务器This Python online game tutorial from Tech with Tim will show you how to code a scaleable multiplayer game with python using sockets/networking and pygame. You will learn how to deploy your game so that people anywhere around the world …