当前位置: 首页 > web >正文

Python数据可视化:Seaborn入门与实践

Seaborn入门与实践

  • Seaborn
    • 概述
    • 环境准备
  • Seaborn基本使用
    • 环境准备
    • 数据说明
    • 绘制散点图(Scatter Plot)
    • 绘制折线图(Line Plot)
    • 绘制柱状图(Bar Plot)
    • 绘制直方图(Histogram)
  • Seaborn进阶使用
    • 多图绘制(FacetGrid)
    • 样式设置
    • 回归图(Regression Plot)
    • 直方图(Histogram)
    • 核密度估计图(Kernel Density Estimate, KDE)
    • 箱线图(Box Plot)
    • 小提琴图(Violin Plot)
    • 热力图(Heatmap)
    • 计数图(Count Plot)
    • 联合分布图(Joint Plot)
    • 多变量分布图(Pair Plot)
  • 分析泰坦尼克号数据集(titanic)
    • 环境准备
    • 数据说明
    • 乘客生存率的柱状图
    • 不同舱位的票价分布
    • 年龄与生存率的关系
  • 分析鸢尾花数据集(iris)
    • 环境准备
    • 数据说明
    • 不同种类的花瓣长度分布
    • 花萼长度与花瓣长度的关系
    • 数据集中特征的相关性

Seaborn

概述

Seaborn是一个基于 Matplotlib 的 Python 数据可视化库,专注于统计图表的绘制。它提供了更高级的接口和更美观的默认样式,非常适合用于数据分析和探索性数据分析(EDA)。

官方文档:Seaborn

中文文档:Seaborn

环境准备

安装Seaborn和Matplotlib:

pip install seaborn matplotlib

安装Pandas和NumPy:

pip install pandas numpy

Seaborn基本使用

从Seaborn的核心功能和基本图表开始,了解Seaborn的基本语法以及掌握常用图表的绘制方法

环境准备

Seaborn自带一些示例数据集,非常适合练习。

import seaborn as sns
import matplotlib.pyplot as plt# 加载示例数据集
tips = sns.load_dataset("tips")
# 打印前5行数据
print(tips.head())

数据说明

tips是Seaborn 提供的一个示例数据集,记录了餐厅顾客的小费数据。

   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    Male     No  Sun  Dinner     2
4       24.59  3.61  Female     No  Sun  Dinner     4

数据列说明

列名类型说明
total_bill数值型(float)账单总金额(美元)
tip数值型(float)顾客支付的小费金额(美元)
sex分类变量(字符串)顾客的性别,取值为 Male(男性)或 Female(女性)
smoker分类变量(字符串)顾客是否吸烟,取值为 Yes(吸烟)或 No(不吸烟)
day分类变量(字符串)顾客用餐的星期几,取值为 Thur(星期四)、Fri(星期五)、Sat(星期六)或 Sun(星期日)
time分类变量(字符串)用餐时间,取值为 Lunch(午餐)或 Dinner(晚餐)
size数值型(int)用餐人数

绘制散点图(Scatter Plot)

散点图用于显示两个连续变量之间的关系,适合观察变量之间的趋势、聚类或异常值。

sns.scatterplot(x="total_bill", y="tip", data=tips)
plt.show()

在这里插入图片描述

绘制折线图(Line Plot)

折线图用于显示数据随时间的变化趋势。

sns.lineplot(x="total_bill", y="tip", data=tips)
plt.show()

在这里插入图片描述

绘制柱状图(Bar Plot)

柱状图用于比较不同类别的数据。

sns.barplot(x="day", y="total_bill", data=tips)
plt.show()

在这里插入图片描述

绘制直方图(Histogram)

直方图用于显示数据的分布。

sns.histplot(tips["total_bill"], bins=20, kde=True)
plt.show()

在这里插入图片描述

Seaborn进阶使用

多图绘制(FacetGrid)

用于在同一画布上绘制多个子图。

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

在这里插入图片描述

样式设置

Seaborn 提供了多种内置主题和颜色方案。

sns.set_style("darkgrid")  # 设置样式
sns.set_palette("husl")    # 设置颜色
sns.scatterplot(x="total_bill", y="tip", data=tips)
plt.show()

在这里插入图片描述

回归图(Regression Plot)

回归图在散点图的基础上添加了一条回归线,用于显示变量之间的线性关系。

