【尋找六都章魚哥】處理選舉村里數據時,你可能遇到的檻

Haohsiang Ko
10 min readNov 20, 2018

--

最近和 👌 曼努 manzoo 一起參與了網路社群自主發起的「50天50張選舉圖表」project,我們的第二個作品「尋找六都章魚哥」終於在生活的夾縫中完成了。

如果你曾經坐在電視機前看選舉開票,可能會發現記者常守在一些「神準里」、「指標里」投票所進行連線,緊張的那幾個小時裡,人們都希望早一點看到未來。這個作品就是要找出那些很神準的地方。

這篇記錄的是製作過程中曾遇到的問題,比較boring,不過希望以後大家(誰?)在處理選舉數據時,如果遇到類似狀況都能活得容易一點。

原始數據

想要找選舉數據,基本上都會透過「中選會選舉資料庫」來下載,我們就從這裡開始。

中選會選舉資料庫網站

一開始要先複習一下公民課。

這次鎖定的是六都直轄市,希望從近十年的五次大選(包含總統選舉和地方首長選舉),評估哪個里足以作為該市章魚哥,不過這就涉及過去的縣市升格史和選舉史,我們要先知道:

2008年:總統大選。

2009年:縣市長選舉。
桃園縣這時候還沒升格,有在這次選舉之列。
台北縣、舊台中縣市、舊台南縣市、舊高雄縣將要升格,並無重新選舉。

2010年:五都直轄市選舉。
台北縣升格為新北市。
舊台中市、舊台中縣合併升格為直轄市台中市。
舊台南市、舊台南縣合併升格為直轄市台南市。
舊高雄縣、舊高雄市(原本已是直轄市)合併為直轄市高雄市。

2012年:總統大選。

2014年:桃園縣升格,六都直轄市選舉&縣市長選舉。
從這年開始,直轄市長、縣市長同時選。

2016年:總統大選。

知道這些背景資訊,對找到你要的數據有幫助。

從上述網站側欄「直轄市長」、「縣市長」條件,基本上就能找到數據下載,面對琳瑯滿目的細項,我們選最下面的「選舉得票概況」。然後,迎接你的就是第一個檻。

選用合適資料解析度

打開壓縮檔後,你可能看到一串檔名挑戰你的耐心,一個一個開,一個一個關。其實他們分別代表不同的資料解析度或資料欄位。

2016年總統大選
A05–1:最細到「縣市」等級
A05–2:最細到「鄉鎮市區」等級
A05–3:最細到「村里」等級
A05–4:最細到「投開票所」等級
對我們這次的主題來說,村里是最合適的資料解析度,所以選3。

2014年六都直轄市長選舉
數據載下來後你會發現沒得選,就只有最細緻的投開票所等級,這狀況你可能要用EXCEL的「樞紐分析」加總,自己生出村里等級的數據。

2012年總統大選
數據載下來後你會發現沒得選,就只有最細緻的「A05–4」(投開票所等級),這狀況你可能要用EXCEL的「樞紐分析」加總,自己生出村里等級的數據。

2010年五都直轄市長選舉
數據載下來後你會發現沒得選,就只有最細緻的投開票所等級,這狀況你可能要用EXCEL的「樞紐分析」加總,自己生出村里等級的數據。

2009年縣市長選舉
這是為了要取桃園縣的數據。數據載下來後你會發現沒得選,就只有最細緻的投開票所等級,這狀況你可能要用EXCEL的「樞紐分析」加總,自己生出村里等級的數據。

2008年總統大選
數據一解壓縮,你會看到一串如「rtp02–2–100」的檔名震懾住你,先不要慌。

rtp?? 代表不同數據欄位。
rtp02:有人口數據、有效和無效票數、有投票資格人口比率、整體投票率等數據,但
無法知道各候選人得票狀況。
rtp03:只有各候選人的得票數和得票率。
rtp06:有各候選人得票數、得票率,還有該地區有效或無效票數、選舉人數、投票率等,
很完整,欄位可以和上面的2012年、2016年切齊。

-? 代表資料的解析度。
-1:直轄市、縣市等級
-2:鄉鎮市區等級
-3:村里等級
-4:投開票所等級

