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

news2025/1/19 8:16:37

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.coloradmin.cn/o/1416329.html

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

相关文章

人工智能系列:机器的进化(下)

大家好,接着上文的图灵机,继续介绍机器的进化。 1. 第一台计算机 世界上第一台电子计算机是ENIAC(埃尼阿克),这是课本上所写的。但计算机学界对于究竟哪台是第一台电子计算机其实存在着争议,除了 ENIAC 以…

[嵌入式软件][启蒙篇][仿真平台] STM32F103实现SPI控制OLED屏幕

上一篇: [嵌入式软件][启蒙篇][仿真平台] STM32F103实现LED、按键 [嵌入式软件][启蒙篇][仿真平台] STM32F103实现串口输出输入、ADC采集 [嵌入式软件][启蒙篇][仿真平台]STM32F103实现定时器 [嵌入式软件][启蒙篇][仿真平台] STM32F103实现IIC控制OLED屏幕 文章目…

【Vue2 + ElementUI】更改el-select的自带的下拉图标为倒三角,并设置相关文字颜色和大小

效果图 实现 <template><div class"search_resources"><div class"search-content"><el-select class"search-select" v-model"query.channel" placeholder"请选择" change"handleResource&q…

【贪吃蛇:C语言实现】

文章目录 前言1.了解Win32API相关知识1.1什么是Win32API1.2设置控制台的大小、名称1.3控制台上的光标1.4 GetStdHandle&#xff08;获得控制台信息&#xff09;1.5 SetConsoleCursorPosition&#xff08;设置光标位置&#xff09;1.6 GetConsoleCursorInfo&#xff08;获得光标…

TikTok直播对网络环境的要求是怎么样的

TikTok直播作为一种互动性强、实时性要求高的社交媒体形式&#xff0c;对网络环境有着一系列特定的需求。了解并满足这些需求&#xff0c;对于确保用户体验、提高直播质量至关重要。本文将深入探讨TikTok直播对网络环境的要求以及如何优化网络设置以满足这些要求。 TikTok直播的…

Django学习之小试牛刀

六、Django学习之小试牛刀 其他关于Python Web开发笔记&#xff1a;&#xff08;如果遇到问题可以一起交流~&#xff09; 一、Flask学习之HTML-CSDN博客 二、Flask学习之CSS-CSDN博客 【接上篇】二、Flask学习之CSS&#xff08;下篇&#xff09;-CSDN博客 三、Flask学习之B…

读取一个batch的图像并且显示出来

1读取一个batch用于训练 我们在训练模型的时候&#xff0c;除了观察图像的标签和尺寸&#xff0c;最好能读取一个batch的图像显示出来&#xff0c;观察原始图像和grountruth是否对应&#xff0c;如果正确才能正式开始后续的训练。 下面以一个皮肤病分割的数据集加以演示。 2…

漏洞原理SQL注入 手工注入漏洞

漏洞原理SQL注入 手工注入漏洞 SQL 注入的前置知识 information_schema库information_schema 是mysql5.0以上版本中自带的一个数据库。tables表information_schema库中的tables表中table_schema列&#xff08;存储数据库名&#xff09;和table_name列&#xff08;存储表名&…

【第六天】蓝桥杯备战

题 1、明明的随机数2、特殊日期 1、明明的随机数 https://www.lanqiao.cn/problems/539/learning/ 解法&#xff1a;暴力 import java.util.Scanner; import java.util.Arrays; // 1:无需package // 2: 类名必须Main, 不可修改public class Main {public static void main…

node学习过程中的终端命令

冷的哥们手真tm冷&#xff0c;打字都是僵的&#xff0c;屮 目录 一、在学习nodejs过程中用到的终端命令总结 一、在学习nodejs过程中用到的终端命令 node -v nvm install 20.11.0 nvm list nvm list available nvm on nvm -v nvm use 20.11.0 node加要运行的js文件路径 ps&a…

