房价预测数据分析(线性/Lasso/岭回归、决
策树)
一、数据介绍
项目背景:
项目目标对房价进行预测并找出影响房价的重要因子。
本项目仅对数据集进行探索性分析,意图找出影响房价的重要因子,并给出有业务价值
的建议。
房价预测的建模过程将在后续完成。
由于测试集数据缺少价格字段,难以用测试集验证模型效果,故本次实验仅使用训练集
数据进行建模
数据说明
MSSubClass:标明销售中涉及的住宅类型
MSZoning:标明了销售的一般分区分类
LotFrontage:与房产相连的街道的直线英尺
LotArea:地块大小,以平方英尺为单位
Street:通往房产的道路类型
Alley:通往物业的小巷类型
LotShape:地段形状规整程度
LandContour:房地的平整度
Utilities:可用的公共设施类型
LotConfig:地段配置
LandSlope:土地坡度
Neighborhood:周边地区位置
Condition1:与各种条件相近
Condition2:毗邻各种条件(如果有一个以上的条件)
BldgType:住房类型
HouseStyle:住宅风格
OverallQual:对房屋的整体材料和装修进行评价
OverallCond:房屋的整体状况评分
YearBuilt: 原始建筑日期
RoofStyle:屋顶风格
RoofMatl:屋顶材料
Exterior1st: 房屋的外部覆盖物
Exterior2nd:房屋的外部覆盖物(如果超过一种材料)
MasVnrType:砖石饰面类型
MasVnrArea:砖石饰面的面积,单位为平方英尺
ExterQual:评价外部材料的质量
ExterCond: 评价外部材料等级
Foundation:地基类型
BsmtQual:评估地下室的高度
BsmtCond: 评估地下室的总体状况
BsmtExposure:走道或花园层的墙壁评价
BsmtFinType1:地下室完工面积的评级
BsmtFinSF1:第一类完成的平方英尺
BsmtFinSF2:地下室完工面积的评级(如果有多种类型)。
BsmtUnfSF:未完成的地下室面积的平方英尺
TotalBsmtSF: 地下室面积的总平方尺
Heating:暖气类型
HeatingQC:加热质量和条件
CentralAir:是否有中央空调
Electrical:电气系统
1stFlrSF:一楼面积
2ndFlrSF:二楼面积
LowQualFinSF:低质量的成品平方英尺(所有楼层)
GrLivArea:地面以上(地面)居住面积平方英尺
BsmtFullBath:地下室全浴室
BsmtHalfBath:地下室半浴室
FullBath:高于地面的全浴室
HalfBath:地面以上的半浴室
Bedroom:地面以上的卧室(不包括地下室的卧室
Kitchen:地面以上的厨房
KitchenQual: 厨房质量
TotRmsAbvGrd:高于地面的房间总数(不包括浴室)
Functional:住宅功能
Fireplaces:壁炉的数量
FireplaceQu:壁炉质量
GarageType:车库位置
GarageYrBlt:车库建成的年份
GarageFinish:车库的内部装修
GarageCars:车库的大小,以车的容量计算
GarageArea:车库的大小,以平方英尺计
GarageQual:车库质量
GarageCond:车库状况
PavedDrive:铺设的车道
WoodDeckSF:木质甲板面积,单位:平方英尺
OpenPorchSF:封闭式门廊的面积,单位是平方英尺
3SsnPorch: 三季门廊的面积,单位是平方英尺
ScreenPorch:屏风门廊的面积,以平方英尺计
PoolArea:泳池面积,单位为平方英尺
PoolQC:泳池质量
Fence:围栏质量
MiscFeature:其他类别中未涵盖的杂项特征
MiscVal:杂项功能的价值。
MoSold: 售出月份(MM)
YrSold:售出年份(YYY)
SaleType: 销售类型
SaleCondition:销售条件
二、分析概述
数据集中存在3个缺失率在90以上的特征,分别是'PoolQC', 'MiscFeature', 'Alley'
数据集中存在少量异常数据,修正规则需要从业务出发做进一步的探索
数据集中房价最低在34900,最高在755000,呈现偏态分布,分布向左侧偏,即左侧的
尾部更长,数据相对集中区域在右侧,即大部分房屋的价格都集中在比较高的区域
对房屋的整体材料和装修进行评价OverallQual分值与SalePric之间的相关系数高达0.8,
呈现出非常强的正相关关系。
其他的因素如地面以上(地面)居住面积平方英尺GrLivArea、车库的大小
GarageCars/GarageArea、地下室面积的总平方尺TotalBsmtSF、一楼面积1stFlrSF、高于
地面的全浴室FullBath等也对房价有较强的正向影响,相关系数基本都在0.5以上。
ExterQual取值为TA、KitchenQual取值为TA对房价有较强的负面影响,相关系数分别达
到-0.6与-0.5。
屋顶材料RoofMatl为WdShngl的房屋均价最高
评估地下室的高度BsmtQual为Ex的房屋均价比较高
MSZoning取值为RL、FV房屋价格较高,取值为RM时房屋价格较低
Street取值为Pave房屋价格较高
LotShape取值为IR1房屋价格较高
OverallQual、GrLiveArea、1stFI人SF等对房价有较强的正面影响
KitchenQual、ExterQual、BsmtQual等对房价有较强的负面影响
OverallQual这一特征对房价有巨大影响。
三、数据预处理
In [1]:
i m p o r t numpy a s np
i m p o r t pandas a s pd
i m p o r t warnings
warnings. filterwarnings('ignore')
In [2]:
data = pd. read_csv("./train.csv")
In [3]:
data. info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1460 entries, 0 to 1459
Data columns (total 81 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Id 1460 non-null int64
1 MSSubClass 1460 non-null int64
2 MSZoning 1460 non-null object
3 LotFrontage 1201 non-null float64
4 LotArea 1460 non-null int64
5 Street 1460 non-null object
6 Alley 91 non-null object
7 LotShape 1460 non-null object
8 LandContour 1460 non-null object
9 Utilities 1460 non-null object
10 LotConfig 1460 non-null object
11 LandSlope 1460 non-null object
12 Neighborhood 1460 non-null object
13 Condition1 1460 non-null object
14 Condition2 1460 non-null object
15 BldgType 1460 non-null object
16 HouseStyle 1460 non-null object
17 OverallQual 1460 non-null int64
18 OverallCond 1460 non-null int64
19 YearBuilt 1460 non-null int64
20 YearRemodAdd 1460 non-null int64
21 RoofStyle 1460 non-null object
22 RoofMatl 1460 non-null object
23 Exterior1st 1460 non-null object
24 Exterior2nd 1460 non-null object
25 MasVnrType 1452 non-null object
26 MasVnrArea 1452 non-null float64
27 ExterQual 1460 non-null object
28 ExterCond 1460 non-null object
29 Foundation 1460 non-null object
30 BsmtQual 1423 non-null object
31 BsmtCond 1423 non-null object
32 BsmtExposure 1422 non-null object
33 BsmtFinType1 1423 non-null object
34 BsmtFinSF1 1460 non-null int64
35 BsmtFinType2 1422 non-null object
36 BsmtFinSF2 1460 non-null int64
37 BsmtUnfSF 1460 non-null int64
38 TotalBsmtSF 1460 non-null int64
39 Heating 1460 non-null object
40 HeatingQC 1460 non-null object
41 CentralAir 1460 non-null object
42 Electrical 1459 non-null object
43 1stFlrSF 1460 non-null int64
44 2ndFlrSF 1460 non-null int64
45 LowQualFinSF 1460 non-null int64
46 GrLivArea 1460 non-null int64
47 BsmtFullBath 1460 non-null int64
48 BsmtHalfBath 1460 non-null int64
49 FullBath 1460 non-null int64
50 HalfBath 1460 non-null int64
51 BedroomAbvGr 1460 non-null int64
52 KitchenAbvGr 1460 non-null int64
53 KitchenQual 1460 non-null object
54 TotRmsAbvGrd 1460 non-null int64
55 Functional 1460 non-null object
56 Fireplaces 1460 non-null int64
57 FireplaceQu 770 non-null object
58 GarageType 1379 non-null object
59 GarageYrBlt 1379 non-null float64
60 GarageFinish 1379 non-null object
61 GarageCars 1460 non-null int64
62 GarageArea 1460 non-null int64
63 GarageQual 1379 non-null object
64 GarageCond 1379 non-null object
65 PavedDrive 1460 non-null object
66 WoodDeckSF 1460 non-null int64
67 OpenPorchSF 1460 non-null int64
68 EnclosedPorch 1460 non-null int64
69 3SsnPorch 1460 non-null int64
70 ScreenPorch 1460 non-null int64
71 PoolArea 1460 non-null int64
72 PoolQC 7 non-null object
73 Fence 281 non-null object
74 MiscFeature 54 non-null object
75 MiscVal 1460 non-null int64
76 MoSold 1460 non-null int64
77 YrSold 1460 non-null int64
78 SaleType 1460 non-null object
79 SaleCondition 1460 non-null object
80 SalePrice 1460 non-null int64
dtypes: float64(3), int64(35), object(43)
memory usage: 924.0+ KB
Id MSSubClass MSZoning LotFrontage LotArea Street Alley LotShape LandContour Utilit
0 1 60 RL 65.0 8450 Pave NaN Reg Lvl AllP
1 2 20 RL 80.0 9600 Pave NaN Reg Lvl AllP
2 3 60 RL 68.0 11250 Pave NaN IR1 Lvl AllP
3 4 70 RL 60.0 9550 Pave NaN IR1 Lvl AllP
4 5 60 RL 84.0 14260 Pave NaN IR1 Lvl AllP
5 rows × 81 columns
(1460, 81)
1、数据正确性检验
ID列是否有重复值或是空值(info中已证明ID列中不存在空值)
数据中是否有重复值(完全相同的两行)
True
In [4]:
data. head()
Out[4]:
In [5]:
data. shape
Out[5]:
In [6]:
# 判断ID列是否有重复
print(data['Id']. nunique() = = data. shape[0])
In [7]:
# 判断数据中是否有重复值
# 训练集
print(data. duplicated(). sum())