← 所有文章2026.10.09 · CS 513 · 資料清理的理論與實務

CS 513 資料清理互動圖解

從名稱分群、不同修復版本,到資料溯源、流程紀錄與概念對齊,用五組互動圖看懂資料清理的判斷過程。

資料清理不只是把字串改得整齊。看起來相似的紀錄,需要證據才能確認身分;違反限制條件的資料,可能有不只一種修復方法;最後產出的乾淨版本,也應該能交代是怎麼來的。

這篇用五組互動圖串起這個過程。例子依 CS 513 講義的機制重新設計,全部使用小型合成資料,不是客戶紀錄,也不是完整的清理引擎。SQL 語法留在原本的筆記,這裡看資料與判斷如何一步一步改變。

按「下一步」前進、「上一步」比較、「重設」重播。切換情境會從頭開始;窄螢幕可左右捲動圖。操作只在瀏覽器內,不會修改檔案或傳送資料到外部服務。

從相似名稱到確認對照

Text facet 先幫我們統計不同值,找出空白和寫法差異;clustering 再提出「可能代表同一件事物」的候選群。但它們都還沒有證明身分。

例子裡的 Harbor Cafe、CAFE HARBOR,以及多了空白的名字,會得到同一個詞彙 key。不過,其中一筆在另一個城市;就算同樣在台北,也不能只靠名稱與城市就斷定是同一家。

三個名稱都得到 cafe harbor,空白不參與分群。證據不足時三筆都待確認;若可信名錄已確認 r1、r2 的店家 ID 相同,只替這兩筆填 canonical name,保留原值與原始紀錄。

切換「證據不足」和「兩筆已查證」。讓結果不同的,不是更激進的字串規則,而是多了一份可信來源的身分對照:這個情境裡,兩筆紀錄有相同且經查證的店家 ID。

這裡只示範這組 ASCII 名稱的 key 計算,並沒有完整重製 OpenRefine。官方 clustering 文件也區分了字串層級的相似與語意上的 reconciliation。講義則用不同城市、名字相近的兩家飯店提醒同一件事。

另外,統一 canonical name 不等於刪除重複列。兩筆資料可能是同一家店在不同日期的觀察紀錄。先確認「一列代表什麼」,才知道能不能合併。

完整操作脈絡可接著看 OpenRefine 清理筆記。

符合規則的修復不一定就是真相

假設一個學號只能對應一個姓名。現在有兩組學號出現姓名衝突,另一組沒有。限制條件可以證明:這些衝突的 tuple 不能同時保留。但它無法證明哪個名字才對。

兩組互相獨立的衝突,每組保留一筆,形成四個只刪除 tuple 的 set-minimal 修復。四版都保留 (107, Wu);只查 ID 時,101、104、107 都在所有版本裡,儘管其中兩個 ID 的姓名不同。

圖中只准刪除 tuple,也只檢查 ID → name 這一條 functional dependency。這裡的 set-minimal 是指:不能只做目前刪除集合的一個更小子集,就讓資料一致。換個角度說,把任何一筆刪掉的資料加回來,都會重新出現衝突。

這個例子的四種修復恰巧刪除一樣多筆,但一般情況下,「刪除集合不能再縮小」和「刪除筆數全局最少」是不同定義。

最後一步切換查詢。如果問「學號與姓名」,只有 (107, Wu) 是每版共同的答案;如果只問「有哪些學號」,三個 ID 都確定存在。應該先在每個修復版本做同一個查詢,再對答案取交集;不能先把資料庫取交集,再以為查到的就是全部確定答案。

四個版本是邏輯上的可能性,不是要你真的執行四次刪除。實際採用哪一種,還需要政策與證據。延伸看 Database Repair。

從結果倒著追查來源

別人問一份清理後的檔案怎麼來的,只給檔名不夠。還需要輸入版本、做過的處理、當時的規則,以及誰負責。

clean.csv v2 wasGeneratedBy clean-run-42;這次執行 used raw.csv v1 與 rules.json v3,並 wasAssociatedWith 一位 reviewer。若規則版本沒有紀錄,該連結維持未知。

這些連結採用 W3C PROV 的基本概念:Entity 是資料產物,Activity 是發生過的處理,Agent 是對活動負責的人、組織或軟體,不是特指 AI agent。

注意箭頭的文字:輸出指回產生它的 activity。這張圖是沿著來源往回追,不是在畫資料向前傳送。此例只記錄 dataset 層級的依賴;若要回答某個儲存格怎麼產生,還需要更細的紀錄。

試著切換「規則紀錄缺漏」。不能因為知道原始資料和輸出,就補上一套看起來合理的規則。溯源讓結果可以被查證,但不會自動證明結果正確。

食譜和這次做菜的紀錄是兩件事

同一套清理流程,可以吃不同資料,也可以採用不同人工決策。光看流程圖,無法知道昨天那次到底做了什麼。

流程設計宣告輸入、格式統一、人工確認與輸出依賴。執行紀錄則指出具體的輸入與程式版本、review 決策及輸出。這次模擬保留四筆資料,其中一筆名稱待確認,一筆仍為空白。

Prospective provenance 是流程的設計;retrospective provenance 是某次實際執行留下的證據。切換兩種視角,注意資訊從「需要什麼」變成「當時用了哪一份」。

YesWorkflow 能從 script annotation 整理出宣告的流程結構。不過,寫了宣告,不等於程式真的跑過;執行證據仍要另外擷取或重建。如果有人確認了一組名稱對照,也應把決策存成可引用的資料產物。重跑程式,不會自動還原沒記錄的人工判斷。

真正的可重現還需要可取得的資料、程式、執行環境與外部依賴。延伸看 Workflow Automation 與 Data Provenance。

名稱相同也要比較涵蓋範圍

兩個組織都使用「North」這個分類,不代表它們把相同地區放進去。這已經不是改拼字,而是要對齊概念的範圍。

在成員完整的非空集合中,比較只屬於 A、共同涵蓋、只屬於 B 的成員,可得到相等、兩個方向的嚴格包含、部分重疊或互斥。A={1,2}、B={2,3} 時三區都有成員,因此是部分重疊。

選一個情境,逐步展開各自成員。這裡使用虛構地區 ID,並假設成員已完整列出。「部分重疊」需要兩者有交集,且各自都有另一方不包含的部分。只知道有交集,仍不能排除包含或相等。

這是 Taxonomy Alignment 的局部積木,不是完整推理器。真的整合兩棵分類樹,還要確認整個階層的父子關係、覆蓋假設與互斥限制能否同時成立。證據不足時,也可能保留多個合理版本。

講義依據與示意範圍

互動圖是依下列 CS 513 課程內容重新設計的教學例子,不是直接複製投影片圖像:

  • 03-OpenRefine-Introduction.pdf,尤其第 35–36 頁的 clustering 與誤判提醒,以及 OpenRefine introduction transcript。
  • 05-Datalog-123.pdf 第 11–15 頁,搭配 From IC Checking to IC Repair、Repair with DLV。圖解把課堂較大的修復例子縮成兩組獨立衝突。
  • 07-Workflow-Automation-and-Provenance.pdf,尤其第 14–16 頁,搭配 From Workflow Automation to Provenance。
  • 08-Data-Provenance.pdf 與 Finer Points of Provenance。
  • 11-Taxonomy-Alignment.pdf,包括第 10–14 頁的對齊問題與可能結果。

把這幾件事連起來,清理流程就不只是「改值」:先提出候選,確認憑什麼能改,沒有證據的地方保留不確定性,再記下實際做過什麼。資料看起來更整齊,不代表我們就更了解它。