You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何可视化30岁以下糖尿病数据集的类别频率差异及不平衡情况

问题根因

你当前用的散点图将离散的Outcome(仅0/1两个取值)作为Y轴,大量样本点重叠堆叠,完全无法体现两类样本的数量差异。可以用以下几种绘图方式优化:


方案1:类别计数柱状图(最直观体现不平衡)

直接统计30岁以下人群两类Outcome的总数量绘图,一眼就能看出数量差距:

import seaborn as sns
import matplotlib.pyplot as plt

# 先筛选30岁以下的全量数据,不需要分开取两列,运行效率更高
under30_data = data[data['Age'] < 30]
# 统计Outcome的计数
sns.countplot(x='Outcome', data=under30_data)
plt.xticks([0,1], ['未患病', '患病'])
plt.ylabel('样本数量')
plt.title('30岁以下人群糖尿病患病情况统计')
# 可选:在柱子上标注具体数值
for p in plt.gca().patches:
    plt.gca().text(p.get_x() + p.get_width()/2, p.get_height(), int(p.get_height()), ha='center', va='bottom')
plt.show()

绘制后就能直接看到312(未患病)和84(患病)的数量差,不平衡特征非常清晰。


方案2:分年龄分组柱状图(同时看年龄和患病率的关联)

如果还需要观测不同年龄下的患病分布,可以按年龄分组统计两类的数量:

under30_data = data[data['Age'] < 30]
sns.countplot(x='Age', hue='Outcome', data=under30_data)
plt.xlabel('年龄')
plt.ylabel('样本数量')
plt.legend(title='是否患病', labels=['未患病', '患病'])
plt.title('30岁以下各年龄糖尿病患病分布')
plt.show()

这个图既可以看到每个年龄下患病/未患病的数量差异,也能整体看出全年龄段的类别不平衡。


方案3:占比饼图(直观体现占比差异)

如果想突出两类的占比差距,用饼图更合适:

under30_data = data[data['Age'] < 30]
outcome_counts = under30_data['Outcome'].value_counts()
plt.pie(outcome_counts, labels=['未患病', '患病'], autopct='%.1f%%')
plt.title('30岁以下人群糖尿病患病占比')
plt.show()

绘制后可以直接看到未患病占比约78.8%,患病仅21.2%,不平衡特征一目了然。

内容的提问来源于stack exchange,提问作者Py_Student

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 14:06:04