Seaborn 变量分布分析

news2024/11/13 3:55:31

文章目录

  • 一、数据集
    • 1.1 下载数据集
    • 1.2 字段含义说明
    • 1.3 导入数据集
  • 二、初步分析
    • 2.1 缺失值分布查看
    • 2.2 异常值分布查看
    • 2.3 查看变量分布
  • 三、数值变量分析
    • 3.1 `replot()`:多个变量之间的关联关系
    • 3.2 `lmplot()/regplot`:分析两个变量的线性关系
    • 3.3 `displot()`:两个变量的联合分布
    • 3.4 `jointplot()`:绘制两个变量的联合分布和各自分布
    • 3.5 `pairplot()`:成对绘制所有数值变量的联合分布
    • 3.6 `corr()`与`heatmap()`
  • 四、类别型变量分析
    • 4.1 `countplot()函数`与`histplot()函数`
    • 4.2 类别变量与数值变量的关系
      • 4.2.1 不同类别中数值变量的均值/中值估计
      • 4.2.2 不同类别中数值变量的取值范围
      • 4.2.3 不同类别中数值变量的分布图

当处理一个数据集的时候,我们经常会想要先看看特征变量是如何分布的。这会让我们对数据特征有个很好的初始认识,同时也会影响后续数据分析以及特征工程的方法

一、数据集

1.1 下载数据集

使用经典的泰坦尼克号数据集

1.2 字段含义说明

PassengerId:用户id
Survival:是否生还,0-否,1-是
Pclass:舱位,1-头等舱,2-二等,3-三等
Name:姓名
Sex:性别
Age:年龄
sibsp:在船上的兄弟/配偶数
parch:在船上父母/孩子数
Ticket:票号
Fare:票价
cabin:Cabin number;客舱号
Embarked:登船地点
  • 类别型字段:Survived, Sex, and Embarked. Ordinal: Pclass
  • 连续型字段:Age, Fare. Discrete: SibSp, Parch

1.3 导入数据集

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# 在 Jupyter 中正常显示图形,若没有这行代码,图形显示不出来的
%matplotlib inline

df = pd.read_csv(r'E:\data\train.csv')
df

在这里插入图片描述

二、初步分析

2.1 缺失值分布查看

missing = df.isnull().sum()/len(df)
missing = missing[missing > 0]
missing.sort_values(inplace=True)
missing.plot.bar()

在这里插入图片描述

2.2 异常值分布查看

通过箱线图查看变量age的异常值分布

# 定义数据和变量名,如果设置x='Age',分布图将横着显示
sns.boxplot(data=df, y='Age')    

在这里插入图片描述
红色框内的数据即为变量age的异常值

不同的Pclass’(船舱)下的乘客的Age(年龄)的异常值分布

# 调换x/y轴,可以实现箱线图的横向显示
sns.boxplot(x='Pclass',y='Age',data=df)

在这里插入图片描述
不同船舱和不同性别下年龄的异常值箱线图分布

# 调换x/y轴,可以实现箱线图的横向显示
ns.boxplot(x='Pclass',y='Age',hue='Sex',data=df)

在这里插入图片描述

2.3 查看变量分布

直方图:distplot()

  • kde:控制密度估计曲线的参数,默认为 True,不设置会默认显示
  • bins:控制分布矩形数量的参数,通常我们可以增加其数量,来看到更为丰富的信息
  • reg: 控制是否生成观测数值的小细条。

先分箱,然后计算每个分箱频数的数据分布。和条形图的区别,条形图有空隙,直方图没有,条形图一般用于类别特征,直方图一般用于数字特征(连续型)。多用于y值和数字(连续型)特征的分布画图

#去除'age'中的缺失值,distplot不能处理缺失数据
df['Age'].dropna(inplace=True)

sns.distplot(df['Age'])

在这里插入图片描述

#创建一个1行三列的图片
fig,axes=plt.subplots(1,3)  

# 默认
sns.distplot(df['Age'],ax=axes[0])
# 不显示直方图
sns.distplot(df['Age'],hist=False,ax=axes[1])  
# 不显示核密度
sns.distplot(df['Age'],kde=False,ax=axes[2])  

