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