翻译 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’变量符合什么统计假设。根据多变量技术这本书,四种假设需要验证:
sns.distplot(df,fit=norm)其中fit=norm会作出该数据最可能符合的正态分布图。
stats.probplot作出分位图与标准正态分布分位图的对比。
对于正偏态的分布,通过对数据(要求数据大于0)求log可以消除其偏态。当存在小于等于0的数据时,可将这些数据清除,对大于0的数据求log。
分位
同方差性
事实上,通过保证变量的正态性,可以同时保证其同方差性。检查同方差性的最好方法是作出两个度量变量的散点图,若两者的方差不同散点图上会表现为锥体(在一端较小分散,另一端分散较大),或者表现为菱形(大量数据点集中在分布的中间位置)。
通过作出求log后的‘GrLivArea’和‘SalePrice’的散点图可知,图形不再是锥形,这是正态性的力量。通过保证变量的正态性,也保证了其同方差性。
‘TotalBsmtSF’与‘SalePrice’的散点图也说明两变量大致同方差。
线性
没有相关误差:当一个错误与另一个错误相关发生时,意味着这两个变量存在关系,需要用一个变量描绘其相关的效果。
函数与统计学知识
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数据预处理模块