在这里插入图片描述

fig,axes=plt.subplots(1,2) 

# 分成20个区间
sns.distplot(df['Age'],kde=False,bins=20,ax=axes[0]) 
# 以0,1,2,3为分割点,形成区间[0,1],[1,2],[2,3],区间外的值不计入。
sns.distplot(df['Age'],kde=False,bins=[x for x in range(4)],ax=axes[1]) 

在这里插入图片描述
计数图:countplot()

计数图,可将它认为一种应用到分类变量的直方图,也可认为它是用以比较类别间计数差。当你想要显示每个类别中的具体观察数量时,countplot 很容易实现

sns.countplot(x="Pclass", data=df)

在这里插入图片描述

# 查看不同船舱不同性别的人数分布
sns.countplot(x="Pclass", hue="Sex", data=df)

在这里插入图片描述

三、数值变量分析

3.1 replot():多个变量之间的关联关系

replot()函数用来表示多个变量之间的关联关系。默认情况下是绘制散点图,也可以绘制线性图,具体绘制什么图形是通过kind参数来决定的。

散点图

"""
x --> 代表x轴数据
y --> 代表y轴数据
data --> 数据集
kind --> 选择绘图类型 默认为scatter,还有line等
"""
# 年龄与票价之间的关系
sns.relplot(x="Age", y="Fare", data=df, kind="scatter")

在这里插入图片描述

"""
x --> 代表x轴数据
y --> 代表y轴数据
data --> 数据集
kind --> 选择绘图类型 默认为scatter,还有line等
"""
# 不同船舱下 年龄与票价之间的关系
sns.relplot(x="Age", y="Fare", hue='Pclass', data=df, kind="scatter")

在这里插入图片描述
线形图

# 年龄与票价之间的关系,阴影部分表示置信区间
sns.relplot(x="Age", y="Fare", data=df, kind="line")

在这里插入图片描述

# 不同船舱下 年龄与票价之间的关系
sns.relplot(x="Age", y="Fare", hue='Pclass', data=df, kind="line")

在这里插入图片描述
从以上散点图和线形图可以观察到年龄与票价没有关系

3.2 lmplot()/regplot:分析两个变量的线性关系

lmplot是用来绘制回归图的,通过lmplot我们可以直观地总览数据的内在关系

sns.lmplot(data=df, x='Age', y='Fare')

在这里插入图片描述

# 添加类别,不同船舱下,年龄与票价的回归线
sns.lmplot(data=df, x='Age', y='Fare', hue='Pclass')

在这里插入图片描述

3.3 displot():两个变量的联合分布

# 默认直方图
sns.displot(data=df, x='Age', y='Fare')

在这里插入图片描述

# kde曲线
sns.displot(data=df, x='Age', y='Fare', kind='kde')

在这里插入图片描述

3.4 jointplot():绘制两个变量的联合分布和各自分布

默认情况下,联合分布是散点图,可以通过kind进行设置。kind is one of [‘scatter’, ‘hist’, ‘hex’, ‘kde’, ‘reg’, ‘resid’]

# 设置x、y轴数据,设置高度
sns.jointplot(x='Age',y='Fare',data=df,height=5)

在这里插入图片描述
设置绘图种类为reg,颜色为green

sns.jointplot(x='Age',y='Fare',data=df,kind='reg',height=5,color='green')

在这里插入图片描述

3.5 pairplot():成对绘制所有数值变量的联合分布

pairplot()函数是用来展现变量两两之间的关系,线性、非线性、相关等等

# 全部变量都放进去
sns.pairplot(df)

在这里插入图片描述
可以看到对角线上是各个属性的直方图(分布图),而非对角线上是两个不同属性之间的相关图。

# kind:用于控制非对角线上图的类型,可选'scatter'与'reg'
# diag_kind:用于控制对角线上的图分类型,可选'hist'与'kde'

sns.pairplot(df, kind='reg',diag_kind='ked')
# sns.pairplot(df, kind='reg',diag_kind='hist')

在这里插入图片描述
针对某一字段进行分类

# hue:针对某一字段进行分类
sns.pairplot(df, hue='Pclass')

在这里插入图片描述

3.6 corr()heatmap()

