Python數據預處理

在拿到一份數據準備做挖掘建模之前,首先需要進行初步的數據探索性分析,對數據探索性分析之後要先進行一系列的數據預處理步驟。

因爲拿到的原始數據存在不完整、不一致、有異常的數據,而這些「錯誤」數據會嚴重影響到數據挖掘建模的執行效率甚至導致挖掘結果出現偏差,因此首先要數據清洗。

數據清洗完成之後接着進行或者同時進行數據集成、轉換、歸一化等一系列處理,該過程就是數據預處理。一方面是提高數據的質量,另一方面可以讓數據更好的適應特定的挖掘模型,在實際工作中該部分的內容可能會佔整個工作的70%甚至更多。

01

  缺失值處理

由於人員錄入數據過程中或者存儲器損壞等原因,缺失值在一份數據中或多或少存在,所以首先就需要對缺失值進行處理,缺失值處理總的原則是:使用最可能的值代替缺失值,使缺失值與其他數值之間的關係保持最大。具體的常用方法如下:

  1. 刪除缺失值(缺失值佔比很小的情況)

  2. 人工填充 (數據集小,缺失值少)

  3. 用全局變量填充(將缺失值填充一常數如「null」)

  4. 使用樣本數據的均值或中位數填充

  5. 用插值法(如拉格朗日法、牛頓法)

Python缺失值處理實例代碼

  1. 判斷刪除缺失值- -isnull,notnull

    判斷缺失值可以用來計算缺失值佔比整個數據的大小,如果佔比很小可以刪除缺失值。

  2. 填充替換缺失值--fillna

    如果缺失值不可以佔比很多,就不能能夠輕易的刪除缺失值,可以用上述的插值方法填充缺失值。

  3. 核心代碼和結果圖

02

  異常值處理

異常值是數據集中偏離大部分數據的數據。從數據值上表現爲:數據集中與平均值的偏差超過兩倍標準差的數據,其中與平均值的偏差超過三倍標準差的數據(3σ原則),稱爲高度異常的異常值。

異常值分析方法

  1. 3σ原則 (數據分佈爲正態分佈)

  2. 箱型圖分析(內限or外限)。

常用處理方法如下:

  • 直接刪除  (異常值佔比小)

  • 暫且保留,待結合整體模型綜合分析

  • 利用現有樣本信息的統計量填充(均值等)

Python異常值處理實例代碼

  1. 檢驗是否符合正態分佈,符合用3σ原則判斷並處理,核心代碼結果如下:

     2. 當不符合正態分佈時可用箱型圖分析處理,核心結果代碼如下:

03

 數據標準化處理

數據的標準化(normalization)是將數據按比例縮放,使之落入一個小的特定區間。在某些比較和評價的指標處理中經常會用到,去除數據的單位限制,將其轉化爲無量綱的純數值,便於不同單位或量級的指標能夠進行比較和加權,最典型的就是數據歸一化處理就是將數據統一映射到[0,1]區間上 。

常用數據標準化方法:

  • MIN- MAX標準化(x - x_min)/(x_max-x_min)

  • z-score標準化(x-x_mean)/x_std

  • 小數定標標準化

  • 向量歸一化

  • 線性比例變換法

  • 平均值法

  • 指數轉換法

歸一化的目的

  1. 使得預處理的數據被限定在一定的範圍

  2. 消除奇異樣本數據導致的不良影響

在大佬Ng的視頻課中聽過一句話,歸一化會加快梯度下降的求解速度。

應用場景說明

  1. SVM、線性迴歸之類的最優化問題需要歸一化,是否歸一化主要在於是否關心變量取值;

  2. 神經網絡需要標準化處理,一般變量的取值在-1到1之間,這樣做是爲了弱化某些變量的值較大而對模型產生影響。一般神經網絡中的隱藏層採用tanh**函數比sigmod**函數要好些,因爲tanh雙曲正切函數的取值[-1,1]之間,均值爲0;

  3. 在K近鄰算法中,如果不對解釋變量進行標準化,那麼具有小數量級的解釋變量的影響就會微乎其微。

注意:沒有一種數據標準化的方法,放在每一個問題,放在每一個模型,都能提高算法精度和加快算法的收斂速度。所以對於不同的問題可能會有不同的歸一化方法。在分類、聚類算法中,需要使用距離來度量相似性的時候、或者使用PCA技術進行降維的時候,Z-score standardization表現更好。

04

 數據連續屬性離散化

一些數據挖掘算法,特別是分類算法,要求數據是分類屬性形式。常常需要將連續屬性變換成分類屬性,即連續屬性離散化。 常用的離散化方法:

  1. 等寬法:將屬性值域分成具有相同寬度的區間,區間的個數由數據本身的特點決定,或者由用戶指定,類似於製作頻率分佈表。 

  2.  等頻法:將相同數量的記錄放進每個區間。 

  3. 基於聚類分析的方法。 通過分箱離散化、通過直方圖分析離散化、通過聚類、決策樹和相關分析離散化、標稱數據的概念分層產生。

05

總結

本文來源於公衆號:「數據分析成長手冊」 。筆者在學習數據分析過程中記錄下來的一些通用的數據預處理步驟,並且用Numpy、Pandas、Matplotlib等實現了每一種處理方法並可視化了處理結果。

Python資源推薦(公衆號後臺回覆:1024 獲取資源

   推薦閱讀

免費贈送10套最新的編程視頻

Python 開發這些牛逼的 App

說說你爲什麼沒別人厲害?

你我共同遵守的一個社交規則

點贊變好看,記得點個好看