【Python】【数据分析】深入探索 Python 数据可视化:Seaborn 可视化库详解

目录

  • 引言
  • 一、Seaborn 简介
  • 二、安装 Seaborn
  • 三、Seaborn 的基本图形
    • 3.1 散点图(Scatter Plot)
    • 3.2 线图(Line Plot)
    • 3.3 条形图(Bar Plot)
    • 3.4 箱型图(Box Plot)
    • 3.5 小提琴图(Violin Plot)
    • 3.6 热力图(Heatmap)
  • 四、Seaborn 的主题和颜色
  • 五、Seaborn 与 Matplotlib 结合使用
  • 六、Seaborn 绘图流程图
  • 七、Seaborn 中的高级功能
    • 7.1 使用 FacetGrid 进行多图绘制
    • 7.2 Pairplot:探索多个变量之间的关系
    • 7.3 调整子图大小与布局
  • 八、Seaborn 与 Pandas 的结合
    • 8.1 使用 Pandas 数据进行绘图
    • 8.2 使用 Pandas 进行数据汇总
  • 九、Seaborn 中的统计功能
    • 9.1 线性回归绘图
    • 9.2 绘制带置信区间的回归图
  • 总结
  • 参考文献

引言

Seaborn 是基于 Matplotlib 库的一个高级数据可视化库,它为数据分析提供了更方便、更美观的绘图功能。Seaborn 使得数据可视化更简洁、更直观,适合用于统计图表的快速绘制。它能够自动计算数据的某些统计特征,帮助分析人员快速绘制出漂亮且有意义的图表。在这篇文章中,我们将深入介绍 Seaborn 的各个方面,帮助你更好地掌握如何在数据分析中使用 Seaborn。

一、Seaborn 简介

Seaborn 是 Python 中一个强大的数据可视化库,它建立在 Matplotlib 之上并补充了更多高级功能,旨在使统计图形的创建更加简便。Seaborn 专注于数据的统计分布、数据之间的关系、时间序列分析等,它能够帮助分析人员快速从数据中提取有意义的模式和趋势。

Seaborn 的核心特点包括:

  • 自动化计算统计量:Seaborn 会自动计算数据的统计特性(如均值、方差、分位数等),并将其图形化。
  • 美观的默认样式:与 Matplotlib 相比,Seaborn 的默认样式更具现代感和美观。
  • 简洁的语法:Seaborn 提供了简洁的 API,可以通过少量代码完成复杂的绘图任务。

Seaborn 常常用于探索性数据分析(EDA),帮助我们理解数据的结构、趋势、分布等。

二、安装 Seaborn

在使用 Seaborn 之前,你需要安装它。你可以通过 Python 的包管理工具 pip 安装 Seaborn:

pip install seaborn

安装后,你就可以在 Python 环境中导入 Seaborn,开始使用其丰富的可视化功能。

在使用 Seaborn 时,我们可以通过以下方式导入库:

import seaborn as sns

seaborn 是用于数据可视化的高级接口,它基于 Matplotlib,通常使用 sns 作为别名来调用几乎所有的绘图命令。

三、Seaborn 的基本图形

Seaborn 提供了多种常见的统计图形,包括散点图、线图、条形图、箱型图、热力图等。每种图形都能够帮助我们从不同角度理解数据的特征和关系。为了能够顺利地绘制这些图形,我们需要进行一些前期准备,包括导入库、加载数据集等。为了演示,我们将使用Seaborn自带的 “tips” 数据集。这个数据集包含餐厅账单和小费的相关信息,如账单总额、小费金额、就餐时间、性别、吸烟情况等。通过加载这些数据,我们可以为接下来的可视化步骤准备好数据。

示例代码

# 导入必要的库
import seaborn as sns
import matplotlib.pyplot as plt# 加载Seaborn自带的"tips"数据集
tips = sns.load_dataset("tips")# 查看数据的前五行,理解数据结构
print(tips.head())

代码说明

  • import seaborn as sns:导入Seaborn库,并将其简称为 sns
  • import matplotlib.pyplot as plt:导入Matplotlib的pyplot模块,简称为 plt,用于显示图形。
  • tips = sns.load_dataset("tips"):加载Seaborn内置的 “tips” 数据集。

