点赞、收藏必读文章--数据分析的多变量分析

article/2025/8/14 16:21:08

数据探索性分析(EDA)——多(双)变量分析

0 引言

上一篇文章震惊!Python单变量分析竟然如此简单?
介绍了数据分析中的单变量分析,但是我们在实际场景中,遇到的数据大多数是具有多特征、多变量的,因此除了对单个变量进行分布、缺失等情况的探索,还需要对变量与变量之间的关系进行探索,因此今天小编就介绍一下多变量分析,而多变量分析本质上还是双变量的分析,所以小编会使用较大篇幅来进行双变量分析的介绍,再简单介绍一下多变量分析。

1 数据准备

本文中,小编在本地读取了一个实验所用的数据集,数据集没有业务含义,只用于方法的讲解。下图展示了数据的前10行,由此查看数据的大致情况:
在这里插入图片描述

本次数据共有v0~v9共10个特征,其中v0、v1、v2是类别型变量, v3~v9是连续型变量。

2 双变量分析

双变量分析目的是为了探索变量之间的关系,来更好地发现规律或者进行特征工程的建设。上文我们提到了变量可以分为连续型变量和类别型变量,因此根据变量类型的不同,双变量分析组合也可以分为三种:连续型与连续型、连续型与类别型、类别型与类别型。

2.1 连续型与连续型

连续型与连续型变量的分析主要有两种方法:回归分析和相关分析。其中回归分析主要的方法是散点图和回归曲线,相关分析主要是计算相关性以及绘制相关性热图。

(1) 回归分析

回归分析主要使用散点图+回归曲线进行观察,单独使用回归曲线用的比较少,因为在未知的情况下去观察回归曲线的话,并不一定能得到有效的结果,而散点图的形状可以更加容易直观地看出变量之间的关系是线性还是非线性,也能一定程度上判断出相关程度。所以这里我们用seaborn.regplot()方法绘制散点图来查看数据情况:

seaborn.regplot(x, y, data=None, ci=95, color=None, marker=’o’)

以下是是对几个常用参数的说明:

  • x, y: 输入变量。格式为字符串、序列(series)或向量数组(vector array)。如果是字符串,应该与data中的列名相对应。 使用pandas对象时,轴将被Series的名字标记。
  • data: 数据集,类型为DataFrame,其中每列为一个变量,每行为一个观测样本。
  • color:(可选)用于选择绘图元素的颜色。
  • marker:(可选)用于散点图的标记。
  • ci:(可选) 位于[0, 100]之间的整数或None,表示回归估计的置信区间的大小。表现在图中为回归线周围的半透明带绘制。

下面就来实战一下,选择v3、v4列进行绘图:

sns.regplot(x = "v3", y = "v4", data = data, color='green', marker='*')   
plt.show() 

在这里插入图片描述
直线附近的阴影区域为回归估计的置信区间,ci取值越大,阴影区域越大。图中可以看到v3、v4线性关系并不强,散点图分布比较零散,没有呈现线状。

除了sns.regplot()方法,还有sns.jointplot()方法,用于绘制双变量联合分布图:

seaborn.jointplot(x,y,data=None,kind='scatter')
  • x,y:分别记录x轴与y轴的数据名称
  • data:数据集,数据类型为DataFrame
  • kind:用于设置图形的类型,可选的类型有:scatter、reg、resid、kde、hex,分别表示散点图、回归图、残差图、核密度图和蜂巢图

还是以v3、v4列进行绘图:

sns.jointplot(x = "v3", y = "v4", data = data, kind='reg')
plt.show()

在这里插入图片描述
从图中就可以看到,sns.jointplot()其实就是在sns.regplot()图的上方和左侧再分别加上每个单变量的分布,单变量的分布在上一篇文章中有提到,可以用直方图和核密度图进行展示。

(2) 相关分析

散点图能比较直观地看出变量之间的关系,但是不能准确地量化变量之间的相关性,不能明确地反映变量关系的强弱。因为我们就可以用相关性来弥补散点图的缺陷,对变量之间的关系进行量化分析。

相关性系数(Correlation)的取值范围为[-1, 1],当Corr=1时,说明两个变量强正线性相关;当Corr=0时,说明两个变量不相关;当Corr=-1时,说明两个变量强负线性相关。当然,我们在实践的时候,并不会单纯把变量的相关性分为以上三种,而是会把相关性取绝对值,再分别定义为无相关性(0-0.1)、弱相关(0.1-0.3)、中等相关(0.3-0.5)、强相关(0.5-1),其中,除了无相关性,其他三种又可以分为正负两类。

