承襲筆者前陣子寫的文章,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

 

2.jpg

圖一、不同類型的刪除資料方式

參考資源: 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.不容易決定要分幾群

 

 

.3.jpg

圖二、比較不同插補法

參考資料: https://www.semanticscholar.org/paper/Iterative-KNN-imputation-based-on-GRA-for-missing-Zhu-Cheng/1bbea3cc77f7f9bd466e151d4504d3c44d002c0a

 

4.jpg

圖三、處理遺漏值的方式

參考來源: https://kknews.cc/zh-tw/other/g9v6a2l.html

 

 

2.Outlier treatment

100.jpg​​​​​​​

 

Outlier 的類型(Univariate)

7.jpg

Outlier 的類型( Multivariate )

8.jpg

  • 直接刪除觀測值(可比照處理遺漏值的方式)
  • 變數轉換(Log) or 分組

利用Python進行Outlier的偵測:

https://towardsdatascience.com/5-ways-to-detect-outliers-that-every-data-scientist-should-know-python-code-70a54335a623

 

 

9.jpg

  • 插補法(可比照處理遺漏值的方式)

 

arrow
arrow

    晨晰部落格新站 發表在 痞客邦 留言(0) 人氣()