2025年1月、埼玉県八潮市の県道の道路が突然陥没し、トラックが落下する事故が起きました。原因は設置から約40年経過した県管理の流域下水道管の破損で、地下に空洞ができていたことが後の調査で判明。同様のリスクは全国に数千km分残存していると指摘されています。
「事故現場周辺の下水道を経年別に色分けして地図に出せるか?」を実装で検証します。技術的にはできますが、最大の壁は「データが公開されていない」こと。何が取れて何が取れないか、現実的な代替策まで。
Step 1: 何が公開されていて、何が未公開か
| 情報 | 公開度 | ソース | 粒度 |
|---|---|---|---|
| 流域下水道の幹線・処理場位置 | △ | 国土数値情報 A36(一部) | 施設単位 |
| 流域下水道の事業計画区域 | ○ | 国土数値情報 A35a | 市町村単位の概略 |
| 公共下水道の処理区分布 | ○ | 国土数値情報 A35b | 区域ポリゴン |
| 下水道管路の位置・形状 | ✗ ほぼ非公開 | ─ | 市町村台帳のみ |
| 下水道管路の設置年 | ✗ 非公開 | ─ | 市町村台帳のみ |
| 下水道管路の点検・更新計画 | △ 自治体次第 | 各自治体オープンデータ | 事業区域単位 |
| 道路の整備年(推定材料) | ○ | 道路台帳・国土数値情報 | 区間単位 |
| 建物の築年 | ○ 一部 | 国勢調査・固定資産税統計 | メッシュ単位 |
下水道台帳は地方公共団体が個別に保有しており、防犯・テロ対策の観点もありほとんど公開されていません。「八潮市の地下下水道管 A の設置年」のような粒度のデータは、自治体に問い合わせるか・情報公開請求するかしか取得経路がありません。これがインフラ老朽化問題の議論で「そもそも全体像を国民が見えない」という壁です。
Step 2: それでも公開データで何が描けるか
管路レベルは描けませんが、以下なら描けます: 1. 流域下水道の処理場と幹線の概略(国土数値情報 A36) 2. 公共下水道の供用区域ポリゴン(国土数値情報 A35b)─ 区域ごとの供用開始年から経年推定可能 3. 道路整備年からの推測(道路と並行して埋設されることが多い) 4. 建物の築年代別エリア(国勢調査メッシュから経年推定)
Step 3: 国土数値情報で八潮周辺の下水道事業計画を描く
国土数値情報の直URLはバージョン更新で頻繁に変わるため、コードに固定 URL を書くのは推奨しません。https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-A35a.html にブラウザでアクセスし、「埼玉県」のZIP をダウンロード → に手動アップロード、というフローが実装上一番安定。コードは shp ファイル名やパスを自動探索する形にしておきます。
# 1. https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-A35a.html を開く# 2. 「下水道事業計画区域」の埼玉県(11)版を選んで ZIP をダウンロード# 3. Colab 左サイドバー「ファイル」アイコン → ZIP をアップロード(手動)# 4. 以下を実行
import zipfile, glob, os
# アップロードしたファイル名(実物に合わせて書き換え)ZIP_PATH = "A35a-19_11_GML.zip" # ← 実際にアップロードしたZIP名
os.makedirs("data/sewer", exist_ok=True)with zipfile.ZipFile(ZIP_PATH) as z: z.extractall("data/sewer")
# .shp ファイルを再帰的に探す(フォルダ階層が版で変わる)shp_files = glob.glob("data/sewer/**/*.shp", recursive=True)print("見つかったShape:", shp_files)SHP = shp_files[0] if shp_files else Noneassert SHP, "shp ファイルが見つかりません。ZIPの中身を確認してください。"import geopandas as gpd
# Shape は Shift_JIS(cp932)のことが多いgdf = gpd.read_file(SHP, encoding="cp932")print(f"全体: {len(gdf)} 件、CRS: {gdf.crs}")
# 八潮市の中心 (35.8222, 139.8378) 周辺 5km をフィルタcenter = gpd.GeoDataFrame( geometry=gpd.points_from_xy([139.8378], [35.8222]), crs="EPSG:4326").to_crs(epsg=6677)buffer_5km = center.buffer(5000).to_crs(gdf.crs).iloc[0]
nearby = gdf[gdf.intersects(buffer_5km)].to_crs(epsg=4326)print(f"\n八潮5km圏の下水道事業区域: {len(nearby)}件")
# ⚠️ カラム名は版・データセットで違う。必ずここで確認print("\nカラム一覧:")for col in nearby.columns: print(f" {col}")print("\nサンプル1件:")print(nearby.iloc[0].to_dict())A35a 下水道事業計画 のフィールドは、データ整備版で名前と内容の対応が違います。Step 3-2 の `print` 出力を見て「年データを持つカラム」を特定してから次に進んでください。そもそも年情報を含まない版もあります(公開データの限界)。事業計画区域のポリゴンしか入っていない場合、経年マップは別データソースとの組合せが必要になります。
import foliumimport re
# ↓ Step 3-2 で特定した「年データを持つカラム名」を入れるYEAR_COLUMN = "A35a_???" # 例: 認可年・供用開始年カラム
def parse_year(value): """'1985' / '1985-04-01' / '昭和60年' / 1985 / None を 西暦4桁の年に変換""" if value is None: return None m = re.search(r"(19|20)\d{2}", str(value)) return int(m.group(0)) if m else None
def get_color(year): if year is None: return "#999" # データなし age = 2026 - year if age >= 50: return "#d62728" # 赤:50年以上(最警戒) if age >= 40: return "#ff7f0e" # オレンジ:40-49年(八潮事故と同帯) if age >= 30: return "#ffd92f" # 黄 if age >= 20: return "#a8d949" # 緑 return "#1f77b4" # 青
m = folium.Map(location=[35.8222, 139.8378], zoom_start=13, tiles="OpenStreetMap")
mapped = 0if YEAR_COLUMN in nearby.columns: for _, row in nearby.iterrows(): raw = row.get(YEAR_COLUMN) year = parse_year(raw) color = get_color(year) age_label = f"{2026 - year}年" if year else "不明" folium.GeoJson( row["geometry"].__geo_interface__, style_function=lambda feat, c=color: { "fillColor": c, "color": c, "fillOpacity": 0.4, "weight": 1, }, tooltip=f"年: {raw} / 経年: {age_label}", ).add_to(m) mapped += 1else: # 年カラムが無い:とりあえず形状だけ表示 for _, row in nearby.iterrows(): folium.GeoJson( row["geometry"].__geo_interface__, style_function=lambda feat: {"fillColor": "#999", "color": "#999", "fillOpacity": 0.3, "weight": 1}, tooltip="(年データなし)", ).add_to(m) mapped += 1 print(f"⚠️ 指定カラム '{YEAR_COLUMN}' が無いため、年データなしで描画しました({mapped}件)。") print("→ 年データを別ソースから取得するか、自治体オープンデータと組合せてください。")
print(f"プロット完了: {mapped}件")
legend_html = """<div style="position:fixed; bottom:20px; left:20px; background:white; padding:10px; border:1px solid #ccc; border-radius:8px; font-size:12px;"> <b>下水道事業区域の経過年(推定)</b><br> <span style="background:#d62728;color:white;padding:2px 8px;">50年〜</span> 最警戒<br> <span style="background:#ff7f0e;color:white;padding:2px 8px;">40-49年</span> 八潮事故と同帯<br> <span style="background:#ffd92f;padding:2px 8px;">30-39年</span><br> <span style="background:#a8d949;padding:2px 8px;">20-29年</span><br> <span style="background:#1f77b4;color:white;padding:2px 8px;">〜19年</span><br> <span style="background:#999;color:white;padding:2px 8px;">不明</span></div>"""m.get_root().html.add_child(folium.Element(legend_html))m.save("yashio_sewer_age.html")m上のコードで描けるのは 下水道事業の認可エリア(行政の区域ポリゴン)で、八潮市の場合は中川流域・綾瀬川流域などの区分が見えます。個別の管路 1 本ごとの経年は不可。それでも「40年以上経過した区域」が地図上で赤く塗られると、議論の出発点として強力。
Step 4: 道路整備年から「下水道もこの頃」を推測
下水道は 道路と並行して埋設されることが多く、道路の整備年は下水道の設置年に相関しています。国土数値情報の道路台帳で道路整備年を取れる場合、それを下水道の代理指標として使うアプローチ。
# 国土数値情報「道路情報」N04(一部の県・市で整備年データあり)roads = gpd.read_file("data/road/N04-19_11.shp")nearby_roads = roads[roads.intersects(buffer_5km)].to_crs(epsg=4326)
# 道路整備年カラム(バージョン依存、要確認)# 例: N04_001 (整備年)for _, row in nearby_roads.iterrows(): year = row.get("N04_001") if year: folium.PolyLine( locations=[(p[1], p[0]) for p in row["geometry"].coords], color=get_color(int(year)), weight=3, tooltip=f"道路整備: {year}年", ).add_to(m)Step 5: 自治体オープンデータの確認
自治体によっては下水道台帳の一部を公開しています。埼玉県の場合: - 埼玉県オープンデータポータル: https://opendata.pref.saitama.lg.jp/ - 「下水道」で検索 → 一部の処理場・流域マップが取得可能(ただし管路は基本非公開) 八潮市オープンデータ: - https://www.city.yashio.lg.jp/ → オープンデータ - 上下水道局が公開する設備情報あり、ただし詳細管路は非公開 やってみる価値: 自治体の Web サイトを丹念に当たる + 情報公開請求も視野。ふくふくは過去の案件で「都市計画区域 + 道路台帳 + 配管マップ(限定的公開)」を組み合わせて経年マップを作った経験があります。
Step 6: 政策的視点 ─ 地下インフラのオープンデータ化
国土交通省は2024年から下水道台帳のデジタル化・標準化を推進(i-Sewer / 下水道台帳統合管理)。長期的には「全国の下水道管路がオープンに見える」方向に進みつつあります。 残課題:① テロ対策・防犯上の懸念から完全公開には抵抗、② 自治体ごとのフォーマットがバラバラ、③ デジタル化未完了の自治体多数。 民間からの貢献余地:① OpenStreetMap での「見えるインフラ」マッピング(マンホール位置など)、② 市民調査による陥没・劣化情報のクラウドソース、③ による「衛星画像からの陥没リスク予測」。
実際の案件では「できる範囲で描く + できない部分は明示する」のが信頼を作る進め方。① 公開データで描けるレイヤー(事業区域・道路・建物年代)を全部地図に重ね、② 不足情報は自治体に問い合わせるリスト化、③ 同様の事故リスクが高いエリアを「経年 ≧40年 + 流域下水道 + 高交通量」のスコアで可視化。「八潮の次はどこか?」を仮説化する材料として使ってもらえます。
データ取得の留意点(2026年5月時点)
- 国土数値情報 A35(下水道): CC BY 4.0、商用OK、出典明記。バージョンに注意(年次更新)
- 国土数値情報 N04(道路): 一部都道府県のみ整備年データあり。全国統一ではない
- 自治体オープンデータ: 自治体ごとにライセンス・フォーマット異なる、要個別確認
- 情報公開請求: 下水道台帳の閲覧は可能だが、デジタルデータ提供は自治体次第(紙のみのケース多)
- プライバシー・テロ対策: 個人宅への引込管位置などは公開不可。集計レベルで扱う
- OpenStreetMap タイル: 商用大規模なら Mapbox / Stadia Maps へ切替推奨
ふくふくの進め方
「八潮事故をきっかけに自治体・施設管理者向けのリスク可視化ダッシュボードを作りたい」というご相談は実際に頂いてます。1〜2ヶ月で「経年スコアマップ」のプロトタイプ、3〜6ヶ月で本番運用が現実的なペース。公開データ + 自治体保有データ + 民間サービス(NTT空間統計の人流など)を組み合わせて、「事故が起きてからではなく、起きる前」の議論材料を作るのがこの領域の事業価値です。
次回予告
EP.15 では、株価ヒストリカルを社内分析に組み込むレシピ。 と で日経225・・個別銘柄の長期データを取得し、自社の売上 と重ねて景気感応度を測ります。
この記事の感想を教えてください
あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。