在拿到一份數據准備做挖掘建模之前,首先需要進行初步的數據探索性分析(你願意花十分鍾系統了解數據分析方法嗎?),對數據探索性分析之后要先進行一系列的數據預處理步驟。因為拿到的原始數據存在不完整、不一致、有異常的數據,而這些“錯誤”數據會嚴重影響到數據挖掘建模的執行效率甚至導致挖掘結果出現偏差,因此首先要數據清洗。數據清洗完成之后接着進行或者同時進行數據集成、轉換、歸一化等一系列處理,該過程就是數據預處理。一方面是提高數據的質量,另一方面可以讓數據更好的適應特定的挖掘模型,在實際工作中該部分的內容可能會占整個工作的70%甚至更多。
1. 缺失值處理
由於人員錄入數據過程中或者存儲器損壞等原因,缺失值在一份數據中或多或少存在,所以首先就需要對缺失值進行處理,缺失值處理總的原則是:使用最可能的值代替缺失值,使缺失值與其他數值之間的關系保持最大。具體的常用方法如下:
- 刪除缺失值(缺失值占比很小的情況)
- 人工填充 (數據集小,缺失值少)
- 用全局變量填充(將缺失值填充一常數如“null”)
- 使用樣本數據的均值或中位數填充
- 用插值法(如拉格朗日法、牛頓法)
Python缺失值處理實例代碼:
a、判斷刪除缺失值- -isnull,notnull
- 判斷缺失值可以用來計算缺失值占比整個數據的大小,如果占比很小可以刪除缺失值。
b、填充替換缺失值--fillna
- 如果缺失值不可以占比很多,就不能能夠輕易的刪除缺失值,可以用上述的插值方法填充缺失值。
c、核心代碼和結果圖:
2. 異常值處理
異常值是數據集中偏離大部分數據的數據。從數據值上表現為:數據集中與平均值的偏差超過兩倍標准差的數據,其中與平均值的偏差超過三倍標准差的數據(3σ原則),稱為高度異常的異常值。
- 異常值分析方法
- 3σ原則 (數據分布為正態分布)
- 箱型圖分析(內限or外限)。
常用處理方法如下:
- 直接刪除 (異常值占比小)
- 暫且保留,待結合整體模型綜合分析
- 利用現有樣本信息的統計量填充(均值等)
Python異常值處理實例代碼:
- 檢驗是否符合正態分布,符合用3σ原則判斷並處理,核心代碼結果如下:
2. 當不符合正態分布時可用箱型圖分析處理,核心結果代碼如下:
3. 數據標准化處理
數據的標准化(normalization)是將數據按比例縮放,使之落入一個小的特定區間。在某些比較和評價的指標處理中經常會用到,去除數據的單位限制,將其轉化為無量綱的純數值,便於不同單位或量級的指標能夠進行比較和加權,最典型的就是數據歸一化處理就是將數據統一映射到[0,1]區間上 。
常用數據標准化方法:
- MIN- MAX標准化(x - x_min)/(x_max-x_min)
- z-score標准化(x-x_mean)/x_std
- 小數定標標准化
- 向量歸一化
- 線性比例變換法
- 平均值法
- 指數轉換法
歸一化的目的:
- 使得預處理的數據被限定在一定的范圍
- 消除奇異樣本數據導致的不良影響
在大佬Ng的視頻課中聽過一句話,歸一化會加快梯度下降的求解速度。
應用場景說明:
- SVM、線性回歸之類的最優化問題需要歸一化,是否歸一化主要在於是否關心變量取值;
- 神經網絡需要標准化處理,一般變量的取值在-1到1之間,這樣做是為了弱化某些變量的值較大而對模型產生影響。一般神經網絡中的隱藏層采用tanh激活函數比sigmod激活函數要好些,因為tanh雙曲正切函數的取值[-1,1]之間,均值為0;
- 在K近鄰算法中,如果不對解釋變量進行標准化,那么具有小數量級的解釋變量的影響就會微乎其微。
注意:沒有一種數據標准化的方法,放在每一個問題,放在每一個模型,都能提高算法精度和加快算法的收斂速度。所以對於不同的問題可能會有不同的歸一化方法。在分類、聚類算法中,需要使用距離來度量相似性的時候、或者使用PCA技術進行降維的時候,Z-score standardization表現更好。
4. 數據連續屬性離散化
一些數據挖掘算法,特別是分類算法,要求數據是分類屬性形式。常常需要將連續屬性變換成分類屬性,即連續屬性離散化。 常用的離散化方法:
- 等寬法:將屬性值域分成具有相同寬度的區間,區間的個數由數據本身的特點決定,或者由用戶指定,類似於制作頻率分布表。
- 等頻法:將相同數量的記錄放進每個區間。
- 基於聚類分析的方法。 通過分箱離散化、通過直方圖分析離散化、通過聚類、決策樹和相關分析離散化、標稱數據的概念分層產生
5. 總結
本文是筆者在學習數據分析過程中記錄下來的一些通用的數據預處理步驟,並且用Numpy、Pandas、Matplotlib等實現了每一種處理方法並可視化了處理結果。
轉載:http://bigdata.51cto.com/art/201901/591222.htm