加载数据集后,您可以通过 tips.head() 查看数据的前几行,了解其结构。例如:

   total_bill   tip     sex smoker   day    time  size
0      16.99  1.01    Female     No  Sun  Dinner     2
1      10.34  1.66      Male     No  Sun  Dinner     3
2      21.01  3.50      Male     No  Sun  Dinner     3
3      23.68  3.31    Female     No  Sun  Dinner     2
4      24.59  3.61      Male     No  Sun  Dinner     4

完成这些准备工作后,我们就可以开始使用Seaborn绘制各种类型的统计图形,帮助我们更好地理解数据。

3.1 散点图(Scatter Plot)

散点图用于展示两个变量之间的关系,适用于连续型数据,常用于观察两个变量是否存在某种关联或趋势。

示例代码:

sns.scatterplot(x="total_bill", y="tip", data=tips)
plt.title('Total Bill vs Tip')
plt.show()

代码说明:

  • x="total_bill":指定散点图的横坐标是账单金额。
  • y="tip":指定纵坐标是小费金额。

效果图:

在这里插入图片描述

3.2 线图(Line Plot)

线图通常用于展示数据随时间的变化趋势,或者两个连续变量之间的关系。Seaborn 的 lineplot() 函数支持绘制带有误差条的线图,以便于更好地理解数据的波动性。

示例代码:

sns.lineplot(x="day", y="total_bill", data=tips, hue="sex")
plt.title('Line Plot Example')
plt.show()

代码说明:

  • hue="sex":通过不同颜色区分性别。

效果图:
在这里插入图片描述

3.3 条形图(Bar Plot)

条形图用于比较不同类别之间的数值大小,适用于分类数据。Seaborn 的 barplot() 函数会自动计算每个类别的均值,并绘制出相应的条形图。

示例代码:

sns.barplot(x="day", y="total_bill", data=tips)
plt.title('Bar Plot Example')
plt.show()

代码说明:

  • x="day":横坐标为星期几。
  • y="total_bill":纵坐标为账单金额。

效果图:

在这里插入图片描述

3.4 箱型图(Box Plot)

箱型图用于显示数据的分布情况,包括数据的中位数、四分位数、极值和异常值。它能够帮助我们快速了解数据的集中趋势和离散程度。

示例代码:

sns.boxplot(x="day", y="total_bill", data=tips)
plt.title('Box Plot Example')
plt.show()

代码说明:

  • x="day":横坐标为星期几。
  • y="total_bill":纵坐标为账单金额。

效果图:
在这里插入图片描述

3.5 小提琴图(Violin Plot)

小提琴图结合了箱型图和密度图,展示了数据的分布情况,同时显示了每个类别数据的密度,能够帮助我们更好地理解数据的形态。

示例代码:

sns.violinplot(x="day", y="total_bill", data=tips)
plt.title('Violin Plot Example')
plt.show()

代码说明:

  • x="day":横坐标为星期几。
  • y="total_bill":纵坐标为账单金额。

效果图:

在这里插入图片描述

3.6 热力图(Heatmap)

热力图通常用于表示矩阵数据,其中每个单元格的数值通过颜色深浅来表示。Seaborn 的 heatmap() 函数非常适合用于展示相关性矩阵、数据表格等。

示例代码:

# 加载Seaborn自带的"flights"数据集
flights = sns.load_dataset("flights")# 透视数据:根据月份和年份对乘客数进行聚合
flights_pivot = flights.pivot_table(index="month", columns="year", values="passengers")sns.heatmap(flights_pivot, cmap="YlGnBu", annot=True, fmt=".0f")
plt.title('Heatmap Example')
plt.show()