# 设置画布大小
plt.figure(figsize=(8, 6))# 绘制回归图
sns.regplot(x="total_bill", y="tip", data=tips, scatter_kws={"s": 50}, line_kws={"color": "red"})# 添加标题和标签
plt.title("Regression Plot: Total Bill vs Tip", fontsize=14)
plt.xlabel("Total Bill ($)", fontsize=12)
plt.ylabel("Tip ($)", fontsize=12)# 显示图表
plt.show()

直方图(Histogram)

直方图是显示数据分布的最常用方法之一。它将数据分成若干区间(bin),并统计每个区间内的数据数量。

import seaborn as sns
import matplotlib.pyplot as plt# 加载示例数据集
tips = sns.load_dataset("tips")# 设置画布大小
plt.figure(figsize=(8, 5))# 绘制直方图
# color="orange":设置曲线的颜色
# kde=True:添加核密度估计曲线,显示数据分布的平滑趋势
# color="skyblue":设置直方图的颜色
sns.histplot(tips["total_bill"], bins=20, kde=True, color="skyblue")# 添加标题和标签
plt.title("Distribution of Total Bill", fontsize=14)
plt.xlabel("Total Bill", fontsize=12)
plt.ylabel("Frequency", fontsize=12)# 显示图表
plt.show()

在这里插入图片描述

核密度估计图(Kernel Density Estimate, KDE)

KDE 是一种非参数方法,用于估计数据的概率密度函数。它比直方图更平滑,适合显示数据的整体分布。

# 设置画布大小
plt.figure(figsize=(8, 5))# 绘制 KDE 图
# shade=True:填充曲线下方的区域
# color="orange":设置曲线的颜色
sns.kdeplot(tips["total_bill"], color="orange", shade=True)# 添加标题和标签
plt.title("Kernel Density Estimate of Total Bill", fontsize=14)
plt.xlabel("Total Bill", fontsize=12)
plt.ylabel("Density", fontsize=12)# 显示图表
plt.show()

在这里插入图片描述

箱线图(Box Plot)

箱线图用于显示一个分类变量和一个连续变量之间的关系,适合比较不同类别的数据分布。

# 设置画布大小
plt.figure(figsize=(8, 5))# 绘制箱线图
# x="day":指定 x 轴为星期几
# y="total_bill":指定 y 轴为总账单金额
# palette="Set3":设置颜色方案
sns.boxplot(x="day", y="total_bill", data=tips, palette="Set2")# 添加标题和标签
plt.title("Distribution of Total Bill by Day", fontsize=14)
plt.xlabel("Day", fontsize=12)
plt.ylabel("Total Bill", fontsize=12)# 显示图表
plt.show()

在这里插入图片描述

小提琴图(Violin Plot)

小提琴图结合了箱线图和核密度估计图的优点,能够更直观地显示数据的分布和密度。

# 设置画布大小
plt.figure(figsize=(8, 5))# 绘制小提琴图
# x="day":指定 x 轴为星期几
# y="total_bill":指定 y 轴为总账单金额
# palette="Set3":设置颜色方案
sns.violinplot(x="day", y="total_bill", data=tips, palette="Set3")# 添加标题和标签
plt.title("Violin Plot of Total Bill by Day", fontsize=14)
plt.xlabel("Day", fontsize=12)
plt.ylabel("Total Bill", fontsize=12)# 显示图表
plt.show()

在这里插入图片描述

热力图(Heatmap)

热力图用于显示两个分类变量之间的关系,或者数值特征之间的相关性。

# 使用 drop() 方法删除非数值列 'species',因为相关性计算只能针对数值数据
correlation = iris.drop(columns=["species"])
# 使用 corr() 方法计算剩余数值特征之间的相关性矩阵
correlation = correlation.corr()# 设置画布大小
plt.figure(figsize=(8, 6))# 绘制热力图
sns.heatmap(correlation, annot=True, cmap="coolwarm", fmt=".2f", linewidths=0.5)# 添加标题
plt.title("Correlation Heatmap of Tips Dataset Features", fontsize=14)# 显示图表
plt.show()

在这里插入图片描述

计数图(Count Plot)

计数图用于显示分类变量的频数分布。

