学习处理房价预测数据的步骤

翻译 kaggle kernel:comprehensive data exploration with python
https://www.kaggle.com/pmarcelino/comprehensive-data-exploration-with-python

五个步骤
1. 理解问题。查看每个变量,并分析该变量对于这一问题的意义与重要性。
在这一步中,针对每一个变量,理解其意义,分析该变量与问题的相关性。该步骤会耗费很多时间,但对于分析问题非常有用。为使分析更有条理,可以建立excel表格,并包含以下列:
a.变量名
b.类型-鉴别变量类型,主要有两种可能变量类型:数值和分类。数值型变量的值是数字,分类型变量的值是类别。
c.划分-鉴别变量分类,包括房屋,空间和地理位置。其中房屋类型的变量指与房屋物理性质有关的变量(比如整体质量‘OverallQual’),而空间类型的变量指与房屋的空间性质有关的变量(比如地下室的总面积‘TotalBsmtSF’),最后,地理位置类型的变量指与房屋的地理位置有关的变量(比如街区‘Neibghborhood’)
d.期望(估计)-估计自变量对于房屋价格的影响程度。可以使用(‘High’,‘Medium’,‘Low’)作为可能值。
e.总结-整体查看数据,总结变量的重要性,可使用在期望中用到的可能值。
f.评论-对我们提出的任何意见
其中类型与划分仅仅是对未来提供一定参考,而期望这一列是非常重要的,因为它帮助我们建立第六感。为了填写这一列,我们需要阅读所有自变量的描述,针对每一个变量,都问我们一个问题:
(1)在买房子时,我们会考虑这一因素吗?(比如当我们想象自己梦想中的房子时,是否会在乎表层砌体的类型)
(2)如果考虑了该因素,那么该因素有多重要。(使用excellent的材料涂外墙和good,poor类型的有什么影响)
(3)该信息在其他变量中是否已经描述过了。(比如‘LandContour’ 提供了房屋的平坦度,我们真的还需要‘LandSlope’这一变量吗?)
在这一项艰巨的任务之后,我们可以填满excel表格,并专注于那些‘High’期望值的变量。然后,做出这些变量和房屋销售价格的散点图。最后,填上‘总结’那列作为对期望的校正。
经过这个过程后,可总结出以下自变量在该问题中非常重要:
(1)总体质量(OverallQual)这一变量的计算方式值得商榷,如何有其他自变量来计算处该变量的值也是一个有趣的问题。
(2)建造年限(YearBuilt)
(3)总地下室面积(TotalBsmtSF)
(4)总生活区面积(GrLivArea)
我最终决定了两个房屋类型‘building’变量(‘OverallQual’和‘YearBuilt’)以及两个空间(‘space’)变量(‘TotalBsmtSF’和‘GrLivArea’)。这一点可能没有想到,因为与我们通常认为的房地产界最重要的是地理位置这一点相悖。这可能是因为快速数据检查过程对分类变量来说比较严厉。例如,我原本认为‘Neighborhood’这一变量是更相关的,但是在数据检查之后我剔除了该变量,可能因为我才用散点图而非直方图进行研究,因为直方图更适合分类变量的可视化。我们可视化数据的方式也会对结果造成影响。
然而整个过程的主要目的是更少地思考数据和期望,所以我认为i我们完成了预定目标。现在是时候少点对话,多一点行动了。
当所给数据太多时,要找到最重要的数据种类

2.单变量研究。聚焦于因变量,得到其更多的信息,如分布情况等。
sns.displot研究‘SalePrice’的概率分布情况

3. 多变量研究。研究自变量与因变量的联系。
房屋销售价格是我们研究的原因,好像我们去聚会一样,在kaggle party 中遇到了SalePrice,于是想要知道其更多信息。
针对我们在第一步中预测的可能对‘SalePrice’有很大影响的自变量,可用散点图来研究数值型自变量与因变量的关系,用箱型图研究分类型自变量与因变量的关系。
由于第一步中预测的影响变量具有主观性,所以应该进行更为客观的分析。可根据相关系数矩阵(用dataframe.corr()只能得到数值型自变量的相关矩阵,数据是分类型的列会被忽略)作热力图来得到因变量与自变量的关系。得到与‘SalePrice’相关性较大的自变量因素。之后,还可通过sns.pairplot(dataframe)求得各列数据的散点图和概率分布情况

