Kaggle的房价数据集使用的是Ames Housing
dataset,是美国爱荷华州的艾姆斯镇2006-2010年的房价
1.特征探索和分析#
1.了解特征的含义#
首先使用Python的pandas加载一下训练样本和测试样本,数据的格式是csv格式的,且第一列是特征的名称
查看一下特征的维度
1 | import pandas as pd |
输出如下,除去Id和SalePrice,总共有79维的特征
1 | (1460, 79) |
翻译一下给的房屋数据的特征,这里定义了一个dict,方便理解每个特征的含义
1 | dict = { |
2.查看特征是离散特征还是连续特征#
1 | # 查看特征是离散特征还是连续特征 |
3.查看特征的统计指标#
1 | # 查看特征的统计指标 |
读取了数据之后先describe一下,查看均值,样本标准偏差,最小值和最大值等,参考:Python Pandas 常用统计数据方法汇总(求和,计数,均值,中位数,分位数,最大/最小,方差,标准差等)
其中count(非空值数)、unique(去重后的个数)、top(频数最高者)、freq(最高频数)
可以发现MasVnrType这个特征出现最多的是None,有864/1460都是None字符串,这个特征在后面需要进行删除处理
1 | Id MSSubClass MSZoning LotFrontage LotArea Street Alley LotShape LandContour Utilities LotConfig LandSlope Neighborhood Condition1 Condition2 BldgType HouseStyle OverallQual OverallCond YearBuilt YearRemodAdd RoofStyle RoofMatl Exterior1st Exterior2nd MasVnrType MasVnrArea ExterQual ExterCond Foundation BsmtQual BsmtCond BsmtExposure BsmtFinType1 BsmtFinSF1 BsmtFinType2 BsmtFinSF2 BsmtUnfSF TotalBsmtSF Heating HeatingQC CentralAir Electrical 1stFlrSF 2ndFlrSF LowQualFinSF GrLivArea BsmtFullBath BsmtHalfBath FullBath HalfBath BedroomAbvGr KitchenAbvGr KitchenQual TotRmsAbvGrd Functional Fireplaces FireplaceQu GarageType GarageYrBlt GarageFinish GarageCars GarageArea GarageQual GarageCond PavedDrive WoodDeckSF OpenPorchSF EnclosedPorch 3SsnPorch ScreenPorch PoolArea PoolQC Fence MiscFeature MiscVal MoSold YrSold SaleType SaleCondition SalePrice |
2.数据清洗和缺失值填充#
1.处理缺失值#
查看有无空值,pandas的空值为NaN(字符串”NA”),所以我们先统计一下NaN值,参考:特征预处理——异常值处理
1 | # 对有Nan值的列的空值比例进行排序,并添加上特征的名字和类型 |
可以看出,PoolQC这一列有很多值是NaN,当空值比例远大于15%的时候,就可以考虑将这个特征删掉
1 | # 删除NaN比例远超过15%的特征 |
还剩下73维特征
1 | # 对LotFrontage进行双变量分析 |
可以使用删除红圈的离群点的LotFrontage的平均值来对缺失值进行填充
1 | # 处理缺失值 |
处理其他缺失值
1 | # GarageType |
现在就将所有的缺失值填充好了
4.处理离群值#
我们首先对需要预测的值进行离群值分析,首先绘制预测值SalePrice的箱型图
3.数据转换#
5.特征分布处理
正态分布
4.特征选择#
1.去掉变化小的特征#
假设某特征的特征值只有0和1,并且在所有输入样本中,95%的实例的该特征取值都是1,那就可以认为这个特征作用不大。如果100%都是1,那这个特征就没意义了。参考:特征预处理——特征选择和特征理解
比如 Street 和 Utilities,unique是2且freq很高,应该去掉这类特征
1 | # 删除变化小的特征 |
2.相关性分析#
先看一下房价的分布情况,15W刀左右的居多,可以看出这个数据集是很久以前的了
1.先分析数值型的特征,比如LotFrontage(通往房屋的street的距离)和LotArea(房子的建筑面积,包括车库院子啥的)
分析:因为距离有的值为NA的缘故,对其值为NA的处理成了距离为0。
按我们的思路,应该是距离越近价格越高(出行比较方便),可是事实上并不是这样子,可能是私家车在外国家庭的普及率问题,和street的距离同房价之间的关系并不是很明显
接下来分析房屋的建筑面积和房价之间的关系,为了直观些,我把单位从平方英尺转换成了平方米。
可以看到数据集中房屋的面积的峰值在900平方米左右,且房屋的建筑面积和房价是正相关的(废话)
接下来再看看1层和2层面积和房价之间的关系
可以看到,1楼面积和2层面积(如果有的话),同房价之间的关系也很线性,除少数离群的点之外