工作中人們常提到的資料預處理,說的到底是什麼?
資料預處理一方面是為了提高資料的質量,另一方面也是為了適應所做資料分析的軟體或者方法。
在做資料分析時,我想許多資料分析師會像《R語言實戰第二版》的作者卡巴科弗那樣發出感嘆:“資料分析師在資料預處理上花費了60%的時間……”
是的,我們所知道的建模,評估模型等資料分析工作所花費的時間遠遠沒有資料預處理的多。這件事雖然麻煩多事但卻“功在千秋”,如果在做資料分析時前期的資料預處理做的很好,那後面的步驟會說話的話,相信我,它們一定會感謝你的。這就跟減肥一樣,過程艱難,但人家創造101的楊超越不也下定決心唱出一句:“燃燒我的卡路里,你是最棒的”嘛。
資料預處理一方面是為了提高資料的質量,另一方面也是為了適應所做資料分析的軟體或者方法。一般來說,資料預處理步驟有資料清洗、資料整合、資料變換、資料規約,每個大步驟又有一些小的細分點。當然了,這四個大步驟在做資料預處理時未必都要執行。
一、資料清洗
資料清洗,顧名思義,“黑”的變成“白”的,“髒”的資料變成“乾淨”的,髒資料表現在形式上和內容上的髒。
- 形式上的髒,如:缺失值、帶有特殊符號的;
- 內容上的髒,如:異常值。
1. 缺失值
缺失值包括缺失值的識別和缺失值的處理。
在R裡缺失值的識別使用函式is.na()判別,函式complete.cases()識別樣本資料是否完整。
缺失值處理常用的方法有: 刪除、替換和插補。
- 刪除法 : 刪除法根據刪除的不同角度又可以分為刪除觀測樣本和變數,刪除觀測樣本(行刪除法),在R裡na.omit()函式可以刪除所含缺失值的行。這就相當於減少樣本量來換取資訊的完整度,但當變數有較大缺失並且對研究目標影響不大時,可考慮刪除變數R裡使用語句mydata[,-p]來完成。mydata表示所刪資料集的名字,p是該刪除變數的列數,-表示刪除。
- 替換法 : 替換法顧名思義對缺失值進行替換,根據變數的不同又有不同的替換規則,缺失值的所在變數是數值型用該變數下其他數的均值來替換缺失值;變數為非數值變數時則用該變數下其他觀測值的中位數或眾數替換。
- 插補法 : 插補法分為迴歸插補和多重插補。迴歸插補指的是將插補的變數當作因變數y,其他變數看錯自變數,利用迴歸模型進行擬合,在R裡使用lm()迴歸函式對缺失值進行插補;多重插補是指從一個包含缺失值的資料集中生成一組完整的資料,多次進行,產生缺失值的一個隨機樣本,在R裡mice()包可以進行多重插補。
2. 異常值
異常值跟缺失值一樣包括 異常值的識別和異常值 的處理。
- 異常值的識別通常用單變數散點圖或箱形圖來處理,在R裡dotchart()是繪製單變數散點圖的函式,boxplot()函式繪製箱現圖;在圖形中,把遠離正常範圍的點當作異常值。
- 異常值的的處理有刪除含有異常值的觀測(直接刪除,當樣本少時直接刪除會造成樣本量不足,改變變數的分佈)、當作缺失值(利用現有的資訊,對其當缺失值填補)、平均值修正(用前後兩個觀測值的均值修正該異常值)、不處理。在進行異常值處理時要先複習異常值出現的可能原因,再判斷異常值是否應該捨棄。
二、資料整合
所謂資料整合就是將多個數據源合併放到一個數據儲存中,當然如果所分析的資料原本就在一個數據儲存裡就不需要資料的集成了(多合一)。
資料整合的實現是將兩個資料框以關鍵字為依據,在R裡用merge()函式實現,語句為merge(dataframe1, dataframe2,by=”關鍵字“”),預設按升序排列。
在進行資料整合時可能會出現如下問題:
- 同名異義,資料來源A中某屬性名字和資料來源B中某屬性名字相同,但所表示的實體不一樣,不能作為關鍵字;
- 異名同義,即兩個資料來源某個屬性名字不一樣但所代表的實體一樣,可作為關鍵字;
- 資料整合往往造成資料冗餘,可能是同一屬性多次出現,也可能是屬性名字不一致導致的重複,對於重複屬性一個先做相關分析檢測,如果有再將其刪除。
三、資料變換
資料變換就是轉化成適當的形式,來滿足軟體或分析理論的需要。
1. 簡單函式變換
簡單函式變換用來將不具有正態分佈的資料變成有正態分佈的資料,常用的有平方、開方、取對數、差分等。如在時間序列裡常對資料對數或差分運算,將非平穩序列轉化成平穩序列。
2. 規範化
規範化就是剔除掉變數量綱上的影響,比如:直接比較身高和體重的差異,單位的不同和取值範圍的不同讓這件事不能直接比較。
- 最小-最大規範化: 也叫離差標準化,對資料進行線性變換,將其範圍變成[0,1]
- 零-均值規範化: 也叫標準差標準化,處理後的資料均值等於0,標準差為1
- 小數定標規範化: 移動屬性值的小數位數,將屬性值對映到[-1,1]
3. 連續屬性離散化
將連續屬性變數轉化成分類屬性,就是連續屬性離散化,特別是某些分類演算法要求資料是分類屬性,如:ID3演算法。
常用的離散化方法有如下幾種:
- 等寬法: 將屬性的值域分成具有相同寬度的區間,類似製作頻率分佈表;
- 等頻法: 將相同的記錄放到每個區間;
- 一維聚類: 兩個步驟,首先將連續屬性的值用聚類演算法,然後將聚類得到的集合合併到一個連續性值並做同一標記。
四、資料規約
資料規約能夠降低無效錯誤的資料對建模的影響、縮減時間、降低儲存資料的空間。
1. 屬性規約
屬性規約是尋找最小的屬性子集並確定子集概率分佈接近原來資料的概率分佈。
- 合併屬性: 將一些舊的屬性合併一個新的屬性;
- 逐步向前選擇: 從一個空屬性集開始,每次在原來屬性集合選一個當前最優屬性新增到當前子集中,一直到無法選擇最優屬性或滿足一個約束值為止;
- 逐步先後選擇: 從一個空屬性集開始,每次在原來屬性集合選一個當前最差屬性並剔除當前子集中,一直到無法選擇最差屬性或滿足一個約束值為止;
- 決策樹歸納: 沒有出現在這個決策樹上的屬性從初始集合中刪除,獲得一個較優的屬性子集;
- 主成份分析: 用較少的變數去解釋原始資料中大部分變數(用相關性高的變數轉化成彼此相互獨立或不相關的變數)。
2. 數值規約
通過減少資料量,包括有引數和無引數方法,有引數如線性迴歸和多元迴歸,無引數法如直方圖、抽樣等。
本文由 @CDA資料分析師 原創釋出於人人都是產品經理。未經許可,禁止轉載
題圖由作者提供