机器学习 | 如何使用 Seaborn 提升数据分析效率

Seaborn和Matplotlib都是Python可视化库,它们都可以用于创建各种类型的图表。但是,Seaborn 和Matplotlib在概念和设计上有一些不同。

Matplotlib虽然已经是比较优秀的绘图库了,但是它有个今人头疼的问题,那就是API使用过于复杂,它里面有上千个函数和参数,属于典型的那种可以用它做任何事,却无从下手。

Seaborn基于Matplotlib核心库进行了更高级的APl封装,可以轻松地画出更漂亮的图形,而Seaborn的漂亮主要体现在配色更加舒服,以及图形元素的样式更加细腻。以下是两者之间的区别所在:

设计理念上的差异: Matplotlib是一个基础绘图库,提供了多种绘图工具,但大部分需要手动设置图表的各种属性。Seaborn则是在Matplotlib的基础上进行了封装,并提供了更高级别、更简洁的API。Seaborn的目标是使用少量的代码创建美观的图表,而不需要繁琐的设置。

默认样式的不同: Matplotlib的默认样式比较简单,需要手动设置才能使图表更加美观。Seaborn 使用了更加现代、美观的默认样式,并提供了多种内置的主题,使得图表的创建更加容易。

统计数据可视化功能: Seaborn的设计初衷是为了可视化统计数据,因此它提供了许多用于可视化统计数据的函数,例如分类散点图、分布图、热力图等。这些函数通常比Matplotlib更高效,更易于使用。

多变量数据可视化功能: Seaborn提供了许多用于可视化多变量数据的函数,例如矩阵图、成对图等。这些函数使得分析多变量数据更加容易。

总的来说,Seaborn具有更高级别、更简洁的API,适用于可视化统计数据和多变量数据。它的默认样式更加美观,使用更加方便。Matplotlib则是一个更加灵活、可定制性更强的绘图库,适用于创建各种类型的图表。大家可以根据自身情况选择合适的绘图库,接下来在开始讲解如何使用本次的Seaborn绘制图表之前,需要安装和导入绘图的接口,代码如下:

pip install seaborn -i https://pypi.mirrors.ustc.edu.cn/simple

目录

绘制单变量分布

绘制双变量分布

分类数据绘图


当处理一组数据时,通常先要做的就是了解变量是如何分布的。

1)对于单变量的数据来说采用直方图或核密度曲线是个不错的选择

2)对于双变量来说,可采用多面板图形展现,比如散点图、二维直方图、核密度估计图形等

针对这种情况,Seaborn库提供了对单变量和双变量分布的绘制函数,如histplot函数、displot函数,下面来介绍这些函数的使用,具体内容如下:

绘制单变量分布

可以采用最简单的直方图描述单变量的分布情况。Seaborn中提供了histplot和displot函数,它默认绘制的是一个带有核密度估计曲线的直方图。distplotO函数的语法格式如下。

# a: 表示要观察的数据,可以是Seies、一维数组或列表。
# bins:用于控制条形的数量。
# kde:接收布尔类型,表示是否绘制高斯核密度估计曲线。
# mg: 接收布尔类型,表示是否在支持的轴方向上绘制rugplot。
seaborn.displot(a, bins=None, kde=True, rug=False, fit=None, color=None)

呈现的效果如下所示:

绘制双变量分布

两个变量的二元分布可视化也很有用。在Seaborn中最简单的方法是使用jointplot()函数,该函数可以创建一个多面板图形,比如散点图、二维直方图、核密度估计等,以显示两个变量之间的双变量关系及每个变量在单坐标轴上的单变量分布。

jointplot()函数的语法格式如下。

# kind:表示绘制图形的类型。
# stat_fune:用于计算有关关系的统计量并标注图。
# color:表示绘图元素的颜色。
# height:用于设置图的大小(正方形)。
# ratio:表示中心图与侧边图的比例。该参数的值越大,则中心图的占比会越大。
# space:用于设置中心图与侧边图的间隔大小。
seaborn.jointplot(x, y, data=None, kind='scatter', stat_func=None, color=None, ratio=5, space=0.2, dropna=True)

下面以散点图、二维直方图、核密度估计曲线为例,介绍如何使用Seaborn绘制这些图形。

绘制散点图:调用seaborn.jointplot()函数绘制散点图的示例如下。