# 设置画布大小
plt.figure(figsize=(8, 6))# 绘制计数图
sns.countplot(x="class", data=titanic, palette="Set3")# 添加标题和标签
plt.title("Passenger Count by Class", fontsize=14)
plt.xlabel("Passenger Class", fontsize=12)
plt.ylabel("Count", fontsize=12)# 显示图表
plt.show()

在这里插入图片描述

联合分布图(Joint Plot)

联合分布图可以同时显示两个变量的散点图和各自的分布(直方图或 KDE 图)。

# 绘制联合分布图
# x="total_bill":指定 x 轴为总账单金额
# y="tip":指定 y 轴为小费金额
# kind="scatter":指定图表类型为散点图(其他选项包括 "kde" 和 "hex")
# height=6:设置图表的高度
sns.jointplot(x="total_bill", y="tip", data=tips, kind="scatter", height=6)# 显示图表
plt.show()

在这里插入图片描述

多变量分布图(Pair Plot)

Pair Plot 可以显示数据集中多个变量之间的分布和关系,适合用于探索性数据分析。

# 绘制多变量分布图
# hue="sex":按性别分组,用不同颜色表示
# palette="Set1":设置颜色方案
sns.pairplot(tips, hue="sex", palette="Set1")# 显示图表
plt.show()

在这里插入图片描述

分析泰坦尼克号数据集(titanic)

环境准备

# 导入必要的库
import seaborn as sns
import matplotlib.pyplot as plt# 加载泰坦尼克号数据集
titanic = sns.load_dataset("titanic")
print(titanic.head())  # 查看数据集的前几行,了解数据结构

数据说明

titanic是Seaborn 提供的另一个经典示例数据集,记录了泰坦尼克号上乘客的信息,包括他们的生存状态、年龄、性别、舱位等级等。

   survived  pclass     sex   age  sibsp  parch     fare embarked  class  \
0         0       3    male  22.0      1      0   7.2500        S  Third   
1         1       1  female  38.0      1      0  71.2833        C  First   
2         1       3  female  26.0      0      0   7.9250        S  Third   
3         1       1  female  35.0      1      0  53.1000        S  First   
4         0       3    male  35.0      0      0   8.0500        S  Third   who  adult_male deck  embark_town alive  alone  
0    man        True  NaN  Southampton    no  False  
1  woman       False    C    Cherbourg   yes  False  
2  woman       False  NaN  Southampton   yes   True  
3  woman       False    C  Southampton   yes  False  
4    man        True  NaN  Southampton    no   True  

数据列说明

列名类型说明
survived数值型(int)是否生存,取值为 0(未生存)或 1(生存)。
pclass数值型(int)舱位等级,取值为 1(头等舱)、2(二等舱)或 3(三等舱)。
sex分类变量(字符串)乘客性别,取值为 male(男性)或 female(女性)。
age数值型(float)乘客年龄(岁)。
sibsp数值型(int)乘客在船上的兄弟姐妹或配偶的数量。
parch数值型(int)乘客在船上的父母或子女的数量。
fare数值型(float)乘客票价(英镑)。
embarked分类变量(字符串)乘客登船港口,取值为 C(Cherbourg)、Q(Queenstown)、S(Southampton)。
class分类变量(字符串)舱位等级(与 pclass 相同,但为字符串形式),取值为 FirstSecondThird
who分类变量(字符串)乘客类别,取值为 man(男性成人)、woman(女性成人)、child(儿童)。
adult_male布尔型(bool)是否为成年男性,取值为 TrueFalse
deck分类变量(字符串)乘客所在甲板(A-G),部分数据缺失。
embark_town分类变量(字符串)乘客登船港口(与 embarked 相同,但为完整名称)。
alive分类变量(字符串)是否生存(与 survived 相同,但为字符串形式),取值为 noyes
alone布尔型(bool)乘客是否独自一人,取值为 TrueFalse

乘客生存率的柱状图

绘制一个柱状图,显示乘客的生存率(Survived)分布

# 设置画布大小
plt.figure(figsize=(6, 4))# 绘制柱状图
sns.countplot(x="survived", data=titanic, palette="Set2")# 添加标题和标签
plt.title("Passenger Survival Count (0 = No, 1 = Yes)", fontsize=14)
plt.xlabel("Survived", fontsize=12)
plt.ylabel("Count", fontsize=12)# 显示图表
plt.show()

代码说明:

