kaggle项目之:Comprehensive data exploration with Python
开发工具:Anaconda
项目地址:https://www.kaggle.com/code/pmarcelino/comprehensive-data-exploration-with-python
整体流程:
1. 理解问题。我们将查看每个变量,并对它们的含义以及对这个问题的重要性进行哲学分析。
2. 单变量研究。我们将只关注因变量(“SalePrice”),并尝试对它有更多了解。
3. 多变量研究。我们将尝试了解因变量和自变量之间的关系。
4. 基本清理。我们将清理数据集并处理缺失数据、异常值和分类变量。5. 检验假设。我们将检查我们的数据是否满足大多数多变量技术所需的假设。
尽管这个项目参与的人数以及排名都比较靠前,但是整体下来没有达到泰坦尼克那么全面。后面半段我也不是特别的理解,就也写的比较简单。然后就跟着作者的这篇文章大致熟悉一下他的思路以及在数据处理分析用到的一些方法吧。
# 导入数据包
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
from scipy.stats import norm
from sklearn.preprocessing import StandardScaler
from scipy import stats
import warnings
warnings.filterwarnings("ignore")
%matplotlib inline
df_train = pd.read_csv(r"E:/project/demo1/train.csv")
# 注释:
# SalePrice:售价
# GrLivArea:地面地面以上的居住面积平方英尺数
df_train.head()

df_train.columns

# 由于属性比较多,先从售价来分析
df_train["SalePrice"].describe()
# 观察售价数据
sns.distplot(df_train['SalePrice'])

# 可以看到数据有些偏离,打印一下偏离的偏度和峰度
print("Skewness: %f" % df_train['SalePrice'].skew())
print("Kurtosis: %f" % df_train['SalePrice'].kurt())

# 用散点图观察居住面积与房价是否存在线性关系
# GrLivArea:地面以上的居住面积平方英尺数
# 结论:它们具有线性关系
var = 'GrLivArea'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
data.plot.scatter(x=var, y='SalePrice', ylim=(0,800000));

# 用散点图观察BsmtSF与房价是否存在线性关系
var = 'TotalBsmtSF'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
data.plot.scatter(x=var, y='SalePrice', ylim=(0,800000));

# 用箱型图观察房屋整体材料和装修的评级与房价的关系
var = 'OverallQual'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
f, ax = plt.subplots(figsize=(8, 6))
fig = sns.boxplot(x=var, y="SalePrice", data=data)
fig.axis(ymin=0, ymax=800000);

# 用箱型图观察年修与房价的关系
var = 'YearBuilt'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
f, ax = plt.subplots(figsize=(16, 8))
fig = sns.boxplot(x=var, y="SalePrice", data=data)
fig.axis(ymin=0, ymax=800000);
plt.xticks(rotation=90);

# 用相关矩阵观察各变量与房价的密切程度
corrmat = df_train.corr()
f, ax = plt.subplots(figsize=(12, 9))
sns.heatmap(corrmat, vmax=.8, square=True);

# 缩放一下观察一些其他特性的相关性
k = 10 #number of variables for heatmap
cols = corrmat.nlargest(k, 'SalePrice')['SalePrice'].index
cm = np.corrcoef(df_train[cols].values.T)
sns.set(font_scale=1.25)
hm = sns.heatmap(cm, cbar=True, annot=True, square=True, fmt='.2f', annot_kws={'size': 10},
yticklabels=cols.values, xticklabels=cols.values)
plt.show()

# 用甘特图观察这些特性
sns.set()
cols = ['SalePrice', 'OverallQual', 'GrLivArea', 'GarageCars', 'TotalBsmtSF', 'FullBath', 'YearBuilt']
sns.pairplot(df_train[cols], size = 2.5)
plt.show();

# 查看一下缺失数据
total = df_train.isnull().sum().sort_values(ascending=False)
percent = (df_train.isnull().sum()/df_train.isnull().count()).sort_values(ascending=False)
missing_data = pd.concat([total, percent], axis=1, keys=['Total', 'Percent'])
missing_data.head(20)

# 分析如果处理这些变量和缺失值
df_train = df_train.drop((missing_data[missing_data['Total'] > 1]).index,1)
df_train = df_train.drop(df_train.loc[df_train['Electrical'].isnull()].index)
df_train.isnull().sum().max()
#just checking that there's no missing data missing...
0
# 去除离群值的影响,进行数据标准化
saleprice_scaled = StandardScaler().fit_transform(df_train['SalePrice'][:,np.newaxis]);
low_range = saleprice_scaled[saleprice_scaled[:,0].argsort()][:10]
high_range= saleprice_scaled[saleprice_scaled[:,0].argsort()][-10:]
print('outer range (low) of the distribution:')
print(low_range)
print('\nouter range (high) of the distribution:')
print(high_range)

