Data Science for Beginners 第 11 课实战:用 Pandas 与 Matplotlib 以饼图、环形图、华夫图可视化蘑菇数据集的占比

发布时间:2026/9/6 15:51:32
Data Science for Beginners 第 11 课实战:用 Pandas 与 Matplotlib 以饼图、环形图、华夫图可视化蘑菇数据集的占比 Data Science for Beginners 第 11 课实战用 Pandas 与 Matplotlib 以饼图、环形图、华夫图可视化蘑菇数据集的占比【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners本篇技术指南围绕数据科学入门课程第 11 课“Visualizing Proportions可视化占比”展开基于仓库中的真实蘑菇数据集 data/mushrooms.csv演示从全文本列的数据准备、groupby分组统计到用 Matplotlib 绘制饼图Pie、环形图Donut、用 PyWaffle 绘制华夫图Waffle的完整流程。读完后你可以独立完成“按类别分组 → 计算占比 → 选择合适图表类型呈现比例”这一数据可视化的核心闭环。课程目标与数据集本课的核心是学习三种“占比类”proportions图表饼图Pie chart环形图Donut chart华夫图Waffle chart配套课程说明见 课程 README可交互练习在 课程 Notebook 中进行参考答案在 solution/notebook.ipynb。课程使用的数据集来自 Audubon 的蘑菇清单详情涵盖 23 种伞菌科Agaricus和 Lepiota 属的蘑菇。仓库中的 data/mushrooms.csv 实际包含 8124 条记录和 23 个字段导入方式如下import pandas as pd import matplotlib.pyplot as plt mushrooms pd.read_csv(../../data/mushrooms.csv) # 相对于课程目录的路径 mushrooms.head()23 个字段全部为文本型描述属性字段含义示例class可食用性Edible / Poisonouscap-shape、cap-surface、cap-color菌盖形状、表面、颜色bruises、odor是否有淤伤、气味gill-attachment、gill-spacing、gill-size、gill-color菌褶附着方式、间距、大小、颜色stalk-shape、stalk-root、stalk-surface-above/below-ring、stalk-color-above/below-ring菌柄形状、根部、环上下表面与颜色veil-type、veil-color菌幕类型与颜色ring-number、ring-type菌环数量与类型spore-print-color孢子印颜色population生长密度Abundant、Several、Scattered、Numerous 等habitat生境Grasses、Leaves、Meadows、Paths、Urban、Waste、Wood数据准备把全文本列转换为 category 类型观察前几行数据可以立即发现整张表的数据全是文本在绘制图表前必须先做类型转换。课程用select_dtypes验证了这一点print(mushrooms.select_dtypes([object]).columns)输出显示 23 列全部为object类型class、cap-shape、cap-surface……直到habitat。课程的做法是把所有 object 列统一转换为categorycols mushrooms.select_dtypes([object]).columns mushrooms[cols] mushrooms[cols].astype(category)转换为 category 类型是 pandas 处理高基数/低基数文本列的标准手段它降低内存占用并让后续分组统计的语义更清晰。转换后按class分组计数即可得到占比分析的基础数据edibleclass mushrooms.groupby([class]).count() edibleclass分组结果与真实数据完全吻合Edible 4208 条Poisonous 3916 条合计 8124 条即可食用蘑菇略多于有毒蘑菇比例约为 51.8% : 48.2%。⚠️ 课程特别强调后面构建图表labels数组时顺序必须与分组结果中类别出现的顺序一致否则标签和数据会错位。务必核对分组表的行序再写标签。饼图Pie最直观的占比展示直接用分组结果的population列绘制饼图labels [Edible, Poisonous] plt.pie(edibleclass[population], labelslabels, autopct%.1f %%) plt.title(Edible?) plt.show()各参数要点x数据edibleclass[population]即按 class 分组后各列的计数每个类别下所有非空计数相同取哪一列都一样取population仅为习惯labels两个类别名顺序对应分组结果autopct%.1f %%在每个扇区上自动标注百分比保留 1 位小数plt.title(Edible?)图表标题。这张饼图直观展示了蘑菇数据集中两类蘑菇的比例分布。环形图Donut饼图的“挖孔”变体环形图本质上是中间留了个洞的饼图视觉上更清爽中心区域还能放汇总信息。课程用蘑菇的**生境habitat**字段来演示。先按生境分组habitat mushrooms.groupby([habitat]).count() habitat分组后共 7 个生境类别作为环形图的标签labels [Grasses, Leaves, Meadows, Paths, Urban, Waste, Wood] plt.pie(habitat[class], labelslabels, autopct%1.1f%%, pctdistance0.85) center_circle plt.Circle((0, 0), 0.40, fcwhite) fig plt.gcf() fig.gca().add_artist(center_circle) plt.title(Mushroom Habitats) plt.show()关键实现细节plt.pie先画好完整饼图plt.Circle((0, 0), 0.40, fcwhite)创建一个以原点为圆心、半径 0.40、白色填充的圆fig.gca().add_artist(center_circle)把这个圆叠加到当前坐标轴上把饼图中心“盖住”从而形成环形效果。修改0.40这个半径值即可调整环的粗细——半径越大环越细越小环越宽。pctdistance0.85控制百分比文字离圆心的距离0 为中心、1 为边缘。课程还提示可参考 Matplotlib 官方文档中关于饼图/环形图标签美化的示例来进一步提升可读性。对照 data/mushrooms.csv 的实际分布各生境占比为Wood 3148约 38.7%、Grasses 214826.4%、Paths 114414.1%、Leaves 83210.2%、Urban 3684.5%、Meadows 2923.6%、Waste 1922.4%——森林是绝对优势生境。华夫图Waffle用 2D 方块数组表达数量比例华夫图把数量按比例拆成网格中的小方块是另一种“看占比”的方式。课程用蘑菇的**菌盖颜色cap-color**做演示需要先安装辅助库 PyWafflepip install pywaffle先选出要分组的数据段capcolor mushrooms.groupby([cap-color]).count() capcolor菌盖颜色共 9 种实际计数为Brown 2284、Green 1856、Red 1500、Yellow 1072、White 1040、Buff 168、Pink 144、Cinnamon 44、Purple 16。构建华夫图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( FigureClassWaffle, rows100, valuesdf.amount, labelslist(df.color), figsize(30, 30), colors[brown, tan, maroon, green, pink, purple, red, whitesmoke, yellow], )参数说明FigureClassWaffle让 Matplotlib 用 Waffle 类作为图形类渲染而不是普通 Axesrows100网格共 100 行配合内部自动推算列数数值按总量等比铺满valuesdf.amount各颜色类别的实际计数labels/colors类别标签与对应颜色两者顺序必须一一对应brown→brown、buff→tan、white→whitesmoke 等figsize(30, 30)正方形大画布保证方块清晰。从图上可以一眼看出棕色Brown与绿色Green菌盖占绝对多数——课程也特别点出“绿盖蘑菇非常多”这一反直觉的发现。PyWaffle 还支持用 Font Awesome 图标替代方块可以把华夫图做得更生动值得自行实验。如何选择饼图、环形图还是华夫图课程的 Review Self Study 部分指出三者何时使用并非总是显而易见并给出了多篇对比文章供延伸阅读饼图 vs 环形图的优劣对比、Waffle 图的正确用法等。结合本课实践可归纳为一条简单的选择逻辑图表适用场景注意点饼图26 个大类、强调“部分占整体”类别太多会难以辨认标签顺序必须与数据顺序一致环形图同饼图但需要更现代的观感或中心放置标题/汇总洞半径如0.40决定环宽pctdistance控制百分比位置华夫图想让非专业读者用“数格子”的直觉感受数量比例依赖 PyWaffle适合总量可平铺成 100/1000 格的场景三者共同的前提都是先把数据groupby到目标类别上统计出每类计数再决定用哪种图呈现。这就是本课总结的核心工作流——“group → count → 选图 → 绘制”读完这张图用户就能瞬间获得数据集的比例快照。练习与延伸 课程挑战用 Microsoft Research 的 Charticulator拖拽式数据可视化工具其教程同样使用本蘑菇数据集重绘本课图表课后作业assignment.md 要求在 Excel 中自选一份数据制作饼图、环形图、华夫图三种图表评分标准以图表数量分级三个满分动手验证本课全部代码均可在 课程 Notebook 中逐步运行完成后可与 solution/notebook.ipynb 中的实现逐 cell 对照确认饼图、环形图、华夫图三种输出。【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考