sns.countplot:用于绘制分类变量的计数柱状图。x="survived":指定 x 轴为生存状态(0 表示未生存,1 表示生存)。palette="Set2":设置颜色方案。plt.title、plt.xlabel、plt.ylabel:添加标题和轴标签

在这里插入图片描述

不同舱位的票价分布

绘制一个箱线图,显示不同舱位(Pclass)的票价(Fare)分布

# 设置画布大小
plt.figure(figsize=(8, 5))# 绘制箱线图
sns.boxplot(x="pclass", y="fare", data=titanic, palette="Set3")# 添加标题和标签
plt.title("Fare Distribution by Passenger Class", fontsize=14)
plt.xlabel("Passenger Class (Pclass)", fontsize=12)
plt.ylabel("Fare", fontsize=12)# 显示图表
plt.show()

代码说明:

sns.boxplot:用于绘制箱线图,显示数据的分布和离群值。x="pclass":指定 x 轴为乘客舱位(1 = 头等舱,2 = 二等舱,3 = 三等舱)。y="fare":指定 y 轴为票价。palette="Set3":设置颜色方案。

在这里插入图片描述

年龄与生存率的关系

绘制一个直方图,显示不同年龄段的乘客生存率。

# 设置画布大小
plt.figure(figsize=(10, 6))# 绘制直方图,按生存状态分组
sns.histplot(data=titanic, x="age", hue="survived", bins=30, kde=True, palette="Set1")# 添加标题和标签
plt.title("Age Distribution by Survival Status", fontsize=14)
plt.xlabel("Age", fontsize=12)
plt.ylabel("Count", fontsize=12)# 显示图例
plt.legend(title="Survived", labels=["No", "Yes"])# 显示图表
plt.show()

代码说明:

sns.histplot:用于绘制直方图,显示数据的分布。x="age":指定 x 轴为年龄。hue="survived":按生存状态分组,用不同颜色表示。bins=30:设置直方图的柱子数量。kde=True:添加核密度估计曲线,显示数据分布的平滑趋势。palette="Set1":设置颜色方案。plt.legend:添加图例,说明颜色对应的生存状态。

在这里插入图片描述

分析鸢尾花数据集(iris)

环境准备

# 导入必要的库
import seaborn as sns
import matplotlib.pyplot as plt# 加载鸢尾花数据集
iris = sns.load_dataset("iris")
print(iris.head())  # 查看数据集的前几行,了解数据结构

数据说明

iris数据集(鸢尾花数据集)是机器学习和数据科学领域中最经典的数据集之一。

   sepal_length  sepal_width  petal_length  petal_width species
0           5.1          3.5           1.4          0.2  setosa
1           4.9          3.0           1.4          0.2  setosa
2           4.7          3.2           1.3          0.2  setosa
3           4.6          3.1           1.5          0.2  setosa
4           5.0          3.6           1.4          0.2  setosa

数据列说明

列名类型说明
sepal_length数值型(float)花萼长度(厘米)。
sepal_width数值型(float)花萼宽度(厘米)。
petal_length数值型(float)花瓣长度(厘米)。
petal_width数值型(float)花瓣宽度(厘米)。
species分类变量(字符串)鸢尾花种类,取值为 setosaversicolorvirginica

不同种类的花瓣长度分布

绘制一个直方图,显示不同种类(species)的鸢尾花的花瓣长度(petal_length)分布

# 设置画布大小
plt.figure(figsize=(10, 6))# 绘制直方图,按种类分组
sns.histplot(data=iris, x="petal_length", hue="species", bins=30, kde=True, palette="Set1")# 添加标题和标签
plt.title("Distribution of Petal Length by Species", fontsize=14)
plt.xlabel("Petal Length (cm)", fontsize=12)
plt.ylabel("Frequency", fontsize=12)# 显示图例
plt.legend(title="Species")# 显示图表
plt.show()

代码说明:

sns.histplot:绘制直方图。x="petal_length":指定 x 轴为花瓣长度。hue="species":按种类分组,用不同颜色表示。bins=30:将数据分成 30 个区间。kde=True:添加核密度估计曲线,显示数据分布的平滑趋势。palette="Set1":设置颜色方案。plt.legend:添加图例,说明颜色对应的种类。

在这里插入图片描述

花萼长度与花瓣长度的关系

绘制一个散点图,显示花萼长度(sepal_length)与花瓣长度(petal_length)的关系,并按种类分组。