对于相关性的计算,Python中有多种方法可以计算,比如NumPy包 的np.corrcoef()Scipy包的scipy.stats.pearsonr(x, y) 、scipy.stats.spearmanr(x, y),还有就是pandasx.corr(y),由于在平常数据分析用到pandas居多,所以小编这里就讲一下pandas

data['v3'].corr(data['v4'])
0.2289827482589131

可以看到v3、v4列的相关性为0.229,为弱相关。但是实际数据处理过程中,因为有多个特征,所以我们一般不会两个两个特征去分别计算相关性,我们可以直接以矩阵的形式计算出每一个特征与其他所有特征的相关性并以热图进行可视化,具体计算方法在后文会介绍。

2.2 连续型与类别型

分析连续型与类别型变量的关系的思想:观察对于类别型变量的不同类别,连续型变量的分布情况。这个思想可以通过小提琴图(Violin Plot)实现。小提琴图是箱型图与核密度估计图的结合,它显示了一个(或多个)分类变量多个属性上的定量数据的分布,从而可以比较这些分布。与箱形图不同,其中所有绘图单元都与实际数据点对应,小提琴图描述了基础数据分布的核密度估计。

seaborn.violinplot(x=None, y=None, hue=None, data=None)
  • x, y, hue:数据或向量数据中的变量名称
  • dataDataFrame、数组、数组列表

这里对参数的介绍比较简单,想进一步了解的读者可以移步官网。

前文提到了v0、v1、v2是类别型变量,所以小编就绘制v0v3变量之间的小提琴图:

sns.violinplot(x = "v0", y = "v3", data = data)
plt.show()

在这里插入图片描述
可以看到,变量v0共有0.0~7.0八个类别,每个类别分别对应的v3变量的分布都不相同,由此可以对比在不同类别的情况下,连续变量v0的分布情况。

2.3 类别型与类别型

类别型变量之间也存在多种分析方法,如卡方检验、小提琴图、双向表、堆叠柱状图。本文中小编会介绍小提琴图以及卡方检验。

首先,绘制v0v1变量之间的小提琴图:

在这里插入图片描述
卡方检验用于属于假设检验的一种,即比较理论频次与实际频次的吻合程度,这样可以分析变量的拟合程度,如拟合优度检验。由于我们的数据中没有对应的理论数据去检验相应的类别型变量,便不进行代码演示了。但是需要了解一下卡方检验的计算方法,可以用scipy包的stats模块中的chisquare()函数,又或者sklearn中的chi2方法。

3 多变量分析

有人可能疑问了,为啥把双变量单独列出来,双变量难道不属于多变量吗?其实双变量是属于多变量的,但是由于双变量分析的重要性,小编将双变量分析单独列出来讲解,多次的双变量分析就可以组成多变量分析,所以多变量分析实际上就是将多次的双变量分析工作集成在了一起。双变量分析用于你想了解两个变量的关系,此时其实你已经确实你需要分析哪两个变量了,而多变量分析可以用于你不知道哪些变量需要分析、哪些变量之间有相关性,则你就可以直接用一个多变量分析来观察哪些变量有相关性从而进行进一步的分析。

3.1 多连续型

在上面提到了可以用散点图观察变量之间是否存在线性关系,而seaborn中同样有方法seaborn.pairplot()可以以矩阵的形式呈现变量与其他所有变量之间的散点图,由于散点图比较适用于连续型变量之间,因此我们先把连续型变量选出来:

numeric_features = ['v3', 'v4', 'v5', 'v6', 'v7', 'v8', 'v9']
data_numeric = data[numeric_features]

再用seaborn.pairplot()方法进行散点图矩阵可视化:

seaborn.pairplot(data,kind='scatter', diag_kind='auto')
  • data:数据框架,其中每列是变量,每行是观察量。
  • kind:(可选){‘scatter’, ‘reg’}。一种非等同关系的图类型。
  • diag_kind:(可选){‘auto’, ‘hist’, ‘kde’}, 对角线子图的一种图形。

在这里插入图片描述

可以看到,整个矩阵中对角线呈现的是单个变量的核密度曲线,这个由diag_kind控制;其他的图都是某变量与其他变量的散点图,由kind控制。pairplot()图可以直接观察所有连续变量是否存在线性关系。

再计算连续型变量相关性并用热度图进行可视化:

correlation = data_numeric.corr()
print(correlation)
          v3        v4        v5        v6        v7        v8        v9
