基礎題¶
若只用
email當成去重鍵,哪些情況可能誤判為不同人?若同一個人可能同時使用公司信箱與私人信箱,去重策略要如何調整?
為什麼去重時通常要保留原始輸入順序?若不保留,可能帶來什麼問題?
雜湊碰撞是什麼?在日常資料清理工作中,你需要擔心它嗎?為什麼?
若直接用
set()對整列資料去重,「欄位順序不同但值相同」的兩筆資料會被正確去重嗎?
實作題¶
修改
deduplicate_records,讓它可以回傳每筆保留資料對應的原始索引(例如[(0, record0), (1, record1)])。增加一個選項,允許只去除前後空白、但不轉小寫,讓呼叫端決定是否做大小寫正規化。
將重複資料輸出成另一份清單,供人工覆核,格式為
{"原始索引": int, "被視為重複的主紀錄索引": int}。為
record_fingerprint增加一個測試:驗證欄位順序不同但值相同的兩筆資料,指紋是否一致。
反思題¶
用你自己的話說明:正規化步驟和雜湊指紋各自負責解決什麼問題?兩者缺一可以嗎?
如果資料量從 1,000 筆增加到 100 萬筆,目前這個 O(n) 的去重流程還能直接使用嗎?你認為瓶頸會出現在哪?
雜湊函式是「不可逆」的。這個特性在資料清理場景有什麼好處?在什麼情況下反而是限制?