如何基于UCI Adult数据集计算不同种族的收入占比分布
基于Adult数据集的种族维度收入占比统计方法
使用UCI机器学习仓库的Adult数据集开展分析的过程中,核心目标是计算race列各分类对应的>50k/<50k两类收入群体的占比,实现基于种族维度的收入比例合理呈现。
最初使用seaborn编写计数统计绘图代码,代码逻辑如下:
ax = sns.countplot(x=adults_full['income'], hue=adults_full['race'], palette="pastel") ax.set_xticklabels(['<50k', '>50k']) ax.set_title('Income vs Race')
该代码生成的收入与种族计数统计图存在明显偏差:
- 仅统计分组绝对样本量,未消除不同种族的总样本规模差异
- 白人群体样本量远大于其他种族,图中仅能体现白人群体收入>50k的绝对人数更多,无法反映种族内部的收入结构比例差异
- 小样本种族的比例特征会被掩盖:实际计算显示亚裔太平洋岛民的收入>50k占比与白人群体相近,但因整体样本量小,在纯计数图中几乎无法识别这类特征
基础统计结果核查
先通过代码核查基础样本分布情况,执行代码及输出结果如下:
print(adults_full['race'].value_counts()) adults_full[['race', 'income']].value_counts() # 输出结果 White 38903 Asian-Pac-Islander 1303 race income White 0 28696 1 10207 Asian-Pac-Islander 0 934 1 369
其中income=0对应收入<50k,income=1对应收入>50k。
目标统计与可视化实现
最终通过行归一化交叉表统计方法,消除样本量差异的干扰,准确计算每个种族内的收入占比,实现代码如下:
# 按种族为行,行归一化计算每个种族内部各收入类别的占比 pivot = pd.crosstab(adults_full.race, adults_full.income, normalize="index") # 按高收入占比升序排序,优化可视化展示顺序 pivot.sort_values(by = 1, inplace = True) # 绘制堆叠占比条形图 pivot.plot.bar()
该方法生成的不同种族收入比例分布图,完全消除了不同种族总样本量差异的影响,可直观对比各类种族内部的收入结构差异,准确呈现亚裔太平洋岛民与白人群体高收入占比相近的真实特征,避免绝对计数带来的认知偏差。
内容的提问来源于stack exchange,提问作者Fabrice
相关产品推荐
相关产品推荐

