Pandas 操作指南(七):数据可视化与结果展示

张开发
2026/4/8 3:01:45 15 分钟阅读

分享文章

Pandas 操作指南(七):数据可视化与结果展示
数据分析的目的并不只是得到若干计算结果更重要的是把结果清楚表达出来。一组平均值、一个分组统计表、若干类别分布数据若只是停留在表格中往往不利于快速理解而经过适当可视化Visualization后数据中的差异、分布、层次和比例关系就会更加直观。Pandas 提供了基于 plot() 的内置绘图接口可以直接从 DataFrame 或 Series 快速生成常见图形。本文围绕学生成绩数据介绍如何用 Pandas 展示数量变化、类别分布、数据分布特征以及分组结果并进一步说明如何从快速绘图过渡到更专业的可视化工具。下面先构造本篇所需的示例数据import pandas as pd scores pd.DataFrame([ {学号: S001, 姓名: 张三, 班级: C01, 语文: 88, 数学: 92, 英语: 85}, {学号: S002, 姓名: 李四, 班级: C01, 语文: 76, 数学: 81, 英语: 79}, {学号: S003, 姓名: 王五, 班级: C02, 语文: 90, 数学: 87, 英语: 93}, {学号: S004, 姓名: 赵六, 班级: C02, 语文: 85, 数学: 89, 英语: 88}, {学号: S005, 姓名: 孙七, 班级: C03, 语文: 91, 数学: 95, 英语: 90}, {学号: S006, 姓名: 周八, 班级: C03, 语文: 78, 数学: 84, 英语: 80}])一、为什么分析结果需要可视化分析的任务是把数据转化为结论而表达的任务是让这些结论能够被快速理解。表格适合保存完整信息但在以下情形中图形通常更有优势• 比较大小关系• 观察变化趋势• 展示分布特征• 呈现类别占比• 对比分组结果例如一组班级平均分数据若直接写成数字读者仍需逐项比较而若绘制为柱状图差异会更加直观。因此可视化不是装饰而是数据表达的重要组成部分。二、从表格直接生成图形Pandas 中最常见的绘图入口是 plot()。它基于 Matplotlib因此可以直接对 Series 或 DataFrame 进行快速绘图。1、绘制单列图形例如绘制数学成绩scores[数学].plot()在 Notebook 等交互环境中图形通常可以直接显示而在普通脚本环境中往往还需要导入 matplotlib.pyplot 并调用 plt.show()。若图中包含中文还常需要事先设置中文字体。import matplotlib.pyplot as plt # 设置中文字体plt.rcParams[font.sans-serif] [SimHei] # 黑体plt.rcParams[axes.unicode_minus] False # 解决负号显示问题 plt.show()2、绘制多列图形例如比较三门课成绩scores[[语文, 数学, 英语]].plot()3、指定图形类型可通过 kind 参数指定图形类型scores[数学].plot(kindbar)常见类型包括• line折线图• bar柱状图• barh横向柱状图• hist直方图• box箱线图• pie饼图这也是 Pandas 绘图适合作为可视化起点的重要原因。三、展示数值比较与相对变化当分析任务关注“数值大小规律”时柱状图和折线图最常用。1、使用柱状图比较各学生数学成绩scores.plot(x姓名, y数学, kindbar)柱状图适合比较离散对象之间的数值高低。2、使用折线图观察连续变化若希望按记录顺序观察不同对象之间的相对起伏也可以使用折线图scores.plot(x姓名, y[语文, 数学, 英语], kindline)需要注意若横轴并非时间或连续变量折线图更多体现的是按当前顺序连接后的相对变化而不一定表示真实趋势。3、图形选择原则比较离散个体柱状图更合适观察变化过程折线图更合适因此图形类型应与分析目标保持一致而不是随意选择。四、展示类别分布与占比关系对于类别数据常需要展示“各类有多少”以及“各类占多少”。1、展示班级人数分布scores[班级].value_counts().plot(kindbar)这适合展示各班人数差异。2、展示班级占比关系scores[班级].value_counts().plot(kindpie, autopct%.1f%%)饼图适合展示总体中各部分所占比例但类别不宜过多否则标签与扇区都不易辨认。若类别较多或各部分差异较小柱状图通常比饼图更易比较。3、对成绩等级作分类后展示scores[数学等级] pd.cut( scores[数学], bins[0, 79, 89, 100], labels[一般0~79, 良好80~89, 优秀90~100]) scores[数学等级].value_counts(sortFalse).plot(kindbar)这类图形能够把连续成绩转化为类别结果更适合用于说明分布层级。五、观察数据的分布特征当分析任务关注“数据是集中还是分散”“是否存在明显偏态或异常值”时应使用分布图形。1、直方图scores[数学].plot(kindhist, bins5)直方图适合观察数值的大致分布情况。2、箱线图scores[[语文, 数学, 英语]].plot(kindbox)箱线图强调的是分布摘要而不是逐个展示每一个原始数据点。箱线图适合观察• 中位数位置• 四分位范围• 离散程度• 是否存在明显离群点平均值只能告诉我们“中心大致在哪”但分布图能够进一步告诉我们“数据是如何分散的”。这对分析结果的解释非常重要。六、用图形展示分组统计结果可视化通常不是替代统计而是建立在统计结果之上的表达方式。分组统计往往是分析中的核心环节而图形能够显著提升分组结果的可读性。1、绘制各班平均数学成绩class_mean scores.groupby(班级)[数学].mean()class_mean.plot(kindbar)2、比较各班三门课平均成绩class_subject_mean scores.groupby(班级)[[语文, 数学, 英语]].mean()class_subject_mean.plot(kindbar)这种图形能够同时展示• 组间差异• 指标间差异表格中的分组均值虽然准确但并不总是直观。转换为图形后班级之间、科目之间的差异会更加清楚尤其适合汇报与展示。七、从快速绘图走向专业可视化Pandas 的 plot() 很适合快速探索和教学演示但在更复杂场景中还可以进一步使用专业绘图库。1、Pandas 绘图的优势• 语法简洁• 直接基于 DataFrame• 适合快速查看结果• 适合常见统计图2、Pandas 绘图的局限• 细节控制相对有限• 图形美化能力不如专业库• 多图布局、主题样式和高级注释支持有限3、向 Matplotlib 与 Seaborn 过渡一般可按如下分工理解• Pandas快速从表格生成基础图形• Matplotlib底层控制与精细定制• Seaborn更高级的统计图形与更美观的默认样式因此Pandas 内置绘图可视为可视化的起点而不是终点。八、综合示例前文主要介绍了 Pandas 的快速绘图方式。下面进一步通过两个简单示例说明当需要更细的图形控制或更统计化的展示时可以如何借助 Matplotlib 与 Seaborn 完成结果展示。示例 1使用 Matplotlib 展示班级平均成绩import matplotlib.pyplot as plt # 设置中文字体plt.rcParams[font.sans-serif] [SimHei] # 黑体plt.rcParams[axes.unicode_minus] False # 解决负号显示问题 class_subject_mean scores.groupby(班级)[[语文, 数学, 英语]].mean() class_subject_mean.plot(kindbar)plt.title(各班三门课平均分)plt.xlabel(班级)plt.ylabel(平均分)plt.grid(axisy, linestyle--, alpha0.5)plt.show()Matplotlib 示例体现了更细的标题、坐标轴、网格控制。示例 2使用 Seaborn 展示分组比较结果import seaborn as snsimport matplotlib.pyplot as plt # 设置中文字体plt.rcParams[font.sans-serif] [SimHei] # 黑体plt.rcParams[axes.unicode_minus] False # 解决负号显示问题 long_scores scores.melt( id_vars[学号, 姓名, 班级], value_vars[语文, 数学, 英语], var_name科目, value_name成绩) # sns.barplot() 默认会对同组数据进行聚合通常显示均值因此适合用于分组比较sns.barplot(datalong_scores, x班级, y成绩, hue科目)plt.title(各班各科成绩比较)plt.show()Seaborn 的很多统计图在长表结构下更自然。 小结可视化的价值不在于把数据“画出来”而在于把分析结果更清楚地表达出来。只有根据任务选择合适的图形并结合统计结果组织展示数据中的差异、分布和结构特征才能被更直观地理解。延伸阅读《人工智能通识课Matplotlib 绘图基础》《Seaborn 绘图基础》“点赞有美意赞赏是鼓励”

更多文章