EDA二手车数据分析
2.2 内容介绍
-
载入各种数据科学以及可视化库:
数据科学库 pandas、numpy、scipy; 可视化库 matplotlib、seabon; 其他;
-
载入数据: 载入训练集和测试集; 简略观察数据(head()+shape);
-
数据总览:
通过describe()来熟悉数据的相关统计量;通过info()来熟悉数据类型 -
判断数据缺失和异常;查看每列的存在nan情况;异常值检测
-
了解预测值的分布: 总体分布概况(*约翰逊分布等) 查看skewness and kurtosis 查看预测值的具体频数
-
特征分为类别特征和数字特征,并对类别特征查看unique分布
-
数字特征分析
相关性分析;查看几个特征得 ;偏度和峰值 ;每个数字特征得分布可视化 ;数字特征相互之间的关系可视化 ;多变量互相回归关系可视化 -
类型特征分析 unique分布 类别特征箱形图可视化 类别特征的小提琴图可视化 类别特征的柱形图可视化类别 特征的每个类别频数可视化(count_plot)
-
用pandas_profiling生成数据报告
2.3## 代码示例
2.3.1载入库
import pandas as pd
import numpy as np
import warnings
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.special import jn
from IPython.display import display,clear_output
import time
2.3.2载入数据
##载入训练集和测试集
Train_data = pd.read_csv('/Users/tututu/Desktop/shujujingsai/used_car_train_20200313.csv',sep=' ')
TestA_data = pd.read_csv('/Users/tututu/Desktop/shujujingsai/used_car_testA_20200313.csv',sep=' ')
print('Train data shape:',Train_data.shape)
print('TestA data shape:',Test_data.shape)
2.3.3数据信息查看
##通过.info()可以看到对应的数据列名,以及NAN缺失信息
Train_data.info()
##通过.columns查看列名
Train_data.columns
2.3.4数据统计信息浏览
##通过.describe()可以查看数值特征列的一些统计信息
Train_data.describe()
2.3.5了解预测值的分布
Train_data["price"]
0 1850
1 3600
2 6222
3 2400
4 5200
…
149995 5900
149996 9500
149997 7500
149998 4999
149999 4700
Name: price, Length: 150000, dtype: int64
##总体分布概况(*约翰逊分布等)
import scipy.stats as st
y = Train_data["price"]
plt.figure(1);plt.title("Jojnson SU")
sns.distplot(y,kde=False,fit=st.johnsonsu)
plt.figure(2);plt.title('Nomal')
sns.distplot(y,kde = False,fit =st.norm)
plt.figure(3); plt.title('Log Normal')
sns.distplot(y, kde=False , fit=st.lognorm)
plt.hist(Train_data['price'],orientation='vertical',histtype='bar',color='red')
plt.show()
价格分布结果是:
对价格进行对数处理基本符合正态分布
plt.hist(np.log(Train_data['price']),orientation='vertical',histtype='bar',color='red')
plt.show()
2.3.6对价格与其他类别进行相关性分析
Y_train=Train_data['price']
numerical_features = ['power','kilometer', 'v_0', 'v_1', 'v_2', 'v_3', 'v_4', 'v_5', 'v_6', 'v_7', 'v_8', 'v_9', 'v_10', 'v_11', 'v_12', 'v_13', 'v_14']
categorical_features =['name', 'model', 'brand', 'bodyType', 'fuelType', 'gearbox', 'notRepairedDamage','regionCode','creatDate']
numerical_features.append('price')
#相关性分析
price_numeric=Train_data[numerical_features]
correlation= price_numeric.corr()
print(correlation['price'].sort_values(ascending=False),'\n')
price 1.000000
v_12 0.692823
v_8 0.685798
v_0 0.628397
power 0.219834
v_5 0.164317
v_2 0.085322
v_6 0.068970
v_1 0.060914
v_14 0.035911
v_13 -0.013993
v_7 -0.053024
v_4 -0.147085
v_9 -0.206205
v_10 -0.246175
v_11 -0.275320
kilometer -0.440519
v_3 -0.730946
Name: price, dtype: float64
进行画图分析:
f,ax = plt.subplots(figsize =(8,8))
plt.title('Correlation of Numeric Featyres with Price',y = 1,size=16)
sns.heatmap(correlation,square=True,vmax=0.8)