corr函数
在数据相关性分析中,corr()函数表示了data中的两个变量之间的相关性,取值范围为[-1,1],取值接近-1,表示反相关,类似反比例函数,取值接近1,表正相关。

car_cor = df.corr()
car_cor

在这里插入图片描述
heatmap()函数
热力图是用颜色编码的矩阵来绘制矩形数据,把求到的相关系数表示出来

sns.heatmap(car_cor, cmap='Blues', annot=True, fmt='.2f', linewidth=0.5)

在这里插入图片描述

四、类别型变量分析

4.1 countplot()函数histplot()函数

sns.countplot():计数图,用于画类别特征的频数条形图
sns.histplot():直方图,也是关于类别特征的频率分布,与countplot()函数功能类似

# 对船舱类别变量分析
sns.distplot(df['Pclass'])

在这里插入图片描述

其他用法类似countplot()函数

4.2 类别变量与数值变量的关系

4.2.1 不同类别中数值变量的均值/中值估计

barplot 条形图,利用矩阵条的高度反映数值变量的集中趋势,以及使用errorbar功能(差棒图)来估计变量之间的差值统计(置信区间)。需要提醒的是 barplot() 默认展示的是某种变量分布的平均值(可通过参数修改为 max、median 等)。

sns.barplot(x='Pclass', y='Age', hue='Sex',data=df)

在这里插入图片描述

pointplot:点图,点图代表散点图位置的数值变量的中心趋势估计,并使用误差线提供关于该估计的不确定性的一些指示。点图比条形图在聚焦一个或多个分类变量的不同级别之间的比较时更为有用。

点图尤其善于表现交互作用:一个分类变量的层次之间的关系如何在第二个分类变量的层次之间变化。

重要的一点是点图仅显示平均值(或其他估计值),但在许多情况下,显示分类变量的每个级别的值的分布可能会带有更多信息。在这种情况下,其他绘图方法,例如箱型图或小提琴图可能更合适。

sns.pointplot(x='Pclass', y='Age', hue='Sex',data=df)

在这里插入图片描述

4.2.2 不同类别中数值变量的取值范围

boxplot:箱线图,是一种用作显示一组数据分散情况的统计图。它能显示出一组数据的最大值、最小值、中位数及上下四分位数。因形状如箱子而得名。这意味着箱线图中的每个值对应于数据中的实际观察值。

sns.boxplot(x='Pclass',y='Age',data=df)

在这里插入图片描述

4.2.3 不同类别中数值变量的分布图

stripplot/swarmplot:散点图,在seaborn中有两种不同的分类散点图。stripplot() 使用的方法是用少量的随机“抖动”调整分类轴上的点的位置,swarmplot() 表示的是带分布属性的散点图。

# 设置'jitter'参数控制抖动的大小
sns.stripplot(x='Embarked',y='Fare', data=df,jitter=1)

在这里插入图片描述
swarmplot() 方法使用防止它们重叠的算法沿着分类轴调整点。它可以更好地表示观测的分布,它适用于相对较小的数据集。

sns.swarmplot(x='Embarked',y='Fare',data=df)

在这里插入图片描述
violinplot:小提琴图,小提琴图其实是箱线图与核密度图的结合,箱线图展示了分位数的位置,小提琴图则展示了任意位置的密度,通过小提琴图可以知道哪些位置的密度较高。

sns.violinplot(x='Pclass',y='Age',data=df)

在这里插入图片描述
在图中,白点是中位数,黑色盒型的范围是下四分位点到上四分位点,细黑线表示须。外部形状即为核密度估计。

设置hue参数,对字段进行细分。

# 置'hue'参数,对字段进行细分。
sns.violinplot(x='Pclass',y='Age',hue='Sex',data=df)

在这里插入图片描述
hue参数只有两个级别时,也可以通过设置split参数为True,“拆分”小提琴,提琴两边分别表示两个分类的情况,这样可以更有效地利用空间。

sns.violinplot(x='Pclass',y='Age',hue='Alive',data=df,split=True)

在这里插入图片描述
把上面提到的散点图加入小提琴图中:

