二手车价格预测-EDA数据探索(一)

1、EDA之总览数据

## 基础工具
import numpy as np
import pandas as pd
import warnings
import matplotlib
import matplotlib.pyplot as plt
import seaborn as snsfrom scipy.special 
import jnfrom IPython.display 
import display, clear_output
import timeimport seaborn as snsimport missingno as msno
warnings.filterwarnings('ignore')%matplotlib inline
## 模型预测的
from sklearn import linear_model
from sklearn import preprocessing
from sklearn.svm import SVRfrom sklearn.ensemble 
import RandomForestRegressor,GradientBoostingRegressor
## 数据降维处理的
from sklearn.decomposition import PCA,FastICA,FactorAnalysis,SparsePCA
import lightgbm as lgbimport xgboost as xgb
## 参数搜索和评价的from sklearn.model_selection import GridSearchCV,cross_val_score,StratifiedKFold,train_test_splitfrom sklearn.metrics import mean_squared_error, mean_absolute_error
# 通过Pandas对于数据进行读取 (pandas是一个很友好的数据读取函数库)
Train_data = pd.read_csv("used-car-competition/used_car_train_20200313.csv", sep=" ")
TestA_data = pd.read_csv("used-car-competition/used_car_testA_20200313.csv", sep=" ")
Y_train = Train_data['price']
## 输出数据的大小信息
print('Train data shape:',Train_data.shape)
print('TestA data shape:',TestA_data.shape)

在这里插入图片描述


Train_data.info()

2、查看缺省值

# 查看缺省值
Train_data.isnull().sum()

在这里插入图片描述我们发现bodyType,fuelType,gearbox存在大量缺省值。
对其使用直方图进行统计:

# nan可视化
missing = Train_data.isnull().sum()
missing = missing[missing > 0]
missing.sort_values(inplace=True)
missing.plot.bar()

在这里插入图片描述

可视化看下缺省值

# sample随机抽取
msno.matrix(Train_data.sample(250))

在这里插入图片描述
查看存在缺省值的记录

Train_data[Train_data.isnull().values==True]

在这里插入图片描述存在19168行数据有缺省值。

# 查看缺失比例
msno.bar(Train_data.sample(1000))

在这里插入图片描述

3、查看属性值,是否存在异常值

3.1、对traindata和testdata进行相同的分析

all_columns = Train_data.columns
for i in all_columns:  
	print("{}的值分布情况:".format(i))  
	print(Train_data[i].value_counts())

打印出所有特征的值情况。之后选取出特殊的值进行打印。
以下两个类别特征严重倾斜,一般不会对预测有什么帮助,故这边先删掉,当然你也可以继续挖掘,但是一般意义不大
在这里插入图片描述
在这里插入图片描述

Train_data['notRepairedDamage'].value_counts()

在这里插入图片描述
可以看出来‘ - ’也为空缺值,因为很多模型对nan有直接的处理,可以将nan作为一个新的类。这里我们先不做处理,先替换成nan。

# 查看处理后的值
Train_data['notRepairedDamage'].replace('-', np.nan, inplace=True)
Train_data['notRepairedDamage'].value_counts()

在这里插入图片描述

3.2、选取处理方法

根据对数据的统计分析,我们去除没有实际意义和无数学意义的列。

del Train_data["seller"]
del Train_data["offerType"]
del Test_data["seller"]
del Test_data["offerType"]

4、 对label值进行分析

Train_data['price'].value_counts()

在这里插入图片描述

4.1、研究label的分布


#总体分布概况(无界约翰逊分布等)
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)

在这里插入图片描述
由上图可得:价格不服从正态分布,所以在进行回归之前,它必须进行转换。虽然对数变换做得很好,但最佳拟合是无界约翰逊分布.

关于上述displot函数的详细使用

## 3) 查看预测值的具体频数
plt.hist(Train_data['price'], orientation = 'vertical',histtype = 'bar', color ='red')
plt.show()

在这里插入图片描述

# log变换 z之后的分布较均匀,可以进行log变换进行预测,这也是预测问题常用的
trickplt.hist(np.log(Train_data['price']), orientation = 'vertical',histtype = 'bar', color ='red') 
plt.show()

在这里插入图片描述

4.2、与正态分布进行比较偏度和峰度的比较

## 2) 查看skewness and kurtosis
sns.distplot(Train_data['price']);
print("Skewness: %f" % Train_data['price'].skew())
print("Kurtosis: %f" % Train_data['price'].kurt())

在这里插入图片描述

sns.distplot(Train_data.skew(),color='blue',axlabel ='Skewness')

在这里插入图片描述

plot(Train_data.kurt(),color='orange',axlabel ='Kurtness')

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值