v3  1.000000  0.228983 -0.385337 -0.714666 -0.233040  0.692692  0.230217
v4  0.228983  1.000000  0.081398  0.007328 -0.017709  0.047354  0.999474
v5 -0.385337  0.081398  1.000000 -0.052123 -0.046994 -0.909977  0.104331
v6 -0.714666  0.007328 -0.052123  1.000000 -0.020796 -0.200386  0.006363
v7 -0.233040 -0.017709 -0.046994 -0.020796  1.000000 -0.230853 -0.029284
v8  0.692692  0.047354 -0.909977 -0.200386 -0.230853  1.000000  0.031585
v9  0.230217  0.999474  0.104331  0.006363 -0.029284  0.031585  1.000000

然后再进行可视化,使用的方法为seaborn.heatmap()

seaborn.heatmap(data, vmin=None, vmax=None, square=False)
  • data:矩形数据集。可以强制转换为 ndarray 格式数据的 2 维数据集。如果提供了DataFrame 数据,索引/列信息将用于标记列和行。
  • vmin, vmax:浮点型数据,可选参数。用于锚定色彩映射的值,否则它们是从数据和其他关键字参数推断出来的。
  • square:布尔值,可选参数。如果为 True,则将坐标轴方向设置为“equal”,以使每个单元格为方形。
plt.figure(figsize = (7, 7))
sns.heatmap(correlation,square = True)

在这里插入图片描述

3.2 多类别型

多个类别型变量的观察不像连续型变量那样灵活,一般可以通过小提琴图或或者多柱状图进行可视化。

其中,多柱状图可以通过seaborn.FacetGrid()来绘制在同一个网格中,该方法用于绘制条件关系的多图网格,感兴趣的读者可以移步官网进行学习。

def count_plot(x, **kwargs):sns.countplot(x=x)
f = pd.melt(data, value_vars=categorical_features)
g = sns.FacetGrid(f, col="variable",  sharex=False, sharey=False, size=5)  
g = g.map(count_plot, "value")

在这里插入图片描述

但是多个count_plot图只是单纯把几个图集中在一起,不用一个个分别绘制了而已,却无法进一步观察变量之间的关系,所以可以使用上文提到小提琴图进行多变量关系的绘制,具体如下:

plt.figure(figsize=(10,6))
sns.violinplot(x="v0", y="v1", hue="v2",data=data)

在这里插入图片描述从图中可以观察v2=0v2=1时,v0变化时v1的分布变化情况,再来做进一步分析。
如果需要小编使用的实验数据,可以私信小编哦!


http://chatgpt.dhexx.cn/article/20gbEklC.shtml

相关文章

“多变量分析”——数据挖掘、数据分析

I。多重对应分析 多重对应分析在超过两个以上定类变量时有时候非常有效,当然首先我们要理解并思考,如果只有三个或有限的几个变量完全可以通过数据变换和交互表变量重组可以转换成两个定类变量,这时候就可以用简单对应分析了。 对应分析对数据…

Open source Python toolbox for seismology

Open source Python toolbox for seismology ObsPy: A Python Toolbox for Seismology https://www.iris.edu/hq/webinar/2015/05/obspy_a_python_toolbox_for_seismology https://github.com/obspy/obspy http://www.obspy.org → https://github.com/obspy/obspy/wiki 2.用p…

Xmy的Python----Numpy库

目录 例题10-1:创建数组并查看数组属性 构造复杂数组 生成随机数 例题10-2:绘制:随机生成10000数据,服从均值为0,方差为1的正态分布的直方图(间隔个数:50) 通过索引访问数组 数组的…

python3.8安装pysal库

python3.8 安装 pysal 库 我最后是在虚拟环境中测试成功的,在原来的环境中测试还是有问题,但是装这个库只是为了一个assignment,踩完坑来总结一下,先用上再说。 1. 创建虚拟环境 正常环境无论是conda install 还是 conda-forge …

YYlabelCopy

YYlabelCopy 前言 最近公司刷题项目重构,之前刷题是采用富文本渲染,性能极差,业界大神ibireme的YYKit想必大家都知道,YYText的好用之处我就不再赘述.一开始我们是把UIlabel换成YYTextView,为什么不直接换成YYlabel,YYlabel支持异步绘制,因为我们是做公考项目的,试题都要支持复…

Kong Customize Python Plugin

Kong Customize Python Plugin 前情提要:由于公司业务需求,需要针对 Kong 自定义插件,而 Kong 的插件主要是 Lua 语言,公司的技术栈是 Python,所以升级了 Kong 版本到 3.1。Kong3.1支持使用 Python 语言的插件&#xf…

ubuntu中pip install cython_bbox报错

pip install cython_bbox报错 问题记录 pip install cython_bbox报错如下 Collecting cython_bboxUsing cached cython_bbox-0.1.3.tar.gz (41 kB)Preparing metadata (setup.py) ... errorerror: subprocess-exited-with-error python setup.py egg_info did not run succe…

