1. 删除异常值
首先是异常值,我们已经发现在房屋面积和地下室面积这两个特征里面可能存在异常值,可以把它们删掉。
#删除掉异常值
train = train.drop(train[(train['GrLivArea']>4000) & (train['SalePrice']<300000)].index)
##对异常值进行删除重新画图,可以看到异常值没有了,在这里我们只看了一个变量,有兴趣的同学也可以看一下其他的变量异常值的分布情况。
fig, ax = plt.subplots()
ax.scatter(train['GrLivArea'], train['SalePrice'])
plt.ylabel('SalePrice', fontsize=13)
plt.xlabel('GrLivArea', fontsize=13)
plt.show()
#对于地下室面积,做同样处理
train = train.drop(train[(train['TotalBsmtSF']>5000) & (train['SalePrice']<200000)].index)
fig, ax = plt.subplots()
ax.scatter(train['TotalBsmtSF'], train['SalePrice'])
plt.ylabel('SalePrice', fontsize=13)
plt.xlabel('TotalBsmtSF', fontsize=13)
plt.show()
2.缺失值处理
#再来看一下异常值的分布情况
#isnull()返回的是布尔值
#isnull().sum()直接求得是每一列缺失值的数量,返回的是一个列表
all_data_na = (all_data.isnull().sum() / len(all_data)) * 100
#删除缺失值为0的行,将剩下的特征按缺失率升序的顺序排序
all_data_na = all_data_na.drop(all_data_na[all_data_na == 0].index).sort_values(ascending=False)[:30]
missing_data = pd.DataFrame({
'Missing Ratio' :all_data_na})
missing_data.head(50)