代码说明:

  • flights = sns.load_dataset("flights"):加载Seaborn的内置数据集"flights"。该数据集包含了每个月的航班乘客数量信息。
  • flights.pivot_table(index="month", columns="year", values="passengers"):通过 pivot_table() 方法将数据重塑为一个透视表,其中:
    • index="month":行表示月份。
    • columns="year":列表示年份。
    • values="passengers":单元格中的值为每月的乘客数量。
  • sns.heatmap(flights_pivot, cmap="YlGnBu", annot=True):绘制热力图。
    • cmap="YlGnBu":指定热力图的颜色调色板,“YlGnBu” 表示黄色到绿色到蓝色的渐变色。
    • annot=True:在每个单元格内显示数值(乘客数量)。

效果图:
在这里插入图片描述

四、Seaborn 的主题和颜色

Seaborn 提供了几种内置的主题,允许你快速调整图形的外观。你可以通过 sns.set_theme() 设置不同的主题,例如:

  • darkgrid:(默认):带有网格的深色背景。
  • whitegrid:带有网格的白色背景。
  • dark:无网格的深色背景。
  • white:无网格的白色背景。
  • ticks:带有坐标轴刻度线的简单背景。

示例代码:

sns.set_theme(style="darkgrid")
sns.scatterplot(x="total_bill", y="tip", data=tips)
plt.title('Scatter Plot with Dark Grid Theme')
plt.show()

效果图:
在这里插入图片描述

五、Seaborn 与 Matplotlib 结合使用

Seaborn 是建立在 Matplotlib 之上的,意味着你可以在 Seaborn 绘图基础上使用 Matplotlib 来进一步定制图形。比如,你可以使用 Matplotlib 修改图形的标题、坐标轴标签、字体等。

示例代码:

sns.scatterplot(x="total_bill", y="tip", data=tips)
plt.title('Custom Title using Matplotlib')
plt.xlabel('Total Bill')
plt.ylabel('Tip Amount')
plt.show()

效果图:

六、Seaborn 绘图流程图

绘制 Seaborn 图形的流程通常包括以下几个步骤:准备数据、选择合适的图形类型、绘制图形、自定义图形以及展示图形。了解并遵循这些步骤可以帮助你创建出清晰、富有信息的图形。以下是详细的 Seaborn 绘图流程图:

CSDN @ 2136
准备数据
选择合适的图形类型
绘制图形
自定义图形
展示图形
CSDN @ 2136

流程图说明:

  1. 准备数据:首先加载需要绘图的数据集,或整理好数据。
  2. 选择合适的图形类型:根据数据的特点(如连续性、离散性等)选择合适的图形类型,如散点图、箱型图、热图等。
  3. 绘制图形:调用 Seaborn 的绘图函数(例如 sns.scatterplot()sns.boxplot())。
  4. 自定义图形:可以设置图形的标题、轴标签、颜色、字体等以增强图形的可读性。
  5. 展示图形:最后使用 plt.show() 展示图形。

七、Seaborn 中的高级功能

Seaborn 不仅能够绘制简单的图形,还提供了许多高级功能,使得数据可视化变得更加精细和多样。接下来,我们将探讨一些高级功能和技巧。

7.1 使用 FacetGrid 进行多图绘制

Seaborn 提供了 FacetGrid 类,可以帮助我们根据某些类别变量将数据拆分并绘制多个子图。这非常适合用于探索数据的不同子集或者对不同类别的可视化。

示例代码:

g = sns.FacetGrid(tips, col="sex", row="time")
g.map(sns.scatterplot, "total_bill", "tip")
plt.show()

代码说明:

  • col="sex":根据性别变量划分列子图。
  • row="time":根据时间变量划分行子图。
  • g.map(sns.scatterplot, "total_bill", "tip"):在每个子图上绘制散点图。

效果图:

在这里插入图片描述

7.2 Pairplot:探索多个变量之间的关系

Seaborn 提供的 pairplot() 函数非常适合用于查看数据集中多个变量之间的关系,并且它能自动绘制每对变量之间的散点图以及每个变量的分布图。

示例代码:

sns.pairplot(tips)
plt.show()

代码说明:

  • pairplot() 会自动计算并绘制数据集中每对数值变量之间的关系图。

效果图:
在这里插入图片描述

7.3 调整子图大小与布局

Seaborn 的图形布局非常灵活,你可以通过 plt.subplots() 配合 Seaborn 来创建自定义的图形布局。例如,绘制多个条形图或散点图时,你可能希望将它们放在一个网格中。