import seaborn as sns
import numpy as np
import pandas as pd# 创建DataFrame对象
df = pd.DataFrame({ "x": np.random.randn(500), "y": np.random.randn(500) })# 绘制散点图
sns.jointplot(x="x", y="y", data=df, color='r', height=5, ratio=10, space=1)

上述示例中,首先创建了一个DataFrame对象df作为散点图的数据,其中x轴和y轴的数据均为500个随机数,接着调用jointplot()函数绘制一个散点图,散点图x轴的名称为“x",y轴的名称为“y”。运行结果如图所示。 

绘制二维直方图:二维直方图类似于“六边形"图,主要是因为它显示了落在六角形区域内的观察值的计数,适用于较大的数据集。当调用jointplot()函数时,只要传入kind="hex",就可以绘制二维直方图,具体示例代码如下。

#绘制二维直方图
sns.jointplot(x="x", y="y", data=df, kind="hex")

运行结果如图所示:

从六边形颜色的深浅,可以观察到数据密集的程度,另外,图形的上方和右侧仍然给出了直方图。注意,在绘制二维直方图时,最好使用白色背景。 

绘制核密度估计图形:利用核密度估计同样可以查看二元分布,其用等高线图来表示。当调用jointplot()函数时只要传入ind="kde",就可以绘制核密度估计图形,具体示例代码如下。

sns.jointplot(x="x", y="y", data=df, kind="kde", color='r', height=5, ratio=10, space=1)

上述示例中,绘制了核密度的等高线图,另外,在图形的上方和右侧给出了核密度曲线图。运行结果如图所示。 

如果想加上阴影的话可以输入 fill = True 即可,效果如下:

绘制成对双变量分布:要想在数据集中绘制多个成对的双变量分布,则可以使用pairplot()函数实现,该函数会创建一个坐标轴矩阵,并且显示Datafram对象中每对变量的关系。另外,pairplot()函数也可以绘制每个变量在对角轴上的单变量分布。

接下来,通过sns.pairplot()函数绘制数据集变量间关系的图形,示例代码如下:

import seaborn as sns
import numpy as np
import pandas as pd# 加载seaborn中的数据集
dataset = sns.load_dataset("iris")
dataset.head()

通过load_dataset()函数加载了seaborn中内置的数据集,根据iris数据集绘制多个双变量分布。 

# 绘制多个成对的双变量分布
sns.pairplot(dataset)

最终呈现的效果如下:

分类数据绘图

数据集中的数据类型有很多种,除了连续的特征变量之外,最常见的就是类别型的数据了,比如人的性别、学历、爱好等,这些数据类型都不能用连续的变量来表示,而是用分类的数据来表示。

Seaborn针对分类数据提供了专门的可视化函数,这些函数大致可以分为如下三种:

1)类数据散点图:swarmplot()与stripplot()。

2)数据的分布图:boxplot()与violinplot()。

3)类数据的统计估算图:barplot()与pointplot()。

下面将针对分类数据可绘制的图形进行简单介绍,具体内容如下:

类别散点图:通过stripplot()函数可以画一个散点图,stripplot()函数的语法格式如下。

# x, y, hue:用于绘制长格式数据的输入。
# data:用于绘制的数据集。如果x和y不存在,则它将作为宽格式,否则将作为长格式。
# jitter:表示抖动的程度(仅沿类别轴)。当很多数据点重叠时,可以指定抖动的数量或者设为Tue使用默认值。
seaborn.stripplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, jitter=False)

接下来,通过stripplot()

import seaborn as sns
import numpy as np
import pandas as pd# 获取tips数据
data = sns.load_dataset("tips")
sns.stripplot(x="day", y="total_bill", data=data, hue="time")

运行结果如下:

如果想让数据进行重叠可以采用如下的方式:

除此之外,还可调用swarmplot()函数绘制散点图,该函数的好处是所有的数据点都不会重叠,可以很清晰地观察到数据的分布情况,示例代码如下。

sns.swarmplot(x="day", y="total_bill", data=data)

类别内的数据分布:要想查看各个分类中的数据分布,显而易见,散点图是不满足需求的,原因是它不够直观。针对这种情况,我们可以绘制如下两种图形进行查看:

以下是绘制箱形图的相关概念:

seaborn中用于绘制箱形图的函数为boxplot(),其语法格式如下:

