---
title: 218万件の交通事故データの 集計も可視化もAIに任せる
tags: 
author: [Yohei Shiwaku](https://image.docswell.com/user/shi-works)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/DEY46YG8JM.jpg?width=480
description: MIERUNE JCT in TOKYO 発表資料 https://mierune.connpass.com/event/405920/
published: October 24, 26
canonical: https://image.docswell.com/s/shi-works/KY8R3D-2026-10-24-085928
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/DEY46YG8JM.jpg)

塩飽 洋平 ／ MIERUNE
218万件の交通事故データの
集計も可視化も AIに任せる
GeoParquet × MCP で作る、話しかける交通事故統計
MIERUNE JCT in TOKYO 2026.10.22


# Page. 2

![Page Image](https://bcdn.docswell.com/page/VJNYZPG978.jpg)

自己紹介
塩飽 洋平（しわく ようへい）
株式会社MIERUNE エンジニアリングマネージャー
個人では、オープンデータを地図で見られる形に変換・可視化
するツールを開発
最近は、生成AI×地理空間データに取り組んでいる
2
@shi__works
shiwaku/
npa-traffic-accident-an
alytics


# Page. 3

![Page Image](https://bcdn.docswell.com/page/YE9PZ3W3J3.jpg)

自宅近くの交差点で、年に1回ほど事故が起きる
駆けつけた警察官に、逆に聞かれた
「ここは事故が
多いんですか？」
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/GE8D1MNLED.jpg)

きっかけ
なぜ作ったか
1
2
3
有償データでやっていた事故分析が、オープンデータでできるか
以前は事故対策の検討で、イタルダ（交通事故総合分析センター）のデータを購入して分析していた
事故データを使いたい人は、多岐にわたる
全国の交通安全点検、専門家の道路安全診断、建設コンサルタント、学校・PTA、個人
変換の仕組みはできた。次は、すべての人に使ってもらうには
npa-traffic-accident-converter：コード値をラベルに変換し、CSV・GeoParquet・PMTiles・地図ビューアで公開
4
生活道路の法定速度が、 30km/h になった
2026年9月1日から（中央線のない道路）。本当に生活道路の事故が減るのか、これから分析が必要になる
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/LELMQ3PQ7R.jpg)

データの壁
交通事故のオープンデータは、集計までが遠い
7本
46列
354119.5
年ごとに分かれた CSV
2022年から列が増えた（58→68列）
「01」のような番号で入っている
番号の意味は年ごとに違う
緯度経度は度分秒の数字
地図に載せるには直す
「生活道路の事故は減っているのか？」
コンバーターで越えた：ダウンロード → 番号を言葉に直す → 緯度経度を直す → 7年分をつなぐ
ここを AI に任せたい：集計する → グラフ・地図にする → どの数え方かを書き添える
出典：警察庁「交通事故統計情報のオープンデータ」（本資料の集計はこれを加工して作成）
https://www.npa.go.jp/publications/statistics/koutsuu/opendata/index_opendata.html
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/4JMY1D2KJW.jpg)

今日話すこと
話しかけて、事故を集計・地図化する仕組み
1
デモ
話しかけると、推移のグラフと事故地点の地図が返ってくる
2
仕組み
MCP サーバーの5つの機能、集計と地図の裏側、111.6 MB から必要な列だけ読む
3
数え方の違い
生活道路の数え方で件数が1.8倍変わる。警察庁の公表値とも合わない
4
答え合わせと使いどころ
イタルダの公表値と1件単位で一致。学校・自治体・道路安全診断・住民の聞き方
5
今後の課題と、触ってみてください
答えの確かめ方と駅名の座標。claude.ai の無料プランで今日 23:59 まで使える
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/PJR9L4M679.jpg)

まず、
聞いてみる
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/PEXQW2VDJX.jpg)

