一、项目背景与前期回顾
在上一期文章中,我们重点讲解了二手车数据清洗的全流程,包括缺失值填充、分类变量处理、特征单位转换等关键步骤(点击回顾数据清洗细节)。通过清洗,我们得到了一个规范化的数据集。本期我们将基于清洗后的数据,深入分析不同车辆属性对价格的影响。核心目标是通过热力图(Heatmap)直观展示驱动方式(drive-wheels)与车身类型(body-style)组合下的平均价格分布,帮助读者快速识别高价车型特征。
二、热力图生成代码完整流程
1. 数据分组与聚合
代码块:
-
从
df1
中筛选三列:drive-wheels
(驱动方式)、body-style
(车身类型)、price
(价格)。 -
使用groupby先按drive-wheels分组再二次通过body-style细分
-
groupby会对细分的组进行聚合操作,用.mean()就能计算出average-price
-
as_index=False
确保groupby操作后不将drive-wheels和body-style作为MultiIndex
drive-wheels | body-style | price |
---|---|---|
4wd | convertible | 32000.0 |
fwd | sedan | 15000.0 |
... | ... | ... |
2. 生成透视表与数据填充
生成Heatmap要求Data Stracture为二维矩阵,而groupby输出是一个Long Fromat因此我们需要将grouped_test1用.pivot输出为Wide Format。这是关系链:
CSV(数据格式) → 加载为 DataFrame(二维数据结构) → 转换为透视表(二维矩阵) → 输入热力图
-
pivot(index='drive-wheels', columns='body-style')
:-
将长格式数据转换为宽格式矩阵,行索引为驱动方式,列索引为车身类型。
-
默认以
price
作为填充值(因grouped_test1
仅含三列)。
-
-
fillna(0)
:缺失组合(如无四驱轿车数据)价格设为0。 -
astype(float)
:确保所有值为浮点数。
透视表结构:
drive-wheels | convertible | sedan | hatchback | ... |
---|---|---|---|---|
4wd | 32000.0 | 0.0 | 18000.0 | ... |
fwd | 0.0 | 15000.0 | 12000.0 | ... |
3. 热力图绘制代码
代码块:
columns中含有MultiIndex 要将Heatmap的x轴标签设置为body-style就需要用.levels[1]选中MultiIndex的第二层索引即body-style
-
标签对齐:
-
set_xticks(np.arange(...) + 0.5)
:将刻度对准单元格中心,避免标签偏移。 -
rotation=45
:旋转X轴标签45度,解决长文本重叠问题。
-
-
颜色条:
-
fig.colorbar
添加右侧颜色条,标注价格映射关系。
-
4. 热力图输出效果
热力图分析:
-
高价区域(红色):
-
四驱(
4wd
)敞篷车(convertible
)价格最高,反映高端车型市场定位。 -
后驱(
rwd
)硬顶车(hardtop
)次之,常见于跑车或豪华车型。
-
-
低价区域(蓝色):
-
前驱(
fwd
)掀背车(hatchback
)价格最低,多为经济型家用车。
-
-
空白组合(白色或0值):
-
如四驱轿车(
4wd
+sedan
),数据中无此类样本,需进一步验证是否为数据缺失。
-