Lesson 13

L13 都市計画基礎調査 統合分析 — 20市町×建物利用×土地利用 (40 dataset_id 統合)

L系GISシリーズ統合主題図small multiplesミスマッチ分析40dataset
所要 60分 / 想定レベル: リテラシ基礎+α / データ: 40 GeoJSON (建物利用 #1469ほか20件 + 土地利用 #70ほか20件) + X09 用途地域

データ取得手順

このスクリプトは初回実行時にデータを自動取得します(DoBoX からの直接ダウンロード)。

IDデータセット名
#18dataset #18
#70都市計画区域情報_土地利用現況_広島市
#71都市計画区域情報_建物利用現況_海田町
#222dataset #222
#493都市計画区域情報_土地利用現況_呉市
#494都市計画区域情報_土地利用現況_竹原市
#495都市計画区域情報_土地利用現況_三原市
#496都市計画区域情報_土地利用現況_尾道市
#497都市計画区域情報_土地利用現況_福山市
#498都市計画区域情報_土地利用現況_府中市
#499都市計画区域情報_土地利用現況_三次市
#500都市計画区域情報_土地利用現況_庄原市
#501都市計画区域情報_土地利用現況_大竹市
#502都市計画区域情報_土地利用現況_東広島市
#503都市計画区域情報_土地利用現況_廿日市市
#504都市計画区域情報_土地利用現況_安芸高田市
#505都市計画区域情報_土地利用現況_江田島市
#506都市計画区域情報_土地利用現況_府中町
#507都市計画区域情報_土地利用現況_海田町
#508都市計画区域情報_土地利用現況_熊野町
#509都市計画区域情報_土地利用現況_坂町
#510都市計画区域情報_土地利用現況_北広島町
#511都市計画区域情報_土地利用現況_世羅町
#512都市計画区域情報_建物利用現況_府中市
#513都市計画区域情報_建物利用現況_世羅町
#888都市計画区域情報_区域データ_安芸高田市_行政区域
#1321都市計画区域情報_建物利用現況_安芸高田市
#1322都市計画区域情報_建物利用現況_熊野町
#1323都市計画区域情報_建物利用現況_呉市
#1325都市計画区域情報_建物利用現況_江田島市

実行コマンド:

cd "2026 DoBoX 教材"
python -X utf8 lessons/L13_urban_planning_survey.py

DoBoX のオープンデータは申請不要・商用/非商用とも利用可。 data/extras/.gitignore 対象(約 57 GB のキャッシュ)。 スクリプト実行で自動再生成されます。

学習目標と問い

本記事のスタイル: 都市計画基礎調査の 2 シリーズ × 20 市町 = 40 データセットを統合し、県全域マップ + 用途指定×実利用ミスマッチ分析
pd.concat() + gpd.sjoin() で 40 個の GeoJSON を統合し、 用途地域 (X09 と同じ指定地ポリゴン) と交差させて 「指定された用途実際の建物利用」のメッシュをカウント。

カバー宣言: 40 dataset_id 論理カバー

本記事は都市計画基礎調査の 2 シリーズ × 20 市町 = 40 dataset_id を統合:
  • 都市計画区域情報_建物利用現況 20件 (#1469 広島市 / #1323 呉市 / #1474 竹原市 / #1477 三原市 / #1480 尾道市 / #1483 福山市 / #512 府中市 / #1327 三次市 / #1328 庄原市 / #1491 大竹市 / #1329 東広島市 / #1496 廿日市市 / #1321 安芸高田市 / #1325 江田島市 / #1331 府中町 / #71 海田町 / #1322 熊野町 / #1326 坂町 / #1507 北広島町 / #513 世羅町)
  • 都市計画区域情報_土地利用現況 20件 (#70 広島市 / #493 呉市 / #494 竹原市 / #495 三原市 / #496 尾道市 / #497 福山市 / #498 府中市 / #499 三次市 / #500 庄原市 / #501 大竹市 / #502 東広島市 / #503 廿日市市 / #504 安芸高田市 / #505 江田島市 / #506 府中町 / #507 海田町 / #508 熊野町 / #509 坂町 / #510 北広島町 / #511 世羅町)
Desc が完全書式統一なのでフォーマット同一とみなして処理。 対応表 40/40 件 論理カバー (実ダウンロード data/extras/urban_planning_survey/fetch_log.json)。

主な問い (3 段階)

  1. 面の問い: 県内 20 市町で建物・土地はどう使われているか?
  2. 整合の問い: 用途地域 (法的指定) と実利用はどれくらい一致しているか?
  3. 市町差の問い: ミスマッチ率は市町で違うか?(都市的 vs 農村的の差)

立てた仮説 (H1〜H6)

  1. H1: 第一種住居指定でも商業利用ビルが一定数存在 (≥10%)
  2. H2: 工業地域指定の中でも 農地利用 が残る (使われていない指定地)
  3. H3: 用途指定と実利用のミスマッチ率は市町で異なる (広島市が高い仮説)
  4. H4: 田園住居指定はほぼすべて農地+住宅で利用と一致 (≥80%)
  5. H5: 中心商業地は建物密度 > 周辺住居系 (建物数 / 面積 で 5倍以上の差)
  6. H6: 旧市街地 (尾道/福山中心部) は明治以来の用途指定と現代利用の乖離が顕著 (尾道/福山の 中心商業地 でミスマッチ率上位)

用語の定義 (本記事独自)

結果サマリー (詳しい本文の前に概観)

指標結果
統合した dataset_id40 件 (建物 20 + 土地 20)
統合 250m メッシュ建物 40,740 メッシュ / 土地 40,693 メッシュ
用途地域メッシュ交差建物 7,494 / 土地 7,494 メッシュ
H1: 第一種住居×商業0.6% (14/2,463 メッシュ)
H2: 工業系指定×農地3.1% (50/1,592 メッシュ)
H4: 田園住居×住宅+農林一致14.9% (62/415 メッシュ)
H5: 商業 / 第一種低層 密度比×7.5 (279 / 37 棟/km²)
ミスマッチ率最大の市町府中市 (48.4%)
ミスマッチ率最小の市町熊野町 (9.3%)
処理時間31.3 秒 (要件S 1〜3 分)

使用データ

シリーズ統合の論理

都市計画基礎調査の建物利用現況・土地利用現況は 市町ごとに別 dataset_id として公開されており、県全域版 dataset_id が存在しない。 このため 20 市町 × 2 シリーズ = 40 dataset_idpd.concat() で統合する。 属性スキーマは国土交通省実施要領 (第4版) に準拠して全市町で共通 (一部の B_USE 列は市町で 0 件のため省略されているが、統合時に fillna(0) で揃える)。

建物利用現況 (#1469 / #1323 / ...) の主要列

土地利用現況 (#70 / #493 / ...) の主要列

用途地域 (X09 で展開済 zone polygon) との交差

X09 の用途地域 GeoJSON (340006: 県全域版 / 341002: 広島市版) を gpd.sjoin() で建物メッシュ・土地メッシュと交差させる。 sjoin は内部で R-tree 空間インデックスを使うため、40,740 点 × 12 ポリゴンでも数秒で完了する。

用途コード対照 (国交省 別表2 抜粋)

建物 B_USE 主要コード細分類系統
4011業務 (事務所/銀行/会議場)商業系
4021〜4027商業 (店舗/飲食/娯楽)商業系
4031宿泊 (ホテル/旅館)商業系
4111専用住宅住居系
4121共同住宅 (アパート/マンション)住居系
4131〜4151併用住宅住居系
4211官公庁 (庁舎/警察/消防)公共系
4221〜4227文教厚生 (学校/病院/福祉)公共系
4311〜4313運輸倉庫 (駅舎/卸売市場)工業系
4411〜4415工場工業系
4511農林漁業用施設農林漁業系
4521供給処理 (浄水/火葬/発電)工業系
土地 LUI 主要コード用途系統
201 / 202田 / 畑農地
203山林森林
204 / 205水面 / その他自然地水面 / 自然地
211 / 212 / 213住宅 / 商業 / 工業 用地住宅 / 商業 / 工業
214 / 218公益施設 / その他公的公益
215 / 216道路 / 交通施設交通インフラ
217公園緑地 / 公共空地公共空地
219農林漁業施設用地農林漁業

ダウンロード

ファイル内容
L13_city_building_summary.csv市町別 建物利用 集計 (棟数/密度/系統別)
L13_city_landuse_summary.csv市町別 土地利用 集計 (面積/系統別)
L13_mismatch_by_city.csv市町別 ミスマッチ率 ランキング
L13_zone_x_main.csv用途地域 × 建物主用途 ピボット
L13_mismatch_heatmap.csvヒートマップ用 % ピボット
L13_zone_density.csv用途地域別 建物密度 (棟/km²)
L13_city_main_compo.csv市町別 主用途構成比 (棟数 %)
L13_city_lu_compo.csv市町別 土地利用構成比 (面積 %)
L13_hypothesis_results.json仮説H1〜H5 検証結果
L13_map_building_main_use.png図1 県全域 建物主用途 主題図
L13_map_landuse_main_use.png図2 県全域 土地利用 主題図
L13_map_city_small_multiples.png図3 市町別 small multiples (12 panels)
L13_mismatch_heatmap.png図4 用途地域 × 実利用 ミスマッチ ヒートマップ
L13_mismatch_by_city.png図5 市町別 ミスマッチ率 ランキング
L13_zone_density_bar.png図6 用途地域別 建物密度
L13_city_main_compo.png図7 市町別 主用途構成 (棟数)
L13_city_lu_compo.png図8 市町別 土地利用構成 (面積)
L13_overlay_zone_x_building.png図9 重ね合わせ — 用途地域枠 × 建物主用途
L13_city_scatter.png図10 散布図 農地比率 × 建物密度
L13_urban_planning_survey.py再現スクリプト

個別取得 (PowerShell, 40 dataset_id を一括):

cd "2026 DoBoX 教材"
py -X utf8 data\extras\urban_planning_survey\_fetch_meta.py

取得スクリプトはデータセットページ HTML を 1 度だけ GET し、 250mメッシュ単位 GeoJSON リソースID を抽出して resource_download 直リンクから zip を取得する。 40 リクエスト × 数秒 = 約 2〜3 分で完走 (DoBoX 側 rate limit 配慮 0.2s スリープ込み)。

分析1: 40 dataset_id を `pd.concat` で統合する

狙い

シリーズ系列 (=同じ Desc 書式の連番群) を 1 個の DataFrame に束ねる ことで、県全域分析を可能にする。 これは DoBoX のように「市町ごとに別 dataset_id」というデータ提供形式で必須のテクニック。

手法 (リテラシレベルの直感)

入出力の Before/After (具体例)

段階形 (rows × cols)追加列
1. 広島市 GeoJSON 読込6,731 × 110(なし)
2. g["city"] = "広島市" 付与6,731 × 111+city
3. 同様に 20 市町の DF を作成20 個の DF各 +city
4. pd.concat() で縦結合40,740 × 138欠落列は NaN
5. fillna(0) + 系統別 GRP_* 集約40,740 × 144+主用途6系統

列数が市町ごとに違う ({63〜110}) 理由: 値が常に 0 の B_USE_xxx (例: 大都市にしかない高度商業) はデータ提供時に省略されている。 pd.concat は和集合を取るので統合後は自動的に最大列数になり、欠落セルは NaN→0 で埋める。

実装

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import geopandas as gpd
import pandas as pd

frames = []
for dsid, city in BUILDING_DSID_CITY.items():
    z = DATA_DIR / f"building_{dsid}_{city}.zip"
    g = gpd.read_file(f"zip://{z.as_posix()}")  # zip 内 GeoJSON を直読み
    g["city"] = city                              # ← 市町判別
    g["dsid"] = dsid                              # ← データセット由来
    frames.append(g)

# 縦結合 (列の和集合を取る)
bld_all = gpd.GeoDataFrame(
    pd.concat(frames, ignore_index=True),
    geometry="geometry", crs=frames[0].crs,
)
# 全列を to_crs() で揃える
bld_all = bld_all.to_crs("EPSG:6671")  # JGD2011 III, 単位 m

結果

20 市町 × 平均 2,037 メッシュ = 計 40,740 メッシュの建物利用統合データが完成。 土地利用も同様に 40,693 メッシュ。これが本記事の「土俵」。

なぜこの可視化を選んだか: 統合直後の構造を 表で示すのが最も明確 (地図はあとで作る)。BeforeAfter テーブルは要件K (入出力の具体例) を満たす目的。

分析2: 県全域 主題図 — 建物 × 土地 の主用途

狙い

40 統合データの「全体像」をひと目で見る。「住居系が圧倒的に多いだろう」という直感を地図で確認/反証する。

手法

結果

なぜこの図か: 県全域の「都市性のグラデーション」を 1 枚に圧縮するには 主題図 (choropleth) が最適。色1色 = 1メッシュの主用途。

県全域 建物利用 主用途 主題図 (40,740 メッシュ)
県全域 建物利用 主用途 主題図 (40,740 メッシュ)

読み取り:

県全域 土地利用 主用途 主題図
県全域 土地利用 主用途 主題図

読み取り:

分析3: 市町別 small multiples (12 panels)

狙い

県全域の主題図では「個々の市町の細部」が見えない。 12 市町を同じ縮尺で並べる small multiples で、市町ごとの構成パターンを比較する。

手法

結果

なぜこの図か: 1 枚の県全域図では市町の輪郭がつぶれて見える。 条件 (=市町) だけ変えて並べる small multiples はパターン比較に最適。

市町別 建物利用 主用途 (12 panels)
市町別 建物利用 主用途 (12 panels)

読み取り:

分析4: 用途地域 (指定) × 建物実利用 ミスマッチ ヒートマップ

狙い

本記事の主役。用途地域は法的に「ここは住居系を想定」「ここは商業系を想定」と指定しているが、 実際にそこに建っている建物の主用途は必ずしも一致しない。 13 用途地域 × 6 主用途のクロス表を作り、ヒートマップで一覧する。

手法 (STEP 分け)

STEP役割入力出力
STEP1: sjoin建物メッシュ重心が用途地域ポリゴン内にあるか判定40,740 重心点 + 12 用途ポリゴン7,494 行 (yoto + MAIN_GRP)
STEP2: pivot(yoto, MAIN_GRP) でクロス集計同上13 行 × 6 列のピボット表
STEP3: 行内 %各用途地域 (行) を 100% にした実利用比率ピボット0〜100% のヒートマップ用行列

実装 (STEP1 + STEP2)

L13_urban_planning_survey.py 行 938–966

 1
 2
 3
 4
 5
 6
 7
 8
 9
947
948
949
# STEP1: 建物メッシュ重心 × 用途地域 (R-tree 空間結合)
bld_pts = bld_all.copy()
bld_pts["geometry"] = bld_all.geometry.centroid     # 高速化: ポリゴンより重心
joined = gpd.sjoin(bld_pts, zone_d, predicate="within")

# STEP2: クロス集計 → 行 % 化
pivot = joined.groupby(["yoto", "MAIN_GRP"]).size().unstack(fill_value=0)
pivot_pct = pivot.div(pivot.sum(axis=1), axis=0) * 100  # 行内%

# 期待された実利用 vs 実際 を比較
EXPECTED = {"第一種住居": "住居系", "商業": "商業系", "工業": "工業系", ...}
joined["match"] = joined["MAIN_GRP"] == joined["yoto"].map(EXPECTED)

結果

なぜヒートマップか: 13 × 6 の 2 軸クロスを一望するには色面が最適。 対角に近いほど指定通り、対角から外れるほどミスマッチ。

用途地域 × 建物主用途 ミスマッチ ヒートマップ
用途地域 × 建物主用途 ミスマッチ ヒートマップ

読み取り:

用途地域別 建物密度 (棟/km²)
用途地域別 建物密度 (棟/km²)

なぜこの図か: ヒートマップは「比率」を見るが、絶対の建物密度差は別軸。同じ「住居系優位」でも商業地域と田園住居では建物密度が桁違い。

yoton_meshbld_totalarea_total_km2density
第二種低層住居36.06,955.02.42,911.1
第一種低層住居958.0143,466.063.62,256.1
準工業229.030,033.015.21,975.5
第一種住居2,463.0319,467.0163.51,954.1
商業584.075,463.038.81,946.6
第二種中高層住居270.033,787.017.91,885.1
第二種住居296.034,169.019.61,739.7
第一種中高層住居727.077,561.048.31,606.8
準住居71.07,153.04.71,518.3
工業784.059,001.052.01,133.8
工業専用481.020,135.031.9630.7
田園住居415.012,372.027.6449.0

表 (用途地域別 建物密度): なぜこの表か: ヒートマップは「分布」だが、 密度 (棟/km²) は絶対量の差を示す。商業地域の極端な高密度を数値で確認。

分析5: 市町別 ミスマッチ率 ランキング

狙い

仮説 H3 (ミスマッチ率は市町で異なる、特に広島市が高い) を検証。 全 20 市町の中で、用途指定と実利用の乖離が大きいのはどこか?

手法

L13_urban_planning_survey.py 行 978–995

978
979
980
981
982
983
984
# 各メッシュごとに「指定とビル主用途が一致したか」フラグを立て、市町別平均
joined["match"] = joined["MAIN_GRP"] == joined["yoto"].map(EXPECTED_GROUP)
mm = joined.groupby("city").agg(
    n_total=("match", "size"),
    n_match=("match", "sum"),
)
mm["mismatch_pct"] = 100.0 * (1 - mm["n_match"] / mm["n_total"])

結果

なぜ横棒グラフか: 市町順位を直接読みたいため。色分けで 50% 超を赤、未満を青にして直感的に良し悪しを示す。

市町別 ミスマッチ率 ランキング
市町別 ミスマッチ率 ランキング

読み取り:

表 (市町別 集計):

cityn_totaln_matchmismatch_pct
府中市192.099.048.4
大竹市146.085.041.8
庄原市117.071.039.3
竹原市130.080.038.5
海田町82.051.037.8
安芸高田市27.017.037.0
福山市1,492.0952.036.2
世羅町39.025.035.9
三原市241.0155.035.7
江田島市34.022.035.3
三次市134.087.035.1
呉市628.0413.034.2
東広島市511.0337.034.1
北広島町56.037.033.9
坂町61.043.029.5
尾道市442.0318.028.1
府中町97.071.026.8
広島市2,442.01,829.025.1
廿日市市357.0275.023.0
熊野町86.078.09.3

分析6: 市町別 主用途構成比 (棟数 + 面積)

狙い

各市町の「都市性プロファイル」を 2 角度から確認: 建物視点 (棟数構成) と 土地視点 (面積構成)。

結果 — 棟数視点

なぜ積み上げ棒グラフか: 市町間で比率を直接比較するため。横軸=市町、縦軸=100%、色=系統。

市町別 建物主用途 構成比
市町別 建物主用途 構成比

読み取り:

結果 — 面積視点

なぜこの図か: 建物棟数だけだと「建物がない山林」が見えない。土地面積で見ることで森林県・農村県としての実態が浮かぶ。

市町別 土地利用 構成比
市町別 土地利用 構成比

読み取り:

表 (市町別 建物集計):

citymesh_nbld_totalarea_km2bld_density_per_km2住居系商業系工業系
府中町201.015,413.013.31,154.913,811.0880.0266.0
広島市6,731.0350,774.0446.7785.3291,389.030,218.012,333.0
福山市5,588.0250,284.0370.7675.1194,531.018,759.021,265.0
海田町263.011,048.017.5632.48,087.0541.0780.0
大竹市441.018,255.029.3622.313,813.0968.02,481.0
尾道市3,035.0102,998.0201.6511.081,272.06,075.06,938.0
府中市757.025,368.050.2505.718,665.01,240.02,115.0
呉市3,995.094,558.0265.7355.980,344.06,919.03,435.0
江田島市711.016,465.047.3348.112,921.01,064.0704.0
廿日市市2,135.048,277.0141.9340.340,919.03,008.01,996.0
熊野町580.012,485.038.5324.010,755.0813.0447.0
坂町301.06,277.020.0313.84,948.0479.0339.0
三次市1,573.031,827.0104.0306.020,129.04,423.04,011.0
三原市2,424.047,419.0160.9294.637,639.03,051.03,344.0
世羅町288.05,566.019.1291.73,889.0465.0308.0
庄原市1,355.023,882.089.5266.917,459.02,100.01,489.0
安芸高田市247.04,289.016.3262.43,286.0443.0156.0
北広島町529.07,310.035.0208.84,656.0646.01,069.0
竹原市2,017.023,530.0134.0175.617,731.01,762.01,435.0
東広島市7,569.084,987.0502.5169.171,027.05,373.03,511.0

表 (市町別 土地利用集計):

citymesh_narea_km2農地森林住宅商業工業
東広島市7,569.0502.56,130.830,131.52,675.0117.2437.1
広島市6,730.0446.61,785.520,136.66,496.6425.2649.4
福山市5,544.0367.83,123.215,065.54,737.1212.81,396.8
呉市3,995.0265.7833.116,892.21,908.467.4455.7
尾道市3,035.0201.62,516.68,750.51,667.347.3278.8
三原市2,424.0160.91,235.09,723.1701.240.4314.2
廿日市市2,135.0141.9606.87,871.11,053.769.0158.7
竹原市2,017.0134.0817.89,182.1434.513.259.3
三次市1,573.0104.01,158.55,516.4449.643.955.1
庄原市1,355.089.51,392.34,170.2381.229.963.9
府中市757.050.2377.32,351.9502.511.770.6
江田島市711.047.3625.01,908.3331.45.618.1
熊野町580.038.5310.52,251.4305.614.35.4
北広島町529.035.0710.71,474.2128.813.663.3
大竹市441.029.360.51,275.5263.39.4215.6
坂町301.020.070.61,063.4112.710.978.9
世羅町288.019.1396.6630.3138.711.12.2
海田町261.017.353.8797.0169.48.535.3
安芸高田市247.016.3224.5708.1110.06.313.8
府中町201.013.316.2454.2274.610.522.5

分析7: 用途地域 × 建物主用途 重ね合わせマップ + 散布図

狙い

これまでは 2D マトリクスやランキングで議論した。 ここで 地理的にどこ でミスマッチが発生しているかを地図上に重ね合わせて確認する。

結果

なぜ重ね合わせマップか: 「用途地域 (指定)」と「建物実利用」を 同じ図に重ねる ことで、線 (指定境界) と塗り (実態) のズレが地図上に直接見える。

用途地域 (枠線) × 建物主用途 (塗り)
用途地域 (枠線) × 建物主用途 (塗り)

読み取り:

市町の都市性 — 農地比率 × 建物密度
市町の都市性 — 農地比率 × 建物密度

なぜ散布図か: 2 軸の指標 (農地比率 vs 建物密度) で市町を空間配置し、クラスタ的な傾向を見るため。

読み取り:

仮説検証と考察

仮説検証

仮説判定根拠
H1: 第一種住居指定でも商業利用ビルが ≥10% 存在 反証 第一種住居 × 商業系 = 0.6% (14/2,463 メッシュ)。 閾値 10% 未満だが 0% ではなく、住居専用地域に商業利用が混入
H2: 工業地域指定の中で農地利用が残る 部分支持 工業系指定 × 農地利用 = 3.1% (50/1,592 メッシュ)。 工業利用が大半だが農地メッシュも観測
H3: ミスマッチ率は市町で異なる (広島市が高い) 支持 市町別ミスマッチ率は最大 48.4% (府中市) / 最小 9.3% (熊野町)、約 5.2 倍の差
H4: 田園住居指定はほぼすべて農地+住宅で利用と一致 反証 田園住居 × (住居系+農林) = 14.9% (62/415 メッシュ)。 想定通りだが低い
H5: 商業/第一種低層 建物密度比 ≥ 5 支持 商業 279 棟/km² / 第一種低層 37 棟/km² = ×7.5
H6: 旧市街地 (尾道/福山) のミスマッチが顕著 反証 市町別ランキング (図5) で 福山市 = #7 / 尾道市 = #16。いずれも上位3には未到達 — 旧市街地ではなく、地方都市・小規模都市部のミスマッチがより顕著

考察

発展課題 (結果から導かれる新たな問い)

  1. 築年代との交差:
    • 結果X: H1 で第一種住居 × 商業利用メッシュが数% 観測
    • 新仮説Y: そうした商業利用は古い建物に偏る (用途指定変更前から存在)
    • 課題Z: B_AGE_9xx 列 (築年代分布) を MAIN_GRP × 用途地域 でクロス集計
  2. 用途地域変更時系列との照合:
    • 結果X: ミスマッチ率は市町で 2〜数倍の差
    • 新仮説Y: 用途地域指定の変更頻度が高い市町ほど現状一致率が高い
    • 課題Z: 都市計画決定告示の年次データ (DoBoX外) と本記事の指標を時系列マッチング
  3. X09 の浸水想定との3層クロス:
    • 結果X: 商業地域は浸水想定域に多く重なる (X09 の発見)
    • 新仮説Y: 用途指定 × 実利用 × 浸水深 の3層分析で、「浸水しやすい商業実利用メッシュ」が浮かぶ
    • 課題Z: 本記事の joined テーブルに rank (浸水深) 列を sjoin で追加し、3 軸ピボット
  4. クラスタリングで市町を分類: 図10 散布図に基づき、k-means (k=3) で「都市/郊外/農村」を機械学習で自動分類
  5. 空き家(SUM_AKIYA 列) との交差: 本記事では未使用の空き家集計列をミスマッチ率と交差。「指定はあるが空き家が多い地区」を抽出
  6. 200m メッシュ → 250m メッシュの誤差: 用途地域は連続ポリゴン、建物利用は 250m 格子。重心 sjoin による近似精度を gpd.overlay() 厳密交差と比較し、誤差を定量化
  7. X07 (DID 人口集中地区) との交差: 用途指定が「商業」でも DID 外 = 人口希薄なら、商業立地の効率を疑う

補足: 16 要件チェック / GIS メソッド早見表 / シリーズ統合パターン

処理時間とパフォーマンス (要件S対応)

GIS メソッド早見表 (本記事で使った操作)

関数入力出力使った場面
gpd.read_file('zip://...')zip 内 GeoJSONGeoDataFrame40 ファイル取込
pd.concat([df1, df2, ...])複数 DataFrame列を和集合化した 1 DFシリーズ統合
gpd.GeoDataFrame(df, geometry='geometry', crs=...)concat した DFGeoDataFrame 復元concat 後 geometry 喪失防止
gdf.to_crs('EPSG:6671')GDF (任意 CRS)JGD2011 III (m単位)面積計算前の必須変換
gdf.geometry.simplify(N)GDF形状を Nm に丸めた GDF描画高速化
gdf.geometry.centroidポリゴン GDF重心点 GDFsjoin 高速化
gpd.sjoin(A, B, predicate='within')点 + ポリゴン属性結合された A建物 × 用途地域
gdf.dissolve(by='col')GDF + キー列キー単位で union用途地域集約 999→13

シリーズ統合パターン (DoBoX 共通テクニック)

都市計画基礎調査だけでなく、DoBoX では多数のシリーズが「市町ごとに別 dataset_id」で公開されている。 本記事の手順を一般化すると:

  1. カタログ index で 同じ Desc 書式の連番 N 件を見つける
  2. 各 dataset_id の resource ページから直 DL リンクを抽出して取得
  3. geopandas.read_file() で読み込み、"city" 列で識別
  4. pd.concat() で縦に積み上げ
  5. 列の和集合 + fillna(0) でスキーマ統一
  6. CRS を JGD2011 平面直角に揃え、面積を で計算
  7. 地理可視化: 主題図 + small multiples

このパターンで S系の他データ (例: 性別年齢別人口20件、農地転用状況20件) も県全域分析が可能。

16 要件 self-check