sns.violinplot(x='Pclass',y='Age',data=df,inner=None)
sns.swarmplot(x='Pclass',y='Age',data=df,color='white')

在这里插入图片描述

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

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

相关文章

从前序与中序遍历序列构造二叉树——力扣105

题目描述 法一&#xff09;递归 复杂度分析 代码如下 class Solution { private:unordered_map<int, int> index;public:TreeNode* myBuildTree(const vector<int>& preorder, const vector<int>& inorder, int preorder_left, int preorder_ri…

Qt Quick - StackView

StackView 使用总结一、概述二、在应用中使用StackView三、基本的导航1. push Item2. pop Item3. replace Item四、深度链接五、寻找Item六、转换六、Item的所有权七、大小一、概述 StackView可以与一组相互链接的信息页面一起使用。例如&#xff0c;电子邮件应用程序具有单独…

HTML5 <img> 标签

HTML5 <img> 标签 实例 HTML5 <img>标签用于向网页中添加相关图片。 如何插入图像&#xff1a; <img src"smiley-2.gif" alt"Smiley face" width"42" height"42">尝试一下 &#xff08;更多实例见页面底部&…

基于营销类系统运营活动增长带来的数据库设计演进

一、前言 为了支持业务数据的不断增长&#xff0c;在数据库层面的性能提升主要体现在几个维度&#xff1a;1&#xff09;数据降级&#xff1b;2&#xff09;数据主题分而治之&#xff1b;3&#xff09;实时交易转异步&#xff1b;4&#xff09;硬件扩容&#xff0c;当然网上一…

question

4、Mysql高可用有几种方案&#xff0c;分别有什么特点? 特点优点缺点mysql group replication(MGR)组复制组内一半节点同意即可提交更改操作、最多支持 9 个节点、基于MRG插件、多节点写入支持、故障自动检测、引擎必须为 innodb、必须有主键、binlog 为 row强一致、paxos协议…

Arcgis Engine之打开MXD文档

Arcgis Engine之打开MXD文档概述方法一&#xff1a;方法二&#xff1a;概述 图层加载功能将用到MapControl 控件提供的LoadMxFile 方法。 该方法通过指定的*. Mxd文档路径直接获取 该方法第一个参数是文件路径&#xff0c; 第二个参数是MExd文档中地图的名称或索引&#xff0…

1.初识Earth Engine

Earth Engine平台是一个集科学分析和地理信息可视化的综合性平台&#xff0c;该平台提供丰富的API&#xff0c;以及工具帮助方便查看、计算、处理、分析大范围的各种影像等GIS数据。 基础数据 目前Earth Engine上已由几十PB的影像栅格数据及矢量数据数据地址。数据主要分为以…

Prometheus+Grafana从0到1搭建jvm监控

目 录1. 准备工作2. 添加配置2.1 添加maven依赖2.2 application.properties增加配置2.3 新增配置类2.4 配置Prometheus2.5 配置Grafana3. 小结在上一篇博客《 PrometheusMysqld_exporterGrafana从0到1搭建MySQL的可视化监控》&#xff0c;我们完成了对数据库的可视化监控搭建&a…

都说程序员就是吃青春饭,35岁就会被淘汰,我用自己的经历来告诉你事实

上个假期我回家了&#xff0c;遇到三姑六婆总会问我读研没读、工作怎么样、薪资多少等等问题&#xff0c;相信大家也都遇到过。我一般会用“在做程序员&#xff0c;写代码的这种话”来敷衍他们&#xff0c;但没想到他们懂得还挺多的&#xff0c;又搬出了一套关于程序员的理论&a…

当AI遇上元宇宙:智能科技如何助力虚拟世界的发展?

欢迎来到Hubbleverse &#x1f30d; 关注我们 关注宇宙新鲜事 &#x1f4cc; 预计阅读时长&#xff1a;10分钟 本文仅代表作者个人观点&#xff0c;不代表平台意见&#xff0c;不构成投资建议。 人工智能和元宇宙是21世纪最突出的技术之一。它们各自可以在许多方面提高人们…

MySQL、PostgreSQL、Oracle、SQL Server数据库触发器实现同步数据

