数据介绍
数据来源于kaggle House Prices
数据有以下几个维度,其中36个为特征,价格为标签
特征 | 定义 |
---|---|
SalePrice | 物业的销售价格以美元计算。这是您尝试预测的目标变量。 |
MSSubClass | 建筑类 |
MSZoning | 一般分区分类 |
LotFrontage | 街道的线性脚连接到财产 |
LotArea | 地块尺寸,平方英尺 |
Street | 道路通道的类型 |
Alley | 胡同通道的类型 |
LotShape | 一般的财产形状 |
LandContour | 物业的平整度 |
Utilities | 可用的实用程序类型 |
LotConfig | 批量配置 |
LandSlope | 物业坡度 |
Neighborhood: | Ames市区内的物理位置 |
Condition1 | 靠近主要道路或铁路 |
Condition2 | 靠近主要道路或铁路(如果存在第二个) |
BldgType | 住宅类型 |
HouseStyle | 住宅风格 |
OverallQual | 整体材料和成品质量 |
OverallCond | 总体状况评级 |
YearBuilt | 原始施工日期 |
YearRemodAdd | 改造日期 |
RoofStyle | 屋顶类型 |
RoofMatl | 屋顶材料 |
Exterior1st | 房屋外墙 |
Exterior2nd | 房屋外墙(如果有多种材料) |
MasVnrType | 砌体贴面类型 |
MasVnrArea | 平方英尺的砌体饰面区域 |
ExterQual | 外部材料质量 |
ExterCond | 外部材料的现状 |
Foundation | 基础类型 |
BsmtQual | 地下室的高度 |
BsmtCond | 地下室的一般情况 |
BsmtExposure | 罢工或花园层地下室墙壁 |
BsmtFinType1 | 地下室成品区的质量 |
BsmtFinSF1 | 类型1完成平方英尺 |
BsmtFinType2 | 第二个完成区域的质量(如果存在) |
BsmtFinSF2 | 2型成品平方英尺 |
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 | 平方英尺的开放式门廊区域 |
EnclosedPorch | 封闭的门廊面积,平方英尺 |
3SsnPorch | 三个季节的门廊面积,平方英尺 |
ScreenPorch | 屏幕门廊面积,平方英尺 |
PoolArea | 泳池面积,平方英尺 |
PoolQC | 泳池质量 |
Fence | 栅栏质量 |
MiscFeature | 其他类别未涵盖的其他功能 |
MiscVal | 杂项功能的价值 |
MoSold | 已售出月份 |
YrSold | 已售出年份 |
SaleType | 销售类型 |
SaleCondition | 销售条件 |
读取数据
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats
from scipy.stats import norm, skew
train=pd.read_csv('train.csv')
test=pd.read_csv('test.csv')
train.shape,test.shape
((1460, 81), (1459, 80))
train.describe()
Id | MSSubClass | LotFrontage | LotArea | OverallQual | OverallCond | YearBuilt | YearRemodAdd | MasVnrArea | BsmtFinSF1 | ... | WoodDeckSF | OpenPorchSF | EnclosedPorch | 3SsnPorch | ScreenPorch | PoolArea | MiscVal | MoSold | YrSold | SalePrice | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
count | 1460.000000 | 1460.000000 | 1201.000000 | 1460.000000 | 1460.000000 | 1460.000000 | 1460.000000 | 1460.000000 | 1452.000000 | 1460.000000 | ... | 1460.000000 | 1460.000000 | 1460.000000 | 1460.000000 | 1460.000000 | 1460.000000 | 1460.000000 | 1460.000000 | 1460.000000 | 1460.000000 |
mean | 730.500000 | 56.897260 | 70.049958 | 10516.828082 | 6.099315 | 5.575342 | 1971.267808 | 1984.865753 | 103.685262 | 443.639726 | ... | 94.244521 | 46.660274 | 21.954110 | 3.409589 | 15.060959 | 2.758904 | 43.489041 | 6.321918 | 2007.815753 | 180921.195890 |
std | 421.610009 | 42.300571 | 24.284752 | 9981.264932 | 1.382997 | 1.112799 | 30.202904 | 20.645407 | 181.066207 | 456.098091 | ... | 125.338794 | 66.256028 | 61.119149 | 29.317331 | 55.757415 | 40.177307 | 496.123024 | 2.703626 | 1.328095 | 79442.502883 |
min | 1.000000 | 20.000000 | 21.000000 | 1300.000000 | 1.000000 | 1.000000 | 1872.000000 | 1950.000000 | 0.000000 | 0.000000 | ... | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 1.000000 | 2006.000000 | 34900.000000 |
25% | 365.750000 | 20.000000 | 59.000000 | 7553.500000 | 5.000000 | 5.000000 | 1954.000000 | 1967.000000 | 0.000000 | 0.000000 | ... | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 5.000000 | 2007.000000 | 129975.000000 |
50% | 730.500000 | 50.000000 | 69.000000 | 9478.500000 | 6.000000 | 5.000000 | 1973.000000 | 1994.000000 | 0.000000 | 383.500000 | ... | 0.000000 | 25.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 6.000000 | 2008.000000 | 163000.000000 |
75% | 1095.250000 | 70.000000 | 80.000000 | 11601.500000 | 7.000000 | 6.000000 | 2000.000000 | 2004.000000 | 166.000000 | 712.250000 | ... | 168.000000 | 68.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 8.000000 | 2009.000000 | 214000.000000 |
max | 1460.000000 | 190.000000 | 313.000000 | 215245.000000 | 10.000000 | 9.000000 | 2010.000000 | 2010.000000 | 1600.000000 | 5644.000000 | ... | 857.000000 | 547.000000 | 552.000000 | 508.000000 | 480.000000 | 738.000000 | 15500.000000 | 12.000000 | 2010.000000 | 755000.000000 |
8 rows × 38 columns
将test的Id单独保存,train和test的Id删除
testid=test['Id']
train=train.drop('Id',axis=1)
test=test.drop('Id',1)
特征工程
观察数据分布
地面以上生活面积和价格的关系
在购置房屋时候,一个影响房屋的关键因素就是房屋的面积,那么,可以从房屋面积开始探索
# 将价格作为着色的标准,绘制散点图
plt.scatter(train['GrLivArea'],train['SalePrice'],c=train['SalePrice'])
plt.xlabel('GrLivArea')
plt.ylabel('SalePrice')
plt.show()
显然,存在2个异常值点(价格低于30k,面积大于4000),可以直接剔除
,这对模型的拟合不会产生不好的影响
train = train.drop(train[(train['GrLivArea']>4000) & (train['SalePrice']<300000)].index)
plt.scatter(train['GrLivArea'],train['SalePrice'],c=train['SalePrice'])
plt.xlabel('GrLivArea')
plt.ylabel('SalePrice')
plt.show()
房价的总趋势
通过绘制房价的趋势图,观察房价的分布
from scipy.stats import norm, skew
# 并绘制其概率密度曲线
sns.distplot(train['SalePrice'])
(mu, sigma) = norm.fit(train['SalePrice'])
plt.legend(['Normal dist. ($\mu=$ {:.2f} and $\sigma=$ {:.2f} )'.format(mu, sigma)],
loc='best')
plt.ylabel('Frequency')
plt.title('SalePrice distribution')
plt.show()
scipy.norm
是指概率密度函数: f ( x ) = e x 2 / 2 x ⋅ π f(x)=\frac{e^{x^2/2}}{ \sqrt{x} \cdot \pi} f(x)=x⋅πex2/2
scipy.skew
是指偏度: g 1 = m 3 m 2 3 / 2 g_1=\frac{m_3}{m_2^{3/2}} g