数据特征分析技能—— 相关性检验

数据特征分析技能—— 相关性检验

相关性分析是指对两个或多个具备相关性的变量元素进行分析,从而衡量两个变量因素的相关密切程度
一般常用四种方法:
- 画图判断
- pearson(皮尔逊)相关系数
- sperman(斯皮尔曼)相关系数
- Cosine similarity (余弦相关系数)

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import stats
% matplotlib inline

绘制图形判断

一般对于强相关性的两个变量,画图就能定性判断是否相关

data1 = pd.Series(np.random.rand(50)*100).sort_values()
data2 = pd.Series(np.random.rand(50)*50).sort_values()
data3 = pd.Series(np.random.rand(50)*500).sort_values(ascending = False)
# 创建三个数据:data1为0-100的随机数并从小到大排列,data2为0-50的随机数并从小到大排列,data3为0-500的随机数并从大到小排列,fig = plt.figure(figsize = (10,4))
ax1 = fig.add_subplot(1,2,1)
ax1.scatter(data1, data2)
plt.grid()
# 正线性相关ax2 = fig.add_subplot(1,2,2)
ax2.scatter(data1, data3)
plt.grid()
# 负线性相关

这里写图片描述

# (2)散点图矩阵初判多变量间关系data = pd.DataFrame(np.random.randn(200,4)*100, columns = ['A','B','C','D'])
pd.plotting.scatter_matrix(data,figsize=(8,8),c = 'k',marker = '+',diagonal='hist',alpha = 0.8,range_padding=0.1)
data.head()
ABCD
083.463300108.208281-16.441879-69.039664
1-114.341786-176.341932-64.28250654.378911
2-108.781464116.22351111.9965544.445215
3-124.358401-74.357458-46.089528-73.539092
487.330398205.76792359.964420137.955811

这里写图片描述

pearson(皮尔逊)相关系数

要求样本满足正态分布
- 两个变量之间的皮尔逊相关系数定义为两个变量之间的协方差和标准差的商,其值介于-1与1之间

  • 公式:

    协方差:
    

    sxy=1n1nk=1(xkx¯)(yky¯) s x y = 1 n − 1 ∑ k = 1 n ( x k − x ¯ ) ( y k − y ¯ )

    标准差:
    

    sx=1n1nk=1(xkx¯)2 s x = 1 n − 1 ∑ k = 1 n ( x k − x ¯ ) 2

    皮尔逊相关系数: 
    

    sxysxsy=nk=1(xkx¯)(yky¯)nk=1(xkx¯)2nk=1(yky¯)2 s x y s x s y = ∑ k = 1 n ( x k − x ¯ ) ( y k − y ¯ ) ∑ k = 1 n ( x k − x ¯ ) 2 ∑ k = 1 n ( y k − y ¯ ) 2

data1 = pd.Series(np.random.rand(100)*100).sort_values()
data2 = pd.Series(np.random.rand(100)*50).sort_values()
data = pd.DataFrame({'value1':data1.values,'value2':data2.values})
print(data.head())
print('------')
# 创建样本数据u1,u2 = data['value1'].mean(),data['value2'].mean()  # 计算均值
std1,std2 = data['value1'].std(),data['value2'].std()  # 计算标准差
print('value1正态性检验:\n',stats.kstest(data['value1'], 'norm', (u1, std1)))
print('value2正态性检验:\n',stats.kstest(data['value2'], 'norm', (u2, std2)))
print('------')
# 正态性检验 → pvalue >0.05data['(x-u1)*(y-u2)'] = (data['value1'] - u1) * (data['value2'] - u2)
data['(x-u1)**2'] = (data['value1'] - u1)**2
data['(y-u2)**2'] = (data['value2'] - u2)**2
print(data.head())
print('------')
# 制作Pearson相关系数求值表r = data['(x-u1)*(y-u2)'].sum() / (np.sqrt(data['(x-u1)**2'].sum() * data['(y-u2)**2'].sum()))
print('Pearson相关系数为:%.4f' % r)
# 求出r
# |r| > 0.8 → 高度线性相关
     value1    value2
0  0.438432  0.486913
1  2.974424  0.663775
2  4.497743  1.417196
3  5.490366  2.047252
4  6.216346  3.455314------
value1正态性检验:KstestResult(statistic=0.07534983222255448, pvalue=0.6116837468934935)
value2正态性检验:KstestResult(statistic=0.11048646902786918, pvalue=0.1614817955196972)
------value1    value2  (x-u1)*(y-u2)    (x-u1)**2   (y-u2)**2
0  0.438432  0.486913    1201.352006  2597.621877  555.603052
1  2.974424  0.663775    1133.009967  2345.549928  547.296636
2  4.497743  1.417196    1062.031735  2200.319086  512.612654
3  5.490366  2.047252    1010.628854  2108.181383  484.479509
4  6.216346  3.455314     931.020494  2042.041746  424.476709
------
Pearson相关系数为:0.9937
# Pearson相关系数 - 算法data1 = pd.Series(np.random.rand(100)*100).sort_values()
data2 = pd.Series(np.random.rand(100)*50).sort_values()
data = pd.DataFrame({'value1':data1.values,'value2':data2.values})
print(data.head())
print('------')
# 创建样本数据data.corr()
# pandas相关性方法:data.corr(method='pearson', min_periods=1) → 直接给出数据字段的相关系数矩阵
# method默认pearson
value1 value2 0 0.983096 0.368653 1 1.107613 0.509117 2 1.130588 0.755587 3 2.996367 0.909899 4 3.283088 1.233879 ——
value1value2
value11.0000000.996077
value20.9960771.000000

