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