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