2025 AI 打卡 Day5:Seaborn 数据可视化基础(Matplotlib 升级版 + Titanic 真实业务全案例 + 完整参数调优)

目录

      • [1、 Seaborn 全方位解析](#1、 Seaborn 全方位解析)
      • [2、与 Matplotlib 的关系------"底层引擎"与"高层接口"的协作](#2、与 Matplotlib 的关系——“底层引擎”与“高层接口”的协作)
      • [3. 可视化的目标:让人看懂**](#3. 可视化的目标:让人看懂**)
        • [3.1 直观性:信息一眼可见**](#3.1 直观性:信息一眼可见**)
        • [3.2 简洁性:去除冗余,突出核心**](#3.2 简洁性:去除冗余,突出核心**)
        • [3.3 针对性:图表与问题挂钩**](#3.3 针对性:图表与问题挂钩**)
        • [3.4 逻辑性:让图表组成完整故事**](#3.4 逻辑性:让图表组成完整故事**)
        • [3.5 可解释性:让非技术人员也懂**](#3.5 可解释性:让非技术人员也懂**)
      • [4. Matplotlib、Seaborn 快速入门**](#4. Matplotlib、Seaborn 快速入门**)
      • [5、新增:高级综合仪表盘(FacetGrid + catplot 多面板)------最复杂场景**](#5、新增:高级综合仪表盘(FacetGrid + catplot 多面板)——最复杂场景**)
      • 6、扩展:相关性热力图(heatmap)**
        • [**6.1 使用建议(踩坑全记录)**](#6.1 使用建议(踩坑全记录))
      • [7. 常见图表的选择(业务场景全覆盖)**](#7. 常见图表的选择(业务场景全覆盖)**)
        • [7.1 趋势 / 关系 → jointplot & pairplot**](#7.1 趋势 / 关系 → jointplot & pairplot**)
        • [7.2 对比 → barplot / countplot**](#7.2 对比 → barplot / countplot**)
        • [7.3 分布 → violinplot(重头戏)**](#7.3 分布 → violinplot(重头戏)**)
      • **总结**
    • [点赞、收藏、转发走一波!持续 2025 AI 打卡中~ 欢迎 Star + Fork 一起学!](#点赞、收藏、转发走一波!持续 2025 AI 打卡中~ 欢迎 Star + Fork 一起学!)

1、 Seaborn 全方位解析

Seaborn 是基于 Python 的统计数据可视化库,核心定位是"让数据分析中的可视化更简单、更美观"。它并非独立的绘图引擎,而是在 Matplotlib 基础上,针对统计场景做了高层封装,主要特点包括:

  • 统计友好:内置大量专为统计分析设计的图表类型(如小提琴图、热力图、聚类图、时间序列趋势图),无需手动计算统计量即可直接可视化(如分布、相关性、分组对比);
  • 美观默认:自带 5 种预设主题(如 darkgrid、whitegrid)和科学配色方案(如 husl、Set2),默认生成的图表符合学术出版或商业汇报的审美标准,无需反复调整细节;
  • Pandas 无缝集成:直接支持 Pandas DataFrame 作为输入,通过指定"列名"即可完成数据映射(如 x="列名"、hue="分组列名"),无需手动提取数据或转换格式;
  • 极简 API:复杂图表(如多子图联动、分类数据对比)仅需 1-2 行代码即可实现,大幅降低统计可视化的学习成本和代码量。

2、与 Matplotlib 的关系------"底层引擎"与"高层接口"的协作

维度 Matplotlib Seaborn
定位 通用绘图"基石"(底层引擎) 统计可视化"高层接口"(专用工具)
核心能力 完全控制图表像素级细节(如坐标轴刻度、图例位置、注释文本),支持任意自定义;但统计场景需手动编写大量代码(如分组绘图、计算分布) 专注统计场景,一键实现复杂统计图表;但极致自定义需依赖 Matplotlib 接口
依赖关系 Seaborn 的底层渲染完全依赖 Matplotlib(所有 Seaborn 图表最终都通过 Matplotlib 生成) 无法脱离 Matplotlib 独立运行,需同时导入 matplotlib.pyplot 控制显示/保存
适用场景 非统计类可视化(如工程图纸、自定义示意图)、图表细节微调 数据分析中的统计可视化(如探索数据分布、验证假设、展示分析结论)

3. 可视化的目标:让人看懂**

3.1 直观性:信息一眼可见**

数据分析的最终目的,不是停留在"代码跑通"或"模型上线",而是把复杂的洞察清晰地传递给老板、产品经理或非技术同事。Seaborn 的最大价值就在于:3秒让人看懂

例如下面这张 countplot,一眼就能看出"三等舱死亡人数远超其他舱位":

python 复制代码
sns.countplot(data=train, x="Pclass", hue="Survived", palette="husl")
plt.title("不同舱位生存 vs 死亡人数(一眼看出三等舱最危险)")
3.2 简洁性:去除冗余,突出核心**

Seaborn 默认就自带美学 + 统计计算,省掉 Matplotlib 80% 的调参代码。

以前 Matplotlib 要写 25 行才能出好看的图,现在 Seaborn 3~5 行就够:

python 复制代码
sns.set_theme(style="darkgrid", palette="husl")  # 一行切换专业风
3.3 针对性:图表与问题挂钩**

我们所有图表都紧紧围绕 "谁更容易在泰坦尼克号生存?" 这个核心业务问题:

  • 舱位影响多大?
  • 性别/年龄/票价有没有规律?
  • 不同港口登船的人群特征差异?
3.4 逻辑性:让图表组成完整故事**

Day5 的图表顺序就是完整故事线:

  1. countplot(人数统计)
  2. barplot(平均生存率)
  3. violinplot(分布细节,最重点)
  4. heatmap(相关性一览)
  5. FacetGrid 多面板仪表盘(3 维度同时看)
3.5 可解释性:让非技术人员也懂**

每张图都配业务解读标题,例如:

  • "Cherbourg 上船的乘客票价最高,生存率也最高"
  • "三等舱 20~30 岁男性死亡率极高"

4. Matplotlib、Seaborn 快速入门**

4.1 基本示例**
python 复制代码
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib
matplotlib.use('TkAgg')   # VS Code 弹窗必备

train = pd.read_csv('../data/titanic.csv')

sns.set_theme(style="darkgrid", palette="husl")
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
4.2 用 Matplotlib 绘图(对比用)**

以前我们 Day4 用的方式:手动设置颜色、网格、字体、图例......代码又臭又长。

4.3 用 Seaborn 绘图(推荐写法)**

Seaborn 自动接管一切统计 + 美学:

python 复制代码
sns.countplot(data=train, x="Pclass", hue="Survived", palette="husl")
4.4 其他常见 Seaborn 图表(全部实战过)**

countplot (人数统计)------ 4 个 Demo 已跑通
barplot (平均值 + 误差棒)------ 生存率、票价对比
violinplot (小提琴图)------ 本期最重点!Basic 3步 + Demo 3个 + swarm 叠加真实点 + FacetGrid 多面板
heatmap (相关性热力图)
jointplot / pairplot (联合分布)
catplot(网格图,最强大仪表盘)

4.4.1、countplot(计数统计图)------场景:人数分布分析**

业务场景 :产品经理看"不同用户群体人数"(舱位/港口/性别人数)
方法sns.countplot
关键参数调优(复杂版):

  • hue= 分组染色
  • order= 手动排序(避免乱序)
  • orient='h' 横向(标签长时必用)
  • palette= 配色

完整代码day05_03_basic_countplot.py 已更新):

python 复制代码
sns.countplot(data=train, x="Pclass", hue="Survived", 
              palette="husl", order=[1,2,3])
plt.title("不同舱位生存 vs 死亡人数")
plt.xlabel("舱位等级")
plt.ylabel("人数")

4.4.2、barplot(条形图)------场景:平均值/KPI对比**

业务场景 :老板要看"不同组的平均生存率/平均票价"
方法sns.barplot
关键参数调优(复杂版):

  • y= 数值列(自动算均值)
  • hue= 多维度对比
  • estimator=np.mean(默认)或 np.median
  • ci=95 误差棒置信区间
  • errwidth=2 加粗误差棒

完整代码day05_03_demo_barplot.py):

python 复制代码
sns.barplot(data=train, x="Pclass", y="Fare", hue="Survived", 
            palette="Set2", estimator=np.median, ci=95, errwidth=2)

4.4.3、violinplot(小提琴图)------场景:分布密度深度分析(本期核心)**

业务场景 :数据分析师看"年龄/票价在不同组的完整分布 (中位数、四分位、密度、极端值)",比 boxplot 信息量多 3 倍
方法sns.violinplot + sns.swarmplot 叠加真实点

关键参数调优(复杂版,已在 GitHub 演示):

  • split=True:左右分开(生存 vs 死亡)
  • inner="quart" / None:四分位线 / 关闭(留空间给 swarm)
  • scale="count" / "width":宽度按人数 / 统一
  • cut=0:不超出实际数据范围
  • dodge=True + alpha=0.7 + size=3(swarm 参数)
  • scale_hue=False(高级:不按 hue 缩放宽度)

Basic 最终版代码day05_04_basic_violinplot_03.py):

python 复制代码
sns.violinplot(data=train, x="Pclass", y="Age", hue="Survived",
               split=True, inner="quart", scale="count", cut=0, palette="husl")

Demo 2 叠加真实点day05_04_demo2_violinplot.py 最复杂):

python 复制代码
sns.violinplot(..., inner=None, scale="count")
sns.swarmplot(..., dodge=True, size=3, alpha=0.7)

Demo 3 多面板day05_04_demo3_violinplot.py):

python 复制代码
fig, axes = plt.subplots(1, 2, figsize=(14, 6))
sns.violinplot(..., ax=axes[0])   # 年龄
sns.violinplot(..., ax=axes[1])   # 票价

5、新增:高级综合仪表盘(FacetGrid + catplot 多面板)------最复杂场景**

业务场景 :老板/产品总监要同时 看"舱位 × 港口 × 性别"的年龄分布(一图看清 3 个维度)
方法sns.catplot(kind="violin")FacetGrid.map(更灵活)
关键参数调优(超级复杂版):

  • col="Embarked", row="Sex"(多面板网格)
  • kind="violin", col_wrap=3
  • height=4, aspect=1.2(控制面板大小)
  • sharey=False(不同面板 y 轴独立)
  • hue="Survived", split=True, inner="quart", scale="count"

完整代码 (已推送到 day05_05_facetgrid_violin.py):

python 复制代码
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib
matplotlib.use('TkAgg')

train = pd.read_csv('../data/titanic.csv')
sns.set_theme(style="darkgrid", palette="husl")
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

g = sns.catplot(data=train, 
                x="Pclass", 
                y="Age", 
                hue="Survived",
                col="Embarked", 
                row="Sex",
                kind="violin",
                split=True,
                inner="quart",
                scale="count",
                height=4,
                aspect=1.2,
                sharey=False,
                palette="husl")
g.set_titles("港口: {col_name} | 性别: {row_name}")
g.fig.suptitle("高级仪表盘:舱位×港口×性别年龄分布(生存对比)", y=1.02)
plt.show()
plt.savefig('violinplot_facetgrid_dashboard.png', dpi=300, bbox_inches='tight')

6、扩展:相关性热力图(heatmap)**

业务场景 :特征工程前看"哪些变量最相关"(面试/老板必问)
方法sns.heatmap
参数annot=True, cmap="RdBu_r", center=0, linewidths=0.5

代码day05_06_heatmap.py):

python 复制代码
corr = train[['Survived','Pclass','Age','Fare','SibSp','Parch']].corr()
sns.heatmap(corr, annot=True, cmap="RdBu_r", center=0, linewidths=0.5)
6.1 使用建议(踩坑全记录)
  • 主题推荐:darkgrid + husl(最专业)
  • 中文乱码必加两行 rcParams
  • 保存高清图:plt.savefig('xxx.png', dpi=300, bbox_inches='tight')
  • VS Code 不弹窗:加 matplotlib.use('TkAgg')
  • swarmplot 点太密:加 size=3, alpha=0.7

7. 常见图表的选择(业务场景全覆盖)**

7.1 趋势 / 关系 → jointplot & pairplot**

看年龄与票价的联合分布:

python 复制代码
sns.jointplot(data=train, x="Age", y="Fare", hue="Survived", kind="scatter")
7.2 对比 → barplot / countplot**

老板 KPI 图必备:

python 复制代码
sns.barplot(data=train, x="Pclass", y="Survived", hue="Sex", palette="husl")
7.3 分布 → violinplot(重头戏)**

比箱线图信息量多 3 倍!

  • Basic 3步(split、inner、scale)
  • Demo 1(票价分布)
  • Demo 2(violin + swarm 叠加真实乘客点)
  • Demo 3(多子图 + 港口对比)
  • 终极:FacetGrid 多面板仪表盘(舱位×港口×性别同时看)

完整 FacetGrid 代码(最复杂最实用):

python 复制代码
g = sns.catplot(data=train, x="Pclass", y="Age", hue="Survived",
                col="Embarked", row="Sex", kind="violin",
                split=True, inner="quart", scale="count",
                height=4, aspect=1.2, sharey=False)

总结

Seaborn 让可视化从"技术展示"彻底升级为"业务洞察武器"。

从今天起,你画的每一张图都能让老板 3 秒看懂、直接决策!

完整代码仓库 (已同步最新推送):
https://github.com/codeInbpm/ML-Learning-Journey-2025/tree/main/05_seaborn_basics

(所有 basic/demo/facetgrid 文件可直接运行)

点赞、收藏、转发走一波!持续 2025 AI 打卡中~ 欢迎 Star + Fork 一起学!

相关推荐
golang学习记2 小时前
VS Code 1.110 AI大升级:让AI真正实用!
人工智能·visual studio code
程序员小明儿2 小时前
OpenClaw-RL 实战 05|加权损失融合:为什么“评估”+“指导”双信号能让Agent聪明一倍?
人工智能
_遥远的救世主_2 小时前
Claude HUD:给你的 Claude Code 装一块「仪表盘」
人工智能
用户4815930195912 小时前
Token 到底是什么?揭开大模型背后"文字压缩术"的神秘面纱
人工智能
数字生命卡兹克2 小时前
第一个同时为人类和Agent设计的AI视频产品,它叫,LibTV。
人工智能
程序员小明儿2 小时前
OpenClaw-RL 实战 06|异步无阻塞日志系统:如何在服务不中断的前提下记录每一轮交互的“学习数据”?
人工智能
@不误正业2 小时前
从LangChain到OpenClaw:AI Agent框架选型指南(性能对比+源码分析)
人工智能·langchain
StoneWei2 小时前
OpenClaw多Agent协同工作配置实战
人工智能
程序员小明儿2 小时前
OpenClaw-RL 实战 04|捕捉“指导信号”实战:如何从用户纠正中提取Token级监督?
人工智能