手指伸不直,锤状指不可忽视!

在日常生活和工作中&#xff0c;手指很容易戳伤&#xff0c;损伤后有时出现末节手指伸不直&#xff0c;影响手指屈伸活动障碍而就诊&#xff0c;医生会说手指损伤形成锤状指。那么什么是锤状指&#xff1f; 01 什么是“锤状指畸形”&#xff1f; 锤状指是指伸肌腱止点断裂后的…

确知信号的类型:能量信号与功率信号

通信原理第17页第一段&#xff1a; 例如&#xff0c; s ( t ) 8 s i n ( 5 t 1 ) , − ∞ < t < ∞ s(t)8sin(5t1),-\infty<t<\infty s(t)8sin(5t1),−∞<t<∞&#xff0c;就属于周期信号&#xff0c;其周期 T 0 2 π / 5 T_02\pi/5 T0​2π/5 三角函数很…

Spring5深入浅出篇:Spring中ioc(控制反转)与DI(依赖注入)

Spring5深入浅出篇:Spring中ioc(控制反转)与DI(依赖注入) 反转(转移)控制(IOC Inverse of Control) 控制&#xff1a;对于成员变量赋值的控制权 反转控制&#xff1a;把对于成员变量赋值的控制权&#xff0c;从代码中反转(转移)到Spring⼯⼚和配置⽂件中完成好处&#xff1a;…

docker 部署xxl-job

docker 部署xxl-job XXL-JOB github地址 https://github.com/xuxueli/xxl-job XXL-JOB 文档地址 https://www.xuxueli.com/xxl-job/ XXL-JOB是一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品…

Ubuntu apt update提示:GPG 缺少公钥解决方法

Ubuntu 运行: sudo apt update #or sudo apt-get update提示&#xff1a;GPG 缺少公钥以及404 Not Found&#xff0c;如下面所示&#xff0c;有mirror.bwbot.org 和ppa.launchpadcontent.net两个源出现问题。 好多网友用后面的方法解决 真正解决&#xff1a;gpg --verify sig:…

数据库ER图相关概念及其画法

ER图基本概念 ER图&#xff08;Entity-Relationship Diagram&#xff09;是一种用于描述现实世界概念模型的图形化表示方法&#xff0c;通过使用图形符号和元素来表示实体、属性和它们之间的关系。在ER图中&#xff0c;实体、属性和关系分别使用不同的图形元素来表示&#xff0…

【前端web入门第二天】01 html语法实现列表与表格_合并单元格

html语法实现列表与表格 文章目录: 1.列表 1.1 无序列表1.2 有序列表1.3 定义列表 2.表格 2.1 表格基本结构2.2 表格结构标签2.3 合并单元格 写在最前,第二天学习目标: 列表 表格 表单 元素为嵌套关系 1.列表 作用:布局内容排列整齐的区域。 列表分类:无序列表、有序列表…

Redis中BigKey的分析与优化

Redis中BigKey的分析与优化 Redis以其出色的性能和易用性&#xff0c;在互联网技术栈中占据了重要的地位。 但是&#xff0c;高效的工具使用不当也会成为性能瓶颈。在Redis中&#xff0c;BigKey是常见的性能杀手之一&#xff0c;它们会消耗过多的内存&#xff0c;导致网络拥塞…

专有钉钉开发记录,及问题总结

先放几个专有钉钉开发文档 专有钉钉官网的开发指南 服务端(后端)api文档 前端api文档 前端开发工具下载地址 小程序配置文件下载地址 后端SDK包下载地址 专有钉钉域名是openplatform.dg-work.cn 开发记录 开发专有钉钉时有时会遇到要使用钉钉的api&#xff1b;通过 my 的方…

【leetcode题解C++】101.对称二叉树 and 111.二叉树的最小深度 and 222.完全二叉树的节点个数 and 110.平衡二叉树

101. 对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false 思路&#xff1a…