10.13 工作中人們常提到的數據預處理,說的到底是什麼?

工作中人們常提到的數據預處理,說的到底是什麼?

在做數據分析時,我想許多數據分析師會像《R語言實戰第二版》的作者卡巴科弗那樣發出感嘆:“數據分析師在數據預處理上花費了60%的時間……”

是的,我們所知道的建模,評估模型等數據分析工作所花費的時間遠遠沒有數據預處理的多。這件事雖然麻煩多事但卻“功在千秋”,如果在做數據分析時前期的數據預處理做的很好,那後面的步驟會說話的話,相信我,它們一定會感謝你的。這就跟減肥一樣,過程艱難,但人家創造101的楊超越不也下定決心唱出一句:“燃燒我的卡路里,你是最棒的”嘛。

數據預處理一方面是為了提高數據的質量,另一方面也是為了適應所做數據分析的軟件或者方法。一般來說,數據預處理步驟有數據清洗、數據集成、數據變換、數據規約,每個大步驟又有一些小的細分點。當然了,這四個大步驟在做數據預處理時未必都要執行。

一、數據清洗

數據清洗,顧名思義,“黑”的變成“白”的,“髒”的數據變成“乾淨”的,髒數據表現在形式上和內容上的髒。

  • 形式上的髒,如:缺失值、帶有特殊符號的;
  • 內容上的髒,如:異常值。

1. 缺失值

缺失值包括缺失值的識別和缺失值的處理。

在R裡缺失值的識別使用函數is.na判別,函數complete.cases識別樣本數據是否完整。

缺失值處理常用的方法有:刪除、替換和插補。

  1. 刪除法 :刪除法根據刪除的不同角度又可以分為刪除觀測樣本和變量,刪除觀測樣本(行刪除法),在R裡na.omit函數可以刪除所含缺失值的行。這就相當於減少樣本量來換取信息的完整度,但當變量有較大缺失並且對研究目標影響不大時,可考慮刪除變量R裡使用語句mydata[,-p]來完成。mydata表示所刪數據集的名字,p是該刪除變量的列數,-表示刪除。
  2. 替換法 :
    替換法顧名思義對缺失值進行替換,根據變量的不同又有不同的替換規則,缺失值的所在變量是數值型用該變量下其他數的均值來替換缺失值;變量為非數值變量時則用該變量下其他觀測值的中位數或眾數替換。
  3. 插補法 :插補法分為迴歸插補和多重插補。迴歸插補指的是將插補的變量當作因變量y,其他變量看錯自變量,利用迴歸模型進行擬合,在R裡使用lm迴歸函數對缺失值進行插補;多重插補是指從一個包含缺失值的數據集中生成一組完整的數據,多次進行,產生缺失值的一個隨機樣本,在R裡mice包可以進行多重插補。

2. 異常值

異常值跟缺失值一樣包括異常值的識別和異常值的處理。

  • 異常值的識別通常用單變量散點圖或箱形圖來處理,在R裡dotchart是繪製單變量散點圖的函數,boxplot函數繪製箱現圖;在圖形中,把遠離正常範圍的點當作異常值。
  • 異常值的的處理有刪除含有異常值的觀測(直接刪除,當樣本少時直接刪除會造成樣本量不足,改變變量的分佈)、當作缺失值(利用現有的信息,對其當缺失值填補)、平均值修正(用前後兩個觀測值的均值修正該異常值)、不處理。在進行異常值處理時要先複習異常值出現的可能原因,再判斷異常值是否應該捨棄。

二、數據集成

所謂數據集成就是將多個數據源合併放到一個數據存儲中,當然如果所分析的數據原本就在一個數據存儲裡就不需要數據的集成了(多合一)。

數據集成的實現是將兩個數據框以關鍵字為依據,在R裡用merge函數實現,語句為merge(dataframe1, dataframe2,by=”關鍵字“”),默認按升序排列。

在進行數據集成時可能會出現如下問題:

  1. 同名異義,數據源A中某屬性名字和數據源B中某屬性名字相同,但所表示的實體不一樣,不能作為關鍵字;
  2. 異名同義,即兩個數據源某個屬性名字不一樣但所代表的實體一樣,可作為關鍵字;
  3. 數據集成往往造成數據冗餘,可能是同一屬性多次出現,也可能是屬性名字不一致導致的重複,對於重複屬性一個先做相關分析檢測,如果有再將其刪除。

三、數據變換

數據變換就是轉化成適當的形式,來滿足軟件或分析理論的需要。

1. 簡單函數變換

簡單函數變換用來將不具有正態分佈的數據變成有正態分佈的數據,常用的有平方、開方、取對數、差分等。如在時間序列裡常對數據對數或差分運算,將非平穩序列轉化成平穩序列。

2. 規範化

規範化就是剔除掉變量量綱上的影響,比如:直接比較身高和體重的差異,單位的不同和取值範圍的不同讓這件事不能直接比較。

  1. 最小-最大規範化:也叫離差標準化,對數據進行線性變換,將其範圍變成[0,1]
  2. 零-均值規範化:也叫標準差標準化,處理後的數據均值等於0,標準差為1
  3. 小數定標規範化:移動屬性值的小數位數,將屬性值映射到[-1,1]

3. 連續屬性離散化

將連續屬性變量轉化成分類屬性,就是連續屬性離散化,特別是某些分類算法要求數據是分類屬性,如:ID3算法。

常用的離散化方法有如下幾種:

  1. 等寬法:將屬性的值域分成具有相同寬度的區間,類似製作頻率分佈表;
  2. 等頻法:將相同的記錄放到每個區間;
  3. 一維聚類:兩個步驟,首先將連續屬性的值用聚類算法,然後將聚類得到的集合合併到一個連續性值並做同一標記。

四、數據規約

數據規約能夠降低無效錯誤的數據對建模的影響、縮減時間、降低存儲數據的空間。

1. 屬性規約

屬性規約是尋找最小的屬性子集並確定子集概率分佈接近原來數據的概率分佈。

  1. 合併屬性:將一些舊的屬性合併一個新的屬性;
  2. 逐步向前選擇:從一個空屬性集開始,每次在原來屬性集合選一個當前最優屬性添加到當前子集中,一直到無法選擇最優屬性或滿足一個約束值為止;
  3. 逐步先後選擇:從一個空屬性集開始,每次在原來屬性集合選一個當前最差屬性並剔除當前子集中,一直到無法選擇最差屬性或滿足一個約束值為止;
  4. 決策樹歸納:沒有出現在這個決策樹上的屬性從初始集合中刪除,獲得一個較優的屬性子集;
  5. 主成份分析:用較少的變量去解釋原始數據中大部分變量(用相關性高的變量轉化成彼此相互獨立或不相關的變量)。

2. 數值規約

通過減少數據量,包括有參數和無參數方法,有參數如線性迴歸和多元迴歸,無參數法如直方圖、抽樣等。

本文由 @CDA數據分析師 原創發佈於人人都是產品經理。未經許可,禁止轉載

題圖由作者提供


分享到:


相關文章: