跳到主要内容

Python Seaborn基础

什么是Seaborn?

Seaborn是基于Matplotlib的Python数据可视化库,提供了更高层次的接口,用于绘制有吸引力且信息丰富的统计图形。它与pandas数据结构紧密集成,内置了多种数据集,并定义了多个绘制多变量数据集关系的函数。

Seaborn的目标是使可视化成为探索和理解数据的核心部分。它的API设计简单明了,使得复杂的可视化任务变得简单,同时生成的图表默认具有美观的外观。

提示

Seaborn不是替代Matplotlib,而是建立在Matplotlib基础上的库,提供更高级的API和默认样式。

安装Seaborn

使用pip安装Seaborn非常简单:

python
pip install seaborn

导入所需库

在开始使用Seaborn之前,我们需要导入必要的库:

python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 设置绘图风格
sns.set_theme() # 使用默认主题

Seaborn基本图表类型

1. 分布可视化

直方图和KDE (Kernel Density Estimation)

histplot()kdeplot()函数用于可视化单变量或双变量分布:

python
# 生成示例数据
data = np.random.normal(size=1000)

# 创建图形
plt.figure(figsize=(10, 6))

# 绘制直方图和KDE
sns.histplot(data, kde=True)
plt.title('直方图和KDE')
plt.show()

这会生成一个包含直方图和KDE曲线的图表,展示数据的分布情况。

箱线图

箱线图用于显示数据分布的几个关键统计量:

python
# 加载内置数据集
tips = sns.load_dataset("tips")

# 绘制箱线图
plt.figure(figsize=(10, 6))
sns.boxplot(x="day", y="total_bill", data=tips)
plt.title('按天统计账单总额的箱线图')
plt.show()

2. 关系可视化

散点图

使用scatterplot()函数可视化两个变量之间的关系:

python
# 绘制散点图
plt.figure(figsize=(10, 6))
sns.scatterplot(x="total_bill", y="tip", data=tips)
plt.title('账单总额与小费关系的散点图')
plt.show()

回归图

regplot()函数在散点图的基础上增加了回归线:

python
plt.figure(figsize=(10, 6))
sns.regplot(x="total_bill", y="tip", data=tips)
plt.title('账单总额与小费关系的回归图')
plt.show()

3. 分类数据可视化

条形图

barplot()函数用于可视化分类变量与数值变量的关系:

python
plt.figure(figsize=(10, 6))
sns.barplot(x="day", y="total_bill", data=tips)
plt.title('不同天的平均账单总额')
plt.show()

计数图

countplot()函数显示分类变量的计数:

python
plt.figure(figsize=(10, 6))
sns.countplot(x="day", data=tips)
plt.title('不同天的顾客数量')
plt.show()

4. 矩阵图

热力图

heatmap()函数用于可视化矩阵数据:

python
# 计算相关矩阵
corr = tips.corr()

# 绘制热力图
plt.figure(figsize=(8, 6))
sns.heatmap(corr, annot=True, cmap="coolwarm")
plt.title('相关矩阵热力图')
plt.show()

自定义Seaborn图表

调整图表样式

Seaborn提供了几种预设的视觉风格:

python
# 可用的风格:darkgrid, whitegrid, dark, white, ticks
sns.set_style("whitegrid")
plt.figure(figsize=(10, 6))
sns.boxplot(x="day", y="total_bill", data=tips)
plt.title('使用whitegrid风格的箱线图')
plt.show()

调整调色板

python
# 使用不同的调色板
sns.set_palette("pastel")
plt.figure(figsize=(10, 6))
sns.barplot(x="day", y="total_bill", data=tips)
plt.title('使用pastel调色板的条形图')
plt.show()

FacetGrid:绘制多子图

FacetGrid用于在数据子集上绘制多个图:

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

实际案例:数据分析与可视化

下面,我们将通过一个实际案例演示Seaborn的应用 - 分析泰坦尼克号乘客数据:

python
# 加载泰坦尼克号数据集
titanic = sns.load_dataset("titanic")

# 查看数据集的前几行
print(titanic.head())

输出:

   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

1. 分析生存率与其他特征的关系

python
plt.figure(figsize=(12, 6))

# 生存率与性别的关系
plt.subplot(1, 2, 1)
sns.countplot(x='survived', hue='sex', data=titanic)
plt.title('生存情况与性别的关系')

# 生存率与舱位等级的关系
plt.subplot(1, 2, 2)
sns.countplot(x='survived', hue='class', data=titanic)
plt.title('生存情况与舱位等级的关系')

plt.tight_layout()
plt.show()

2. 分析年龄分布

python
plt.figure(figsize=(12, 6))

# 不同生存状态下的年龄分布
plt.subplot(1, 2, 1)
sns.histplot(data=titanic, x='age', hue='survived', multiple='stack')
plt.title('不同生存状态下的年龄分布')

# 不同性别的年龄分布
plt.subplot(1, 2, 2)
sns.kdeplot(data=titanic, x='age', hue='sex', fill=True)
plt.title('不同性别的年龄分布')

plt.tight_layout()
plt.show()

3. 复杂的多变量分析

python
# 使用对图来探索多个变量之间的关系
g = sns.PairGrid(titanic[['survived', 'age', 'fare', 'pclass']])
g.map_diag(sns.histplot)
g.map_offdiag(sns.scatterplot)
plt.show()

4. 使用热力图分析相关性

python
# 计算数值变量之间的相关性
numeric_data = titanic.select_dtypes(include=[np.number])
corr = numeric_data.corr()

# 绘制热力图
plt.figure(figsize=(10, 8))
sns.heatmap(corr, annot=True, cmap='coolwarm', linewidths=0.5)
plt.title('特征相关性热力图')
plt.show()

总结

在本教程中,我们学习了:

  1. Seaborn的基础知识和安装方法
  2. 各种基本图表类型及其用途:
    • 分布可视化:直方图、KDE、箱线图
    • 关系可视化:散点图、回归图
    • 分类数据可视化:条形图、计数图
    • 矩阵图:热力图
  3. 如何自定义Seaborn图表
  4. 实际案例:分析泰坦尼克号乘客数据

Seaborn大大简化了数据可视化过程,其默认的美观样式和便捷的API使数据分析和探索变得更加简单。通过本教程的学习,你已经掌握了Seaborn的基础知识,可以开始使用它来探索自己的数据集。

学习建议

学习Seaborn最好的方式是通过实践。尝试用自己的数据集创建不同类型的可视化,或者使用Seaborn内置的示例数据集进行练习。

附加资源与练习

练习

  1. 使用Seaborn内置的flights数据集,创建一个展示不同年份每月乘客数量的热力图。
  2. 使用tips数据集,分析小费数量与就餐时间、性别之间的关系。
  3. 创建一个完整的可视化项目,选择一个感兴趣的数据集(可以从Kaggle下载),并使用Seaborn进行探索性数据分析。

推荐资源

通过持续练习和探索,你将能够熟练掌握Seaborn,并创建出美观且信息丰富的数据可视化。