# palette:用于设置不同级别色相的颜色变量。---palette=["r","g","b","y"]
# saturation:用于设置数据显示的颜色饱和度。----使用小数表示
seaborn.boxplot(x=None, y=None, hue=None, data=None, orient=None, color=None, saturation=0.75, width=0.8)

具体代码如下:

import seaborn as sns
import numpy as np
import pandas as pd# 获取数据
data = sns.load_dataset("tips")# 绘制箱形图
sns.boxplot(x="day", y="total_bill", data=data, hue="time", palette=["g", "r"], saturation=0.5)

最终呈现的效果如下所示:

以下是绘制小提琴图的相关概念: 

seaborn中用于绘制小提琴图的函数为violinplot(),其语法格式如下: 

seaborn.violinplot(x=None, y=None, hue=None, data=None)

最终呈现的效果如下所示: 

类别内的统计估计:要想查看每个分类的集中趋势,则可以使用条形图和点图进行展示。Seaborn库中用于绘制这两种图表的具体函数如下:

1)barplot()函数:绘制条形图。

2)pointplot()函数:绘制点图。

使用barplot函数示例如下:

使用pointplot函数示例如下:

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

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

相关文章

CMMI、SPCA、CSMM,三种认证的差异有哪些?

在当今的企业环境中,体系认证已经成为了一个重要的议题。其中,CMMI、SPCA和CSMM是三种广泛使用的认证,它们在各自领域内具有特定的目标和要求,今天擎标就带大家了解一下这三种认证之间的差异。 CMMI、CSMM和SPCA分别是什么 1、C…

htb Pov wp简记

最近懒得飞起 不想写太细,有师傅想看完整的可以留个言或者私信 我再补补… user部分 nmap只扫到一个端口 http/80 目录没扫出什么 vhost扫出dev来 在抓包访问页面邮箱丢出去的包有包含asp.net的viewstate,这里一开始我还没在意,后来发现有个…

【YOLO系列算法俯视视角下舰船目标检测】

YOLO系列算法俯视视角下舰船目标检测 数据集和模型YOLO系列算法俯视视角下舰船目标检测YOLO系列算法俯视视角下舰船目标检测可视化结果 数据集和模型 数据和模型下载: YOLOv6俯视视角下舰船目标检测训练好的舰船目标检测模型舰船目标检测数据YOLOv7俯视视角下舰船…

AGP更改gradle版本无效的解决方案

从Github下载了一个项目,非常激进,AGP版本8.4.0,而我的AS只支持到8.2.0 详见:https://developer.android.com/build/releases/gradle-plugin?buildsystemndk-build&hlzh-cn#android_gradle_plugin_and_android_studio_compa…

系统安全程序优化

