1基本概念
數據清洗從名字上也看的出就是把“臟”的“洗掉”,指發現並糾正數據文件中可識別的錯誤的最后一道程序,包括檢查數據一致性,處理無效值和缺失值等。
因為數據倉庫中的數據是面向某一主題的數據的集合,這些數據從多個業務系統中抽取而來而且包含歷史數據,這樣就避免不了有的數據是錯誤數據、有的數據相互之間有沖突,這些錯誤的或有沖突的數據顯然是我們不想要的,稱為“臟數據”。
我們要按照一定的規則把“臟數據”“洗掉”,這就是數據清洗。而數據清洗的任務是過濾那些不符合要求的數據,將過濾的結果交給業務主管部門,確認是否過濾掉還是由業務單位修正之后再進行抽取。不符合要求的數據主要是有不完整的數據、錯誤的數據、重復的數據三大類。數據清洗是與問卷審核不同,錄入后的數據清理一般是由計算機而不是人工完成。
2需要清洗數據的主要類型
2.1 殘缺數據
這一類數據主要是一些應該有的信息缺失,如供應商的名稱、分公司的名稱、客戶的區域信息缺失、業務系統中主表與明細表不能匹配等。對於這一類數據過濾出來,按缺失的內容分別寫入不同Excel文件向客戶提交,要求在規定的時間內補全。補全后才寫入數據倉庫。
2.2 錯誤數據
這一類錯誤產生的原因是業務系統不夠健全,在接收輸入后沒有進行判斷直接寫入后台數據庫造成的,比如數值數據輸成全角數字字符、字符串數據后面有一個回車操作、日期格式不正確、日期越界等。這一類數據也要分類,對於類似於全角字符、數據前后有不可見字符的問題,只能通過寫SQL語句的方式找出來,然后要求客戶在業務系統修正之后抽取。日期格式不正確的或者是日期越界的這一類錯誤會導致ETL運行失敗,這一類錯誤需要去業務系統數據庫用SQL的方式挑出來,交給業務主管部門要求限期修正,修正之后再抽取。
2.3 重復數據
對於這一類數據——特別是維表中會出現這種情況——將重復數據記錄的所有字段導出來,讓客戶確認並整理。
數據清洗是一個反復的過程,不可能在幾天內完成,只有不斷的發現問題,解決問題。對於是否過濾,是否修正一般要求客戶確認,對於過濾掉的數據,寫入Excel文件或者將過濾數據寫入數據表,在ETL開發的初期可以每天向業務單位發送過濾數據的郵件,促使他們盡快地修正錯誤,同時也可以做為將來驗證數據的依據。數據清洗需要注意的是不要將有用的數據過濾掉,對於每個過濾規則認真進行驗證,並要用戶確認。
3 數據清洗的內容
3.1 一致性檢查
一致性檢查(consistency check)是根據每個變量的合理取值范圍和相互關系,檢查數據是否合乎要求,發現超出正常范圍、邏輯上不合理或者相互矛盾的數據。例如,用1-7級量表測量的變量出現了0值,體重出現了負數,都應視為超出正常值域范圍。SPSS、SAS、和Excel等計算機軟件都能夠根據定義的取值范圍,自動識別每個超出范圍的變量值。具有邏輯上不一致性的答案可能以多種形式出現:例如,許多調查對象說自己開車上班,又報告沒有汽車;或者調查對象報告自己是某品牌的重度購買者和使用者,但同時又在熟悉程度量表上給了很低的分值。發現不一致時,要列出問卷序號、記錄序號、變量名稱、錯誤類別等,便於進一步核對和糾正
3.2 無效值和缺失值的處理
由於調查、編碼和錄入誤差,數據中可能存在一些無效值和缺失值,需要給予適當的處理。常用的處理方法有:估算,整例刪除,變量刪除和成對刪除。
估算(estimation)。最簡單的辦法就是用某個變量的樣本均值、中位數或眾數代替無效值和缺失值。這種辦法簡單,但沒有充分考慮數據中已有的信息,誤差可能較大。另一種辦法就是根據調查對象對其他問題的答案,通過變量之間的相關分析或邏輯推論進行估計。例如,某一產品的擁有情況可能與家庭收入有關,可以根據調查對象的家庭收入推算擁有這一產品的可能性。
整例刪除(casewise deletion)是剔除含有缺失值的樣本。由於很多問卷都可能存在缺失值,這種做法的結果可能導致有效樣本量大大減少,無法充分利用已經收集到的數據。因此,只適合關鍵變量缺失,或者含有無效值或缺失值的樣本比重很小的情況
變量刪除(variable deletion)。如果某一變量的無效值和缺失值很多,而且該變量對於所研究的問題不是特別重要,則可以考慮將該變量刪除。這種做法減少了供分析用的變量數目,但沒有改變樣本量。
成對刪除(pairwise deletion)是用一個特殊碼(通常是9、99、999等)代表無效值和缺失值,同時保留數據集中的全部變量和樣本。但是,在具體計算時只采用有完整答案的樣本,因而不同的分析因涉及的變量不同,其有效樣本量也會有所不同。這是一種保守的處理方法,最大限度地保留了數據集中的可用信息。
采用不同的處理方法可能對分析結果產生影響,尤其是當缺失值的出現並非隨機且變量之間明顯相關時。因此,在調查中應當盡量避免出現無效值和缺失值,保證數據的完整性。
4 數據清洗的實現方式與范圍
4.1 數據清洗的實現方式
(一) 手工實現,通過人工檢查,只要投入足夠的人力物力財力,也能發現所有錯誤,但效率低下。在大數據量的情況下,幾乎是不可能的。
(二) 通過專門編寫的應用程序,這種方法能解決某個特定的問題,但不夠靈活,特別是在清理過程需要反復進行(一般來說,數據清理一遍就達到要求的很少)時,導致程序復雜,清理過程變化時,工作量大。而且這種方法也沒有充分利用目前數據庫提供的強大數據處理能力 。
(三) 解決某類特定應用域的問題,如根據概率統計學原理查找數值異常的記錄,對姓名、地址、郵政編碼等進行清理,這是目前研究得較多的領域,也是應用最成功的一類。如商用系統: Trillinm Software , System Match Maketr 等。
(四) 與特定應用領域無關的數據清理,這一部分的研究主要集中在清理重復的記錄上,如Data Cleanser, Data Blade Module ,Integrity 系統等。
這4種實現方法,由於后兩種具有某種通用性,較大的實用性,引起了越來越多的注意。但是不管哪種方法,大致都由三個階段組成: ①數據分析、定義錯誤類型; ②搜索、識別錯誤記錄; ③修正錯誤。
第一階段,盡管已有一些數據分析工具,但仍以人工分析為主。在錯誤類型分為兩大類:單數據源與多數據源,並將它們又各分為結構級與記錄級錯誤。這種分類非常適合於解決數據倉庫中的數據清理問題。
第二階段,有兩種基本的思路用於識別錯誤:一種是發掘數據中存在的模式,然后利用這些模式清理數據;另一種是基於數據的,根據預定義的清理規則,查找不匹配的記錄。后者用得更多。
第三階段,某些特定領域能夠根據發現的錯誤模式,編制程序或借助於外部標准源文件、數據字典一定程度上修正錯誤;對數值字段,有時能根據數理統計知識自動修正,但經常須編制復雜的程序或借助於人工干預完成。
絕大部分數據清理方案提供接口用於編制清理程序。它們一般來說包括很多耗時的排序、比較、匹配過程,且這些過程多次重復,用戶必須等待較長時間。在一個交互式的數據清理方案。系統將錯誤檢測與清理緊密結合起來,用戶能通過直觀的圖形化界面一步步地指定清理操作,且能立即看到此時的清理結果, (僅僅在所見的數據上進行清理,所以速度很快) 不滿意清理效果時還能撤銷上一步的操作,最后將所有清理操作編譯執行。並且這種方案對清理循環錯誤非常有效。
許多數據清理工具提供了描述性語言解決用戶友好性,降低用戶編程復雜度。如ARKTOS 方案提供了XADL 語言(一種基於預定義的DTD 的XML 語言) 、SADL 語言,在ATDX 提供了一套宏操作(來自於SQL 語句及外部函數) ,一種SQL2Like 命令語言,這些描述性語言都在一定程度上減輕了用戶的編程難度,但各系統一般不具有互操作性,不能通用。
數據清理屬於一個較新的研究領域,直接針對這方面的研究並不多,中文數據清理更少。現在的研究主要為解決兩個問題:發現異常、清理重復記錄。
5 數據清洗的方法
一般來說,數據清理是將數據庫精簡以除去重復記錄,並使剩余部分轉換成標准可接收格式的過程。數據清理標准模型是將數據輸入到數據清理處理器,通過一系列步驟“ 清理”數據,然后以期望的格式輸出清理過的數據(如上圖所示)。數據清理從數據的准確性、完整性、一致性、惟一性、適時性、有效性幾個方面來處理數據的丟失值、越界值、不一致代碼、重復數據等問題。
數據清理一般針對具體應用,因而難以歸納統一的方法和步驟,但是根據數據不同可以給出相應的數據清理方法。
5.1 解決不完整數據(即值缺失)的方法
大多數情況下,缺失的值必須手工填入( 即手工清理)。當然,某些缺失值可以從本數據源或其它數據源推導出來,這就可以用平均值、最大值、最小值或更為復雜的概率估計代替缺失的值,從而達到清理的目的。
5.2 錯誤值的檢測及解決方法
用統計分析的方法識別可能的錯誤值或異常值,如偏差分析、識別不遵守分布或回歸方程的值,也可以用簡單規則庫( 常識性規則、業務特定規則等)檢查數據值,或使用不同屬性間的約束、外部的數據來檢測和清理數據。
5.3 .重復記錄的檢測及消除方法
數據庫中屬性值相同的記錄被認為是重復記錄,通過判斷記錄間的屬性值是否相等來檢測記錄是否相等,相等的記錄合並為一條記錄(即合並/清除)。合並/清除是消重的基本方法。
5.4 不一致性( 數據源內部及數據源之間)的檢測及解決方法
從多數據源集成的數據可能有語義沖突,可定義完整性約束用於檢測不一致性,也可通過分析數據發現聯系,從而使得數據保持一致。目前開發的數據清理工具大致可分為三類。
數據遷移工具允許指定簡單的轉換規則,如:將字符串gender替換成sex。sex公司的PrismWarehouse是一個流行的工具,就屬於這類。
數據清洗工具使用領域特有的知識( 如,郵政地址)對數據作清洗。它們通常采用語法分析和模糊匹配技術完成對多數據源數據的清理。某些工具可以指明源的“ 相對清潔程度”。工具Integrity和Trillum屬於這一類。
數據審計工具可以通過掃描數據發現規律和聯系。因此,這類工具可以看作是數據挖掘工具的變形。
6 數據清洗的步驟
6.1 定義和確定錯誤的類型
6.1.1 數據分析
數據分析是數據清洗的前提與基礎,通過詳盡的數據分析來檢測數據中的錯誤或不
一致情況,除了手動檢查數據或者數據樣本之外,還可以使用分析程序來獲得關於數據屬性的元數據,從而發現數據集中存在的質量問題。
6.1.2 定義清洗轉換規則
根據上一步進行數據分析得到的結果來定義清洗轉換規則與工作流。根據數據源的個數,數據源中不一致數據和“臟數據”多少的程度,需要執行大量的數據轉換和清洗步驟。
要盡可能的為模式相關的數據清洗和轉換指定一種查詢和匹配語言,從而使轉換代碼的自動生成變成可能。
6.2 搜尋並識別錯誤的實例
6.2.1 自動檢測屬性錯誤
檢測數據集中的屬性錯誤,需要花費大量的人力、物力和時間,而且這個過程本身很容易出錯,所以需要利用高的方法自動檢測數據集中的屬性錯誤,方法主要有:基於統計的方法,聚類方法,關聯規則的方法。
6.2.2 檢測重復記錄的算法
消除重復記錄可以針對兩個數據集或者一個合並后的數據集,首先需要檢測出標識同一個現實實體的重復記錄,即匹配過程。檢測重復記錄的算法主要有:基本的字段匹配算法,遞歸的字段匹配算法,Smith—Waterman算法,Cosine相似度函數。
6.3 糾正所發現的錯誤
在數據源上執行預先定義好的並且已經得到驗證的清洗轉換規則和工作流。當直接在源數據上進行清洗時,需要備份源數據,以防需要撤銷上一次或幾次的清洗操作。清洗時根據“臟數據”存在形式的不同,執行一系列的轉換步驟來解決模式層和實例層的數據質量問題。為處理單數據源問題並且為其與其他數據源的合並做好准備,一般在各個數據源上應該分別進行幾種類型的轉換,主要包括:
6.3.1 從自由格式的屬性字段中抽取值(屬性分離)
自由格式的屬性一般包含着很多的信息,而這些信息有時候需要細化成多個屬性,從而進一步支持后面重復記錄的清洗。
6.3.2 確認和改正
這一步驟處理輸入和拼寫錯誤,並盡可能地使其自動化。基於字典查詢的拼寫檢查對於發現拼寫錯誤是很有用的。
6.3.3 標准化
為了使記錄實例匹配和合並變得更方便,應該把屬性值轉換成一個一致和統一的格式。
6.4 干凈數據回流
當數據被清洗后,干凈的數據應該替換數據源中原來的“臟數據”。這樣可以提高原系統的數據質量,還可避免將來再次抽取數據后進行重復的清洗工作。
7 數據清洗的評價標准
7.1 數據的可信性
可信性包括精確性、完整性、一致性、有效性、唯一性等指標。
(1)精確性:描述數據是否與其對應的客觀實體的特征相一致。
(2)完整性:描述數據是否存在缺失記錄或缺失字段。
(3)一致性:描述同一實體的同一屬性的值在不同的系統是否一致。
(4)有效性:描述數據是否滿足用戶定義的條件或在一定的域值范圍內。
(5)唯一性:描述數據是否存在重復記錄。
7.2 數據的可用性
數據的可用性考察指標主要包括時間性和穩定性。
(1)時間性:描述數據是當前數據還是歷史數據。
(2)穩定性:描述數據是否是穩定的,是否在其有效期內。
7.3 數據清洗的代價
數據清洗的代價即成本效益,在進行數據清洗之前考慮成本效益這個因素是很必要的。因為數據清洗是一項十分繁重的工作,需要投入大量的時間、人力和物力。在進行數據清洗之前要考慮其物質和時間開銷的大小,是否會超過組織的承受能力。通常情況下大數據集的數據清洗是一個系統性的工作,需要多方配合以及大量人員的參與,需要多種資源的支持。
企業所做出的每項決定目標都是為了給公司帶來更大的經濟效益,如果花費大量金錢、時間、人力和物力進行大規模的數據清洗之后,所能帶來的效益遠遠低於所投入的,那么這樣的數據清洗被認定為一次失敗的數據清洗。故,在進行數據清洗之前進行成本效益的估算是非常重要的。
8 常見的數據清洗算法(屬性清洗算法)
8.1 空缺值的清洗
對於空缺值的清洗可以采取忽略元組,人工填寫空缺值,使用一個全局變量填充空缺值,使用屬性的平均值、中問值、最大值、最小值或更為復雜的概率統計函數值來填充空缺值。
8.2 噪聲數據的清洗
分箱(Binning),通過考察屬性值的周圍值來平滑屬性的值。屬性值被分布到一些等深或等寬的“箱”中,用箱中屬性值的平均值或中值來替換“箱”中的屬性值;計算機和人工檢查相結合,計算機檢測可疑數據,然后對它們進行人工判斷;使用簡單規則庫檢測和修正錯誤;使用不同屬性間的約束檢測和修正錯誤;使用外部數據源檢測和修正錯誤。
8.3 不一致數據的清洗
對於有些事務,所記錄的數據可能存在不一致。有些數據不一致,可以使用其他材料人工加以更正。例如,數據輸入時的錯誤可以使用紙上的記錄加以更正。知識工程工具
也可以用來檢測違反限制的數據。例如,知道屬性間的函數依賴,可以查找違反函數依賴的值。此外,數據集成也可能產生數據不一致。
8.4 重復數據的清洗
目前消除重復記錄的基本思想是“排序和合並”,先將數據庫中的記錄排序,然后通過比較鄰近記錄是否相似來檢測記錄是否重復。
消除重復記錄的算法主要有:優先隊列算法,近鄰排序算法(Sorted—Neighborhood Method),多趟近鄰排序(Multi—Pass Sorted—Neighborhood)。