数据集的探索(EDA)
主要使用工具:pandas, numpy, matplotlib, seaborn, missingno
总体流程
第一步:数据的导入
train_data=pd.read_csv('D:/天池数据集/二手车/used_car_train_20200313.csv',engine='python',sep=' ')
test_data=pd.read_csv('D:/天池数据集/二手车/used_car_testA_20200313.csv',engine='python',sep=' ')
train_data.head()
第二步:查看数据的基本信息
train_data.describe()
train_data.info()
print(train_data.shape)
print(test_data.shape)
###对缺失值进行操作
查看训练数据集每个column的缺失值总数
train_data.isnull().sum()
查看测试数据集每个column的缺失值总数
test_data.isnull().sum()
查看训练和测试数据集缺失值的情况
missing=train_data.isnull().sum()
missing=missing[missing>0]
missing.sort_values(inplace=True)
missing.plot.bar()
msno.matrix(train_data)
msno.matrix(test_data)
由于只有notRepairedDamage这一列是object型,所以单独先对这个column的值进行填充
首先查看这一列的缺失值情况
train_data['notRepairedDamage'].value_counts()
再用NAN代替缺失值并查看现在缺失值情况
train_data['notRepairedDamage'].replace('-',np.nan,inplace=True)
train_data['notRepairedDamage'].value_counts()
对test_data进行相同上述操作,这里就不赘述了。
对无关的columns进行处理
由于seller列和offerType列属性严重倾斜,所以进行删除
del train_data["seller"]
del train_data["offerType"]
del test_data["seller"]
del test_data["offerType"]
##查看price列的分布情况
price.value_counts()
再查看price和哪个分布最吻合
import scipy.stats as st
y = train_data['price']
plt.figure(1); plt.title('Johnson SU')
sns.distplot(y, kde=False, fit=st.johnsonsu)
plt.figure(2); plt.title('Normal')
sns.distplot(y, kde=False, fit=st.norm)
plt.figure(3); plt.title('Log Normal')
sns.distplot(y, kde=False, fit=st.lognorm)
seaborn中的distplot主要功能是绘制单变量的直方图,且还可以在直方图的基础上施加kdeplot和rugplot的部分内容,是一个功能非常强大且实用的函数,其主要参数如下:
a:一维数组形式,传入待分析的单个变量
bins:int型变量,用于确定直方图中显示直方的数量,默认为None,这时bins的具体个数由Freedman-Diaconis准则来确定
hist:bool型变量,控制是否绘制直方图,默认为True
kde:bool型变量,控制是否绘制核密度估计曲线,默认为True
rug:bool型变量,控制是否绘制对应rugplot的部分,默认为False
fit:传入scipy.stats中的分布类型,用于在观察变量上抽取相关统计特征来强行拟合指定的分布,默认为None,即不进行拟合
hist_kws,kde_kws,rug_kws:这几个变量都接受字典形式的输入,键值对分别对应各自原生函数中的参数名称与参数值,在下文中会有示例
color:用于控制除了fit部分拟合出的曲线之外的所有对象的色彩
vertical:bool型,控制是否颠倒x-y轴,默认为False,即不颠倒
norm_hist:bool型变量,用于控制直方图高度代表的意义,为True直方图高度表示对应的密度,为False时代表的是对应的直方区间内记录值个数,默认为False
label:控制图像中的图例标签显示内容
图中的Johnson SU为约翰逊分布,是一种经过约翰变换后服从正态分布概率的随机变量的概率分布;normal为正态分布;lognormal为对数正态分布,对数正态分布从短期来看,与正态分布非常接近。但长期来看,对数正态分布向上分布的数值更多一些。
通过结果我们可以看到,无界约翰逊分布对price的分布情况拟合最好。
再对预测值进行峰度于偏度进行分析
sns.distplot(train