单变量分析
使用分布图、直方图、箱线图和计数图理解单个特征
单变量分析 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。
什么是单变量分析?
单变量分析一次研究一个变量,以了解其分布情况:中心位置、离散程度、形状和异常值。
合适的图表取决于变量类型:
- 数值型 → 直方图、KDE、箱线图、小提琴图
- 分类 → 计数图(显示频数的条形图)
设置绘图库
我们使用 Matplotlib(plt)和 Seaborn(sns)。Seaborn 构建在 Matplotlib 之上,为统计图表提供了更美观的默认样式。
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
sns.set_theme(style="whitegrid")
df = pd.read_csv("data.csv")使用 plt.hist 绘制直方图
直方图会将数值分到多个区间中,并统计每个区间包含多少个值。它可以展示分布的整体形状。
bins 参数控制分辨率——区间太少会隐藏结构,区间太多则会增加噪声。
plt.hist(df["age"], bins=30, edgecolor="black")
plt.xlabel("Age")
plt.ylabel("Count")
plt.title("Age Distribution")
plt.show()KDE 图 — 平滑密度
核密度估计(sns.kdeplot)会绘制一条近似分布的平滑曲线,通常比参差不齐的直方图柱形更易于阅读。
使用 sns.histplot(..., kde=True) 可以将两者结合起来,把平滑曲线叠加在柱形上。
sns.kdeplot(df["age"], fill=True)
plt.show()
sns.histplot(df["age"], bins=30, kde=True)
plt.show()识别偏度
偏度用于衡量不对称性。右侧有一条长尾称为右偏(正偏);左侧有一条长尾称为左偏(负偏)。
收入、价格和计数通常呈右偏分布。您可以使用 df[col].skew() 对其进行量化——远离 0 的值表示存在偏度。
print(df["income"].skew()) # e.g. 2.3 -> strong right skew
sns.histplot(df["income"], bins=40, kde=True)
plt.show()识别双峰分布
双峰分布具有两个峰值,这通常意味着两个不同的群体混合在了一起(例如,一个价格列中包含两种产品类型)。
KDE 图可以清楚地显示双峰分布——请寻找两个隆起的峰。它提示您,某个隐藏的分类变量可能解释了这种分化。
sns.kdeplot(df["price"], fill=True)
plt.title("Two peaks suggest two subpopulations")
plt.show()使用 sns.boxplot 绘制箱线图
箱线图会显示中位数(中心线)、四分位距(IQR,即箱体)以及延伸至约 1.5 倍 IQR 的须。超出须的点会被标记为异常值。
sns.boxplot(x=df["income"])
plt.title("Income — box plot")
plt.show()异常值与 IQR 规则
箱线图使用 IQR 规则:如果某个点低于 Q1 - 1.5*IQR 或高于 Q3 + 1.5*IQR,就会被视为异常值。
您可以自行计算上下界,以过滤或截断极端值。
q1 = df["income"].quantile(0.25)
q3 = df["income"].quantile(0.75)
iqr = q3 - q1
low, high = q1 - 1.5*iqr, q3 + 1.5*iqr
outliers = df[(df["income"] < low) | (df["income"] > high)]
print(len(outliers), "outliers")使用 sns.violinplot 绘制小提琴图
小提琴图将箱线图与镜像 KDE 结合起来。每个高度处的宽度表示密度,因此您可以同时看到分布形状和摘要统计信息。
小提琴图非常适合揭示普通箱线图可能隐藏的偏度或双峰分布。
sns.violinplot(x=df["age"])
plt.title("Age — violin plot")
plt.show()分类变量的计数图
对于分类列,请使用 sns.countplot——它是显示类别频数的条形图,也是 value_counts() 的可视化形式。
使用 order 参数按频数排列条形,以提高可读性。
order = df["city"].value_counts().index
sns.countplot(y="city", data=df, order=order)
plt.title("Records per city")
plt.show()选择合适的单变量图表
快速选择指南:
- 数值列的形状 → 直方图或KDE
- 异常值和四分位数 → 箱线图
- 同时查看形状和摘要 → 小提琴图
- 类别频数 → 计数图
快速检查:选择图表
您希望查看单个数值列的中位数、四分位数和异常值。
回顾:单变量分析
您已经学会了一次检查一个变量:
- 使用
plt.hist和sns.kdeplot查看分布形状 - 使用
.skew()量化不对称性;通过 KDE 峰值识别双峰分布 - 使用
sns.boxplot和 IQR 规则识别异常值 - 使用
sns.violinplot同时查看形状和摘要 - 使用
sns.countplot查看分类变量的频数
接下来,我们将研究两个或更多变量之间的关系。
常见问题解答
「单变量分析」课时是免费的吗?
是的 — 「单变量分析」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。
「单变量分析」这节课中我会学到什么?
使用分布图、直方图、箱线图和计数图理解单个特征 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Learn AI with Python 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「单变量分析」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Learn AI with Python 课中编写并运行代码吗?
能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。