kaggle实战之房价预测-高级回归技巧(一)

比赛地址:kaggle房价预测-高级回归技巧

进入之后就可以看到如图所示的界面,这个比赛是预测房价,也就是回归问题
在这里插入图片描述
本文代码建议全程使用jupyter进行

1.拿到数据先别慌,总览一下,看看数据的分布情况

#导入所需要的库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
#利用pandas读取训练数据
df = pandas.read_csv('train.csv')
#查看数据帧的前五行,总览一下数据由哪些变量组成
df.head(5)

输出结果如下所示(如有需要,每一个特征的具体含义可以自行去kaggle网站查看):

IdMSSubClassMSZoningLotFrontageLotAreaStreetAlleyLotShapeLandContourUtilitiesLotConfigLandSlopeNeighborhoodCondition1Condition2BldgTypeHouseStyleOverallQualOverallCondYearBuiltYearRemodAddRoofStyleRoofMatlExterior1stExterior2ndMasVnrTypeMasVnrAreaExterQualExterCondFoundationBsmtQualBsmtCondBsmtExposureBsmtFinType1BsmtFinSF1BsmtFinType2BsmtFinSF2BsmtUnfSFTotalBsmtSFHeatingHeatingQCCentralAirElectrical1stFlrSF2ndFlrSFLowQualFinSFGrLivAreaBsmtFullBathBsmtHalfBathFullBathHalfBathBedroomAbvGrKitchenAbvGrKitchenQualTotRmsAbvGrdFunctionalFireplacesFireplaceQuGarageTypeGarageYrBltGarageFinishGarageCarsGarageAreaGarageQualGarageCondPavedDriveWoodDeckSFOpenPorchSFEnclosedPorch3SsnPorchScreenPorchPoolAreaPoolQCFenceMiscFeatureMiscValMoSoldYrSoldSaleTypeSaleConditionSalePrice
160RL658450PaveNARegLvlAllPubInsideGtlCollgCrNormNorm1Fam2Story7520032003GableCompShgVinylSdVinylSdBrkFace196GdTAPConcGdTANoGLQ706Unf0150856GasAExYSBrkr85685401710102131Gd8Typ0NAAttchd2003RFn2548TATAY0610000NANANA022008WDNormal208500
220RL809600PaveNARegLvlAllPubFR2GtlVeenkerFeedrNorm1Fam1Story6819761976GableCompShgMetalSdMetalSdNone0TATACBlockGdTAGdALQ978Unf02841262GasAExYSBrkr1262001262012031TA6Typ1TAAttchd1976RFn2460TATAY29800000NANANA052007WDNormal181500
360RL6811250PaveNAIR1LvlAllPubInsideGtlCollgCrNormNorm1Fam2Story7520012002GableCompShgVinylSdVinylSdBrkFace162GdTAPConcGdTAMnGLQ486Unf0434920GasAExYSBrkr92086601786102131Gd6Typ1TAAttchd2001RFn2608TATAY0420000NANANA092008WDNormal223500
470RL609550PaveNAIR1LvlAllPubCornerGtlCrawforNormNorm1Fam2Story7519151970GableCompShgWd SdngWd ShngNone0TATABrkTilTAGdNoALQ216Unf0540756GasAGdYSBrkr96175601717101031Gd7Typ1GdDetchd1998Unf3642TATAY035272000NANANA022006WDAbnorml140000
560RL8414260PaveNAIR1LvlAllPubFR2GtlNoRidgeNormNorm1Fam2Story8520002000GableCompShgVinylSdVinylSdBrkFace350GdTAPConcGdTAAvGLQ655Unf04901145GasAExYSBrkr1145105302198102141Gd9Typ1TAAttchd2000RFn3836TATAY192840000NANANA0122008WDNormal250000
#对于MSZoning这种文字类别的特征,可以利用pandas的计数函数来观察一下
df['MSZoning'].value_counts()

在这里插入图片描述

2.缺失值处理

2.1首先利用seaborn的heatmap整体看一下数据缺失值的情况:

#可视化pandas自带的df.isnull()函数来直观看一下数据缺失值的情况
#yticklabels=False列标签不要,cbar=False不要color_bar
sns.heatmap(df.isnull(),yticklabels=False,cbar=False)

可视化效果如下,白色越多说明数据缺失值越多:
在这里插入图片描述

2.2 可视化只是为了直观感觉一下,还是需要详细看一下数据的信息

#看一下数据维度是多少,方便比对缺失情况
print(df.shape)
#查看数据的信息
df.info()

输出如下:
在这里插入图片描述
在这里插入图片描述
这里只截取了部分,可以看到训练数据是有1460条的,LotFrontage有1201个非空值,属于部分缺失,Alley这个数据只有91条非空值,属于严重缺失数据。有了这些信息,我们便可以进行处理了:

2.3 处理

1.对于严重缺失的数据,也没有必要去填充了,直接删除就好了

2.对于部分缺失的数据,如果是数值型,可以用平均值进行填充,如果是object类型,可以用众数进行填充

由于是刚上手,先简单填充一下,后续再根据预测结果进行适当调整

根据df.info()里面的信息,对缺失值进行如下处理:

#严重缺失的数据按照column进行丢弃
df.drop(['Alley'],axis=1,inplace=True)
df.drop(['GarageYrBlt'],axis=1,inplace=True)
df.drop(['PoolQC','Fence','MiscFeature'],axis=1,inplace=True)
#id也可以直接删掉,没什么用
df.drop(['Id'],axis=1,inplace=True)

#部分缺失值为数值型的用平均值填充
df['LotFrontage']=df['LotFrontage'].fillna(df['LotFrontage'].mean())

#部分缺失值为object类型的用数据中用较多的值进行填充
df['BsmtCond']=df['BsmtCond'].fillna(df['BsmtCond'].mode()[0])
df['BsmtQual']=df['BsmtQual'].fillna(df['BsmtQual'].mode()[0])
df['BsmtFinType2']=df['BsmtFinType2'].fillna(df['BsmtFinType2'].mode()[0])
df['BsmtExposure']=df['BsmtExposure'].fillna(df['BsmtExposure'].mode()[0])
df['BsmtFinType1']=df['BsmtFinType1'].fillna(df['BsmtFinType1'].mode()[0])
df['FireplaceQu']=df['FireplaceQu'].fillna(df['FireplaceQu'].mode()[0])
df['GarageType']=df['GarageType'].fillna(df['GarageType'].mode()[0])
df['GarageFinish']=df['GarageFinish'].fillna(df['GarageFinish'].mode()[0])
df['GarageQual']=df['GarageQual'].fillna(df['GarageQual'].mode()[0])
df['GarageCond']=df['GarageCond'].fillna(df['GarageCond'].mode()[0])
df['MasVnrType']=df['MasVnrType'].fillna(df['MasVnrType'].mode()[0])
df['MasVnrArea']=df['MasVnrArea'].fillna(df['MasVnrArea'].mode()[0])

处理完了,还是用heatmap可视化看一下是不是真的完成了,可以看到没有黑色的点,说明处理完成了
在这里插入图片描述

MSSubClassMSZoningLotFrontageLotAreaStreetLotShapeLandContourUtilitiesLotConfigLandSlopeEnclosedPorch3SsnPorchScreenPorchPoolAreaMiscValMoSoldYrSoldSaleTypeSaleConditionSalePrice
60RL65.08450PaveRegLvlAllPubInsideGtl0000022008WDNormal208500
20RL80.09600PaveRegLvlAllPubFR2Gtl0000052007WDNormal181500
60RL68.011250PaveIR1LvlAllPubInsideGtl0000092008WDNormal223500
70RL60.09550PaveIR1LvlAllPubCornerGtl272000022006WDAbnorml140000
60RL84.014260PaveIR1LvlAllPubFR2Gtl

数据处理完成了第一部分,如果觉得好请点个赞,支持我继续写下去!
后续也会发布github,大家一起学习交流。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值