4. 基础清洗。清洗数据,处理缺失值,异常值以及分类变量。
缺失数据处理常用的语句:
train.isnull()

首先统计各列变量中缺失数值数量与百分比,然后对由缺失值的各列进行分析
a. 对缺失值占15%的变量直接删除,当作没有这个变量。
b.‘’GarageX‘变量的缺失值占5%,由于关于车库的重要信息主要是GarageCars,所以删除’GarageX‘变量,同理,删除’BamtX‘变量。
c.

然后是异常值处理:
异常值对于模型的影响非常大,并且可能会提供一些有用的信息。异常值处理非常复杂,在此只对房屋售价的标准差和散点图进行研究。

单变量分析(分析因变量):
数据标准化,以便将数据变换到相同的量级分析。对房屋售价进行Z-score变换,即均值为0,方差为1。然后分析异常值。特别注意那些标准化后还离均值很远的数。

标准化函数StandardScale.sklearn.preprocessing.StandardScaler

双变量分析:

5. 测试假设。检查处理后的数据是否符合大多数多变量技术的假设。

为了用多变量技术分析‘SalePrice’变量,需要看‘SalePrice’变量符合什么统计假设。根据多变量技术这本书,四种假设需要验证:

  1. 正态性: 在t统计量等统计测试中都会要求变量具有正态性。在这里只讨论‘SalePrice’的正态性。单变量的正态性不保证多变量正态性(我们所希望看到的),但是有所帮助。另外,大样本的正态性不是这样的?当变量满足正态性后,就避免了异方差性等问题。

sns.distplot(df,fit=norm)其中fit=norm会作出该数据最可能符合的正态分布图。
stats.probplot作出分位图与标准正态分布分位图的对比。
对于正偏态的分布,通过对数据(要求数据大于0)求log可以消除其偏态。当存在小于等于0的数据时,可将这些数据清除,对大于0的数据求log。

分位

  1. 同方差性
    事实上,通过保证变量的正态性,可以同时保证其同方差性。检查同方差性的最好方法是作出两个度量变量的散点图,若两者的方差不同散点图上会表现为锥体(在一端较小分散,另一端分散较大),或者表现为菱形(大量数据点集中在分布的中间位置)。
    通过作出求log后的‘GrLivArea’和‘SalePrice’的散点图可知,图形不再是锥形,这是正态性的力量。通过保证变量的正态性,也保证了其同方差性。
    ‘TotalBsmtSF’与‘SalePrice’的散点图也说明两变量大致同方差。

  2. 线性

  3. 没有相关误差:当一个错误与另一个错误相关发生时,意味着这两个变量存在关系,需要用一个变量描绘其相关的效果。

函数与统计学知识

1.哑变量:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.get_dummies.html

2.异方差性:https://baike.baidu.com/item/异方差性/3206526?fr=aladdin

3.t统计量:在总体方差未知的情况下,求均值的某一置信区间。

适用于总体方差未知,小样本情况下,用样本方差代替总体方差。

t检验

https://baike.baidu.com/item/t检验/9910799?fr=aladdin

样本与统计量

t分布
z变量就是标准正态分布,在总体方差已知的情况下,求均值的某一置信水平的置信区间。

适用于总体方差已知且为正态分布,或者总体不是正态分布但为大样本时近似为正态分布。

4.在单变量研究的过程中,要研究‘SalePrice’的分布情况,发现需要作出其分布直方图,以及核密度估计,可采用seaborn库中的’distplot’函数,直方图与条形图是不同的:
(1)条形图用条形的长度表示各类别频数的多少,其宽度则是固定的;
(2)直方图是用面积表示各组频数的多少,矩形的高度表示每一组的频数或频率,宽度表示各组的组距。
(3)由于分组数据具有连续性,直方图的各矩形通常是连续排列,而条形图则是分开排列。
(4)条形图主要用于展示分类数据,而直方图则用于展示数据型数据