-??? 末三碼代表「直轄市、縣市」
100 = 台北市
200 = 舊高雄市
301 = 台北縣
302 = 宜蘭縣
303 = 桃園縣
304 = 新竹縣
305 = 苗栗縣
306 = 台中縣
307 = 彰化縣
308 = 南投縣
309 = 雲林縣
310 = 嘉義縣
311 = 台南縣
312 = 高雄縣
313 = 屏東縣
314 = 台東縣
315 = 花蓮縣
316 = 澎湖縣
317 = 基隆市
318 = 新竹市
319 = 舊台中市
320 = 嘉義市
321 = 舊台南市
401 = 金門縣
402 = 連江縣

綜合上面的規則,我們要取rtp06–3-???的檔案,因為這時很多縣市還沒升格,所以還要進行數據的合併(深呼吸)。(至少你已經知道要開哪些檔了)

簡言之,2008年、2016年的數據可以直接找村里等級的數據,只是找到對的檔會拖到你一點時間,但其他年度的數據都只有最細等級的投開票所,要自己整合。

行政區名稱統一

因為縣市升格之故,我們希望用最新的名稱往前追溯套用,這些名稱基本上循一定的規則更改。

A (縣) B (鄉/鎮/縣轄市) C (村/里)
變成
A 市 B 區 C 里

如果是市(如:舊台中市、舊台南市),因為外在名稱雷同的原因,這些地方基本上不變。簡單說,雖然都叫「市」,但所指的整體範圍和實質地位已經不一樣。

A 市 B 區 C 里

建議在統一名稱的時候,維持以「區+里」當單位,避免不同區出現里名重複的狀況。

另外因為涉及舊縣市的合併,還有一種狀況是合併後出現區名重複的狀況(還好有發現),這次的經驗是在「舊高雄縣的三民鄉」,其實這個地方在2008年也改名為原住民族意涵的地名「那瑪夏鄉」,不過可能存在時間差,當年總統大選的資料集還是用舊稱。

也就是說,如果你直接在EXCEL內把高雄縣三民鄉改成高雄市三民區,將會出問題,因為舊高雄市也有三民區。

那瑪夏鄉的正名過程也包含村里名稱。
「民族村 →
南沙魯村」(Nangisarʉ)
「民權村 →
瑪雅村」(Mangacun)
「民生村→
達卡努瓦村」(Tangaanua)

原住民族地名正名也出現在舊高雄縣桃源鄉,轄下的梅蘭村2010年改為「拉芙蘭村(Lavulang)」,在合併2008、2010年後數據時要注意。

里的增刪

這次碰了村里數據,實在覺得這比想像中還難處理。除了上面提到的更名問題,過程中還發現許多里的增刪問題需要留意。雖然這些地方對尋找章魚哥的影響並不大,但如果做其他主題涉及村里,這可能會是一個共通的坑。

這次我們的數據的範圍是2008–2016年間五次大選,以下總結過程中涉及到的數據缺值(里的增刪),這裡談的里名都用升格後的名稱為準(就不寫鄉鎮市、村了)。

臺北市
下面這些里缺2008數據,因為他們是2010年6月才新增。
・文山區樟文里、樟樹里、政大里、興邦里
・南港區重陽里
・內湖區寶湖里、南湖里

新北市
下面這些里(當時可能叫村)缺2008數據,除了五股區陸一里之外,其他是在2009、2010年新增。
・淡水區幸福里、民權里、新義里、新民里、學府里、新春里、大庄里、北新里、正德里
・三峽區龍恩里、龍學里
・汐止區保新里、城中里、建成里、湖蓮里
・五股區陸一里(2008年應叫五股鄉陸一村)當年並沒有相關選舉得票數據,不過該地也查無村里的增刪紀錄。有資料提到當地曾進行眷村改建,居民搬遷至附近其他里,或許當年缺數據和這件事有關。

桃園市
缺2008, 2009年數據,都是在2009, 2010年新增而來。
・八德區大順里、永豐里(剛新增叫茄豐里,隨後改名)
・中壢區林森里、自信里、金華里、龍慈里
・楊梅區高上里、富豐里、瑞溪里、三民里、裕新里、頭湖里

缺2008 — 2012年數據,都是在2013年9月新增而來。
・蘆竹區吉祥里、中山里、福昌里、福興里、順興里、營福里、福祿里、興榮里、中興里、長壽里、上興里、蘆興里
・觀音區草新里

缺2014, 2016年數據:
・蘆竹鄉大華村在2014年刪除。

台中市
比較不涉及村里增刪,而是因投開票所劃分而形成的合併現象。
・西屯區福恩里、協和里在2014, 2016年部分投開票所合併成一單位。
・北區樂英里、金華里在2008年部分投開票所曾合併一單位。