# 设置画布大小
plt.figure(figsize=(10, 6))# 绘制散点图,按种类分组
sns.scatterplot(x="sepal_length", y="petal_length", hue="species", data=iris, palette="Set2", s=100)# 添加标题和标签
plt.title("Sepal Length vs Petal Length by Species", fontsize=14)
plt.xlabel("Sepal Length (cm)", fontsize=12)
plt.ylabel("Petal Length (cm)", fontsize=12)# 显示图例
plt.legend(title="Species")# 显示图表
plt.show()

代码说明:

sns.scatterplot:绘制散点图。x="sepal_length":指定 x 轴为花萼长度。y="petal_length":指定 y 轴为花瓣长度。hue="species":按种类分组,用不同颜色表示。palette="Set2":设置颜色方案。s=100:设置散点的大小。plt.legend:添加图例,说明颜色对应的种类。

在这里插入图片描述

数据集中特征的相关性

绘制一个热力图,显示数据集中各个特征(如花萼长度、花瓣长度等)之间的相关性。

# 使用 drop() 方法删除非数值列 'species',因为相关性计算只能针对数值数据
correlation = iris.drop(columns=["species"])
# 使用 corr() 方法计算剩余数值特征之间的相关性矩阵
correlation = correlation.corr()# 设置画布大小
plt.figure(figsize=(8, 6))# 绘制热力图
# 1. correlation:传入相关性矩阵作为热力图的数据
# 2. annot=True:在热力图的每个单元格中显示具体的数值
# 3. cmap="coolwarm":设置颜色映射为从冷色(蓝色)到暖色(红色)的渐变色
# 4. fmt=".2f":设置数值的显示格式为两位小数
# 5. linewidths=0.5:设置热力图中单元格之间的线条宽度为 0.5
sns.heatmap(correlation, annot=True, cmap="coolwarm", fmt=".2f", linewidths=0.5)# 添加标题
plt.title("Correlation Heatmap of Iris Dataset Features", fontsize=14)# 显示图表
plt.show()

代码说明:

iris.drop(columns=["species"]):排除非数值列 species,只保留数值特征。corr():计算数值特征的相关性矩阵。sns.heatmap:绘制热力图。annot=True:在热力图中显示数值。cmap="coolwarm":设置颜色映射。fmt=".2f":设置数值的显示格式为两位小数。linewidths=0.5:设置热力图中单元格之间的线条宽度。

在这里插入图片描述

http://www.xdnf.cn/news/14106.html

相关文章:

  • LeetCode 744.寻找比目标字母大的最小字母
  • 【动手学深度学习】3.5. 图像分类数据集
  • 3D模型格式转换HOOPS Exchange与工程设计软件自带转换器对比分析
  • 力扣-322.零钱兑换
  • 最新四六级写作好词好句锦囊(持续更新中)
  • 【VS2022 配置 ACADOS环境】
  • Java集合 - ArrayList底层源码解析
  • 精益数据分析(102/126):SaaS用户流失率优化与OfficeDrop的转型启示
  • Trae国内版Builder模式VS Chat模式
  • 1.3、SDH光接口类型
  • powerShell调用cmd
  • Epigenetics ATAC-seq助力解析炎症性细胞因子IL-1刺激引起的动态染色质可及性变化
  • Marketing Agent实施成本全解析:价格构成、影响因素与技术选型建议
  • vector的用法
  • Web网页端即时通讯源码/IM聊天源码RainbowChat-Web
  • 一阶拟线性偏微分方程光滑解的存在性与最大初始振幅分析
  • Rocky Linux 9 系统安装配置图解教程并做简单配置
  • Node.js下载安装及环境配置教程
  • IEEE-745标准4字节16进制转浮点
  • 【VUE3】基于Vue3和Element Plus的递归组件实现多级导航栏
  • 社会应用融智学的人力资源模式:潜能开发评估;认知基建资产
  • 【为什么InnoDB用B+树?从存储结构到索引设计深度解析】
  • 车载以太网-switch
  • 无人机噪音处理模块技术分析
  • 前端面试八之map
  • NGINX SSL/TLS 预读模块解密 ngx_stream_ssl_preread_module 实战指南
  • 编译器基础概念
  • libcuckoo 介绍和使用指南
  • Spring源码本地编译并执行测试
  • 安卓手机解压软件推荐:高效处理各种压缩文件