デモ 1
推移を聞くと、グラフが返ってくる
こう聞く
生活道路の事故件数の推移を、全事故
と比べてダッシュボードで見せて。 2019
年を100とした指数で。
67
75
生活道路の指数
2025年（2019年＝100）
全事故の指数
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/3EK9VMQDED.jpg)

デモ 2
場所を聞くと、地図が返ってくる
こう聞く
JR御茶ノ水駅から半径 1kmで、歩
行者・自転車が関わった 7年分の
事故を地図に出して
967件
歩行者・自転車の事故・半径1km・2019〜2025年
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/L73WMYPP75.jpg)

デモ 3
場所を聞くと、地図が返ってくる
こう聞く（スマホのみ）
現在地から半径 1kmで、歩行者・
自転車が関わった 7年分の事故を
地図に出して
885件
歩行者・自転車の事故・半径1km・2019〜2025年
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/87DK65L3JG.jpg)

どう
動いているか
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/VJPKYG2PE8.jpg)

仕組み
DB サーバーも、専用の画面も作らない
質問
AI
MCP サーバー
GeoParquet
日本語で
話しかける
claude.ai など
MCP に対応した AI
Cloudflare Containers
DuckDB で集計する
生活道路の定義も持つ
Cloudflare R2 に
1ファイル（111.6 MB）
数字と画面が返る
行き →
AI が「推移をグラフに」「地図に出す」などの機能と、年・場所などの条件を選ぶ
帰り ←
集計結果を AI が文章で説明し、グラフや地図は会話の中に出る（MCP Apps）
定義 「生活道路」の数え方や年齢の区切りを、MCPサーバーが機能の説明に書いてAI に渡す
AI の利用料は使う人の負担。こちらは月 $5 の固定費と、MCP サーバーが起動していた時間の従量（1時間 数円）
MCP サーバー ：AI に外部の機能を使わせるための共通の仕組み（ Model Context Protocol）
MCP Apps：MCP の拡張。機能が、結果と一緒に画面（表・グラフ・地図）も返せる
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/2EVVG6DVEQ.jpg)

仕組み｜ MCP サーバー
MCP サーバーは、 5つの機能と注意書きを AI に渡す
1
機能を5つ持つ
推移のグラフ
seikatsu_dashboard
事故地点の地図
accident_map
条件を決めた集計
aggregate
選べる値の一覧
2
注意書きを渡す
・生活道路の数え方は2通りあり、件
数が1.8倍違う
・年齢は0〜24歳が最小の区分。10
代だけは数えられない
・当事者Aは過失が重い側。被害者
とは限らない
list_values
自由な SQL
run_sql
AI は機能と条件を選ぶだけ。番号からラベルへの変換と集計はサーバーが行う
13
3
番号で受け取る
・条件は番号で受け取る（歩行者
＝61、自転車＝51）。ラベルへの
変換はサーバーが行う
・存在しない条件を指定するとエラー
を返す
・結果に、どの数え方で数えたかを毎
回付ける


# Page. 14

