本文需要基礎:必須要會使用 Python,若熟悉 Pandas 則可以快至一日內上手。
問題:假如你的簡報,要同時表達台中市各區的數值(例如人口數、空氣品質之類的),並強調彼此間的差異,你會怎麼做呢?
- 是表格?
南屯區 | 烏日區 | 中區 | … | 龍井區 | 清水區 | 梧棲區 |
---|---|---|---|---|---|---|
0.417 | 0.720 | 0.000 | … | 0.085 | 0.039 | 0.169 |
-
還是長條圖?
-
如果直接放一張地圖呢?是不是會更加生動?
用 Python 畫地圖的好幫手 - GeoPandas
只要 5 個步驟,畫出自己決定各區顏色的臺中地圖!
0. 下載圖資
這個函式庫沒有內建台灣圖資喔!要到這裡下載 SHP 格式的「台灣村里界圖」
1. 安裝 GeoPandas
1 | pip install geopandas |
2. 引入必要函式庫
1 | import matplotlib.pyplot as plt |
要是這一步執行出錯,可能是剛才沒安裝成功。
3. 讀取圖資
1 | villages_shp = gp.read_file("town_shp/TOWN_MOI_1060525.shp") #全台灣村里界圖 |
前 5 筆資料看起來就像這樣
_ | COUNTYCODE | COUNTYID | COUNTYNAME | TOWNCODE | TOWNENG | TOWNID | TOWNNAME | geometry | dummy number |
---|---|---|---|---|---|---|---|---|---|
12 | 66000 | B | 臺中市 | 66000070 | Nantun District | B07 | 南屯區 | POLYGON ((120.6080591220001 24.12669994800007,… | 0.417022 |
13 | 66000 | B | 臺中市 | 66000230 | Wuri District | L15 | 烏日區 | POLYGON ((120.6080591220001 24.12669994800007,… | 0.720324 |
244 | 66000 | B | 臺中市 | 66000010 | Zhong District | B01 | 中區 | POLYGON ((120.6857662670001 24.14327484100005,… | 0.000114 |
245 | 66000 | B | 臺中市 | 66000020 | E. District | B02 | 東區 | POLYGON ((120.700333524 24.15095274500004, 120… | 0.302333 |
246 | 66000 | B | 臺中市 | 66000030 | S. District | B04 | 南區 | POLYGON ~((120.685349072 24.12172426600006, 120… | 0.146756 |
4. 給臺中各區數值
為了方便快速學會這個工具,本例子先用隨機亂數產生。應用上可能會是人口密度、公司行號數目等有意義的資料。
1 | #隨機產生臺中各區數值 |
5. 畫出地圖
GeoPandas 的 GeoDataFrame,和 Pandas 的 DataFrame 同樣內建 plot() 方法,但前者 override 成直接畫出地圖。
1 | taichung_shp.plot( |
輸出:
關於作者:
@LKY 自認不夠資格叫作 Data Scientist 的資料科學工程師,最近關注救災、救護相關的 Open Data。