阿里天池二手车交易价格预测(一)——EDA
Exploratory Data Analysis是数据科学领取理解和分析数据的方法,通过不断的收集、分析和假设验证,以取得对数据的深入理解。
- EDA的价值主要在于熟悉数据集,了解数据集,对数据集进行验证来确定所获得数据集可以用于接下来的机器学习或者深度学习使用。
- 当了解了数据集之后我们下一步就是要去了解变量间的相互关系以及变量与预测值之间的存在关系。
- 引导数据科学从业者进行数据处理以及特征工程的步骤,使数据集的结构和特征集让接下来的预测问题更加可靠。
- 完成对于数据的探索性分析,并对于数据进行一些图表或者文字总结。
Data Set : used_car 链接: https://tianchi.aliyun.com/competition/entrance/231784/information
用到以下库
import pandas as pd
import seaborn as sns
import warnings
import missingno as msno
import numpy as np
warnings.filterwarnings('ignore')
读取给定的数据并查看数据量
df_train = pd.read_csv('/Users/apple/Desktop/天池/UsedCarTransactionPriceForecast/used_car_train_20200313.csv',
sep=' ')
print("df_train.shape:",df_train.shape)
df_test = pd.read_csv('/Users/apple/Desktop/天池/UsedCarTransactionPriceForecast/used_car_testB_20200421.csv',
sep=' ')
print("df_test.shape:",df_test.shape)
![在这里插入图片描述](https://img-blog.csdnimg.cn/e201e3d86db24421837f1a88e843c365.png) 查看数据
print(df_train.head())
print(df_test.head())
![在这里插入图片描述](https://img-blog.csdnimg.cn/b4cb702f07ee4032a78d42a98370545f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5LiA5Z-O5bGx5rC0,size_20,color_FFFFFF,t_70,g_se,x_16) 使用describe() 可以查看关于count、mean、std等等 ,df_test类同,不再述复
df_train.describe()
![在这里插入图片描述](https://img-blog.csdnimg.cn/fd7d98f73a2f44f6b89f04f659fbccb7.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5LiA5Z-O5bGx5rC0,size_20,color_FFFFFF,t_70,g_se,x_16) 查看数据类型 ![在这里插入图片描述](https://img-blog.csdnimg.cn/afd93e679a6241e8b932ff55ced9659d.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5LiA5Z-O5bGx5rC0,size_20,color_FFFFFF,t_70,g_se,x_16)
查看训练集和测试集 数据类型为 object
for col in df_train.columns:
if df_train[col].dtype == "object":
print(col)
for col in df_test.columns:
if df_test[col].dtype == "object":
print(col)
![在这里插入图片描述](https://img-blog.csdnimg.cn/b17090a2f35340f9aab0e46afa6342ed.png)
统计训练集和测试集的缺失值
print(df_train.isnull().sum())
print(df_test.isnull().sum())
![在这里插入图片描述](https://img-blog.csdnimg.cn/e9763a35f6d047fab7eb33ec4580563b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5LiA5Z-O5bGx5rC0,size_20,color_FFFFFF,t_70,g_se,x_16) 可视化缺失值,只展示训练集的缺失值可视化,测试集一样
train_nan_sum = df_train.isnull().sum()
train_nan_sum = train_nan_sum[train_nan_sum>0]
train_bar_data = pd.DataFrame({'type':train_nan_sum.index.tolist(),'values':train_nan_sum.values.tolist()})
print(train_bar_data)
train_nan_abr = sns.barplot(x='type',y='values',data=train_bar_data)
![在这里插入图片描述](https://img-blog.csdnimg.cn/b90b45fa430741c6a345971f56d491d5.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5LiA5Z-O5bGx5rC0,size_20,color_FFFFFF,t_70,g_se,x_16) 也可以用 missingno 的 matrix 来更好的看数据的缺失情况
msno.matrix(df_train)
![在这里插入图片描述](https://img-blog.csdnimg.cn/337a402e00bc4e90922168ed74acf9ad.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5LiA5Z-O5bGx5rC0,size_20,color_FFFFFF,t_70,g_se,x_16) 或者使用seaborn中过的heatmap 来观察缺失值
sns.heatmap(df_train.isnull(),cbar=False,cmap='viridis')
![在这里插入图片描述](https://img-blog.csdnimg.cn/096701949a7a43fab02228dc38473904.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5LiA5Z-O5bGx5rC0,size_20,color_FFFFFF,t_70,g_se,x_16)
也可以用条形图 ![在这里插入图片描述](https://img-blog.csdnimg.cn/3c8b61f13b4b4e499e36aef25440a739.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5LiA5Z-O5bGx5rC0,size_20,color_FFFFFF,t_70,g_se,x_16) 了解预测值的分布情况 ![在这里插入图片描述](https://img-blog.csdnimg.cn/f61716eb243a4a378f6b5b82f4269945.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5LiA5Z-O5bGx5rC0,size_20,color_FFFFFF,t_70,g_se,x_16) 拟合预测值情况
import scipy.stats as st
import matplotlib.pyplot as plt
plt.figure(1); plt.title('Johnson SU')
sns.distplot(df_train['price'], kde=False, fit=st.johnsonsu)
plt.figure(2); plt.title('norm')
sns.distplot(df_train['price'], kde=False, fit=st.norm)
plt.figure(3); plt.title('lognorm')
sns.distplot(df_train['price'], kde=False, fit=st.lognorm)
![在这里插入图片描述](https://img-blog.csdnimg.cn/99b9ea21f0254d198664e6a2fb22c1e8.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5LiA5Z-O5bGx5rC0,size_20,color_FFFFFF,t_70,g_se,x_16) ![在这里插入图片描述](https://img-blog.csdnimg.cn/c6236408dfdb40189b513c018c825c8d.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5LiA5Z-O5bGx5rC0,size_20,color_FFFFFF,t_70,g_se,x_16) ![在这里插入图片描述](https://img-blog.csdnimg.cn/2a4cb79c645d44a48a176572261a298b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5LiA5Z-O5bGx5rC0,size_20,color_FFFFFF,t_70,g_se,x_16) 从上面分析可知,预测值分布最接近无界约翰逊分布 查看 偏度 和 峰度
sns.distplot(df_train['price']);
print("Skewness: %f" % df_train['price'].skew())
print("Kurtosis: %f" % df_train['price'].kurt())
![在这里插入图片描述](https://img-blog.csdnimg.cn/4f949920945d43418bb8fbddc8c32e6a.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5LiA5Z-O5bGx5rC0,size_20,color_FFFFFF,t_70,g_se,x_16) 进行Log转换后的预测值可视化对比
fig,(ax1,ax2) = plt.subplots(2,1,figsize=(12,8))
df_train['price'].plot(kind='hist',bins=100,title='train_hist',ax=ax1)
df_train['price'].apply(np.log).plot(kind='hist',bins=100,title='Log_train_hist',ax=ax2)
![在这里插入图片描述](https://img-blog.csdnimg.cn/5f8bd1832b0146ba8bc5b1bf2a6d4da6.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5LiA5Z-O5bGx5rC0,size_20,color_FFFFFF,t_70,g_se,x_16)
|