Cython-bbox pip 安装报错

安装步骤 下载Cython_bbox源码,点击Download files下载。解压文件。打开setup.py,找到第31行,把其中extra_compile_args[’-Wno-cpp’]的替换为extra_compile_args{‘gcc’: [‘/Qstdc99’]}。保存改动,返回cython_bbox-0.1.3文件…

pysot-toolkit测试及对比

文章目录 前言1、环境搭建2、文件配置3、测试及对比3.1 单跟踪器测试3.2 多跟踪器对比 前言 pysot-toolkit是一款评估单目标跟踪性能的工具,可以计算OPE(One Pass Evaluation)下的Success和Precision、以及VOT(Visual Object Tracking)的性能指标Accuracy、Robustne…

Python加解密库——pycrypto(pycryptodome)

文章目录 简介安装方法一:Visual Studio方法二:pycryptodome(推荐) 初试公钥加解密对称加密非对称加密 数字签名哈希函数安全通信加密IO封装遇到的坑参考文献 简介 pycrypto 实现了哈希函数(如 SHA256)和加…

自制Python小工具(1)——Gadgets 0.1

文章目录 1. 前言2. Gadgets 0.1介绍2.1 使用过程概述 3. Gadgets 0.1功能实现3.1 创建文件3.2 功能编程3.2.1 安装3.2.2 导库3.2.3 定义函数并实现功能 3.3 主程序3.3.1 向用户问好并提供指示3.3.2 填入功能 3.4 装饰加载 4. 源码展示4.1 extract_music.py4.2 loading.py4.3 G…

Windows下安装pycocotools(本人亲测,可以解决)

Windows下安装pycocotools 1. 下载pycocotools的源码2. 安装python对应的VC3. 进行pycocotools的编译4. 测试安装是否成功 参考博客:原博客 由于windows下是不能直接使用conda install 或者pip install pycocotools,唉,不像linux系统&#x…

学习 PySOT(2)(PySOT-toolkit、对比、画图)

文章目录 前言一、pysot-toolkit准备工作1.所需环境要求2.文件配置3.运行配置(对比算法) 二、安装latex软件(win10系统)1.安装MiKTeX2.安装TexMaker3.配置TexMaker4.配置MiKTeX 三、运行eval.py画图1. 修改eval.py参数,运行2. 常见问题解决 前…

redis-exporter监控

文章目录 启动redis-export服务启动prometheus服务启动granfana服务测试报警 使用redis-exporter监控redis服务,并且使用prometheus收集数据,使用grafana展示数据。 监控报警利用alertmanager插件,报警信息发送钉钉消息。所使用的安装包可以 …

Zabbix实现对Redis的监控

Zabbix实现对Redis的监控 环境准备 五台机器: zabbix_agent 5.0 被动模式(已安装) Zabbix_java_gateway 5.0 (已安装) 10.0.0.7 MariaDB-10.4.22(已安装) zabbix_server 5.0(已安…

zabbix配置redis监控

1 redis监控需要用到zabbix_agent2的版本,该版本涵盖了zabbix_agent1的全部功能。安装zabbix_agent2 yum install zabbix-agent2-5.0.13-1.el7.x86_64 -y 2 配置zabbix_agent2.conf的脚本,将redis的相关信息配置。vi /etc/zabbix/zabbix_agent2.conf …

【中间件】Redis监控以及指标

一、监控指标 1.1、性能指标:Performance Name Description latency Redis响应一个请求的时间 instantaneous_ops_per_sec 平均每秒处理请求总数 hi rate(calculated) 缓存命中率(计算出来的 1.2、内存指标: Memory Name Description used_m…

Redis监控和预警

1.摘要 本人从事Java Web开发,在项目开发中会用到很多中间件,本文主要介绍Redis监控的一点心得和使用,公司DBA也有相应的监控,但是我们的业务比较重要,想做一个备份监控,对Redis监控需要做监控和预警&#…

如何完善Redis监控告警?

本文字数:3940字 预计阅读时间:20分钟 一、背景二、监控指标分类三、监控指标说明四、总结 一、背景 Redis监控告警实践是基于开发CacheCloud云平台过程中不断实践和总结出来,随着Redis实例规模不断变大,会遇到各种各样的问题&…

redis集群监控

通过Prometheus监控redis集群 一、promethus安装 下载地址: https://github.com/prometheus/prometheus/releases 1、下载 wget https://github.com/prometheus/prometheus/releases/download/v2.32.1/prometheus-2.32.1.linux-amd64.tar.gz 2、安装、配置 ta…