Kaggle房价预测:数据探索——练习
来源:互联网 发布:pptv网络电视怎么用 编辑:程序博客网 时间:2024/05/22 06:44
主要借鉴了Kaggle基础问题——房价预测的两篇教程Comprehensive data exploration with Python和House Prices EDA并进行总结。
本篇,主要进行数据探索,对数据的基本特征有一个全局的大致了解。
import pandas as pdimport numpy as npimport matplotlib.pyplot as pltfrom sklearn.preprocessing import StandardScaler, OneHotEncoderfrom sklearn.model_selection import train_test_splitimport seaborn as snsfrom scipy.stats import normfrom scipy import stats%matplotlib inline
首先,我们拿到了数据集的csv文件,可以直接利用pandas导入得到DataFrame数据:
df_train = pd.read_csv(r'E:\kaggle\house_price_regression\train.csv')
与 numpy
的ndarray数据相比,DataFrame数据自带有行列信息,且有很多便捷的方法可以直接进行快速分析。
例如,可以查看数据的基本布局信息。
df_train.head() # 可以查看(默认)前5行数据信息# df_train.tail() # 可以查看后10行数据信息
5 rows × 81 columns
由上表可见,数据共有81列,我们可以查看这些特征的具体名称:
df_train.column # 查看各个特征的具体名称
Index(['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'], dtype='object')
若想对数据的基本情况进行快速了解,可以用如下方式获得:
df_train.describe() # df_train['SalePrice'].describe()能获得某一列的基本统计特征
8 rows × 38 columns
需要注意:上述操作只能对数值型特征有效,而若采用注释里面的操作能获得某一列的基本统计特征。
我们也可以利用直方图查看某一特征数据的具体分布情况:
sns.distplot(df_train['SalePrice']) # 图中的蓝色曲线是默认参数 kde=True 的拟合曲线特征
<matplotlib.axes._subplots.AxesSubplot at 0x229055fa6a0>
由上图可见,房价的并不服从正态分布,我们可以查看其斜度skewness
和峭度kurtosis
,这是很重要的两个统计量:
print('skewness: {0}, kurtosis: {1}'.format(df_train['SalePrice'].skew(), df_train['SalePrice'].kurt()))
skewness: 1.8828757597682129, kurtosis: 6.536281860064529
利用DataFrame的自身特性,我们可以很容易地做出反映变量关系的散点图:
output,var,var1,var2 = 'SalePrice', 'GrLivArea', 'TotalBsmtSF', 'OverallQual'fig, axes = plt.subplots(nrows=1,ncols=3,figsize=(16,5))df_train.plot.scatter(x=var,y=output,ylim=(0,800000),ax=axes[0])df_train.plot.scatter(x=var1,y=output,ylim=(0,800000),ax=axes[1])df_train.plot.scatter(x=var2,y=output,ylim=(0,800000),ax=axes[2])
<matplotlib.axes._subplots.AxesSubplot at 0x22905c5fe48>
从上图我们注意到,OverQual
属性虽然是数值型变量,但具有明显的有序性,此时对于这样的变量,采用箱形图显示效果更佳:
fig, ax = plt.subplots(figsize=(8,6))sns.boxplot(x=var2,y=output,data=df_train)ax.set_ylim(0,800000)plt.show()
上述箱形图的绘制matplotlib
也能做到,但相对麻烦,而对于下面YearBuilt
这个特征,用seaborn
绘制出来的效果简洁而美观:
var3 = 'YearBuilt'fig, ax = plt.subplots(figsize=(16,8))sns.boxplot(x=var3,y=output,data=df_train)ax.set_ylim(0,800000)plt.xticks(rotation=90)plt.show()
除此之外,seaborn
一个比较强大而方便的功能在于,可以对多个特征的散点图、直方图信息进行整合,得到各个特征两两组合形成的图矩阵:
var_set = ['SalePrice', 'OverallQual', 'GrLivArea', 'GarageCars', 'TotalBsmtSF', 'FullBath', 'YearBuilt']sns.set(font_scale=1.25) # 设置横纵坐标轴的字体大小sns.pairplot(df_train[var_set]) # 7*7图矩阵# 可在kind和diag_kind参数下设置不同的显示类型,此处分别为散点图和直方图,还可以设置每个图内的不同类型的显示plt.show()
既然有了上述这样一个功能,那就不能不提seaborn
下另外一个与其类似的操作,不过它更加自由与灵活。
由于数据特征较多,为了便于展示,我们先另外创建一些数据:
df_tr = pd.read_csv(r'E:\kaggle\house_price_regression\train.csv').drop('Id',axis=1)df_X = df_tr.drop('SalePrice',axis=1)df_y = df_tr['SalePrice']quantity = [attr for attr in df_X.columns if df_X.dtypes[attr] != 'object'] # 数值变量集合quality = [attr for attr in df_X.columns if df_X.dtypes[attr] == 'object'] # 类型变量集合
我们对数值型数据进行melt操作,使其具有两列,分别为变量名、取值。这其实相当于将所有选定的特征的数据 df1,...dfn
进行pd.concat([df1,...dfn],axis=0)
操作
melt_X = pd.melt(df_X, value_vars=quantity)melt_X.head()
melt_X.tail()
sns.FacetGrid()
默认会根据melt_X['variable']
内的取值做unique
操作,得到最终子图的数量,然后可以利用col_wrap设置每行显示的子图数量(不要求必须填满最后一行),sharex、sharey设置是否共享坐标轴;
g.map()
其实就类似于函数式编程里面的map()
函数,第一个参数表示绘制图的方法(此处为直方图),后面的参数为此绘图方法下的参数设置。
g = sns.FacetGrid(melt_X, col="variable", col_wrap=5, sharex=False, sharey=False)g = g.map(sns.distplot, "value") # 以melt_X['value']作为数据
上述操作主要是单个或两个特征的数据分布进行分析,下面我们对各个特征间的关系进行分析:
最简单地,直接获取整个DataFrame数据的协方差矩阵并利用sns.heatmaP()
进行可视化
corrmat = df_train.corr()f, ax = plt.subplots(figsize=(12, 9))sns.heatmap(corrmat, vmax=.8, square=True, ax=ax) # square参数保证corrmat为非方阵时,图形整体输出仍为正方形plt.show()
然后,我们可以选取与output
变量相关系数最高的10个特征查看其相关情况,找出那些相互关联性较强的特征
k = 10top10_attr = corrmat.nlargest(k, output).indextop10_mat = corrmat.loc[top10_attr, top10_attr]fig,ax = plt.subplots(figsize=(8,6))sns.set(font_scale=1.25)sns.heatmap(top10_mat, annot=True, annot_kws={'size':12}, square=True)# 设置annot使其在小格内显示数字,annot_kws调整数字格式plt.show()
- Kaggle房价预测:数据探索——练习
- Kaggle房价预测:数据预处理——练习
- kaggle 房价预测经典文章
- Kaggle房价预测案例分享
- Kaggle入门实例-预测房价
- Story 2---Kaggle房价预测
- Kaggle房价预测:随机森林方法
- kaggle房价预测/Ridge/RandomForest/cross_validation
- Kaggle房价预测进阶版/bagging/boosting/AdaBoost/XGBoost
- 【笔记】AI100-Kaggle竞赛_2017年房价预测
- 使用sklearn进行数据挖掘-房价预测(4)—数据预处理
- 机器学习和数据挖掘3——预测波士顿房价
- [kaggle数据] 泰坦尼克号生存预测分析
- Kaggle练习1——Titanic
- 机器学习基础—Kaggle泰坦尼克预测(完整分析)
- kaggle竞赛入门:titanic数据预测学习(翻译)
- Python练习之——肿瘤预测
- 房价预测(HackerRank)
- 谈谈ThreadLocal和解决线程安全的关系
- 【转】Tomcat webapps下面的东西都可以删除吗
- protobuf3语言指南
- compileSdkVersion targetSdkVersion minSdkVersion的关系
- 基类实现求体积、表面积
- Kaggle房价预测:数据探索——练习
- 友元函数
- 第一章:导航
- Java调用WebService的几种方式
- java中对方法的理解
- ImageLoadListview
- 微信小程序-参数传递与事件处理
- 手机无线网wifi存储地址(查看已经连接的wifi密码)
- 原理上说明为什么Arangodb更快(索引自由邻接或混合索引)