![Page Image](https://bcdn.docswell.com/page/57GL8NY1EL.jpg)

仕組み｜デモ 1の裏側
集計：AI は条件を選ぶだけ。数えるのはサーバー
1
AI が機能と条件を選ぶ
知らない引数はエラーで返す
2
番号を言葉に直し、 SQL を組む
番号→ラベル。全事故と生活道路を 1本の
SQL で数える
3
count(*) AS 全事故件数,
count(*) FILTER (WHERE &quot;車道幅員&quot; IN (&#039;単路－3.5m未満&#039;,
&#039;単路－3.5m以上&#039;, &#039;交差点－小（5.5m未満）－小&#039;)) AS 件数
DuckDB が数える
GeoParquet のうち、使う列だけ読む
4
seikatsu_dashboard({
seikatsu: &quot;strict&quot;, year_from: 2019, year_to: 2025 })
… GROUP BY &quot;資料年次&quot;
→ 7行（2019〜2025年）
2025年: 全事故 287,023 件 / 生活道路 43,673 件
4つを返す
注意書きを読み、数え方を言い添える
years
sql
件数・指数・構成比
実行した SQL
デモ2の地図も同じ流れ。違うのは使う機能と、返す画面だけ
14
notes
画面
読むときの注意
ダッシュボード


# Page. 15

![Page Image](https://bcdn.docswell.com/page/4EQY9QMNJP.jpg)

仕組み｜デモ 2の裏側
地図：緯度・経度と距離の式で、半径 1kmを切る
1
AI が機能と条件を選ぶ
「御茶ノ水駅」の座標は AI の推測
推測次第で 956〜970件
2
A・B のどちらも見る
過失の重い側でも相手側でも数え、 1件は1
回だけ
3
(&quot;当事者種別（当事者 A）&quot; IN
(&#039;歩行者&#039;, &#039;軽車両－自転車 &#039;, &#039;軽車両－駆動補助機付自転車 &#039;))
OR (当事者B も同じ条件)
四角で絞り、円で切る
GIS の関数は使わない。経度 1度の長さを
緯度で補正して距離を出す
4
accident_map({ party_type: [&quot;61&quot;,&quot;51&quot;,&quot;52&quot;],
center_lat: 35.6995, center_lon: 139.7653,
radius_m: 1000 })
# 61 歩行者 / 51・52 自転車
緯度・経度の範囲（四角）で粗く絞る
→ (Δ経度 × 111,320 × cos35.70°)² + (Δ緯度 × 110,540)² ≤ 1000²
点は配列で軽く返す
10,000点を超えたら間引く。件数は間引く前
の数
[139.75785, 35.69591, 2019, 0, 0, …] ← 経度・緯度・年・死亡 …
+ 凡例（番号 → ラベル）
該当 967件 / 描画 967件
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/KJ4WXNV371.jpg)

仕組み｜画面の出し方
画面：機能が、地図アプリごと返す（ MCP Apps）
1
機能に画面を結び付ける
MapLibre GL ごと1ファイルの HTML
2
iframe で開き、結果を渡す
描くのは claude.ai などのホスト
3
claude.ai → sandbox iframe に HTML を読み込む
→ postMessage でツールの結果を渡す（ app.ontoolresult）
外へは、宣言した先だけ
背景は地理院のベクトルタイル（淡色）
4
@apps.tool(
resource_uri=&quot;ui://npa-traffic-accident/accident-map.html&quot;,
visibility=[&quot;model&quot;, &quot;app&quot;])
# AI からも画面からも呼べる
CSP connectDomains / resourceDomains
cyberjapandata.gsi.go.jp
gsi-cyberjapan.github.io
画面のボタンは AI を通さない
切り替えはサーバーを直接呼び直す
app.callServerTool({ name: &quot;accident_map&quot;,
arguments: { ...前回の条件, fatal_only: true } })
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/LE1YN53Z7G.jpg)

仕組み
111.6 MB のうち、集計で読むのは約 5 MB
約5 MB
約1 秒
111.6 MB のうち、集計で読む列
クラウドのサーバーで、全7年を集計
（起動時にファイル全体を取り込む）
列指向の GeoParquet なので、集計では必要な列だけ 読める
クラウドのサーバーは CPU が小さく、必要な列を数十〜数百回に分けて取りに行くと53秒かかった
→ 起動時にファイル全体を1回取り込む（約7.5秒）と、集計は約1秒
17


# Page. 18

![Page Image](https://bcdn.docswell.com/page/GEWG45P6J2.jpg)

数え方の違い
「生活道路」の数え方ひとつで、 1.8倍変わる
全国・2019〜2025年
どちらも正当。
生活道路から幹線に出る出会い頭の事故
は後者にだけ入る。後者は地図化マニュ
アル（国交省・警察庁）の抽出条件と同じ
どちらも公表値とは合わない
警察庁 2024年の公表値 67,522件
このデータでは 4.5万件 / 8.3万件
18


# Page. 19

![Page Image](https://bcdn.docswell.com/page/47ZL2NKRJ3.jpg)

作り方
前提も、 AIが数えて確かめながら書いた
数える
ずれを見つける
定義に書く
サーバーに入れる
また数える
ここまで全部 AI。こうして書き足された前提の例：
年齢は「年齢層」
当事者Aは「過失が重い側」
最小の区分は 0〜24歳。「10代」は数えられないと答えさせ
る
被害者かどうかの区分ではない
「年」は 2通りある
都道府県は 51種類
統計に計上された年なら公表値と一致。事故が起きた年だ
と最新年が約3%少なく出る
北海道は方面本部別に5つ。「東京」「大阪」に都・府が付か
ない
19


# Page. 20

![Page Image](https://bcdn.docswell.com/page/YJ6WV8Q1JV.jpg)

答え合わせ
イタルダの集計と、 1件単位で一致した
イタルダ・インフォメーション No.150
「身近な道路」の事故
2024年
ほかの数字も（ #はWEB版）
イタルダ
この仕組み
No.150 身近な道路・自転車（2024）
13,150
13,150
#04 市町村道（2025）
128,591
128,591
#04 市町村道・市街地・単路（2025）
34,815
34,815
650
650
イタルダの公表値
30,870
#03 高齢歩行者の死者（2024）
この仕組みで数えた値
30,870
オープンデータに項目がなく、できないこと
事故の型（出会い頭・追突など） ／ 重傷と軽傷 ／ 人的要因
出典：交通事故総合分析センター「イタルダ・インフォメーション」 No.150、WEB版 #03・#04
20


# Page. 21

![Page Image](https://bcdn.docswell.com/page/GJ5MD9RLJ4.jpg)

使いどころ
誰が、どう聞くか
学校・PTA（通学路の合同点検）
自治体の担当者
「この小学校の半径 500mで、
若い歩行者・自転車の事故を地図で」
「うちの県の生活道路の事故の推移を、
全国と比べて」
出せない：小学生だけ、通学中かどうか
出せない：重傷と軽傷の区別、交通量あたりの率
道路安全診断・建設コンサルタント
住民
「この交差点の半径 50mで、7年分の事故を
類型と当事者の組み合わせで」
「現在地から半径 300m以内の
事故を地図にプロットして」
出せない：出会い頭・追突などの事故の型、違反
出せない：ヒヤリハット、物損事故
現在地は Android の claude.ai アプリなら自動で取れる。駅名の座標は AI の推測
21


# Page. 22

![Page Image](https://bcdn.docswell.com/page/LE3WMYPDE5.jpg)

今後の課題と展望
確かめるのも、 AIに
いまの課題
次にやること
答えが正しいかは、まだ人が確かめている
回答結果と公式データを自動で照合する
→
準備中も、AI がダッシュボードを使わず SQL を自作した
回答ごとに自己点検する
駅名などの座標は、 AI の推測に頼っている
→ 地名から座標を引く仕組み
掛け合わせられるのは事故データだけ
→ 人口などのデータをサーバーに入れる
確かめたのは Claude だけ
→ ほかの MCP 対応の AI でも確かめる
22


# Page. 23

![Page Image](https://bcdn.docswell.com/page/8EDK65L27G.jpg)

触ってみてください
1
claude.ai の 設定 → コネクタ → カスタムコネクタを追加
2
QR の URL を貼って追加（ブラウザでは開かない）
3
チャットの ＋ → コネクタ でオンにして、聞いてみる
最初に聞いてみる
claude.ai の無料プランで使えます
今日 23:59 まで
［自分の県］の生活道路の事故の推移を、全国と比べて
ダッシュボードで見せて
［最寄り駅］から半径 1kmの生活道路の事故を地図に出して
23


# Page. 24

![Page Image](https://bcdn.docswell.com/page/V7PKYG2LJ8.jpg)

まとめ
X @shi__works
GitHub リポジトリ
集計も可視化も前提づくりも
AIに任せる
人は、問いを立て、確かめる
24


