台北人口分布地圖:空間資料的尺度變換
從台北市人口地圖看空間資料的尺度變換。本文章由台北大數據中心(Taipei Urban Intelligence Center, TUIC)提供。台北大數據中心下轄於台北市政府,致力於推動以資料與科技驅動的城市治理。
1 簡介
將數據思維融入政策規劃的流程中,已然成為城市治理的顯學。無論是疫情下的口罩銷售與分配、內湖通勤時段塞車狀況改善、Youbike 站點優化等,這些與民眾日常切身相關的議題,都需要以資料作為根基,爬梳問題源頭與解方所在。
不管任職於公部門或私部門,分析前的評估都很類似:確認目標、釐清問題本質、界定可行動的範圍。在理解問題本質之前,更必須對問題發生的背景與環境有基本認識。以市政議題的空間分析來說,區域內的人口分布會是一大重點,舉例來說,思考的問題包含人口都聚集在哪?哪些地方的老年人口較多?戶籍人口和實際居住人口有何差異?
利用公私部門提供或彙整後的資料,我們可以利用開源軟體例如 R 或者 QGIS ,在地圖上呈現台北市的人口分布,藉由圖表增進認識。
然而,若稍微深入探究「畫出台北市人口分布」的過程,會發現其中有不少眉角。舉例來說,台北市政府提供同時提供了里界圖的圖資 shapefile
與各里的人數統計 csv
,兩者有什麼不同?讀入帶有空間欄位的 csv
後,以資料框(dataframe)的型態儲存為變數,該怎麼補上空間資訊?另外,內政部提供的圖資包含統計單元的層級,和我們常見的行政區或村里有哪裡不一樣嗎?又要如何和村里層級互相轉換?
挖掘這些問題的答案,就像建構基礎建設的過程,有益無害。首先,釐清數據的定義本來就是分析前的必備事項,除了可以增加對於資料的認識,還能夠避免 garbage in garbage out 的情形;另外,也能夠在過程中確認不同源頭的資料有何差異,並藉此檢視資料之間的一致性與正確性;最重要的原因,則是在了解資料以後,因應業務邏輯,選擇適合的資料源、符合目的的資料層級。
舉例來說,若想比對台北市各區域歷年的人口變化,常見的選擇是使用里為單位,但其實村里劃分會因為施政而有所調整,具有調整邊界的特性,若改用長期且固定的統計區或者均值的網格,會是更好的選擇。
本文共分兩篇,第一篇以台北市民政局、內政部、某電信公司的資料為範例,簡介空間資料格式、不同人口統計資料來源與內容、空間尺度變換,以及實際的資料比對,最後視覺化呈現台北市戶籍人口資料的結果。文中包含三種空間數據層級,分別是村里、統計單元、網格,以及兩類型的人口衡量,分別是戶籍人口與信令人口。
第二篇則實際查看台北市的戶籍人口分布型態,以及信令居住人口和工作人口的分布差異,並且輔以其他圖資、另用不同指標,檢視台北市人口都在哪裡。
2 資料格式介紹
xlsx/ods
: 可以用 Excel/Google sheet 開啟的檔案格式,長相就是平常可以看到的試算表表格。政府單位常常以ods
發布資料,台北市民政局的人口統計即是提供ods
csv
: comma separated value, 用逗點分隔欄位,是非常常見的檔案格式。無論政府或私人單位都會以csv
發布資料shapefile
:儲存地理圖資的檔案格式,由shp
,shx
,dbf
所組成,分別紀錄了地理參照資料、索引、屬性。通常提供地理圖資時,會提供包含shp
,shx
,dbf
,prj
, 等格式的壓縮檔案。geojson
:基於 JSON 儲存地理資訊的檔案格式,內容包含空間範圍和屬性。 tif:儲存地理圖像的點陣圖格式,通常資料當中包含經緯度。衛星影像的原始格式即是tif
。
以 csv
和 ods
來說,資料當中可能會包含地理資訊,譬如有些資料會提供區域中心點(centroid) 的經緯度,讀入檔案後可以從資料匡直接轉成空間資料,但也有些資料僅包含區域的名稱,需要另外串接區域的地理資訊才能轉換。
shapefile
, geojson
, tif
因為資料本身就帶有地理特徵與非地理特性,因此沒以上述問題,只是在讀取的時候要特別注意座標參考系統(CRS)是否有誤,實務部分可以參考常見代碼,原理部分可以參考Geographic Information Systems and Science。
3 資料來源與資料內容
- 台北市民政局:台北市各里人口數和台北市里界圖,資料格式分別為
csv
和shapefile
- 內政部:台北市人口統計_村里與和台北市人口統計_最小統計區,資料格式分別為
csv
和shapefile
- 某電信公司:提供以網格為單位的信令資料,原始格式是
csv
,已經轉換為shapefile
如上所述,台北市民政局和內政部各自都提供了 109 年 12 月、以 csv
格式儲存的人口統計數字,以及分別以里和最小統計區為單位、用 shapefile
格式儲存的地理圖資。
在實際比對之前,要先稍微解釋一下不同空間數據層級。
- 村里:行政單位因為施政需求劃分的邊界,分為全國、縣市、鄉鎮區、村里等四級,政府單位通常會提供各級的指標,譬如以村里為等級的人口數量。中選會的選舉資料也是以此為單位,公告得票數。
- 統計單元:村里會因為施政需求有所變動,為了時間序列的分析,內政部統計處制定了長期、固定性、小型的空間單元,「以利強化與深化社經資料之空間分析」。層級包含最小統計區、一級發布區、二級發布區,二級發布區包含了一級發布區,一級發布區包含了最小統計區,其邊界可以貼齊;再往上的三級發布區就可以對應回村里。因為尺度遠遠小於村里,可以看到很多顆粒度(granularity)夠細的資料。
- 網格:將空間切成等面積的格子。計算區域特性譬如每個網格中的人口時,因為每個網格的面積相等,不用擔心密度問題,可以直接上色,常用來呈現地勢高低或者空氣污染。格子的外型以方形與六角形為主,取捨的辯證可參考空間網格,正方形還是六角形好?
以台北市人口分布為例,因為顆粒度細,內政部的最小統計區在分析上很有幫助;然而,對市政府來說,若局處沒辦法根據最小統計區算出的結果推行政策,便失去了意義,因此有時候以里為單位的資料也很足夠。這也呼應了前述所提,因應不同業務邏輯選擇適合的資料。另外,資料當中的人口其實包含了兩種類型。
- 戶籍人口:即依照民眾登記的戶籍,以行政區域為單位計算人口。
- 信令人口:電信公司利用不同類型手機信令(signal)資料,用途包含判斷使用者 OD (origin & destination)、移動目的、行徑軌跡等,依照移動特徵譬如移動時間、停留時間,最後分辨出居住人口與工作人口,再以網格為單位,依照電信公司的市佔率與用戶人口特性,加權推估出每個網格的人口數與其性別年齡組成。詳細方法可以參考這篇報告。
4 空間層級轉換
因為分析需求,需要在村里、統計區、網格等不同空間層級之間轉換。舉例來說,取得信令資料當中的居住人口後,想以里為單位,和各里的戶籍人口比對,這時候就需要從網格轉換為里。
本文採取的轉換方式,是先取不同層級的交集(intersection) ,譬如取里和網格的交集,接著依照交集面積佔原始面積的比例,將原始人口分配到交集區域人口,公式如下:交集區域人口 = 原始人口*(交集面積/原始面積)。
這個方法背後的假設是人口均勻分散在於原本的區域之中,但常理下人口從來不是均勻分散,因此若原本的區域越大,假設越容易失準,計算得到的交集區域人口也會失準,所以,原始區域資料顆粒度越小越好。
利用上述方法,就能夠在不同的空間層級中轉換數據。以信令資料的例子來說,我先取了信令網格和里的交集,接著計算交集面積的推估人口,再依照里為單位聚集(aggregate)資料,由此一來,便能夠將網格的信令人口轉換成里的信令人口了。
5 原始資料比對
5.1 人口比對
實際比對北市府的村里人口和內政部的村里人口,時間都挑選 109 年 12 月,兩者數字完全相同,並且村里的數目都是 456 個。
另外比對北市府的村里人口和內政部的統計區人口,兩者的數字差異僅有 0.03%。因此若單純要計算人口分布,挑選北市府或內政部的資料,問題不大。
5.2 圖資比對
實際比對分別北市府的村里界圖和內政部提供的台北市村里圖資,兩者也都能夠完全串接,村里的數目都是 456 個。
接著比對分別讀入北市府的村里界圖和內政部提供的台北市統計單元圖資,再來將後者依照村里聚集,計算結果後發現,後者的村里數目只有 449 個,少了 7 個里,因此再串接市府資料後比對缺值,差異列表如下:
## # A tibble: 7 × 3
## 編號 行政區 里
## <dbl> <chr> <chr>
## 1 63000080040 文山區 政大里
## 2 63000080041 文山區 樟文里
## 3 63000080042 文山區 興邦里
## 4 63000080043 文山區 樟樹里
## 5 63000090020 南港區 重陽里
## 6 63000100039 內湖區 寶湖里
## 7 63000100040 內湖區 南湖里
利用地圖畫出市政府的村里界圖和內政部的村里界圖,便可以看到消失的七個里來自何處。雖然兩者都是 109 年 12 月的資料,但內政部資料並沒有更新到最新的村里界範圍,仍維持在村里界圖重劃前的疆域。下方整理了改制前(等號左邊)與改制後(等號右邊)的情況,也用地圖呈現行政區域劃分的情形。
- 樟腳里 = 樟腳里 + 樟樹里
- 樟新里 = 樟新里 + 樟文里
- 興豐里 = 興豐里 + 興邦里
- 萬興里 = 萬興里 + 政大里
- 湖興里 = 湖興里 + 寶湖里
- 葫洲里 = 葫洲里 + 南湖里
- 東新里 = 東新里 + 重陽里
沒有更新里界劃分,各自計算人口影響不大,但在分析和轉換上會有負面影響。因為內政部缺上述七個里的資料,若以市府資料為基底,串接後會短少約 45,000 人;若以內政部資料為基底,排除上述七個里,發現串接後內政部資料較市政府資料多了 50,000 人,這個差異便是來自重劃改制的七個里,取用資料時請務必留意。
6 人口分布視覺化
最後將結果打包為一個簡單的互動圖表,使用者可以自行按照需求選擇空間層級與空間指標,前者包括村里、統計單元、網格,後者則包括戶籍人口密度與信令居住人口密度。下篇文章會接續著分析人口分布型態,還有比較信令資料與戶籍資料的差異,並將大眾運輸資料納入考量。
底下就以一張台北市村里的戶籍人口密度做結!
7 小結
本文以台北市為例,簡介了不同格式的空間資料,並實際比較北市府和內政部所提供的人口統計資料與圖資,以及空間尺度變換的實際作法,最後以面量圖視覺化呈現台北市戶籍人口資料。
最後感謝 TUIC 諸位夥伴提供的建議,以及 DD 幾位朋友不時分享好看的圖表並帶來溫暖,還有帶領我入門空間分析的溫教授和承軒助教。