示例代码:

fig, axes = plt.subplots(2, 2, figsize=(10, 8))
sns.barplot(x="day", y="total_bill", data=tips, ax=axes[0, 0])
sns.lineplot(x="day", y="total_bill", data=tips, ax=axes[0, 1])
sns.boxplot(x="day", y="total_bill", data=tips, ax=axes[1, 0])
sns.heatmap(flights_pivot, ax=axes[1, 1], cmap="YlGnBu", annot=True, fmt=".0f")
plt.tight_layout()
plt.show()

代码说明:

  • fig, axes = plt.subplots(2, 2):创建一个 2x2 的子图网格。
  • ax=axes[0, 0]:指定每个图形放置的子图位置。

效果图:
在这里插入图片描述

八、Seaborn 与 Pandas 的结合

Seaborn 和 Pandas 紧密集成,许多 Seaborn 函数都支持直接操作 Pandas DataFrame。你可以轻松地使用 Pandas 数据框架进行数据清洗和处理后,再将结果传递给 Seaborn 进行可视化。

8.1 使用 Pandas 数据进行绘图

Seaborn 可以直接接收 Pandas DataFrame 对象作为输入,并根据数据列自动生成图表。例如,如果你有一个包含日期和销售数据的 DataFrame,可以用 Seaborn 绘制时间序列图。

示例代码:

import pandas as pd
import numpy as np# 创建一个示例 DataFrame
data = {"Date": pd.date_range("2021-01-01", periods=100, freq="D"),"Sales": np.random.rand(100) * 1000
}
df = pd.DataFrame(data)# 使用 Seaborn 绘制时间序列图
sns.lineplot(x="Date", y="Sales", data=df)
plt.title("Sales Over Time")
plt.show()

代码说明:

  • pd.date_range():创建一个从 2021 年 1 月 1 日开始的日期序列。
  • np.random.rand(100):生成 100 个随机数,用于模拟销售数据。

效果图:
在这里插入图片描述

8.2 使用 Pandas 进行数据汇总

Seaborn 和 Pandas 的结合使得在可视化之前对数据进行聚合和分组变得非常简单。例如,可以通过 groupby() 对数据进行分组并计算统计量,之后将这些数据传递给 Seaborn 绘图。

示例代码:

# 按“day”分组,并计算每组的总账单均值
grouped_data = tips.groupby("day")["total_bill"].mean().reset_index()# 绘制条形图
sns.barplot(x="day", y="total_bill", data=grouped_data)
plt.title("Average Total Bill by Day")
plt.show()

代码说明:

  • tips.groupby("day")["total_bill"].mean():按“day”列分组,并计算每个组的总账单均值。

效果图:
在这里插入图片描述

九、Seaborn 中的统计功能

Seaborn 提供了许多与统计学相关的功能,使得统计图形的绘制变得更加简单。Seaborn 会自动执行一些常见的统计分析,帮助我们快速进行数据分析。

9.1 线性回归绘图

Seaborn 提供了 regplot() 函数,可以通过最小二乘法绘制数据的回归线。它不仅绘制数据点,还会计算并绘制拟合的回归线,适用于展示两个变量之间的线性关系。

示例代码:

sns.regplot(x="total_bill", y="tip", data=tips)
plt.title("Regression Plot")
plt.show()

代码说明:

  • sns.regplot() 会自动绘制散点图和回归线。

效果图:
在这里插入图片描述

9.2 绘制带置信区间的回归图

Seaborn 还支持为回归线添加置信区间(Confidence Interval, CI),通常通过填充回归线附近的阴影区域来表示。

示例代码:

sns.regplot(x="total_bill", y="tip", data=tips, ci=95)
plt.title("Regression Plot with Confidence Interval")
plt.show()

代码说明:

  • ci=95:表示回归线的 95% 置信区间。

效果图:
在这里插入图片描述

总结

