中選會選舉資料
經歷第三十八週的約維安計畫:中選會選舉資料操作處理,我們手邊已經取得整齊格式(Tidy format)資料:
president.csv
legislator.csv
party_legislator.csv
polling_place.csv
在這週我們將運用關聯式資料庫的重要觀念:正規化(Normalization)進一步將整齊格式資料轉換為正規化的資料格式。
何謂正規化
資料庫的資料儲存模式非常多元,包含關聯式、文件式、網絡式或者鍵值式等,其中基於關聯式模型(Relation model)所建立的就稱為關聯式資料庫。建立關聯式資料庫的過程中必須要仰賴的其中一個技巧與觀念是正規化(Normalization)。
簡而言之,正規化就是將原始資料轉換為符合正規化格式(Normal Form, NF)的過程。正規化格式是一種有順序性的資料描述樣態,所以在正規化格式前面還會再加上由 1 起始的整數作為前綴字。
正規化格式
目前主流的正規化格式前綴整數從 1 起始至 3,就稱為第一正規化(First Normal Form, 1NF)、第二正規化(Second Normal Form, 2NF)以及第三正規化(Third Normal Form, 3NF)。
要求更多、更為進階與嚴謹的正規化格式其命名前綴字準則就有所調整,例如介於第三和第四正規化格式之間有 Elementary Key Normal Form, EKNF、Boyce–Codd Normal Form, BCNF;介於第四和第五正規化格式之間有 Essential Tuple Normal Form;介於第五和第六正規化格式之間有 Domain-Key Normal Form。
接著我們解釋主流的正規化格式,即第一正規化格式至第三正規化格式其定義與要件:
第一正規化(First Normal Form, 1NF):每一個由列欄對應的儲存格中都要有資料,也只能有一份資料;每一列資料必須要對應獨一且不重複的識別整數,即流水編號或稱主鍵。例如在整齊格式資料中,每一筆資料都是候選人在一個行政區的一個投票所的得票數。
第二正規化(Second Normal Form, 2NF):資料必須先符合第一正規化格式,並進一步消除部分相依性(Functionally dependent)。部分相依性聽起來非常抽象,我們必須舉例說明,例如在整齊格式資料中,我們將 county、town、village 與 polling_place 提取出來成為 districts 資料表;或者將 party 提取出來成為 parties 資料表,以及將 candidate 提取出來成為 candidates 資料表,簡而言之,消除部分相依性就是將資料個體獨立出來,進而成為主要的父母資料表(Parent Tables)。
第三正規化(Third Normal Form, 3NF):資料必須先符合第二正規化格式,並進一步消除遞移相依性(Transitive dependency)。遞移相依性同樣聽起來非常抽象,我們必須舉例說明,例如在 polling_places 資料表中,我們將原本資料中的「投票數」欄位移除,因為投票數可以透過有效票數加上無效票數計算而得;又或者我們將原本資料中的「已領未投票數」欄位移除,因為已領未投票數可以透過發出票數減去頭票數計算而得。簡而言之,消除遞移相依性就是將可以透過衍生計算而得的欄位移除,進而讓資料表更為精煉簡潔。
完成中選會選舉資料正規化之後,第三十九週約維安計畫:中選會選舉資料正規化來到尾聲,希望您也和我一樣期待下一篇文章。對於這篇文章有什麼想法呢?喜歡😻、留言🙋♂️、訂閱📨或者分享🙌
約維安計畫學員專區
約維安計畫學員可以點選下列連結取得本篇文章的正規化格式資料。