作者:Vinod Kumar
翻譯:季洋
校對:王雨桐
本文約1600字,建議閱讀8分鐘。
本文主要講述關於數據質量和驗證檢查的實例,以及運用Apache Spark和Scala採用編碼來確保數據質量是多麼容易。
大數據和機器學習都是和數據打交道。因此,在系統中保持數據的正確性就非常重要。如果數據不準確,不僅僅會降低系統的效率,還會得到一些不恰當的觀點。通過數據質量和驗證是確保數據正確性的重要步驟之一。隨著數據量的不斷增加,雜訊數據也隨之而來,每天都要引入新的方法和檢驗以確保數據的質量。由於數據量巨大,需要考慮的另一件事是如何確保快速處理這些檢查和驗證;例如,一個系統採用高分散式的方法來遍歷每一條進入系統的數據。本文將講述關於數據質量和驗證檢查的一些例子,以及在Apache Spark和Scala的幫助下運用程序來確保數據質量是多麼簡單。
數據準確性:指的是觀測結果和真實值或可接受為真的值之間的接近度。
空值:包含空值(null)的記錄。如: male/female/null
特定值:某公司的ID號。
模式驗證:每一批數據必須遵循相同的列名和數據類型。
同列下的值重複(如記錄中重複的email)
唯一性檢查:各記錄關於某列值是唯一不重複的,這一點和重複性檢查類似。
正確性檢查:可以使用正則表達式進行檢查。例如,我們可以查找包含@的電子郵件id。
數據的普及性:你的數據有多及時?假定每天都有數據進入,隨後要檢查數據並打上時間戳。
數據的質量和驗證檢查的條目可以源源不絕,但是基於Spark和Scala的方法的好處是,用較少的代碼,可以利用海量的數據達到更多目的。
有些時候,一個系統可能有某些特定的需求,這與誰需要這些數據以及以什麼形式數據有關;同時這些數據使用者會對數據提出假設。
數據的可用性:使用者可能對數據有特定要求,如:
列1的值不等於列2的值
列3的值應該等於列1的值加上列2的值
列x的值不應該超過x%的時間
然而這些被看作基本的數據驗證,還有一些更高級別的檢查來確保數據的質量,如:
異常監測:這包括兩個主要方面:
比如給定維度,如基於時間的異常。這意味著在任何指定時間範圍內(時間片段),記錄數不能超過平均值的x%。為了做到這點,運用Spark做法如下:
假定時間片段為1分鐘。
首先,需要對時間戳列進行過濾和格式化處理,如此時間戳才能以分鐘為單位表示出來。這將產生重複,但是這應該不是問題。
接下來,運用groupBy,
如下:
sampledataframe.groupBy(“timestamp”).count()。
算出平均值,同時找出記錄數超出均值x%的那些時間片段(如果存在的話)。
排序
記錄應該遵循一定的順序。例如,在一天內,某個消費者的數據記錄應該是從產生興趣開始,點擊,載入頁面,加入購物車,最後以購買結束。這些可能只是部分記錄,但它們應該遵循一定的順序。為了檢查順序,運用Spark做法如下:
groupBy(“ID”) – 以序列號分組
對每一分組運行排序檢查
循環依賴:讓我用一個例子來解釋這點。
如果從列A到列B中取出兩列,記錄如下:
如果應用程序要得到家庭關係結構,這會形成一個環狀依賴關係。
故障趨勢
考慮到每天都有數據進入系統。讓我們設想它的行為或接觸點數據。為了簡單起見,我們將每天的數據稱為一『批』。在每一批數據中,如果我們都會得到一組完全相同的故障,則一定存在跨批次的故障趨勢。
如果故障是源於相同的一組email_id(郵箱號為一列欄位),則這可能是自動程式行為的徵兆。
數據偏倚:這意味著在圖形上數據呈現一個連續的偏差。如:
如果向時間戳上加上30分鐘,那麼所有的記錄都會有這30分鐘的隱形偏倚。如此一來,如果預測演算法想要使用這些數據,這種偏差將影響結果。
如果用來生成這些數據的演算法有學習偏差,那麼對一組數據會生成更多的默認值,隨後用於其他數據。例如基於購買行為,它會預測出錯誤的購買者性別。
自動程式行為:通常,一個自動程式行為如下:
它使用相同的唯一標識符生成記錄。像前文提到的同一組email_id。
它會在任何特定時間生成網路流量。這是基於時間的異常現象。
它生成的記錄有固定順序:跨數據批次的順序檢查。
原文標題:
Data Quality and Validation
https://dzone.com/articles/java-amp-apache-spark-for-data-quality-amp-validat
譯者簡介
季洋,蘇州某IT公司技術總監,從業20年,現在主要負責Java項目的方案和管理工作。對大數據、數據挖掘和分析項目躍躍欲試卻苦於沒有機會和數據。目前正在摸索和學習中,也報了一些線上課程,希望對數據建模的應用場景有進一步的了解。不能成為巨人,只希望可以站在巨人的肩膀上了解數據科學這個有趣的世界。