數據質量(Data Quality)是數據分析結論有效性和準確性的基礎也是最重要的前提和保障。數據質量保證(Data Quality Assurance)是數據倉庫架構中的重要環節,也是ETL的重要組成部分。
我們通常通過數據清洗(Data cleansing)來過濾臟數據,保證底層數據的有效性和準確性,數據清洗一般是數據進入數據倉庫的前置環節,一般來說數據一旦進入數據倉庫,那么必須保證這些數據都是有效的,上層的統計聚合都會以這批數據作為基礎數據集,上層不會再去做任何的校驗和過濾,同時使用穩定的底層基礎數據集也是為了保證所有上層的匯總和多維聚合的結果是嚴格一致的。但當前我們在構建數據倉庫的時候一般不會把所有的數據清洗步驟放在入庫之前,一般會把部分數據清洗的工作放在入庫以后來執行,主要由于數據倉庫對數據處理方面有自身的優勢,部分的清洗工作在倉庫中進行會更加的簡單高效,而且只要數據清洗發生在數據的統計和聚合之前,我們仍然可以保證使用的是清洗之后保留在數據倉庫的最終“干凈”的基礎數據。
前段時間剛好跟同事討論數據質量保證的問題,之前做數據倉庫相關工作的時候也接觸過相關的內容,所以這里準備系統地整理一下。之前構建數據倉庫基于Oracle,所以選擇的是Oracle提供的數據倉庫構建工具——OWB(Oracle Warehouse Builder),里面提供了比較完整的保證數據質量的操作流程,主要包括三塊:
1.Data Profiling
2.Data Auditing
3.Data Correcting
Data Profiling
Data Profiling,其實目前還沒找到非常恰當的翻譯,Oracle里面用的是“數據概要分析”,但其實“Profiling”這個詞用概要分析無法體現它的意境,看過美劇Criminal Minds(犯罪心理)的同學應該都知道FBI的犯罪行為分析小組(BAU)每集都會對罪犯做一個Criminal Profiling,以分析罪犯的身份背景、行為模式、心理狀態等,所以Profiling更多的是一個剖析的過程。維基百科對Data Profiling的解釋如下:
Data profiling is the process of examining the data available in an existing data source and collecting statistics and information about that data.
這里我們看到Data Profiling需要一個收集統計信息的過程(這也是犯罪心理中Garcia干的活),那么如何讓獲取數據的統計信息呢?
熟悉數據庫的同學應該知道數據庫會對每張表做Analyze,一方面是為了讓優化器可以選擇合適的執行計劃,另一方面對于一些查詢可以直接使用分析得到的統計信息返回結果,比如COUNT(*)。這個其實就是簡單的Data Profiling,Oracle數據倉庫構建工具OWB中提供的Data Profiling的統計信息更加全面,針對建立Data Profile的表中的每個字段都有完整的統計信息,包括:
記錄數、最大值、最小值、最大長度、最小長度、唯一值個數、NULL值個數、平均數和中位數,另外OWB還提供了six-sigma值,取值1-6,越高數據質量越好,當six-sigma的值為7的時候可以認為數據質量近乎是完美的。同時針對字段的唯一值,統計信息中給出了每個唯一值的分布頻率,這個對發現一些異常數據是非常有用的,后面會詳細介紹。
看到上面這些Data Profile的統計信息,我們可能會聯想到統計學上面的統計描述,統計學上會使用一些統計量來描述一些數據集或者樣本集的特征,如果我們沒有類似OWB的這類ETL工具,我們同樣可以借助統計學的這些知識來對數據進行簡單的Profiling,這里不得不提一個非常實用的圖表工具——箱形圖(Box plot),也叫箱線圖、盒狀圖。我們可以嘗試用箱形圖來表現數據的分布特征:
箱線圖有很多種表現形式,上面圖中的是比較常見的一種箱線圖。一般中間矩形箱的上下兩邊分別為數據集的上四分位數(75%,Q3)和下四分位數(25%,Q1),中間的橫線代表數據集的中位數(50%,Media,Q2),同時有些箱線圖會用“+”來表示數據集的均值。箱形的上下分別延伸出兩條線,這兩條線的末端(也叫“觸須”)一般是距離箱形1.5個IQR(Q3-Q1,即箱形的長度),所以上端的觸須應該是Q3+1.5IQR,下端的觸須是Q1-1.5IQR;如果數據集的最小值大于Q1-1.5IQR,我們就會使用最小值替換Q1-1.5IQR作為下方延伸線末端,同樣如果最大值小于Q3+1.5IQR,用最大值作為上方延伸線的末端,如果最大或者最小值超出了Q1-1.5IQR到Q3+1.5IQR這個范圍,我們將這些超出的數據稱為離群點(Outlier),在圖中打印出來,即圖中在上方觸須之外的點。另外,有時候我們也會使用基于數據集的標準差σ,選擇上下3σ的范圍,或者使用置信水平為95%的置信區間來確定上下邊界的末端值。
其實箱線圖沒有展現數據集的全貌,但通過對數據集幾個關鍵統計量的圖形化表現,可以讓我們看清數據的整體分布和離散情況。
既然我們通過Data profiling已經可以得到如上的數據統計信息,那么如何利用這些統計信息來審核數據的質量,發現數據可能存在的異常和問題,并對數據進行有效的修正,或者清洗,進而得到“干凈”的數據,這些內容就放到下一篇文章吧。