尧图网站设计 尧图网站设计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 / 11-visualization-proportions讲解如何针对分类数据categorical data可视化占比proportions。我们将以仓库内置的蘑菇数据集 data/mushrooms.csv 为载体使用 Pandas 做数据分组再用 Matplotlib 与 PyWaffle 分别绘制饼图pie chart、环形图donut chart和华夫饼图waffle chart。学完本指南你将掌握分组计数 → 选择图表类型 → 输出占比可视化的完整流程并能熟练调参控制标签、百分比与环洞大小。课前准备数据集与环境本课使用的蘑菇数据集来自 Audubon收录了 Agaricus蘑菇属与 Lepiota环柄菇属两个科、23 种褶菌gilled mushroom的形态学描述。文件位于 data/mushrooms.csv共 8124 条样本记录每行包含 23 个属性列例如菌盖形状cap-shape、菌盖颜色cap-color、气味odor、栖息地habitat以及目标列 classEdible 可食用 / Poisonous 有毒。运行环境只需 Python 标准数据栈import pandas as pd import matplotlib.pyplot as plt华夫饼图需要额外安装辅助库 PyWaffle见后文它基于 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...habitatPoisonousConvexSmoothBrownBruisesPungentFreeCloseNarrowBlack...UrbanEdibleConvexSmoothYellowBruisesAlmondFreeCloseBroadBlack...GrassesEdibleBellSmoothWhiteBruisesAniseFreeCloseBroadBrown...MeadowsPoisonousConvexScalyWhiteBruisesPungentFreeCloseNarrowBrown...Urban可以立即发现所有列都是文本型object数据。绘图前必须先把它们转为 Pandas 的分类类型category确认哪些列需要转换print(mushrooms.select_dtypes([object]).columns)输出显示 23 列全部为 object 类型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)一次性把全部 object 列转换为 category 类型cols mushrooms.select_dtypes([object]).columns mushrooms[cols] mushrooms[cols].astype(category)转换之后按 class可食用/有毒分组并计数edibleclass mushrooms.groupby([class]).count() edibleclass分组结果截取部分列classcap-shapecap-color...populationhabitatEdible42084208...42084208Poisonous39163916...39163916groupby(...).count()对每个分类组返回非空值计数因此每一列的数值都相同任选一列如population或class即可作为该组的样本量。数据集共 8124 条记录其中 4208 条可食用、3916 条有毒——这就是后续饼图要呈现的占比。饼图占比可视化入门拿到分组计数后即可用plt.pie()绘制饼图。关键点在于标签数组的顺序必须与分组结果的索引顺序完全一致此处为 Edible、Poisonous与groupby默认排序一致labels [Edible, Poisonous] plt.pie(edibleclass[population], labelslabels, autopct%.1f %%) plt.title(Edible?) plt.show()代码解析edibleclass[population]两个类别的计数值序列4208、3916labels与数值一一对应的标签列表autopct%.1f %%在扇区内部标注百分比保留 1 位小数%%转义为百分号字面量。运行结果是一张直观展示两类蘑菇占比的饼图正如原文档强调的务必核对标签数组的构造顺序若顺序颠倒图表会把可食用与有毒的占比标反造成严重误导。完整的可运行版本可参考仓库中的 solution/notebook.ipynb其中包含逐格执行的数据导入、类型转换、分组计数与绘图全流程。环形图中间开洞的饼图环形图donut chart本质上是中间挖了一个洞的饼图视觉上更清爽也便于在中心区域叠加汇总信息。本课用它来展示蘑菇的7 种栖息地分布。先按栖息地分组计数habitat mushrooms.groupby([habitat]).count() habitat分组结果为 7 行Grasses、Leaves、Meadows、Paths、Urban、Waste、Wood因此直接用这 7 个值构造标签。绘制环形图的核心技巧是先用plt.pie()画扇形再叠加一个白色中心圆把洞挖出来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(habitat[class], ...)用 class 列计数绘制扇形7 个栖息地的样本量分别为 2148、832、292、1144、368、192、3148autopct%1.1f%%保留 1 位小数的百分比标注pctdistance0.85控制百分比文本沿半径方向到圆心的距离0.85 表示位于半径的 85% 处让文本落在环形中间而非扇区边缘plt.Circle((0, 0), 0.40, fcwhite)创建圆心在原点、半径为 0.40 的白色圆盘通过gca().add_artist()叠加到图表上形成甜甜圈效果。渲染结果想调节环洞的宽窄只需修改plt.Circle((0, 0), 0.40, ...)中的半径数值半径越大洞越宽、环形越窄半径越小则越接近普通饼图。环形图的标签还可以进一步调整位置、颜色与字体以提升可读性具体可查阅 Matplotlib 官方的饼图/环形图标签示例。华夫饼图用方格阵列表达数量华夫饼图把数量表达为二维方格阵列2D array of squares每格代表固定数值是饼图之外另一种直观的比例呈现方式。本课用它统计蘑菇9 种菌盖颜色cap-color的占比。首先安装辅助库pip install pywaffle然后按菌盖颜色分组capcolor mushrooms.groupby([cap-color]).count() capcolor分组结果节选关键颜色cap-colorclass样本量Brown2284Buff168Cinnamon44Green1856Pink144Purple16Red1500White1040Yellow1072接下来构造字典数据、转成 DataFrame并调用Waffle绘图类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指定使用 PyWaffle 提供的 Figure 类替换默认 Figurerows100华夫格阵列的行数总格数 rows × cols行数越大每个方格代表的数值越小分辨率越高valuesdf.amount各分类的数值序列labelslist(df.color)图例标签取自颜色名称列表figsize(30, 30)画布尺寸英寸由于 9 类数值跨度大从 16 到 2284建议保持较大的画布以保证方格清晰colors[...]为每个分类指定填充色注意列表长度需与分类数一致顺序与data[color]一一对应。生成的华夫饼图可以一目了然地对比 9 种菌盖颜色的数量级差异例如棕色菌盖2284与绿色菌盖1856占据绝对多数而紫色16与肉桂色44极为稀少PyWaffle 还支持把方格替换为 Font Awesome 图标通过icons与icon_size等参数可以做出更生动有趣的图表——原文档建议读者自行实验用图标代替方块。饼图、环形图还是华夫饼图如何选择本课的三张图从不同角度回答了同一类问题——各类别占整体多大比例饼图最经典的占比图适合分类数量少一般不超过 57 类、且需要快速读出谁最大的场景缺点是类别一多小扇区的角度与面积很难精确比较。环形图饼图的改良版中心空白区域可以放汇总信息如总量同时避免了饼图中心标签拥挤的问题视觉更轻盈同样不适合类别过多的数据。华夫饼图以格子计数替代角度对比人脑对面积/格子数的感知比对角度更准确特别适合希望精确传达数量级差异、或面向非专业受众的汇报场景代价是需要额外的第三方库支持。通用的实操建议是先把数据按目标类别分组计数groupby count/sum再根据类别数量与信息诉求选择图表。类别超过 7 个时应优先考虑华夫饼图或者考虑本课程系列其他课中讲过的柱状图等非占比型图表。挑战与课后实践原文档给出了两个延伸任务在 Charticulator 中复现Microsoft Research 的 Charticulator 是一个免费的可拖拽式数据可视化工具且其官方教程同样使用了这份蘑菇数据集。可以对照本课成果尝试用拖拽方式重建饼图、环形图与华夫饼图借此同时熟悉数据与工具。用 Excel 实践课后作业要求使用自选数据集在 Excel 电子表格中分别创建饼图、环形图与华夫饼图三种图表完整要求与评分标准见 3-Data-Visualization/11-visualization-proportions/assignment.md评分分三档三图齐全为优秀、两图为合格、仅一图为待改进。仓库中的配套学习资源本课在仓库中的完整素材包括课程主文档3-Data-Visualization/11-visualization-proportions/README.md英文原版可执行 Notebook3-Data-Visualization/11-visualization-proportions/notebook.ipynb 与带输出的参考解答 solution/notebook.ipynb后者完整记录了edibleclass、capcolor、habitat三次分组计数的真实输出可直接对照学习R 语言版本3-Data-Visualization/R/11-visualization-proportions/README.md使用 dplyr 分组、base R 的pie()绘制饼图、webr 包的PieDonut()绘制环形图、waffle 包绘制华夫饼图适合 R 用户对照迁移手绘知识速览图sketchnotesketchnotes/11-Visualizing-Proportions.png。本课是 Data-Science-For-Beginners 课程第三单元数据可视化中继数量图、分布图之后的第三讲完整课程地图见仓库根目录 README.md。掌握分组计数 占比图表的组合拳后你可以把它直接迁移到任何分类型业务数据用户画像、订单品类、区域分布等上快速输出高信息密度的占比视图。【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表