承襲筆者前陣子寫的文章,Kaggle資料科學學習歷程(二),筆者接著介紹如何利用Python進行初步的數據清洗。我們一般拿到一個資料,當初步了解資料的內容,以及挑出可能用於之後分析的變項後,我們一般會遇到資料可能有遺漏以及資料有極端值的情況,雖然不處理這些情況下,跑統計分析的時候可能跑得出來,但跑出來的結果也許會受到這兩項因素的影響,導致出現錯誤的結果,因此筆者將針對常見的處理方式以及如何利用Python來去處理做介紹。
1.Missing values treatment (遺漏值處理)
遺漏值的種類 |
說明 |
完全隨機遺漏(missing completely at random, MCAR) |
假設一個特殊變數Y有缺失數據。如果Y缺失數據的機率與Y本身的值或在該數據組中任何其他變數的值都無關 Ex: 大學學歷與研究所學歷的人,在某一題問卷的資料缺失的機率是一樣的,也就是說剩下的人能代表所有的樣本 |
隨機遺漏(missing at random, MAR) |
在分析中控制了其他變數後,Y缺失數據的機率與Y值無關 Ex: 高學歷的人,比較不願意回答目前的就業狀況,當你控制這些變數,缺失資料的情況就成為隨機的 |
非隨機遺漏(Not missing at random, NMAR) |
不符合MCAR or MAR的遺漏,代表研究者必須了解為何遺漏以及做相應的處理 |
檢驗遺漏值的方式
- 直接刪除有遺漏的資料筆數(一般適用於MCAR的情況)
- List wise deletion
- Pair wise deletion
圖一、不同類型的刪除資料方式
參考資源: https://www.analyticsvidhya.com/blog/2016/01/guide-data-exploration/
*刪除變數(當遺漏值個數超過整體60%以上)
*數值型變數處理
1.補0 or 變項中不可能出現的值(999)
2.插補平均數、中位數
A.針對某個變數利用為遺漏的部分計算平均數或中位數,以這個數值直接將遺漏值的部分做取代
B.分組後計算個別的平均數或中位數,個別作遺漏值的填補
3.迴歸模式插補
4.KNN imputation
*類別型變數處理
1.插補眾數
2.多增加一類(Others)---遺漏值當成一類
3.迴歸模式插補
4.KNN imputation
[註]: KNN imputation
(Python語法: https://gist.github.com/YohanObadia/b310793cd22a4427faaadd9c381a5850)
優點: 1.可處理類別或連續型資料
2.不需要針對個別遺漏的資料去建模
3.可同時處理不同變項的遺漏
4.變項之間的關聯性也一併納入考慮
缺點: 1.執行時間長
2.不容易決定要分幾群
.
圖二、比較不同插補法
圖三、處理遺漏值的方式
參考來源: https://kknews.cc/zh-tw/other/g9v6a2l.html
2.Outlier treatment
Outlier 的類型(Univariate)
Outlier 的類型( Multivariate )
- 直接刪除觀測值(可比照處理遺漏值的方式)
- 變數轉換(Log) or 分組
利用Python進行Outlier的偵測:
- 插補法(可比照處理遺漏值的方式)