台南市
・北區的大仁里、大山里在2008, 2012, 2016總統大選時合併成一單位計算。2010, 2014縣市長選舉則是各自計算。
・東區復國里、中興里2008年合併為一單位計算,但兩者在2010年6月刪除,因此缺2010 — 2016數據。

高雄市
・杉林區大愛里2014年7月才新增,缺2008 — 2012數據。
・三民區港北里2010.2刪除,缺2010 — 2016數據。
・小港區海澄里、海昌里、海豐里、海原里、海城里2008年合併一單位計算。這五個里在2010年10月刪除,缺2010 — 2016數據。
・左營區復興里2014年7月刪除,缺2014, 2016年數據。
・鳳山區海風里、誠正里2014年7月刪除,缺2014, 2016年數據。

想要弄清楚村里的增刪過程我覺得不太容易,五次大選數據可以比對出可能的增刪,但里名的更名(例如那瑪夏鄉村名正名)、或特殊狀況(例如新北五股陸一里)就要人工慢慢查才能得知了,理解地方故事也是滿有趣的過程,不過如果能找出更系統化的方法可能更好。

其實從內政部戶政司網站可以找到村里的增刪。點擊左欄「機關連線資訊」,然後點「戶役政資料代碼內容」,裏頭有新增、刪除的村里代碼。

其實我有把那兩區各個檔案下載下來,不過整理之後發現數據不太乾淨,例如有錯字、村里代碼誤植、重複出現的狀況,後來多份數據比對也發現記錄有少,較不建議再從增刪清單去整理一遍。我整理的版本在這邊,http://bit.ly/2KjhtjI,要留意可能存在漏網之魚。

或許從歷史版本的村里代碼比對差異,會更準確。

整理過程中有兩個來源推薦參考,雖然最後一次更新好像是2014年(有人知道更新的嗎?),不過已經能幫上很大的忙。
http://hsinchu-meng-733082.middle2.me/
https://sheethub.com/ronnywang/%E4%B8%AD%E8%8F%AF%E6%B0%91%E5%9C%8B%E6%9D%91%E9%87%8C

如果是打算要處理2018年大選的村里數據,可能也要有個心理準備,因為2016年後也有滿多村里涉及增刪。

里名的字無法顯示

當你在EXCEL打開這些選舉數據、設法要統一格式時,同一個里出現異體字,或是難字本身的編碼問題可能也會花上你一點時間。

五次大選的數據中,我覺得2016年的是最為乾淨的版本了,而我們也希望套用現制到過去進行計算,因此就用16年的寫法作為依據。

以下整理過程中你可能會遇到的難字,要在資料海中找出那些字不完整的row,不妨就善用EXCEL篩選器功能,去搜尋包含特殊問號的資料,然後重新輸入。

新北市
板橋區公舘里
中和區瓦磘里
中和區灰瑤里
永和區新廍里
樹林區獇寮里
土城區峯廷里
三峽區永舘里
新店區五峯里
坪林區石𥕢里
瑞芳區爪峯里
瑞芳區濂洞里
瑞芳區濂新里
萬里區崁脚里

桃園市
大園區菓林里
新屋區槺榔里(2009縣市長數據寫成糠)

台中市
大安區龜壳里
外埔區廍子里
清水區槺榔里
大肚區蔗廍里
北屯區廍子里
西區公舘里
西區双龍里

台南市
後壁區後廍里
新營區舊廍里
麻豆區晉江里
麻豆區寮廍里
官田區南廍里
七股區塩埕里
七股區槺榔里
佳里區頂廍里
山上區玉峯里
新化區山脚里
新化區𦰡拔里
永康區塩行里
永康區塩洲里
安南區塭南里
安南區塩田里
安南區公塭里
龍崎區石𥕢里

高雄市
岡山區嘉峰里
岡山區台上里
湖內區公舘里
阿蓮區峯山里
左營區廍北里
左營區廍南里
鳥松區坔埔里

小結

上面這些是處理村里等級的選舉資料(跨時間維度)時,可能會遇到的狀況。

我們最終整理出來的資料集在這邊(不早拿出來),給有興趣的朋友參考~裏頭還有滿多欄位可以再做其他分析。如果文中一些情況你有好方法也歡迎跟我們分享(感激不盡)。

翔的Medium第一篇終於出爐了(難讀的工具文,真的有人想看?),如果你也看到這了,給自己一個掌聲吧!

--

--