Sperman秩相关系数

皮尔森相关系数主要用于服从正太分布的连续变量,对于不服从正太分布的变量,分类关联性可采用Sperman秩相关系数,也称 等级相关系数

计算方法:
- 对两个变量按照取值大小从小到大编秩,Rx代表Xi的秩次,Ry代表Yi的秩次
- 如果两个变量秩次一样,则秩次为(index1+index2)/ 2
- di = Rx -Ry
公式:
ρs=16d2in(n21) ρ s = 1 − 6 ∑ d i 2 n ( n 2 − 1 )

data = pd.DataFrame({'智商':[106,86,100,101,99,103,97,113,112,110],'每周看电视小时数':[7,0,27,50,28,29,20,12,6,17]})
print(data)
print('------')
# 创建样本数据data.sort_values('智商', inplace=True)
data['range1'] = np.arange(1,len(data)+1)
data.sort_values('每周看电视小时数', inplace=True)
data['range2'] = np.arange(1,len(data)+1)
print(data)
print('------')
# “智商”、“每周看电视小时数”重新按照从小到大排序,并设定秩次indexdata['d'] = data['range1'] - data['range2']
data['d2'] = data['d']**2
print(data)
print('------')
# 求出di,di2n = len(data)
rs = 1 - 6 * (data['d2'].sum()) / (n * (n**2 - 1))
print('Sperman秩相关系数为:%.4f' % rs)
# 求出rs
    智商  每周看电视小时数
0  106         7
1   86         0
2  100        27
3  101        50
4   99        28
5  103        29
6   97        20
7  113        12
8  112         6
9  110        17
------智商  每周看电视小时数  range1  range2
1   86         0       1       1
8  112         6       9       2
0  106         7       7       3
7  113        12      10       4
9  110        17       8       5
6   97        20       2       6
2  100        27       4       7
4   99        28       3       8
5  103        29       6       9
3  101        50       5      10
------智商  每周看电视小时数  range1  range2  d  d2
1   86         0       1       1  0   0
8  112         6       9       2  7  49
0  106         7       7       3  4  16
7  113        12      10       4  6  36
9  110        17       8       5  3   9
6   97        20       2       6 -4  16
2  100        27       4       7 -3   9
4   99        28       3       8 -5  25
5  103        29       6       9 -3   9
3  101        50       5      10 -5  25
------
Sperman秩相关系数为:-0.1758
# spearman相关系数 - 算法data = pd.DataFrame({'智商':[106,86,100,101,99,103,97,113,112,110],'每周看电视小时数':[7,0,27,50,28,29,20,12,6,17]})
print(data)
print('------')
# 创建样本数据data.corr(method='spearman')
# pandas相关性方法:data.corr(method='pearson', min_periods=1) → 直接给出数据字段的相关系数矩阵
# method默认pearson
智商 每周看电视小时数 0 106 7 1 86 0 2 100 27 3 101 50 4 99 28 5 103 29 6 97 20 7 113 12 8 112 6 9 110 17 ——
智商每周看电视小时数
智商1.000000-0.175758
每周看电视小时数-0.1757581.000000

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

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

相关文章

印刷品的排版技巧

印刷品的精美离不开精美的排版,排版设计能够让书本杂志标题规整好看。随着设计素材的丰富,现在设计师可以有越来越多的选择,不过有时候过多的元素在设计并不能起到画龙点睛的作用,相反经常会发现一些排版设计十分杂乱,…

微信公众号排版方法及相关素材网站

作者:杨坤龙 链接:https://www.zhihu.com/question/23640203/answer/375921114 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 关于排版 前段时间我发了条朋友圈:有哪些东西是你…

关于文案排版的一些基本技巧

一、主文案 1. 什么是主文案 关于首页,会涉及到主文案,副文案,装饰性文案等。一个文案中最重要的是主文案,所谓主文案就是你想突出什么,什么就是主文案,主文案一般就是口号类的,标语&#xff0c…

一些实用排版工具

三年前我什么都不懂的时候,就听闻了高大上的LaTeX,还去听了图书馆某工科博士开的LaTeX入门讲解,听的天花乱坠毫无头绪,回去兴冲冲地装上,运行,出现bug,然后傻眼了,解决不了&#xff…

【工具】用PPT排版打印海报时图片分辨率问题

