數據挖掘實戰--二手車交易價格預測(二)數據探索性分析(EDA)

包的安裝:
採用Anaconda 3進行代碼的編譯,Anaconda 3裏基礎的數據分析包都已經準備好,我們需要安裝的就是sklearn,lightgbm和xgboost包。

Anaconda可以支持我們採取多種方式安裝所需要的包。可以採用pip,conda和從PYPI下載相關包等方式。這裏採用的是pip方式。

pip install scikit-learn
pip install lightgbm
pip install xgboost

因爲之前一直在進行Arcpy的開發工作,因此我電腦裏裝配的是Anaconda 2 32位,這在安裝lightgbm和xgboost的過程中遇到了錯誤。因此又安裝了Anaconda 3 64位版本。同隊的韓哥也遇到了報錯的問題,似乎是因爲pip的版本不夠新,需要升級後再安裝。

數據加載與查看

首先我們需要將已有的數據讀進內存裏,

import pandas as pd
import numpy as np
import warnings
#爲了防止沒有維護的包彈警告,可以在這裏過濾掉警告
warnings.filterwarnings('ignore')
#在Jupyter裏,可能會對過多的列進行隱藏, 如果想要查看全部的列,可以設置max_columns
pd.set_option('display.max_columns', None)

train_df = pd.read_csv('D:/DataMining/Train Data/used_car_train_20200313.csv', sep=' ')
print(train_df.shape)
train_df.describe()

train_df.head()

下一步來求一下空值數量,看看各個變量空值缺失的狀況,如果缺失多,可以考慮在構建特證的時候剔除。

train_df.isnull().sum().sort_values(ascending=False).head()

接下來看一下價格的分佈

import matplotlib.pyplot as plt
import seaborn as sns


plt.figure()
sns.distplot(train_df['price'])
plt.figure()
train_df['price'].plot.box()
plt.show()

可以看到明顯的正偏態
再將測試集讀進來,看一下測試集的狀態。

import gc


test_df = pd.read_csv('datalab/231784/used_car_testA_20200313.csv', sep=' ')
print(test_df.shape)
df = pd.concat([train_df, test_df], axis=0, ignore_index=True)
del train_df, test_df
gc.collect()
df.head()

在這裏插入圖片描述

我們接下來可以看一下非匿名的幾個可能會比較相關的數據的分佈。

plt.figure()
plt.figure(figsize=(16, 6))
i = 1
for f in date_cols:
    for col in ['year', 'month', 'day', 'dayofweek']:
        plt.subplot(2, 4, i)
        i += 1
        v = df[f + '_' + col].value_counts()
        fig = sns.barplot(x=v.index, y=v.values)
        for item in fig.get_xticklabels():
            item.set_rotation(90)
        plt.title(f + '_' + col)
plt.tight_layout()
plt.show()

特徵向量

對數據進行初步的處理和加工

移除只有單個因素的特徵

cate_cols.remove('seller')
cate_cols.remove('offerType')
date_cols = ['regDate_year', 'regDate_month', 'regDate_day', 'regDate_dayofweek', 'creatDate_month', 'creatDate_day', 'creatDate_dayofweek']

下一步想要查看一下各個特徵和price的相關性,以及特徵和特徵之間的關係。這個圖表可以幫助我們理解哪些特徵可以被選入特徵向量的的構建,還有降維時要去除哪些特徵。

corr1 = abs(df[~df['price'].isnull()][['price'] + date_cols + num_cols].corr())
plt.figure(figsize=(10, 10))
sns.heatmap(corr1, linewidths=0.1, cmap=sns.cm.rocket_r)

在這裏插入圖片描述
跟price相關性高的是regDate_year、kilometer;匿名特徵中的v_0、v_3、v_8、v_12與price相關性很高。有些特徵跟特徵之間的相關性也很高,比如v_1跟v_6、v_2跟v_7、v_3跟v_8、v_4跟v_9等,這些特徵之間可能存在冗餘現象,訓練的時候可以依據效果嘗試去掉一部分。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章