Seaborn 是一个非常强大且灵活的 Python 可视化库,特别适合用于数据科学和统计分析领域。它的优点在于:

  • 提供了高层次的API,能够简化复杂的可视化任务,减少代码量。
  • 与 Pandas 紧密集成,支持直接从 DataFrame 中绘制图表。
  • 提供了丰富的图表类型,如散点图、条形图、热力图等,支持多种统计功能,如回归分析和分布估计。
  • 支持灵活的主题和样式定制,使得图形能够轻松适应不同的可视化需求。

Seaborn 是一个功能强大的数据可视化工具,适合用于快速、精美的图表绘制,特别是在进行数据探索和分析时,它的高级功能可以大大提升工作效率。通过实践这些技巧和功能,你将能够熟练掌握数据可视化的技巧,并更好地理解数据中的潜在模式和关系。

参考文献

  • Seaborn 官方文档
  • Seaborn 入门教程 - 数据可视化
  • Python Data Science Handbook(在线版)
  • Seaborn 示例图库
  • Kaggle Seaborn 入门教程
  • Python 数据可视化教程(YouTube)
  • Medium Seaborn 相关文章
  • Real Python Seaborn 教程

希望这些内容能够帮助你在数据科学和可视化领域取得更好的进展!


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

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

相关文章

input输入框的placeholder颜色修改(Shadow DOM)

placeholder颜色修改 使用参考说明 https://zh.javascript.info/shadow-dom 查看shadow tree的方法

uniApp使用腾讯地图提示未添加maps模块

uniApp使用腾讯地图,打包提示未添加maps模块解决方案 这是报错信息,在标准基座运行的时候是没问题的,但是打包后会提示未添加,可以通过在mainfest里面把地图插件上腾讯地图的key更换高德地图的key,定位服务可以继续用腾…

linux------vim命令

一、基本模式切换 普通模式(Normal Mode) 当你打开Vim时,默认进入普通模式。在这个模式下,可以使用各种命令来移动光标、删除文本、复制粘贴等操作。例如,使用h、j、k、l来移动光标。h是向左移动一个字符,j…

数据可视化-2. 条形图