版本:PPT 2013 PPT用来排版做海报也许不是那么好,但是可以用,也方便。【工具】PPT插入高清图片保存后图片变模糊的解决方法,这里解决了高清图片在PPT中被压缩的问题,但用PPT打印还会碰到问题。 将PPT打印为pdf时&…

135编辑器点击换图html,这5种换图姿势,只有排版高手才会!

换图教程 胖友们,欢迎来看二条! 最近客服小姐姐一直催我写一篇关于换图的教程,我就不明白了!去年答应你的事,我怎么能拖那么久...你怎么还记得那么清楚! 好吧,教程开始。 135编辑器给图片/图片样…

ChatGLM的搭建过程

本次搭建的是清华大学开源的ChatGLM。源码地址。模型地址。 1、开启BBR加速 如何开启BBR加速可以去看我的这篇文章,Linux开启内核BBR加速。 2、拉取ChatGLM源码和ChatGLM模型 点击这里跳转到源码处。 点击这里跳转到模型下载处。 我这里在下载之前创建了一个目…

道指30只成分股的股价及历史股价抓取分析

1.获取数据: 想要获得道指30只成分股的最新股价 import requests import re import pandas as pddef retrieve_dji_list():try:r requests.get(https://money.cnn.com/data/dow30/)except ConnectionError as err:print(err)search_pattern re.compile(class"wsod_sym…

短信验证码接口的实现

代码: sendsms.java //接口类型:互亿无线触发短信接口,支持发送验证码短信、订单通知短信等。 // 账户注册:请通过该地址开通账户http://sms.ihuyi.com/register.html // 注意事项: //(1)调试…

交友项目【手机号验证码发送】功能实现

目录 1:注册登录需求分析 1.1:业务说明 1.2:需求分析 1.3:数据库表 1.4:实体类 2:发送短信验证码 2.1:登录验证码 2.2:接口说明 2.3:流程分析 2.4:…

免费的短信验证码接口

免费的短信验证码接口 改了唯ID的东西,大家可以用来玩玩,该服务明年6月到期,也希望大家能文明使用! 不说废话了,直接上接口。 1、发送短信验证码接口 POST http://sms.usts.top/sms/sendCode?phone手机号2、…

短信验证码平台有哪些比较好用?

现如今,要想分辨短信验证码平台哪些比较好用,需要从速度、到达率、稳定性等几个方面来决定。短信验证码平台是很讲究时效性,所以速度快、到达率高是很关键的。另外,在选择短信验证码平台的时候,还要注意短信发送、接收…

短信验证码的实现

需求 发送验证码短信然后接收验证码再完成注册 具体操作 1>点击"获取验证码"的按钮,会发送sendVerifyCode的异步请求并带上参数phone(number) 查看前端代码html 查看对应的js代码 2>后端接口的实现 接口接收请求,获取到手机号,生成验证码code,拼接出短信,并…

目前可以用的短信验证码平台哪个比较好?

目前短信验证码大家应该都很熟悉了,尤其当你在一些购物网站等注册会员或者修改信息时都需要验证码。而短信验证码是商家为了降低重复注册或者非法注册,就需要短信验证码来帮忙用户的真实性。那么,目前可以用的短信验证码平台哪个比较好呢&…

短信验证码登录的实现

原理说明开发环境具体实现过程 原理说明 在网站登录时经常会遇到短信验证码登录的情况,其原理如下:首先我们需要一个短信发送接口,前端发送手机号码到后端,后端随机生成一个验证码并存入redis,并且设置该key的过期时间。(这里可以…

低代码真的是“行业毒瘤”?

低代码/零代码到底是“行业毒瘤”还是“大势所趋”?碰瓷“码农”万年户,低代码火了这些年,你还觉得是毒瘤吗? 低代码/零代码作为比较有争议的话题,常年被拿来碰瓷码农,也是很多行业大佬关注的对象。 阿里云…

chatgpt赋能python:Python如何下载人人文库

Python如何下载人人文库 人人文库是一个知识分享社区,用户可以在平台上上传、下载和分享文档。 Python是一种强大的编程语言,具有强大的网络和数据处理库。今天,我们将介绍如何使用Python来下载人人文库中的文档。 首先,我们需…

秘密共享差分隐私原理解析

1. 隐私计算全貌  可以看到,隐私计算技术从1979年就开始了,历经四代从安全多方计算(MPC)、到差分隐私(DP)、到集中加密技术(TEE),再到联邦学习(FL)。 2. 秘密共享 secret Sharing 就是“秘密分享”或者“秘密共享”…

保护个人隐私和数据安全的方法与策略

引言 随着信息技术的普及和发展,我们享受到了便捷的互联网服务,但与此同时,个人隐私和数据安全问题也日益受到威胁。在这个所谓的"裸奔"时代,网络攻击、数据泄露和隐私侵犯已经成为常态。然而,我们并不无助…

商业秘密安全保护

新项目涉及商密(商业秘密的密级:非商密、普通商密、核心商密),以下是对商密安全保护规则的调研。 《中央企业商业秘密安全保护技术指引》(保密[2015]3号)《中央企业商业秘密安全技术保护实施指南》&#x…