Notes of Chapter 3 The Dynamics of Data Wrangling in Principles of Data Wangling
這章主要敘述在資料處理流程中,需要的資料轉換和結果描述,以及在資料服務流程架構中的運作。
一、資料處理流程
1. Accessing
- 取得權限
- 移動、複製資料
- 分析資料集之間的關係,如資料重複、資料衝突
2. Transforming
- 調整資料的結構、粒度、正確性、時間性、範圍
3. Profiling
- 調整資料的結果需要有意義的回饋
4. Publishing
- 發布出去的東西,如資料轉換後的資料集、資料轉換的紀錄檔 (Log)、描述資料的資料集
額外的面向:子集合、抽樣
子集合和抽樣是在資料處理流程中很有效率的方式。
在資料中如果包含了異質性的資料,作法是將他拆成多個子集合,分別做資料轉換後再合併起來。
假設今天是一個巨量的資料,任何轉換都需要非常多的時間及資源,並且事後需要大量人工去做確認的話,較佳的作法是在資料中做抽樣,以加速資料處理流程。理想上來說每一個 Transforming 搭配著處理結果的 Profiling 要能在 100 milliseconds 內完成,然而有時會到幾秒鐘。
在抽樣方法也是一個在統計學及市場調查課本中很廣泛討論的議題,例如 Leslie Kish’s Survey Sampling。也有很多關於如何從巨量資料中抽取不同種類樣本的技巧,例如 Synopses for Massive Data: Samples, Histograms, Wavelets, Sketches by Cormode et al. 另外也有許多軟體套件及資料庫實際提供了這些方法在裡面。
二、主要的資料轉換及資料輪廓描述
1. 資料轉換
(1) Structuring:改變資料格式或結構的動作
- 移動紀錄或欄位的位置
- 將一個欄位拆成多個欄位、將多個欄位合併成單一欄位
- 移除特定子集合資料
- 匯總(Aggregating)
- 將欄位值移至欄位(Pivoting)
(2) Enriching:新增資料至資料集的動作
- 水平合併資料(Join)
- 垂直合併資料(Union)
- 插入資料描述相關資訊(Metadata),例如資料建立時間、資料轉換的操作者、資料檔案名稱、資料位置等等
- 根據某一欄位建立新欄位
(3) Cleansing:修正異常資料的動作
- 修復空值
2. 資料輪廓描述
(1) 單一值(Individual Values):確認每個欄位值的合理性
- 值的形式是否符合規範,例如日期須為 YYYY-MM-DD
- 值的意義是否符合業務邏輯
(2) 組合值(Set-based):確認每個欄位值的分佈
- 在單一欄位或相關的多個欄位中,值分佈的形狀跟程度
在做完資料轉換以及結果描述之後,我們應該會有資料轉換邏輯對應的 Script 以及結果描述的步驟。接著優化,讓資料轉換的 Script 運作得更有效率更精確,於是我們得開始追蹤紀錄各個版本的 Script 以及修訂內容,而為了紀錄這些,我們可能需要另一個客制的資料輪廓描述資訊。
三、在資料服務流程架構中的資料處理流程
1. 吃資料
- Transforming:執行最小量的資料轉換,讓資料能夠做 Metadata 分析以及之後的精煉。
- Profiling:確認沒有掉資料,且資料品質問題得到修正。
2. 描述資料
- Transforming:在描述資料時需要對資料有廣泛的理解,因此需要做探索性的資料轉換,例如:將資料值拆開來評估資料品質及一致性、篩選資料用個別子集合評估資料範圍及正確性、資料匯總(Aggregating)及將欄位值移至欄位(Pivoting)。
3. 評估資料
- Transforming:當要新增資料集時,必須是評估新資料集與現有資料集是否有可能做垂直合併(Union),或是水平合併(Join)。而在水平合併時,則可能出現合併後的空值過多,或是多對多的問題。在做這些動作時,都會需要不少資料清理以及轉換。
- Profiling:利用 Set-based 的資料輪廓描述,可以提供一些基本的資料合併回饋。
4. 設計並建立精煉的資料
- Transforming:
(1) Structuring:調整資料結構及範圍至符合特定分析目的能增進效率,這時可能會需要做一些 Aggregate 及 Pivot。
(2) Enriching:利用垂直合併或水平合併,合併多個資料來源。另外若是有很頻繁使用的一些須經計算的欄位,也可以在這時建立新的欄位在資料集裡面。
(3) Cleaning:標示不正確或不一致的資料,或是用其他方式取代錯誤的值及空值。
- Profiling:
(1) 單一值(Individual Values):為了確保每個欄位的資料品質及一致性,必須確實確認每個欄位的值,一開始比較能確認的是值的形式,因為在對資料還不熟悉時,值的意義及合理範圍一開始比較無從確認,必須要等產出更多的資料分析報表,對資料有更多了解之後,再回來新增確認步驟。
(2) 組合值(Set-based):如同確認值的意義及合理範圍一樣,一開始只能做一些簡單的分佈確認,必須等到對資料有更多的了解之後,欄位之間的關聯以及值的趨勢變化等等才有可能被納入。
5. 特定需求的資料分析
- Transforming:
(1) Structuring:拉出所需要的子資料集、排除不需要的資料、匯總、Pivoting。
(2) Enriching:垂直或水平合併、新增複雜計算的欄位。
6. 建模與預測
- Transforming:針對類別型欄位的 Pivoting,以及數值型欄位值的正規化。
- Profiling:在建模與預測時,有個好處是能夠偵測到離群值,這些離群值有可能是需要清理的錯誤資料,也有可能是合理的資料,而進而增加我們對資料的理解。
7. 建立優化過後的資料集
相對於設計並建立精煉的資料同等重視 Transforming 及 Profiling,建立優化過後的資料集更重視 Profiling。
只有在新建資料的時候去確認資料轉換的邏輯是否正確是不夠的,資料轉換的 Script 需要能被持續自動地轉換新輸入的資料,因此必須要持續追蹤未來每個輸入值的變化,以及轉換後的正確性。包括需要去確認每個子資料集的資料分佈,評估資料值的分佈範圍以及分佈形狀的變化。
8. 例行性的資料分析與資料服務
如同相對於設計並建立精煉的資料同等重視 Transforming 及 Profiling,建立優化過後的資料集更重視 Profiling;例行性的資料分析與資料服務也相對於特定需求的資料分析更要求有效率地正確地去轉換新輸入的資料,以隨時取得正確的結果。