2021-06-10

通过特征可视化来进行特征预处理

本文章的数据来源于和鲸社区的预测分析·民宿价格预测的新手赛

  1. 首先导入一些我们可能会用到的库
import matplotlib.pyplot as plt
import matplotlib
import numpy as np
import pandas as pd
import seaborn as sns
  1. 然后我们再导入我们接下来会用到的数据
train = pd.read_csv('E:\BaiduNetdiskDownload\训练集.csv')
test = pd.read_csv('E:\BaiduNetdiskDownload\测试集.csv')
  1. 查看数据集缺失值
train.shape[0]-train.count()

2021-06-10_第1张图片
4. 查看一下数据的类型

train.dtypes

2021-06-10_第2张图片
5. 通过按照数据的类型填补数据的缺失值
因为我的个人习惯,我一般喜欢将数值类型的数据的缺失值填补为中位数,因为我当初听别人说一个数据中的数据并不一定都是正确的,有可能一个特征数据的平均值可能会因为一些非正确的数据而变得很小或者很大,所以我喜欢中位数填充
而object类型的数据的缺失值我一般喜欢用na来填充

df_features['洗手间数量'].fillna(df_features['洗手间数量'].median(), inplace=True)
df_features['床的数量'].fillna(df_features['床的数量'].median(), inplace=True)
df_features['卧室数量'].fillna(df_features['卧室数量'].median(), inplace=True)
df_features['房主是否有个人资料图片'].fillna('na', inplace=True)
df_features['房主身份是否验证'].fillna('na', inplace=True)
df_features['房主回复率'].fillna(-1, inplace=True)
df_features['房主回复率'] = df_features['房主回复率'].astype(str).apply(lambda x: x.replace('%', ''))
df_features['房主回复率'] = df_features['房主回复率'].astype(int)
df_features['民宿周边'].fillna('na', inplace=True)
df_features['民宿评分'].fillna(df_features['民宿评分'].median(), inplace=True)
df_features['邮编'].fillna('na', inplace=True)
  1. 先来看看所有特征和价格之间的相关性
columns = [col for col in df_features.columns]

data_heat=df_features[columns]
print(data_heat.corr().loc[:,['价格']])

这里可以看出容纳人数,洗手间数量,床的类型,卧室数量,房型和价格的相关性都还不错
2021-06-10_第3张图片

  1. 再来画出与标签的影响较大的特征的散点图:
    先看看卧室数量与价格关系的离散图
# 这两行是为了防止画出的图的标签乱码
matplotlib.rcParams['font.family'] = 'KaiTi'
matplotlib.rcParams['font.sans-serif'] = ['KaiTi']

fig, ax = plt.subplots()
ax.scatter(train['卧室数量'], train['价格'])
plt.ylabel('价格', fontsize = 13)
plt.xlabel('卧室数量', fontsize = 13)
plt.show()

2021-06-10_第4张图片
这里很明显可以看到在卧室数量为1的时候有一个价格为零的点,这个点应该是一个有问题的数据,可以直接删除

# 删除上面所说的那个有问题的数据
train = train.drop(train[(train['价格'] == 0)].index)

再来看看民宿评分与价格关系的离散图

matplotlib.rcParams['font.family'] = 'KaiTi'
matplotlib.rcParams['font.sans-serif'] = ['KaiTi']

fig, ax = plt.subplots()
ax.scatter(train['民宿评分'], train['价格'])
plt.ylabel('价格', fontsize = 13)
plt.xlabel('名宿评分', fontsize = 13)
plt.show()

2021-06-10_第5张图片
这里可以看到当民宿评分为100分时,房屋的价格却只有20,这应该也是个有问题的点,所以应该也要删除掉

# 删除上面所说的那个有问题的数据
train = train.drop(train[(train['民宿评分'] > 85) & (train['价格'] <= 35)].index)
  1. 我们再来看看删除了上面那个数据之后的图像

首先来看看卧室数量与价格关系的离散图
2021-06-10_第6张图片
再来看看民宿评分与价格关系的离散图
2021-06-10_第7张图片

这是我第一次写博客,可能有些地方写的不好,有点问题,希望发现了错误的朋友们可以和我说一下
如果有兴趣一起打比赛和研究比赛的可以一起加个好友噢
我的qq号:2439881194

最后我想给各位推荐一个博客是关于这个和鲸社区的预测分析·民宿价格预测的新手赛的baseline,我觉得写得很好,我也是模仿了这位学长的代码的
链接: link.

你可能感兴趣的:(数据可视化)