由于直方图绘制时,bins不同会造成最后直方图有很大差别。另外直方图的分布曲线不平滑,在一个bin中的样本具有相同的概率密度。
核密度估计采用平滑的峰值函数(‘核’)来拟合观察到的数据点,从而对真实的概率分布曲线进行模拟。

5.kde:(https://blog.csdn.net/pipisorry/article/details/53635895)
偏度(skewness)和峰度(kurtosis):
偏度反应分布的对称情况,正偏时,右尾更长,反偏时,左尾更长。
峰度反应图像的尖锐程度:峰值越大,表现在图像上是中心点越尖锐

偏度和峰度
skewness
kurtosis

6.concat: pandas连接函数
concat

7.散点图的几种作图方式总结:
(1)matplotlib.pyplot.scatter

fig=plt.figure()
ax1=fig.add_subplot(111)
ax1.set_ylim([0,800000])
ax1.scatter(train['TotalBsmtSF'],train['SalePrice'])

(2)plt.scatter得用另外一条语句来设置y轴坐标范围,设置坐标轴范围也可用户

fig.axis(ymin=0,ymax=800000)

(3)作图方法:
a.

fig=plt.figure()
ax=fig.add_subplot(111)

b.

fig,ax=plt.subplots()

(4)pandas.plot()
pandas.plot

var='GrLivArea'
data=pd.concat([train['SalePrice'],train[var]],axis=1)
data.plot.scatter(x=var,y='SalePrice',ylim=(0,800000))

8.箱型图作图方法:
箱型图可以展示数据的分散情况和异常值情况
箱型图解释
解释2
1.箱型图不受异常值的影响,以一种相对稳定的方式描述数据的离散分布情况。
2.用途:用于识别异常值

python作法:
seaborn.boxplot
python作箱型图

9.设置轴刻度等:
1.

fig=plt.figure()
ax=fig.add_subplot()
ax.set_ylim([0,800000])
#plt.ylim([0,800000])
#plt.legend(loc='best')
#plt.xticks(rotation=90)
ax.set_xticks(rotation=90)

10.相关系数矩阵与热力图
(1)协方差:描述两个变量之间同向变化的长度
协方差
相关系数求法

(2)热力图

corrmat=train.corr()#计算各列之间的协方差
f,ax=fig.subplots(figsize=(12,9))
sns.heatmap(corrmat)

11.seaborn.pairplot
作用:对dataframe,作出各列数据的散点图,对角线处则是单变量的概率分布情况(默认采用直方图)。

import seaborn as sns
sns.set()
g=sns.pairplot(train)

12.特征含义

英文简写 英文解释 中文
OverallQual Rates the overall material and finish of the house 整体质量
GrLivArea Above grade (ground) living area square feet 地上总生活面积
GarageCars Size of garage in car capacity 车库能容纳的车辆数
GarageArea Size of garage in square feet 车库面积(英尺)
TotalBmstSF Total square feet of basement area 地下室总面积(英尺)
1stFlrSF First Floor square feet 一楼总面积
FullBath Full bathroom above ground 浴室数量
TotRmsAbvGrd Total rooms above grade (does not include bathrooms) 地上房间数(不包括浴室)
YearBuilt Original construction date 建造时间
MasVnrType Masonry veneer type 表层砌体类型
MasVnrArea Masonry veneer area in square feet 表层砌体面积

13.dataframe.nlargest
dataframe.nlargest(n,columns,keep=‘first’)
根据columns中数值大小以降序返回n行dataframe

14.np.corrcoef():对矩阵的行求相关系数
corrcoef

15.dataframe
dataframe.sum():按列求和
dataframe.count():统计各列数量
dataframe.drop()

16.sklearn数据预处理模块

你可能感兴趣的:(数据分析)