# 进行双变量分析,房屋居住面积与销售价格分析
var = 'GrLivArea'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
data.plot.scatter(x=var, y='SalePrice', ylim=(0,800000));

# 删除点数
df_train.sort_values(by = 'GrLivArea', ascending = False)[:2]
df_train = df_train.drop(df_train[df_train['Id'] == 1299].index)
df_train = df_train.drop(df_train[df_train['Id'] == 524].index)
var = 'TotalBsmtSF'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
data.plot.scatter(x=var, y='SalePrice', ylim=(0,800000));

sns.distplot(df_train['SalePrice'], fit=norm);
fig = plt.figure()
res = stats.probplot(df_train['SalePrice'], plot=plt)

df_train['SalePrice'] = np.log(df_train['SalePrice'])
sns.distplot(df_train['SalePrice'], fit=norm);
fig = plt.figure()
res = stats.probplot(df_train['SalePrice'], plot=plt)

sns.distplot(df_train['GrLivArea'], fit=norm);
fig = plt.figure()
res = stats.probplot(df_train['GrLivArea'], plot=plt)

df_train['GrLivArea'] = np.log(df_train['GrLivArea'])
sns.distplot(df_train['GrLivArea'], fit=norm);
fig = plt.figure()
res = stats.probplot(df_train['GrLivArea'], plot=plt)

sns.distplot(df_train['TotalBsmtSF'], fit=norm);
fig = plt.figure()
res = stats.probplot(df_train['TotalBsmtSF'], plot=plt)
#create column for new variable (one is enough because it's a binary categorical feature)
#if area>0 it gets 1, for area==0 it gets 0
df_train['HasBsmt'] = pd.Series(len(df_train['TotalBsmtSF']), index=df_train.index)
df_train['HasBsmt'] = 0
df_train.loc[df_train['TotalBsmtSF']>0,'HasBsmt'] = 1
#transform data
df_train.loc[df_train['HasBsmt']==1,'TotalBsmtSF'] = np.log(df_train['TotalBsmtSF'])
#histogram and normal probability plot
sns.distplot(df_train[df_train['TotalBsmtSF']>0]['TotalBsmtSF'], fit=norm);
fig = plt.figure()
res = stats.probplot(df_train[df_train['TotalBsmtSF']>0]['TotalBsmtSF'], plot=plt)