数据库触发器是一种在数据库中设置的程序&#xff0c;当满足某些特定条件时&#xff0c;它会自动执行。触发器通常与数据表的操作&#xff08;例如插入、更新和删除&#xff09;相关联&#xff0c;它们可以帮助保证数据的完整性和一致性。在本篇博客中&#xff0c;我将介绍各种…

对SQL注入进行的一些总结

简介 SQL注入作为一种攻击方式最早可以追溯到20世纪90年代中期&#xff0c;当时Web应用程序开始流行并广泛使用数据库作为其后端数据存储。最早的SQL注入攻击是通过简单地在Web表单输入框中输入SQL代码来实现的&#xff0c;攻击者可以通过修改输入参数来篡改数据库查询的行为&a…

Pytorch 容器 - 2. Module的属性访问 modules(), children(), parameters(), buffers()等

目录 1. modules() 和 named_modules() 2. children() 和 named_children() 3. parameters() 和 named_parameters() 4. buffers() 和 named_buffers() Module类内置了很多函数&#xff0c;其中本文主要介绍常用的属性访问函数&#xff0c;包括&#xff1a; modules(), nam…

Spring事务源码-EnableTransactionManagement实现解析

Transactional注解 Transactional是spring中声明式事务管理的注解配置方式。Transactional注解可以帮助我们标注事务开启、提交、者回滚、事务传播、事务隔离、超时时间等操作。 而EnableTransactionManagement是开启Spring 事务的入口。 EnableTransactionManagement 标注启…

什么是数字人?数字人可以应用在哪些行业?

数字人指的是由计算机技术、人工智能技术和大数据技术等多种技术手段构建的一种虚拟的人类形态。数字人通常具备丰富的信息处理能力、模拟能力和学习能力&#xff0c;可以根据人们的需求进行智能化定制服务。 数字人 在很多行业领域&#xff0c;数字人都被广泛应用&#xff0…

【并发编程】ConcurrentHashMap源码分析(一)

ConcurrentHashMap源码分析CHM的使用CHM的存储结构和实现CHM源码put源码分析initTable 初始化tabletreeifyBin()和tryPresize()transfer 扩容和数据迁移高低位的迁移ConcurrentHashMap是一个高性能的&#xff0c;线程安全的HashMapHashTable线程安全&#xff0c;直接在get,put方…

spring security 的AuthenticationSuccessHandler 没有调用 ,无法生效

今天想不明白&#xff0c;我控制层写了一个登录的接口。结果验证成功了&#xff0c;我发现AuthenticationSuccessHandler 没有调用 &#xff0c;而且也不生效啊&#xff0c;最后研究终于发现是因为我们需要配置登录的url 这个url 我们访问&#xff0c;中间的什么控制器什么的框…

Win10怎么取消开机密码?这样做就可以!

集美们&#xff0c;我每次开电脑都要输入密码&#xff0c;感觉太麻烦了&#xff0c;想把开机密码取消掉&#xff0c;应该怎么做呀&#xff1f;感谢回答&#xff01;】 在Windows 10操作系统中&#xff0c;用户可以设置开机密码来保护计算机的安全性。然而&#xff0c;有时候用…

【CSS】使用绝对定位 / 浮动解决外边距塌陷问题 ( 为父容器 / 子元素设置内边距 / 边框 | 为子元素设置浮动 | 为子元素设置绝对定位 )

文章目录一、外边距塌陷描述1、没有塌陷的情况2、外边距塌陷情况二、传统方法解决外边距塌陷 - 为父容器 / 子元素设置内边距 / 边框三、使用浮动解决外边距塌陷 - 为子元素设置浮动四、使用绝对定位解决外边距塌陷 - 为子元素设置绝对定位一、外边距塌陷描述 在 标准流的父盒子…

AE开发20210601之绘制集合要素、绘制点、空间查询、属性查询、图形查询、选择集内容、符号化

AE开发之绘制集合要素绘制点步骤queryFilterQueryDefcursor查现有的SpatialRel可以有的空间关系有哪一些。Map类&#xff0c;对应的是FeatureSelection属性&#xff0c;SelectionCount属性&#xff0c;空间查询属性查询图形查询选择集内容符号化multiparrcolorRampLineSymbol下…