我们为什么需要优化防火墙服务呢? 防火墙概念介绍: 防火墙作为本地计算机的一道防御,抵御着病毒、蠕虫、木马和强力的黑客攻击。 它既能以软件(安全程序)的形式出现,也可以采用硬件(物理路由…

【Javaweb程序设计】【C00163】基于SSM房屋中介服务平台(论文+PPT)

基于SSM房屋中介服务平台(论文PPT) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的房屋中介服务平台 本系统分为前台、管理员、用户3个功能模块。 前台:当游客打开系统的网址后,首先看到的就是首页界面。…

【极数系列】Flink集成DataSource读取集合数据(07)

文章目录 01 引言02 简介概述03 基于集合读取数据3.1 集合创建数据流3.2 迭代器创建数据流3.3 给定对象创建数据流3.4 迭代并行器创建数据流3.5 基于时间间隔创建数据流3.6 自定义数据流 04 源码实战demo4.1 pom.xml依赖4.2 创建集合数据流作业4.3 运行结果日志 01 引言 源码地…

C语言-指针的基本知识(下)

四、指针的分类 按指针指向的数据的类型来分 1:字符指针 字符型数据的地址 char *p;//定义了一个字符指针变量,只能存放字符型数据的地址编号 char ch; p &ch; 2:短整型指针 short int *p;//定义了一个短整型的指针变量p&#xff0c…

怎样做好Code Review

Code Review方案 定义 Code Review代码评审是指在软件开发过程中,通过对源代码进行系统性检查的过程。通常的目的是查找各种缺陷,包括代码缺陷、功能实现问题、编码合理性、性能优化等;保证软件总体质量和提高开发者自身水平 code review …

【机器学习】正则化

正则化是防止模型过拟合的方法,它通过对模型的权重进行约束来控制模型的复杂度。 正则化在损失函数中引入模型复杂度指标,利用给W加权值,弱化了数据的噪声,一般不正则化b。 loss(y^,y):模型中所有参数的损失函数&…

[论文阅读] |RAG评估_Retrieval-Augmented Generation Benchmark

写在前面 检索增强能够有效缓解大模型存在幻觉和知识时效性不足的问题,RAG通常包括文本切分、向量化入库、检索召回和答案生成等基本步骤。近期组里正在探索如何对RAG完整链路进行评估,辅助阶段性优化工作。上周先对评估综述进行了初步的扫描&#xff0…

mkcert的安装和使用,5分学会在本地开启localhost的https访问方式

mkcert官方仓库地址:https://github.com/FiloSottile/mkcert#installation mkcert 是一个简单的工具,用于制作本地信任的开发证书。它不需要配置。 简化我们在本地搭建 https 环境的复杂性,无需操作繁杂的 openssl 实现自签证书了&#xff…

在WebSocket中使用Redis出现空指针异常解决方案

文章目录 在WebSocket中使用Redis1.问题描述2.原因3.解决步骤1.新建一个SpringUtil.java类,通过getBean的方法主动获取实例2.在WebSocketSingleServer.java中导入 在WebSocket中使用Redis 1.问题描述 在controller 和 service中都可以正常使用Redis,在…

xcode安装visionOS Simulator模拟器报错解决方法手动安装方法

手动安装方法: 手动下载visionOS Simulator模拟器地址: https://developer.apple.com/download/all/ 选择 Xcode 版本 sudo xcode-select -s /Applications/Xcode.app # 用 Xcode-beta 的话是: # xcode-select -s /Applications/Xcode-beta…

openssl3.2 - 测试程序的学习

文章目录 openssl3.2 - 测试程序的学习概述笔记openssl3.2 - 测试程序的学习 - 准备openssl测试专用工程的模板openssl3.2 - 测试程序的学习 - test\aborttest.copenssl3.2 - 测试程序的学习 - test\sanitytest.copenssl3.2 - 测试程序的学习 - test\acvp_test.copenssl3.2 - 测…

邻接矩阵、关联矩阵

邻接矩阵: 邻接矩阵是一种用来表示图中顶点间相互连接关系的矩阵。在邻接矩阵中,矩阵的行和列都代表图中的顶点。 对于无权图,如果顶点 i 和顶点 j 之间有一条边,则矩阵中的元素 Aij​(位于第 i 行和第 j 列&#xff…

编译Opencv3.3 版本遇到的Cuda版本变更导致:CUDA_nppicom_LIBRARY (ADVANCED)链接找不到的问题根本解法:

前言: Opencv 开源库的使用是必须的,但是,开源项目的特性,造成,版本的依赖性比较复杂, 尤其是针对某一款老硬件的SDK,往往随着某个开源库的使用,导致,无法编译的问题&am…

(bean的创建图)学习Spring的第十天(很重要)

大致框架按如下 第一次细分 bean对象还未创建 操作第一个map 引入BeanFactoryPostProcessor , 即Bean工厂后处理器 , 为Spring很重要的扩展点 BeanFactoryPostProcessor内部的方法 可以对BeaDefinition进行修改 , 也可进行BeanDefinition的注册 ( 原有在xml文件配置的bean…

从零学习Linux操作系统 第二十部分 mariadb数据库的管理

一、对于数据库的基本介绍 1.什么是数据库 数据库就是个高级的表格软件 2.常见数据库 Mysql Oracle mongodb db2 sqlite sqlserver … 3.Mysql (SUN -----> Oracle) 4.mariadb (Mysql的一种) 数据库中的常用名词 1.字段 :表格中的表头 2.表 &…

Day01_变量和数据类型(注释,关键字,标识符,数据类型,字面量,变量,常量,进制,计算机存储单位,Java的基本数据类型的存储范围,计算机如何表示数据)

文章目录 JavaSE_Day01 变量和数据类型学习目标1.1 注释(*comment*)(掌握)1.2 关键字(*keyword*)(掌握)1.3 标识符( identifier)(掌握)1.3.1 标识符的命名规则…