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

article/2025/9/28 1:11:51

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

相关性分析是指对两个或多个具备相关性的变量元素进行分析,从而衡量两个变量因素的相关密切程度
一般常用四种方法:
- 画图判断
- 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://chatgpt.dhexx.cn/article/hA5wnu1s.shtml

相关文章

【相关性检验】

两个变量之间的相关性检验 1、皮尔森相关系数:它们之间的协方差cov(X,Y)除以它们各自标准差的乘积(σX, σY)。 要判断两个变量之间是否存在相关性:可以采用画散点图的方式,进行直观性的分析。使用python进行person检验 import pandas as p…

数学建模竞赛知识点汇总(四)——相关性检验

数学建模竞赛知识点汇总(四)——相关性检验 文章目录 数学建模竞赛知识点汇总(四)——相关性检验简介皮尔逊相关系数总体person相关系数样本person相关系数皮尔逊相关系数假设检验前提步骤流程 斯皮尔曼相关系数皮尔逊相关系数与斯…

scanf函数使用方法详解

scanf函数使用方法详解 一.scanf函数是什么?二.scanf函数的作用三.注意事项1.输入数据2.%c 四.字段宽度五.scanf函数的返回值 一.scanf函数是什么? 1.首先我们需要知道,scanf函数是一种格式化输入函数(按照格式字符串的格式&…

scanf与scanf_s函数的使用 详解

1.scanf_s(是vs提供的函数) a.代码1 int main() {char a 0;//scanf_s("%c", &a, 1);scanf_s("%c", &a, sizeof(a));return 0; } scanf_s有三个参数,最后一个是变量a所占据空间的大小(单位为字节)&…

【opencv4】opencv视频教程 C++(opencv教程)1、opencv介绍和环境搭建

下一讲:【opencv4】opencv视频教程 C(opencv教程)2、加载,修改,保存图像 [opencv_C] 入门强推!!!【B站最全】 文章目录 opencv介绍和环境搭建opencv组成架构核心模块环境搭建&#…

Opencv的使用教程,opencv比较全的基础教程

*免责声明: 1\此方法仅提供参考 2\搬了其他博主的操作方法,以贴上路径. 3* 场景一:Opencv对图像视频的基本使用 场景二:Opencv对图像视频进一步处理 场景三:Opencv对图像视频高级处理 . . . 课程视频 课程视频2 ubuntu18下采用源码编译的方式安裝opencv / 简单方式安装 …

VC2015搭建OpenCV环境(超详细教程)

1、首先下载OpenCV源码库 ① https://sourceforge.net/projects/opencvlibrary/?sourcetyp_redirect ②双击运行.exe文件,导出源代码 2、windows环境变量设置(测试环境是win7 64位) ①找到系统高级设置path 右键计算机--》属性--》高级系…

OpenMV IDE安装使用教程

一、什么是OpenMV OpenMV是一个开源,低成本,功能强大的机器视觉模块。以STM32F427CPU为核心,集成了OV7725摄像头芯片,在小巧的硬件模块上,用C语言高效地实现了核心机器视觉算法,提供Python编程接口。使用者…

OpenMV使用技巧

目录 一、光照影响1. 光照过强2. 光照过弱 二、杂框影响1. threshold参数2. 长宽比 三、画图 一、光照影响 OpenMV在使用过程中可能会遇到光照太强或者光照太弱等影响图像识别的情况,尤其在跑神经网络模型时,光照太强或太弱对识别结果的影响是致命的。 …

VC++6.0配置opencv1.0教程(全网最详细)附加图文

VC6.0配置opencv1.0教程&#xff08;全网最详细&#xff09;附加图文 &#xff08;&#xff08;很多评论我没时间看&#xff0c;tiquma写出来了&#xff0c;有兴趣的同学自己找一找8&#xff09; 配置前 第一次写博客&#xff0c;激动٩(๑>◡<๑)۶&#xff0c;坐标武…

C/C++ vs2017 OpenCV简单入门

离职之际&#xff0c;自学一下图像相关的知识点&#xff0c;只是简单学了一点皮毛&#xff01; 目录 一、 OpenCV环境搭建 二、使用opencv 常用接口说明 使用案例 1. 图像色彩空间转换 2. Mat对象的创建与赋值 3. 图像像素的读写操作 4. 图像像素的算术操作 5. 滚动条…

VS2017搭建OpenCV环境(新手详细教程)

整体流程如下&#xff1a; 下载Visual Studio2017版本下载OpenCV3.4.1版本配置环境变量在Visual Studio2017中引入头文件、库文件、链接库环境测试 说明&#xff1a;没有必要根据博主的博客下载与博客相应的版本&#xff0c;不同版本之间只需要改一点点东西即可 1、下载安装V…

《OpenCV联合C++》第一课:OpenCV下载及环境配置

1.下载OpenCV软件 官网下载Releases - OpenCV 下载对应文件即可 下载后导出到本地 导出中。。。 2.环境变量配置 导入对应文件夹下面路径..\opencv\build\x64\vc15\bin 3.文件夹内文件拷贝指定路径 打开文件夹下面路径.\opencv\build\x64\vc15\bin 将bin目录下面的opencv_wor…

OpenCV入门教程,超详细OpenCV入门教程!10小时让你轻松掌握opencv的使用

OpenCV是一个基于BSD许可&#xff08;开源&#xff09;发行的跨平台计算机视觉和机器学习软件库&#xff0c;可以运行在Linux、Windows、Android和mac OS 操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C 类构成&#xff0c;同时提供了Python、Ruby、MATLAB等语言的接…

VS+OpenCV+VC超详细的配置教程

写在前面的话 版权声明&#xff1a;转载请注明出处&#xff01;博主是一个小菜鸟&#xff0c;并且非常玻璃心&#xff01;如果文中有什么问题&#xff0c;请友好地指出来&#xff0c;博主查证后会进行更正。每篇文章都是博主现阶段的理解&#xff0c;如果理解的更深入的话&…

OpenMV入门介绍

目录 一、OpenMV是什么二、OpenART mini与OpenMV对比三、图像处理背景知识1.像素和分辨率2. 帧率3.RGB三原色4.LAB颜色空间 四、OpenMV图像处理方法1.感光元件自动增益/白平衡/曝光窗口ROI 2.画图画线画框画圆画十字写字示例 3. 寻找色块&#xff08;颜色识别&#xff09;find_…

最新opencv-c++安装及配置教程(VS2019 C++ opencv4.4.0)

以前写过opencv python的安装教程&#xff0c;后来有一些同学开始私信我如何安装及配置opencv c。 本文是以最新的版本入手&#xff0c;一步步详解opencv c 的安装及配置过程。&#xff1a; 第一步&#xff0c;下载解压opencv 算法库 进入到以下链接&#xff1a;https://opencv…

超详细:VS配置OpenCV教程,需要收藏

目录 安装环境说明 下载OpenCV 配置OpenCV开发环境 属性表 测试 可能存在的问题 安装环境说明 操作系统&#xff1a;Windows10 OpenCV版本&#xff1a;OpenCV2和OpenCV3 VS版本&#xff1a;VS2015或者VS2017 下载OpenCV OpenCV下载地址&#xff1a;Home - OpenCV或者直…

【OpenCV教程合集版】一文入门和精通OpenCV(C/C++)

文章目录&#xff08;OpenCV版本4.6.0&#xff09; 1.数据类型2.矩阵基本操作2.1 全零矩阵2.2 全一矩阵2.3 单位矩阵2.4 矩阵转置2.5 求逆矩阵2.6 逗号式分隔创建矩阵2.7 矩阵定义(只列出常用的)2.7.1 数据类型Scalar 2.8 通过ptr与at函数遍历矩阵2.8.1 Vec类型 2.9 通过迭代器…

openCV超详细入门教程(python版)

涉及内容&#xff1a; 背景提取颜色过滤边缘检测用于对象识别的特征匹配一般对象识别 你将需要两个主要的库&#xff0c;第三个可选&#xff1a;python-OpenCV&#xff0c;Numpy 和 Matplotlib。 一、加载图片 首先&#xff0c;我们正在导入一些东西&#xff0c;我已经安装了…