尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Data-Science-For-Beginners 比例可视化实战:用 Python 绘制蘑菇数据的饼图、环形图与华夫图

Data-Science-For-Beginners 比例可视化实战:用 Python 绘制蘑菇数据的饼图、环形图与华夫图 Data-Science-For-Beginners 比例可视化实战用 Python 绘制蘑菇数据的饼图、环形图与华夫图【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners在数据分析中展示各部分占总体的比例是一类高频需求。本篇文章围绕 Data-Science-For-Beginners 课程的第 11 课3-Data-Visualization 模块的 Visualizing Proportions以来自 Audubon 的蘑菇数据集 data/mushrooms.csv包含 Agaricus 与 Lepiota 两科、23 个物种的伞菌数据共 8124 条记录为例系统讲解如何使用 Pandas 完成分类聚合、并用 Matplotlib 与 PyWaffle 绘制饼图Pie Chart、环形图Donut Chart和华夫图Waffle Chart三种比例可视化方案。学完本文你将掌握分组计数 → 选择图表 → 绘制解读的完整实战链路并能直接迁移到任何分类占比分析场景。课程与数据背景本课属于 3-Data-Visualization 模块中的比例可视化专题核心结论是先按类别对数据分组再根据数据特点选择饼图、环形图或华夫图来呈现比例。三种图表都能让读者一眼把握数据集的构成概貌。仓库为本次实战提供了完整配套资源数据文件data/mushrooms.csv每行描述一朵蘑菇含 23 个特征列主课程文档3-Data-Visualization/11-visualization-proportions/README.md可运行的 Jupyter Notebook3-Data-Visualization/11-visualization-proportions/notebook.ipynb 与完整解答 3-Data-Visualization/11-visualization-proportions/solution/notebook.ipynb内含每步的原始输出可作为结果对照配套练习3-Data-Visualization/11-visualization-proportions/assignment.md要求在 Excel 中复现三种图表。第一步加载数据并认识你的蘑菇首先导入 Pandas 与 Matplotlib读取仓库中的蘑菇数据集import pandas as pd import matplotlib.pyplot as plt mushrooms pd.read_csv(data/mushrooms.csv) mushrooms.head()输出前几行即可看到数据的典型形态全部为文本型特征classcap-shapecap-surfacecap-colorbruisesodorgill-attachmentgill-spacinggill-sizegill-color...populationhabitatPoisonousConvexSmoothBrownBruisesPungentFreeCloseNarrowBlack...ScatteredUrbanEdibleConvexSmoothYellowBruisesAlmondFreeCloseBroadBlack...NumerousGrassesEdibleBellSmoothWhiteBruisesAniseFreeCloseBroadBrown...NumerousMeadowsPoisonousConvexScalyWhiteBruisesPungentFreeCloseNarrowBrown...ScatteredUrban从 data/mushrooms.csv 的原始文件头可以看出每条记录都包含 23 个特征class可食/有毒、cap-shape菌盖形状、cap-surface菌盖表面、cap-color菌盖颜色、bruises是否擦伤、odor气味、gill-*菌褶系列、stalk-*菌柄系列、veil-*菌幕系列、ring-*菌环系列、spore-print-color孢子印颜色、population种群密度与habitat生长环境。关键观察全部特征都是文本型不能直接用于绘图必须先做类型转换。第二步将文本数据转换为分类类型用select_dtypes([object])找出所有 object 类型的列print(mushrooms.select_dtypes([object]).columns)输出确认了绝大多数列都是对象类型Index([class, cap-shape, cap-surface, cap-color, bruises, odor, gill-attachment, gill-spacing, gill-size, gill-color, stalk-shape, stalk-root, stalk-surface-above-ring, stalk-surface-below-ring, stalk-color-above-ring, stalk-color-below-ring, veil-type, veil-color, ring-number, ring-type, spore-print-color, population, habitat], dtypeobject)将所有这些列转换为 Pandas 的category类型便于后续分组与统计cols mushrooms.select_dtypes([object]).columns mushrooms[cols] mushrooms[cols].astype(category)随后按class可食/有毒分组并计数得到每个类别在各特征上的记录数edibleclass mushrooms.groupby([class]).count() edibleclass分组计数结果解答 Notebook 中已验证的输出classcap-shapecap-surface...populationhabitatEdible42084208...42084208Poisonous39163916...39163916由于groupby().count()对每一列都统计非空数量而数据集中没有缺失值所以每个特征列的数字完全相同任意一列都可作为该类别的样本量。这里得到 4208 个可食、3916 个有毒合计 8124与 CSV 的总行数一致也印证了数据的完整性。第三步用饼图展示可食与有毒的比例饼图适合展示部分占整体的比例。沿用上一步的edibleclass取population列作为数值绘制饼图labels [Edible, Poisonous] plt.pie(edibleclass[population], labelslabels, autopct%.1f %%) plt.title(Edible?) plt.show()务必注意标签顺序plt.pie()会按照传入数值的先后顺序逐一配对labels列表中的标签。上一步groupby([class])的输出顺序是 Edible 在前、Poisonous 在后因此labels也必须保持[Edible, Poisonous]的顺序否则扇区含义就会错位。autopct%.1f %%用于在每个扇区上标注百分比保留一位小数plt.title(Edible?)设置图表标题。第四步用环形图展示蘑菇的生长环境环形图本质上是中间挖空的饼图观感更清爽也更便于在中心区域叠加额外信息。首先按habitat生长环境分组habitat mushrooms.groupby([habitat]).count() habitat数据集中共出现 7 种生长环境解答 Notebook 输出Grasses2148、Leaves832、Meadows292、Paths1144、Urban368、Waste192、Wood3148。因此标签数组需要包含这 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()这段代码的核心技巧pctdistance0.85把百分比标签向圆心方向移动给外部标签留出空间plt.Circle((0, 0), 0.40, fcwhite)创建一个以 (0,0) 为圆心、半径为 0.40 的白色圆fig.gca().add_artist(center_circle)将该圆作为 artist 添加到当前坐标轴之上盖住饼图中央区域形成甜甜圈效果。调参提示修改半径参数0.40即可控制环的粗细——半径越大环越细半径越小环越粗。环的粗细应当与扇区数量、标签密度相平衡。环形图的标签还可以通过 Matplotlib 的标签调整机制进一步优化可读性。第五步用华夫图展示菌盖颜色的数量构成华夫图Waffle Chart把数量映射为二维方格阵列每格代表一个固定单位适合呈现部分与整体的直观对比。它需要借助第三方库 PyWaffle先安装pip install pywaffle按cap-color菌盖颜色分组计数capcolor mushrooms.groupby([cap-color]).count() capcolor从解答 Notebook 的已验证输出看9 种菌盖颜色的样本量分别为Brown2284、Buff168、Cinnamon44、Green1856、Pink144、Purple16、Red1500、White1040、Yellow1072。注意此处的分组索引顺序不同于原始文档标签列表顺序因此构造 DataFrame 时必须显式地把颜色名与对应的capcolor[class]一一配对确保顺序一致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], )参数解读rows100华夫图固定为 100 行列数会根据总数值自动计算每个方格代表约 1% 的整体总样本 8124每格约 81 个样本valuesdf.amount每类别的计数值labelslist(df.color)图例标签figsize(30, 30)整体画布尺寸方格数较多时需调大否则每个格子过于细密colors[...]与data[color]中 9 种颜色一一对应的渲染颜色列表顺序必须匹配。从华夫图中可以直观看到数据集中存在大量绿色菌盖Green1856 个的蘑菇同时 Brown2284与 Red1500也占据显著份额而 Purple16与 Cinnamon44等颜色则占比极小——这种以方格计数的表达方式比扇区角度更易精确目测。进阶玩法PyWaffle 支持在格子中渲染图标而非普通方块图标来源为 Font Awesome 字体图标。把FigureClassWaffle的图标参数如icons、icon_size等与蘑菇相关的图标结合可以制作更具辨识度的华夫图。三种比例图表的选型与对比维度饼图Pie环形图Donut华夫图Waffle适用场景类别少通常 ≤6、需展示占比在饼图基础上需要中心区域承载信息需精确目测计数、类别多、偏好网格化表达优点直观、实现简单视觉更清爽、中心可复用方格即单位数量对比精确缺点类别多时扇区难以分辨与饼图同样受类别数量限制依赖第三方库 PyWaffle渲染较重数值依据分组计数的任意一列如population、class分组计数的任意一列分组计数的任意一列三种方法有一个共同前提先groupby()分组计数再根据类别数量与展示目标选择图表。类别很少如可食/有毒二分类时饼图最直接需要更精致观感或中心信息时选环形图类别多、需要精确计数感知时选华夫图。进阶练习与扩展方向动手挑战课程建议在 Charticulator 这类拖拽式可视化工具中复现上述图表它同样使用蘑菇数据集可以在交互式界面中验证自己的理解Excel 练习仓库配套的 3-Data-Visualization/11-visualization-proportions/assignment.md 要求使用任意数据集在 Excel 中创建饼图、环形图与华夫图三种图表按完成数量三个/两个/一个分级评分参考实现对照解答 Notebook 3-Data-Visualization/11-visualization-proportions/solution/notebook.ipynb 中的每个 cell 及输出可以逐行核对本课所有分组结果与图表代码更多选型参考课程 Review Self Study 部分提供了饼图 vs 环形图、华夫图适用场景等专题讨论可作为深入研究的起点。小结本文以 Data-Science-For-Beginners 第 11 课为骨架完整走通了加载蘑菇数据 → 文本列转 category → 按 class/habitat/cap-color 分组计数 → 绘制饼图/环形图/华夫图的比例可视化链路。三个核心要点值得牢记一是groupby().count()得到的任意一列都可作为计数值二是饼图与环形图的标签顺序必须与分组结果顺序严格对应三是华夫图的rows、figsize、colors等参数决定了方格密度与配色是否清晰可读。掌握这组方法后你可以将同样的流程应用到任何分类占比分析场景中。【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表