Data-Science-For-Beginners 第 11 课作业实战:在 Excel 中绘制饼图、甜甜圈图与华夫图
【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners
本篇指南围绕translations/fa/3-Data-Visualization/11-visualization-proportions/assignment.md(即第 11 课"可视化比例"的配套作业)展开,任务核心是:使用你手头的任意数据集,在 Excel 电子表格中直接创建饼图(Pie)、甜甜圈图(Donut)与华夫图(Waffle)三种比例可视化图表。文中将以本仓库提供的蘑菇数据集为例,完整继承作业指令与评分标准,并结合主课文的 Python 实现(3-Data-Visualization/11-visualization-proportions/README.md)与配套数据集,给出可复制、可运行的完整操作方案。读完本篇,你将掌握三种比例图的核心思想与在 Excel 中的实现路径,并能对照评分标准自查提交质量。
一、作业背景:第 11 课与蘑菇数据集
第 11 课"可视化比例"(Visualizing Proportions)的核心内容是:使用一份与自然相关的数据集,可视化类别占比,例如蘑菇数据集中不同种类真菌的数量分布。课程使用的数据集来自 data/mushrooms.csv,记录了 Audubon 整理的、隶属于 Agaricus 与 Lepiota 两个科的 23 种菌褶蘑菇的详细特征。对仓库中该 CSV 的实际校验显示:数据集共 8124 条记录、23 个特征列(class、cap-shape、cap-surface、cap-color、bruises、odor、habitat等),全部为文本型取值。
主课文先用 Python 完成了三种图表的演示,作业则要求你脱离 Python,把同样的三类图搬进 Excel。这是一个典型的"理解可视化本质后跨工具复现"的训练:比例可视化的关键并不在于工具,而在于先把数据按类别分组,再选择最合适的展示形态。
二、作业要求解读
作业原文(波斯语版,英文原版见 3-Data-Visualization/11-visualization-proportions/assignment.md)给出的指令非常明确:
你知道吗,你可以直接在 Excel 中创建甜甜圈图、饼图和华夫图?使用一个你自选的数据集,直接在 Excel 工作表中创建这三种图表。
拆解下来,作业包含三个递进步骤:
- 选定数据集:可以是本仓库的
data/mushrooms.csv,也可以是任何你熟悉、字段适合做分类统计的数据; - 用 Excel 创建饼图、甜甜圈图、华夫图各一张:三张图都应来自同一份数据,体现不同类别之间的数量占比;
- 完成自评:对照下表(即作业附带的评分标准)判断自己的成果等级。
评分标准是本次作业质量的核心依据,原表内容如下,必须完整对照:
| 优秀(Exemplary) | 合格(Adequate) | 需要改进(Needs Improvement) |
|---|---|---|
| 提交的 Excel 表格中包含了全部三种图表 | 提交的 Excel 表格中包含了两种图表 | 提交的 Excel 表格中只包含一种图表 |
从评分标准可以清晰看到:三种图表齐全 = 优秀,缺一张 = 合格,只画一张 = 需要改进。因此提交前务必逐项核对图表的种类完整性。
三、数据准备:先按类别做汇总(沿用主课文思路)
无论使用什么工具,比例图之前都需要"计数"。主课文在 Python 中是这样做的(见 3-Data-Visualization/11-visualization-proportions/README.md):
import pandas as pd import matplotlib.pyplot as plt mushrooms = pd.read_csv('../../data/mushrooms.csv') mushrooms.head()由于所有特征都是文本对象,先将其转换为category类型,再按类别分组计数:
cols = mushrooms.select_dtypes(["object"]).columns mushrooms[cols] = mushrooms[cols].astype('category') edibleclass = mushrooms.groupby(['class']).count()分组计数后的结果(对仓库数据实测):Edible4208 条、Poisonous3916 条,合计 8124 条。同理可对habitat(栖息地,7 类)与cap-color(菌盖颜色,9 类)分组。作业中所有 Excel 图表都应基于这类分组计数结果,而不是原始明细行——比例图展示的是"每一类占多少",而不是"每一行是什么"。
四、Excel 实操:三种比例图的实现路径
4.1 饼图(Pie Chart)
饼图用扇形角度表示占比,最适合类别数量较少(2~7 类)的场景。在 Excel 中,饼图是原生内置图表,操作路径如下:
- 在 Excel 工作表中准备两列数据:一列是类别标签(如
Edible、Poisonous),一列是计数结果(如4208、3916); - 选中这两列数据 → 菜单栏选择「插入」→ 在图表区域选择「饼图」;
- 右键图表可添加「数据标签」,勾选"百分比"即可显示各扇区占比。
以蘑菇的食用性分类为例,饼图会直接呈现 4208 条可食与 3916 条有毒的占比关系。主课文中对应的 Python 实现如下,注意labels 数组的顺序必须与分组结果的索引顺序一致,这是饼图最常见的错误来源:
labels=['Edible','Poisonous'] plt.pie(edibleclass['population'], labels=labels, autopct='%.1f %%') plt.title('Edible?') plt.show()在 Excel 中同样要注意:类别列与数值列的对应关系不能错位,Excel 会按所选区域的行序自动配对标签与数值。
下图为主课文生成的饼图效果示例(pie1-wb.png):
4.2 甜甜圈图(Donut Chart)
甜甜圈图本质是"中间挖洞的饼图",在视觉上更轻巧,也更方便在中心区域放置汇总信息(如总数或标题)。在 Excel 中它被称为环形图(Doughnut Chart),同样是原生图表类型:
- 沿用上一节准备好的"类别 + 计数"两列数据;
- 选中数据 → 「插入」→ 在图表区域选择「环形图」;
- 环形图的"洞径"可以通过右键图表 →「设置数据系列格式」调整环宽;环越细,中间可容纳的文字区域越大。
主课文用蘑菇的 7 种栖息地数据制作甜甜圈图,Python 实现如下:先分组得到 7 个栖息地类别,再绘制饼图并叠加一个白色中心圆来"挖洞":
habitat=mushrooms.groupby(['habitat']).count() labels=['Grasses','Leaves','Meadows','Paths','Urban','Waste','Wood'] plt.pie(habitat['class'], labels=labels, autopct='%1.1f%%', pctdistance=0.85) center_circle = plt.Circle((0, 0), 0.40, fc='white') fig = plt.gcf() fig.gca().add_artist(center_circle) plt.title('Mushroom Habitats') plt.show()其中plt.Circle((0, 0), 0.40, fc='white')的半径参数0.40决定了中心洞的大小——把 0.40 改大,洞变宽、环形变细;改小则相反。在 Excel 环形图中,这一参数对应"设置数据系列格式"里的环宽百分比,二者是同一视觉概念的不同表达。
对仓库数据实测,7 类栖息地的计数为:Wood3148、Grasses2148、Paths1144、Leaves832、Urban368、Meadows292、Waste192,可作为作业示例数据的直接来源。
下图为主课文生成的甜甜圈图效果示例(donut-wb.png):
4.3 华夫图(Waffle Chart)
华夫图用"二维网格中的方格数量"来表示数量——100 个格子代表整体 100%,每个类别占据的格子数与其占比成正比。它的视觉冲击力强,特别适合展示"整体由哪几部分组成"以及"某一部分特别突出"的信息。
需要说明的是:Excel 没有原生内置的华夫图图表类型,通常通过以下方式实现(通用做法):
- 先按主课文的思路准备好类别计数(例如
cap-color的 9 类颜色及其计数); - 在工作表空白区域搭建一个 10×10(或 20×5)的方格矩阵;
- 用公式(如
IF函数结合累计占比)或「条件格式」的色阶/图标集规则,让每个格子依据其落入的类别区间显示对应颜色; - 也可以借助支持该图表类型的第三方加载项,或使用 Excel 的「Power Query + 条件格式」组合方案。
主课文的 Python 实现需要先安装辅助库 PyWaffle,然后分组并绘制:
pip install pywafflecapcolor=mushrooms.groupby(['cap-color']).count()import pandas as pd import matplotlib.pyplot as plt from pywaffle import Waffle data ={'color': ['brown', 'buff', 'cinnamon', 'green', 'pink', 'purple', 'red', 'white', 'yellow'], 'amount': capcolor['class'] } df = pd.DataFrame(data) fig = plt.figure( FigureClass = Waffle, rows = 100, values = df.amount, labels = list(df.color), figsize = (30,30), colors=["brown", "tan", "maroon", "green", "pink", "purple", "red", "whitesmoke", "yellow"], )其中rows = 100表示网格的行数(这里 100 行构成一个大的比例矩阵),values传入各类别的计数,colors列表与labels一一对应。对仓库数据实测,cap-color的 9 类计数为:Brown2284、Green1856、Red1500、Yellow1072、White1040、Buff168、Pink144、Cinnamon44、Purple16——绿色菌盖的蘑菇数量出人意料地多,这正是华夫图一眼就能传达的信息。
下图为主课文生成的华夫图效果示例(waffle.png):
五、对照评分标准自查与提交要点
完成三种图表后,按作业自带的评分标准逐项检查:
- 图表种类是否齐全:工作表中应同时存在饼图、环形图(甜甜圈图)、华夫图三张图。若只画出两张为"合格",仅一张则为"需要改进";
- 数据是否来自同一个数据集:作业允许自选数据集,但三种图应来自同一份数据源,体现"同一数据、三种视角"的设计意图;
- 比例语义是否正确:饼图与环形图应基于分组计数而非原始明细;华夫图格子数与占比应成比例,避免误导读者;
- 标签与图例是否完整:每张图都应能无歧义地读出"每个扇区/每类颜色代表什么类别、占比多少"。
建议把三张图放在同一个工作表的相邻区域,并用单元格批注或说明文字标注各自对应的分组字段(如class、habitat、cap-color),方便评审快速理解。
六、延伸与挑战
主课文在结尾给出了一个延伸挑战:尝试用拖拽式可视化工具 Charticulator 重新创作这三种"美味"的图表,并提醒——PyWaffle 支持在格子中使用图标(基于 Font Awesome 图标库)代替纯色方格,让华夫图更具表现力。如果你完成了 Excel 版本,可以尝试:
- 用蘑菇数据集的
odor(气味)或population(种群规模)字段再做一个分组计数,生成新的饼图或环形图; - 将华夫图升级为"图标华夫图",用蘑菇或叶子图标替代纯色方格;
- 对比三种图表在"传达同一占比信息"时的直观性差异,思考"什么时候该用饼图、什么时候该用环形图、什么时候该用华夫图"。
主课文配套的完整可运行示例位于 solution/notebook.ipynb,其中逐格复现了数据加载、饼图、栖息地环形图与菌盖颜色分组计数的完整过程,可作为你作业中数据分组逻辑的参考答案。
七、小结
本次作业的核心方法论与主课文一致:比例可视化的第一步永远是把数据按类别分组计数,第二步才是选择展示形态。饼图适合少量类别的占比对比,甜甜圈图(环形图)在视觉上更轻、中心可承载汇总信息,华夫图则以"格子即比例"的方式呈现数量构成。把这三者在 Excel 中亲手实现一遍,你就能做到"无论工具如何切换(Python 与 Excel),比例可视化的思路始终如一",这也是第 11 课设置这份作业的用意所在。
【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考