iT邦幫忙

2025 iThome 鐵人賽

DAY 18
0
自我挑戰組

Python × 政府開放資料:30天數據探索與圖表呈現系列 第 18

Day 18 地圖可視化 – 各縣市違規面積熱力圖

  • 分享至 

  • xImage
  •  

除了統計數據與折線趨勢,地理分布也是理解違規土地的重要視角。透過互動地圖,我們能直觀呈現各縣市年度違規土地面積的空間分布,顏色越深表示違規面積越大。

在這裡我們會利用Plotly Express來繪製台灣各縣市的地圖,將年度總違規面積以顏色深淺表示。

互動地圖的優勢在於:

  • 使用者可以縮放、查看特定縣市的數據
  • 對政策制定者或研究人員來說,更靈活地探索空間資料
  • 搭配違規面積數據,能讓「哪裡違規最多」一目了然
import pandas as pd
import plotly.express as px

# 指定 CSV 檔案的路徑
file_path = "IT_land_violation/land_violation.csv"

# 讀取 CSV 檔案,並指定標頭為第二行 (index 1)
df = pd.read_csv(file_path, header=1)

# 重新命名縣市欄位以便後續處理
df.rename(columns={"縣市面積_公頃": "County"}, inplace=True)

# 移除最後一行的總計數據,避免影響地圖繪製
df = df[df["County"] != "總計"]

# 解決 ValueError: Invalid elements include: [nan] 的問題
# 填充 '總計面積_公頃' 欄位中的 NaN 值為 0
df["總計面積_公頃"].fillna(0, inplace=True)

# 由於 Plotly Express 尚未內建台灣各縣市的地理數據,因此這裡需要手動定義各縣市的經緯度中心點
# 這些經緯度是地圖初始中心點的近似值,以便能顯示台灣地圖
county_coords = {
    "新北市": [25.01, 121.56],
    "桃園市": [24.97, 121.22],
    "臺中市": [24.14, 120.67],
    "臺南市": [22.99, 120.20],
    "高雄市": [22.62, 120.31],
    "基隆市": [25.13, 121.73],
    "新竹市": [24.81, 120.97],
    "新竹縣": [24.84, 121.01],
    "苗栗縣": [24.52, 120.81],
    "彰化縣": [23.99, 120.51],
    "南投縣": [23.83, 120.98],
    "雲林縣": [23.70, 120.43],
    "嘉義縣": [23.47, 120.45],
    "屏東縣": [22.67, 120.49],
    "臺東縣": [22.75, 121.15],
    "宜蘭縣": [24.75, 121.75],
    "花蓮縣": [23.97, 121.61],
    "澎湖縣": [23.57, 119.57],
}

# 增加經度和緯度欄位
df["lat"] = df["County"].map(lambda x: county_coords.get(x, [None, None])[0])
df["lon"] = df["County"].map(lambda x: county_coords.get(x, [None, None])[1])

# 繪製地圖
fig = px.scatter_mapbox(
    df,
    lat="lat",
    lon="lon",
    color="總計面積_公頃",
    size="總計面積_公頃",  # 以面積大小來決定點的大小
    hover_name="County",
    hover_data={"總計面積_公頃": True, "lat": False, "lon": False},
    color_continuous_scale=px.colors.sequential.Aggrnyl,  # 顏色漸層,從黃色到紅色
    size_max=50,
    zoom=6.5,
    center={"lat": 23.7, "lon": 121.0},
    title="台灣各縣市年度違規土地面積熱力圖",
)

# 更新地圖樣式,使用開放街圖(OpenStreetMap)
fig.update_layout(mapbox_style="open-street-map")

# 顯示地圖
fig.show()

https://ithelp.ithome.com.tw/upload/images/20250907/20178624wSpOebVmMR.pnghttps://ithelp.ithome.com.tw/upload/images/20250907/20178624V5kZcWLesV.pnghttps://ithelp.ithome.com.tw/upload/images/20250907/20178624wEdLnWw5Zr.pnghttps://ithelp.ithome.com.tw/upload/images/20250907/20178624aduNjxVj1B.png

從熱力圖中可以發現,部分都市化縣市呈現明顯的黃色高峰,違規問題集中,而農村或偏遠縣市則顏色較深。這種地圖可視化不僅讓數據更直觀,也有助於快速辨識 高風險區域,方便政府或管理單位針對特定地區制定執法策略。


上一篇
Day 17 月份趨勢分析
下一篇
Day 19 整合圖表 - 縣市 vs 月份雙維度
系列文
Python × 政府開放資料:30天數據探索與圖表呈現20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言