#scatter plot
plt.scatter(df_train['GrLivArea'], df_train['SalePrice']);
#scatter plot
plt.scatter(df_train[df_train['TotalBsmtSF']>0]['TotalBsmtSF'], df_train[df_train['TotalBsmtSF']>0]['SalePrice']);
#convert categorical variable into dummy
df_train = pd.get_dummies(df_train)
以上就是本次项目,有兴趣可以深入研究,最后添加备注如下:
MSSubClass(建筑子类别):标识所售住宅的类型。
20:1 层住宅,1946 年及之后建造,所有风格
30:1 层住宅,1945 年及之前建造
40:1 层住宅,带已装修阁楼,所有年代
45:1.5 层住宅 - 未装修,所有年代
50:1.5 层住宅,已装修,所有年代
60:2 层住宅,1946 年及之后建造
70:2 层住宅,1945 年及之前建造
75:2.5 层住宅,所有年代
80:错层或多层住宅
85:门厅错层住宅
90:复式住宅 - 所有风格和年代
120:1 层规划单元开发(PUD)住宅 - 1946 年及之后建造
150:1.5 层规划单元开发(PUD)住宅 - 所有年代
160:2 层规划单元开发(PUD)住宅 - 1946 年及之后建造
180:规划单元开发(PUD) - 多层住宅 - 包括错层和门厅错层
190:两户合住改造住宅 - 所有风格和年代
MSZoning(土地用途分区):标识所售房产的一般分区类别。
A:农业
C:商业
FV:浮动村庄住宅
I:工业
RH:高密度住宅
RL:低密度住宅
RP:低密度公园住宅
RM:中密度住宅
LotFrontage(临街面长度):与房产相连的街道的线性英尺数
LotArea(地块面积):地块面积(平方英尺)
Street(街道类型):通往房产的道路类型
Grvl:碎石路
Pave:铺砌路
Alley(小巷类型):通往房产的小巷类型
Grvl:碎石小巷
Pave:铺砌小巷
NA:无小巷通道
LotShape(地块形状):房产的大致形状
Reg:规则形状
IR1:略微不规则
IR2:中等不规则
IR3:不规则
LandContour(地形):房产的平坦程度
Lvl:近乎平坦 / 水平
Bnk:有坡度 - 从街道坡度到建筑有快速且显著的上升
HLS:山坡 - 两侧有显著的斜坡
Low:洼地
Utilities(公用设施类型):可用的公用设施类型
AllPub:所有公共设施(电、气、水和污水系统)
NoSewr:电、气和水(化粪池)
NoSeWa:仅电和天然气
ELO:仅电
LotConfig(地块布局):地块配置
Inside:内部地块
Corner:街角地块
CulDSac:死胡同尽头的地块
FR2:房产两侧临街
FR3:房产三侧临街
LandSlope(地形坡度):房产的坡度
Gtl:缓坡
Mod:中等坡度
Sev:陡坡
Neighborhood(社区):艾姆斯市范围内的具体位置
Blmngtn:布卢明顿高地
Blueste:蓝茎区
BrDale:布里亚代尔
BrkSide:布鲁克赛德
ClearCr:克利尔克里克
CollgCr:学院溪
Crawfor:克劳福德
Edwards:爱德华兹
Gilbert:吉尔伯特
IDOTRR:爱荷华州交通部和铁路沿线
MeadowV:梅多村
Mitchel:米切尔
Names:北艾姆斯
NoRidge:北岭
NPkVill:北公园别墅
NridgHt:北岭高地
NWAmes:西北艾姆斯
OldTown:老城
SWISU:爱荷华州立大学的南部和西部
Sawyer:索耶
SawyerW:索耶西部
Somerst:萨默塞特
StoneBr:斯通布鲁克
Timber:廷伯兰
Veenker:维恩克
Condition1(条件 1):与各种条件的接近程度
Artery:毗邻主干道
Feedr:毗邻支路
Norm:正常
RRNn:在南北铁路 200 英尺范围内
RRAn:毗邻南北铁路
PosN:靠近优质的外部设施,如公园、绿化带等
PosA:毗邻优质的外部设施
RRNe:在东西铁路 200 英尺范围内
RRAe:毗邻东西铁路
Condition2(条件 2):与各种条件的接近程度(如果存在多个条件)
Artery:毗邻主干道
Feedr:毗邻支路
Norm:正常
RRNn:在南北铁路 200 英尺范围内
RRAn:毗邻南北铁路
PosN:靠近优质的外部设施,如公园、绿化带等
PosA:毗邻优质的外部设施
RRNe:在东西铁路 200 英尺范围内
RRAe:毗邻东西铁路
BldgType(建筑类型):住宅类型
1Fam:独栋住宅
2FmCon:两户合住改造住宅;最初建为一户住宅
Duplx:复式住宅
TwnhsE:联排别墅端头单元
TwnhsI:联排别墅中间单元
HouseStyle(房屋风格):住宅风格
1Story:一层
1.5Fin:一层半:第二层已装修
1.5Unf:一层半:第二层未装修
2Story:两层
2.5Fin:两层半:第二层已装修
2.5Unf:两层半:第二层未装修
SFoyer:门厅错层
SLvl:错层
OverallQual(房屋整体质量):对房屋整体材料和装修的评级
10:非常优秀
9:优秀
8:非常好
7:好
6:高于平均水平
5:平均水平
4:低于平均水平
3:一般
2:差
1:非常差
OverallCond(房屋整体状况):对房屋整体状况的评级
10:非常优秀
9:优秀
8:非常好
7:好
6:高于平均水平
5:平均水平
4:低于平均水平
3:一般
2:差
1:非常差
YearBuilt(建造年份):原始建造日期
YearRemodAdd(翻新或扩建年份):翻新日期(如果没有翻新或扩建,则与建造日期相同)
RoofStyle(屋顶类型):屋顶的类型
Flat:平屋顶
Gable:人字形屋顶
Gambrel:双斜坡屋顶(谷仓式)
Hip:四坡屋顶
Mansard:折线形屋顶
Shed:单坡屋顶
RoofMatl(屋顶材料):屋顶的材料
ClyTile:粘土或瓷砖
CompShg:标准(复合)木瓦
Membran:膜材
Metal:金属
Roll:卷材
Tar&Grv:砾石和焦油
WdShake:木瓦板
WdShngl:木瓦
Exterior1st(房屋外部首层材料):房屋外部的首层覆盖材料
AsbShng:石棉瓦
AsphShn:沥青瓦
BrkComm:普通砖
BrkFace:面砖
CBlock:煤渣砖
CemntBd:水泥板
HdBoard:硬木板
ImStucc:仿 stucco(灰泥)
MetalSd:金属墙板
Other:其他
Plywood:胶合板
PreCast:预制板
Stone:石材
Stucco:灰泥
VinylSd:乙烯基墙板
Wd Sdng:木质墙板
WdShing:木瓦
Exterior2nd(房屋外部第二层材料):房屋外部的第二层覆盖材料(如果有多种材料)
AsbShng:石棉瓦
AsphShn:沥青瓦
BrkComm:普通砖
BrkFace:面砖
CBlock:煤渣砖
CemntBd:水泥板
HdBoard:硬木板
ImStucc:仿 stucco(灰泥)
MetalSd:金属墙板
Other:其他
Plywood:胶合板
PreCast:预制板
Stone:石材
Stucco:灰泥
VinylSd:乙烯基墙板
Wd Sdng:木质墙板
WdShing:木瓦
MasVnrType(砖石饰面类型):砖石饰面的类型
BrkCmn:普通砖
BrkFace:面砖
CBlock:煤渣砖
None:无
Stone:石材
MasVnrArea(砖石饰面面积):砖石饰面的面积(平方英尺)
ExterQual(外部材料质量):评估房屋外部材料的质量
Ex:优秀
Gd:好
TA:平均 / 典型
Fa:一般
Po:差
ExterCond(外部材料状况):评估房屋外部材料的当前状况
Ex:优秀
Gd:好
TA:平均 / 典型
Fa:一般
Po:差
Foundation(基础类型):基础的类型
BrkTil:砖和瓷砖基础
CBlock:煤渣砖基础
PConc:现浇混凝土基础
Slab:平板基础
Stone:石材基础
Wood:木质基础
BsmtQual(地下室质量):评估地下室的高度
Ex:优秀(100 英寸以上)
Gd:好(90 - 99 英寸)
TA:典型(80 - 89 英寸)
Fa:一般(70 - 79 英寸)
Po:差(小于 70 英寸)
NA:无地下室
BsmtCond(地下室状况):评估地下室的一般状况
Ex:优秀
Gd:好
TA:典型 - 允许有轻微潮湿
Fa:一般 - 潮湿或有一些裂缝或沉降
Po:差 - 严重裂缝、沉降或潮湿
NA:无地下室
BsmtExposure(地下室采光情况):指的是有门廊可通向室外或花园层的墙壁情况
Gd:良好采光
Av:平均采光(错层或门厅错层通常得分在平均或以上)
Mn:最小采光
No:无采光
NA:无地下室
BsmtFinType1(地下室首层装修类型):地下室已装修区域的评级
GLQ:优质居住空间
ALQ:平均居住空间
BLQ:低于平均水平的居住空间
Rec:普通娱乐室
LwQ:低质量
Unf:未装修
NA:无地下室
BsmtFinSF1:第一种类型的已装修平方英尺数
BsmtFinType2(地下室第二种装修类型):地下室已装修区域的评级(如果有多种类型)
GLQ:优质居住空间
ALQ:平均居住空间
BLQ:低于平均水平的居住空间
Rec:普通娱乐室
LwQ:低质量
Unf:未装修
NA:无地下室
BsmtFinSF2:第二种类型的已装修平方英尺数
BsmtUnfSF:地下室未装修的平方英尺数
TotalBsmtSF:地下室的总平方英尺数
Heating(供暖类型):供暖的类型
Floor:地板供暖炉
GasA:燃气强制热风炉
GasW:燃气热水或蒸汽供暖
Grav:重力供暖炉
OthW:非燃气的热水或蒸汽供暖
Wall:墙式供暖炉
HeatingQC(供暖质量):供暖的质量和状况
Ex:优秀
Gd:好
TA:平均 / 典型
Fa:一般
Po:差
CentralAir(中央空调):是否有中央空调
N:无
Y:有
Electrical(电气系统):电气系统类型
SBrkr:标准断路器和罗马克斯电线
FuseA:60 安培以上的保险丝盒且全部是罗马克斯电线(平均水平)
FuseF:60 安培保险丝盒且大部分是罗马克斯电线(一般水平)
FuseP:60 安培保险丝盒且大部分是旋钮和管式电线(差)
Mix:混合类型
1stFlrSF:首层平方英尺数
2ndFlrSF:第二层平方英尺数
LowQualFinSF:低质量的已装修平方英尺数(所有楼层)
GrLivArea:地面以上的居住面积平方英尺数
BsmtFullBath:地下室的完整卫生间数量
BsmtHalfBath:地下室的半卫生间数量
FullBath:地面以上的完整卫生间数量
HalfBath:地面以上的半卫生间数量
Bedroom:地面以上的卧室数量(不包括地下室卧室)
Kitchen:地面以上的厨房数量
KitchenQual(厨房质量):厨房的质量
Ex:优秀
Gd:好
TA:典型 / 平均
Fa:一般
Po:差
TotRmsAbvGrd:地面以上的房间总数(不包括卫生间)
Functional(房屋功能性):房屋的功能性(除非有合理的扣除因素,否则假定为典型情况)
Typ:典型功能性
Min1:轻微扣除因素 1
Min2:轻微扣除因素 2
Mod:中等扣除因素
Maj1:重大扣除因素 1
Maj2:重大扣除因素 2
Sev:严重损坏
Sal:仅可作废品处理
Fireplaces:壁炉数量
FireplaceQu(壁炉质量):壁炉的质量
Ex:优秀 - 特别出色的砖石壁炉
Gd:好 - 主层的砖石壁炉
TA:平均 - 主起居区的预制壁炉或地下室的砖石壁炉
Fa:一般 - 地下室的预制壁炉
Po:差 - 富兰克林炉灶
NA:无壁炉
GarageType(车库类型):车库的位置
2Types:不止一种类型的车库
Attchd:与房屋相连
Basment:地下室车库
BuiltIn:内置式(车库是房屋的一部分 - 通常车库上方有房间)
CarPort:车棚
Detchd:与房屋分离
NA:无车库
GarageYrBlt:车库建造年份
GarageFinish(车库内部装修):车库的内部装修情况
Fin:已装修
RFn:粗装修
Unf:未装修
NA:无车库
GarageCars:车库可容纳汽车的数量
GarageArea:车库的面积(平方英尺)
GarageQual(车库质量):车库的质量
Ex:优秀
Gd:好
TA:典型 / 平均
Fa:一般
Po:差
NA:无车库
GarageCond(车库状况):车库的状况
Ex:优秀
Gd:好
TA:典型 / 平均
Fa:一般
Po:差
NA:无车库
PavedDrive(车道铺设情况):车道是否铺设
Y:已铺设
P:部分铺设
N:泥土 / 碎石
WoodDeckSF:木质露台的面积(平方英尺)
OpenPorchSF:开放式门廊的面积(平方英尺)
EnclosedPorch:封闭式门廊的面积(平方英尺)
3SsnPorch:三季门廊的面积(平方英尺)
ScreenPorch:纱窗门廊的面积(平方英尺)
PoolArea:游泳池的面积(平方英尺)
PoolQC(游泳池质量):游泳池的质量
Ex:优秀
Gd:好
TA:平均 / 典型
Fa:一般
NA:无游泳池
Fence(围栏质量):围栏的质量
GdPrv:良好的隐私保护
MnPrv:最小限度的隐私保护
GdWo:优质木质围栏
MnWw:最小限度的木质 / 铁丝网围栏
NA:无围栏
MiscFeature(其他特征):其他未包含在其他类别的特征
Elev:电梯
Gar2:第二个车库(如果在车库部分未描述)
Othr:其他
Shed:棚屋(面积超过 100 平方英尺)
TenC:网球场
NA:无
MiscVal:其他特征的价值(美元)
MoSold:出售月份(MM)
YrSold:出售年份(YYYY)
SaleType(销售类型):销售的类型
WD:常规产权转让契约
CWD:现金产权转让契约
VWD:退伍军人管理局贷款产权转让契约
New:新建并出售的房屋
COD:法院官员契据 / 遗产
Con:首付 15% 的常规合同条款
ConLw:低首付和低利率合同
ConLI:低利率合同
ConLD:低首付合同
Oth:其他
SaleCondition(销售条件):销售的条件
Normal:正常销售
Abnorml:异常销售 - 交易、止赎、短售
AdjLand:毗邻土地购买
Alloca:分配 - 两份独立契约的相连房产,通常是带车库单元的公寓
Family:家庭成员之间的销售
Partial:上次评估时房屋未完工(与新建房屋相关)
更多推荐


所有评论(0)