彙整 民國 107 年至 114 年(連續 8 年) 道路交通事故逐案細部微資料,聚焦於 毒駕事故、 未滿18歲無照駕駛 與 兒童用路死傷 (0-12歲) 之全國鄉鎮市區多維度統計與清洗去雜訊。
114年達 273 人次(因應喪屍煙彈 / 依托咪酯專案查緝與定義標準化呈現顯著攀升,年增 +217%)。
由 107 年 4,314 人降至 114 年 2,479 人。已嚴格限縮為未成年主駕駛本人(排除同乘乘客與行人)。
已精確剔除原始資料中將撞樹、動物、障礙物預設填為「0歲」之大量雜訊,如實呈現 0-6 歲幼兒與 7-12 歲學童死傷。
資料來源自警政署歷年 A1 (24小時內死亡) 與 A2 (人員受傷) 逐案資料彙整
CSV 檔案共 11 個欄位,UTF-8 編碼含 BOM,已完成鄉鎮市區標準化與事故類別標註
| 欄位名稱 | 型態 | 範例值 | 欄位說明與定義 |
|---|---|---|---|
| 年度(民國) | String | 114年 | 民國事故年度 (107年 ~ 114年) |
| 西元年 | Integer | 2025 | 西元事故年份 (2018 ~ 2025),方便直接 groupby 聚合 |
| 縣市 | String | 新北市 | 全國 22 縣市(經發生地點正規化校正) |
| 行政區 | String | 三重區 | 鄉鎮市區(如大安區、埔里鎮等) |
| 違規/事故類別 | String | 毒駕事故(吸食違禁物) | 共3類:毒駕事故 / 未滿18歲無照駕駛 / 兒童交通事故死傷 |
| 統計對象年齡層 | String | 幼兒(0-6歲) | 幼兒(0-6歲)、國小學童(7-12歲)、少年(13-17歲)、全齡毒駕 |
| 發生月份 | String | 01月 | 事故發生月份 (01月 ~ 12月) |
| 涉案人數 | Integer | 3 | 涉及該違規或指標之當事者人數 |
| 死亡人數 | Integer | 0 | A1 類事故 24 小時內死亡人數 |
| 受傷人數 | Integer | 2 | A2 類事故受傷人數(含重傷與輕傷) |
| 死傷總人數 | Integer | 2 | 死亡人數 + 受傷人數 合計總數 |
由政府資料開放平臺 (data.gov.tw) 內政部警政署「傷亡道路交通事故資料逐案細部資料集」自動提取
比對事故微資料之「肇因研判子類別名稱-主要」與「肇因研判子類別名稱-個別」,嚴格比對包含關鍵字 吸食違禁物駕駛 或 吸毒 之當事者個案。
篩選「當事者年齡 < 18」且「當事者順位 = 1」(主駕駛人)。精確排除行人與非動力慢車,限定為動力汽機車(普通重機、微電車、大客貨車等)。
原始資料中常將撞擊「路樹、動物、障礙物」或肇逃者預設填為 0。本版本進行關鍵清洗:嚴格排除性別為「無或物」、「動物」之非自然人紀錄,保留真實的 0-6 歲幼童與 7-12 歲學童死傷。
從「發生地點」精確萃取行政區(如臺北市大安區、南投縣埔里鎮等),若地點字串未完整標註,則以「處理單位名稱警局層」自動補全縣市歸屬,確保全國 22 縣市跨年度統計口徑完全對齊。
提供開箱即用的範例程式碼,直接複製貼到 Jupyter Notebook 或 Google Colab 即可一秒載入雲端資料繪圖!
# 步驟 1: 匯入 Pandas 並直接從本站雲端讀取 CSV 資料
import pandas as pd
# 無需預先下載檔案,直接指定 Cloudflare Pages URL 即可秒級載入!
url = "https://traffic-safety-opendata.pages.dev/traffic_safety_stats_107_114.csv"
df = pd.read_csv(url)
print(f"資料載入成功!總筆數: {len(df):,} 筆")
print(df.head())
# 查看欄位型別與基本資訊
df.info()
# 步驟 2: 繪製 2018-2025 歷年重點指標趨勢 (雙 Y 軸折線圖)
import pandas as pd
import matplotlib.pyplot as plt
# 設定中文字型 (依作業系統相容常用中文字體)
plt.rcParams['font.sans-serif'] = ['Microsoft JhengHei', 'PingFang TC', 'sans-serif']
plt.rcParams['axes.unicode_minus'] = False
df = pd.read_csv("https://traffic-safety-opendata.pages.dev/traffic_safety_stats_107_114.csv")
trend = df.groupby(['西元年', '違規/事故類別'])['死傷總人數'].sum().unstack()
fig, ax1 = plt.subplots(figsize=(10, 5.5))
# 左軸:兒童死傷 (萬級數量)
l1 = ax1.plot(trend.index, trend['兒童交通事故死傷(0-12歲)'], marker='o', color='#2563eb', label='兒童死傷 (0-12歲)', linewidth=2.5)
ax1.set_ylabel('兒童死傷人數 (人)', color='#2563eb')
# 右軸:無照駕駛與毒駕 (百/千級數量)
ax2 = ax1.twinx()
l2 = ax2.plot(trend.index, trend['未滿18歲無照駕駛(駕駛人)'], marker='s', color='#d97706', label='未滿18歲無照駕駛', linewidth=2.5)
l3 = ax2.plot(trend.index, trend['毒駕事故(吸食違禁物)'], marker='^', color='#dc2626', label='毒駕事故', linewidth=2.5)
ax2.set_ylabel('無照 / 毒駕 人數 (人)', color='#dc2626')
ax1.legend(l1 + l2 + l3, [l.get_label() for l in l1 + l2 + l3], loc='center left')
plt.title('2018-2025 台灣交通安全重點指標歷年趨勢')
plt.grid(True, linestyle='--', alpha=0.5)
plt.tight_layout()
plt.show()
# 步驟 3: 繪製 2025 (114年) 各縣市未滿 18 歲無照駕駛事故 Top 10 (水平長條圖)
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft JhengHei', 'PingFang TC', 'sans-serif']
plt.rcParams['axes.unicode_minus'] = False
df = pd.read_csv("https://traffic-safety-opendata.pages.dev/traffic_safety_stats_107_114.csv")
# 篩選 2025 年無照駕駛個案並按縣市加總涉案人數
df_2025 = df[(df['西元年'] == 2025) & (df['違規/事故類別'] == '未滿18歲無照駕駛(駕駛人)')]
top10 = df_2025.groupby('縣市')['涉案人數'].sum().sort_values().tail(10)
plt.figure(figsize=(9, 5.5))
bars = plt.barh(top10.index, top10.values, color='#0284c7')
plt.title('2025年 各縣市未滿 18 歲無照駕駛事故人數 Top 10')
plt.xlabel('涉案人數 (人)')
for bar in bars:
w = bar.get_width()
plt.text(w + 3, bar.get_y() + bar.get_height()/2, f'{int(w):,} 人', va='center', fontsize=9)
plt.tight_layout()
plt.show()
# 步驟 4: 使用 Pivot Table 樞紐分析毒駕近年暴增的縣市熱區
import pandas as pd
df = pd.read_csv("https://traffic-safety-opendata.pages.dev/traffic_safety_stats_107_114.csv")
# 交叉分析: 列為縣市、欄為年份
df_drug = df[df['違規/事故類別'] == '毒駕事故(吸食違禁物)']
pivot_drug = df_drug.pivot_table(index='縣市', columns='西元年', values='涉案人數', aggfunc='sum', fill_value=0)
# 按 2025 年涉案人數排序,檢視前 5 大暴增縣市
top5_counties = pivot_drug.sort_values(by=2025, ascending=False).head(5)
print("=== 毒駕近年暴增主要縣市 (近四年) ===")
print(top5_counties[[2022, 2023, 2024, 2025]])
# 步驟 5: 直接使用 JSON 格式 (全量明細 或 輕量 2KB 摘要 API)
# 做法 A: Python Pandas 直接讀取全量 JSON (47,946 筆明細)
import pandas as pd
df = pd.read_json("https://traffic-safety-opendata.pages.dev/traffic_safety_stats_107_114.json")
print(f"全量 JSON 載入成功,共 {len(df):,} 筆")
# 做法 B: 讀取輕量彙總摘要 API (僅 ~2KB,適合前端/Bot/即時看板秒級載入)
import requests
summary = requests.get("https://traffic-safety-opendata.pages.dev/traffic_safety_summary.json").json()
print("核心 KPI:", summary["kpi_totals"])
print("歷年趨勢陣列:", summary["annual_trends"])
# 做法 C: 現代瀏覽器 JavaScript (一秒 fetch 繪製圖表)
# fetch('https://traffic-safety-opendata.pages.dev/traffic_safety_summary.json')
# .then(res => res.json())
# .then(data => console.log(data.annual_trends));