目录 1. 条形图适用场景分析 1.1 比较不同类别的数据 1.2 展示数据分布 1.3 强调特定数据点 1.4 展示时间序列数据的对比 1.5 数据可视化教育 1.6 特定领域的应用 2. 条形图局限性 3. 条形图图代码实现 3.1 Python 源代码 3.2 条形图效果(网页显示&#…

2023年下半年软考信息安全工程师案例分析及答案解析

试题一(16分) 回答问题1至问题6,将解答填入答题纸对应的解答栏内。 问题1(4分) 已知DES算法S盒如下,请补全S盒空缺的数据(1)、(2)、(3)、(4)。 【参考答案】3、13、15、0 问题2(2分) 已知S盒的输入为110011,请计算经过S盒变换之后的二进制输出。 【参考…

模型部署学习笔记——模型部署关键知识点总结

模型部署学习笔记——模型部署关键知识点总结 模型部署学习笔记——模型部署关键知识点总结1. CUDA中Grid和Block的定义是什么?Shared Memory的定义?Bank Conflict的定义?Stream和Event的定义?2. TensorRT的工作流程?3…

Spring Cloud Gateway 源码

Spring Cloud Gateway 架构图 按照以上架构图,请求的处理流程: 1.客户端请求发送到网关 DispatcherHandler 2.网关通过 HandlerMapping 找到相应的 WebHandler 3.WebHandler生成FilterChain过滤器链执行所有的过滤器 4.返回Response结果 自动装配类Gat…

基于Spring Boot的店铺租赁平台的设计与实现

一、项目背景 随着互联网技术的飞速发展,线上交易已成为商业活动的重要趋势。店铺租赁作为商业地产的核心环节,其传统模式面临着信息不对称、交易效率低下等问题。因此,开发一个高效、便捷的线上店铺租赁平台显得尤为重要。本项目利用Java S…

基于卷积神经网络(CNN)和ResNet50的水果与蔬菜图像分类系统

前言 在现代智能生活中,计算机视觉技术已经成为不可或缺的工具,特别是在食物识别领域。想象一下,您只需拍摄一张水果或蔬菜的照片,系统就能自动识别其种类并为您提供丰富的食谱建议。这项技术不仅在日常生活中极具实用性&#xf…

Tomcat部署war包项目解决404问题

问题出在了Tomcat的版本上了,应该先去看这个项目使用的springboot版本,然后去仓库里找到对应Tomcat版本。 Maven Repository: org.springframework.boot spring-boot-starter-tomcat 因此我们应该选择Tomcat9版本。 当我把Tomcat11换成Tomcat9时&…

Redis篇--常见问题篇1--缓存穿透(缓存空值,布隆过滤器,接口限流)

1、概述 缓存穿透是指客户端请求的数据既不在Redis缓存中,也不在数据库中。换句话说,缓存和数据库中都不存在该数据,但客户端仍然发起了查询请求。这种情况下,缓存无法命中,请求会直接穿透到数据库,而数据…

前端使用 Konva 实现可视化设计器(20)- 性能优化、UI 美化

这一章主要分享一下使用 Konva 遇到的性能优化问题,并且介绍一下 UI 美化的思路。 至少有 2 位小伙伴积极反馈,发现本示例有明显的性能问题,一是内存溢出问题,二是卡顿的问题,在这里感谢大家的提醒。 请大家动动小手&a…

BlueLM:以2.6万亿token铸就7B参数超大规模语言模型

一、介绍 BlueLM 是由 vivo AI 全球研究院自主研发的大规模预训练语言模型,本次发布包含 7B 基础 (base) 模型和 7B 对话 (chat) 模型,同时我们开源了支持 32K 的长文本基础 (base) 模型和对话 (chat) 模型。 更大量的优质数据 :高质量语料…

C语言基础16(文件IO)

文章目录 构造类型枚举类型typedef 文件操作(文件IO)概述文件的操作文件的打开与关闭打开文件关闭文件文件打开与关闭案例 文件的顺序读写单字符读取多字符读取单字符写入多字符写入 综合案例:文件拷贝判别文件结束 数据块的读写(二进制)数据块的读取数据块的写入 文…

冯诺依曼架构与哈佛架构的对比与应用

冯诺依曼架构(Von Neumann Architecture),也称为 冯诺依曼模型,是由著名数学家和计算机科学家约翰冯诺依曼(John von Neumann)在1945年提出的。冯诺依曼架构为现代计算机奠定了基础,几乎所有现代…

3D造型软件solvespace在windows下的编译

3D造型软件solvespace在windows下的编译 在逛开源社区的时候发现了几款开源CAD建模软件,一直囿于没有合适的建模软件,虽然了解了很多的模拟分析软件,却不能使之成为整体的解决方案,从而无法产生价值。opencascad之流虽然可行&…

机器学习04-为什么Relu函数

机器学习0-为什么Relu函数 文章目录 机器学习0-为什么Relu函数 [toc]1-手搓神经网络步骤总结2-为什么要用Relu函数3-进行L1正则化修改后的代码解释 4-进行L2正则化解释注意事项 5-Relu激活函数多有夸张1-细数Relu函数的5宗罪2-Relu函数5宗罪详述 6-那为什么要用这个Relu函数7-文…

QScreen在Qt5.15与Qt6.8版本下的区别

简述 QScreen主要用于提供与屏幕相关的信息。它可以获取有关显示设备的分辨率、尺寸、DPI(每英寸点数)等信息。本文主要是介绍Qt5.15与Qt6环境下,QScreen的差异,以及如何判断高DPI设备。 属性说明 logicalDotsPerInch&#xff1…

[HNCTF 2022 Week1]你想学密码吗?

下载附件用记事本打开 把这些代码放在pytho中 # encode utf-8 # python3 # pycryptodemo 3.12.0import Crypto.PublicKey as pk from hashlib import md5 from functools import reducea sum([len(str(i)) for i in pk.__dict__]) funcs list(pk.__dict__.keys()) b reduc…

shell8

until循环(条件为假的时候一直循环和while相反) i0 until [ ! $i -lt 10 ] doecho $i((i)) done分析 初始化变量: i0:将变量i初始化为0。 条件判断 (until 循环): until [ ! $i -lt 10 ]:这里的逻辑有些复杂。它使用了until循环…