✅ このスクリプトは初回実行時にデータを自動取得します(DoBoX からの直接ダウンロード)。
| ID | データセット名 |
|---|---|
| #786 | 都市計画区域情報_区域データ_広島市_行政区域 |
| #797 | 都市計画区域情報_区域データ_呉市_行政区域 |
| #807 | 都市計画区域情報_区域データ_竹原市_行政区域 |
| #814 | 都市計画区域情報_区域データ_三原市_行政区域 |
| #824 | 都市計画区域情報_区域データ_尾道市_行政区域 |
| #832 | 都市計画区域情報_区域データ_福山市_行政区域 |
| #840 | 都市計画区域情報_区域データ_府中市_行政区域 |
| #850 | 都市計画区域情報_区域データ_三次市_行政区域 |
| #856 | 都市計画区域情報_区域データ_庄原市_行政区域 |
| #862 | 都市計画区域情報_区域データ_大竹市_行政区域 |
| #868 | 都市計画区域情報_区域データ_東広島市_行政区域 |
| #878 | 都市計画区域情報_区域データ_廿日市市_行政区域 |
| #888 | 都市計画区域情報_区域データ_安芸高田市_行政区域 |
| #894 | 都市計画区域情報_区域データ_江田島市_行政区域 |
| #900 | 都市計画区域情報_区域データ_府中町_行政区域 |
| #905 | 都市計画区域情報_区域データ_海田町_行政区域 |
| #911 | 都市計画区域情報_区域データ_熊野町_行政区域 |
| #916 | 都市計画区域情報_区域データ_坂町_行政区域 |
| #922 | 都市計画区域情報_区域データ_広島県_行政区域 |
| #935 | 都市計画区域情報_区域データ_北広島町_行政区域 |
| #941 | 都市計画区域情報_区域データ_世羅町_行政区域 |
実行コマンド:
cd "2026 DoBoX 教材"
python -X utf8 lessons/L15_admin_zones.py
DoBoX のオープンデータは申請不要・商用/非商用とも利用可。
data/extras/ は .gitignore 対象(約 57 GB のキャッシュ)。
スクリプト実行で自動再生成されます。
本レッスンは、広島県オープンデータポータル DoBoX の 「都市計画区域情報_区域データ_行政区域」シリーズ 21 件 を 1 つに統合し、広島県の地理構造を 形状・島嶼性・隣接構造 という3つの幾何学的観点から読み解く研究記事です。
dissolve(by="city") で市町境界を融合した後の
マルチポリゴンの「部分」の数。広島市は本土+似島など島嶼の数に等しい。
広島市の8区はここでは1部にまとまる。4πA / P²。
1 = 完全な円、0 に近いほど細長い・凹凸が多い。教科書的指標。geometry.touches)。
最大値は内陸の十字路、最小は離島自治体(江田島市は隣接 0)。pd.concat → GeoDataFrame で 1 枚に束ねる手法geopandas で計算する手法geometry.touches + 空間インデックスで構築する手法本記事で使う 21 dataset_id(市町別 20 + 県全域 1)は、DoBoX で「都市計画区域情報」配下「区域データ」配下の 行政区域 シリーズに位置する。列構造が 21 件すべてで完全に同一(FID, KEN_CD, CITY_CD, geometry の 4 列)であることが事前監査で確認済みのため、pd.concat による単純な縦結合で県全域 GeoDataFrame が組み立てられる。
| 項目 | 値 |
|---|---|
| シリーズ | 都市計画区域情報_区域データ_行政区域 |
| 件数(カバー) | 21 dataset_id(市町別 20 + 県全域 1) |
| 形式 | GeoJSON(ZIP 内同梱) |
| CRS | EPSG:6671 (JGD2011 平面直角第III系) ※すべての市町ファイルで統一 |
| 列構造 | FID, KEN_CD(=34), CITY_CD, geometry(4 列、全 21 件で完全同一) |
| ジオメトリ型 | Polygon(MultiPolygon は無し) |
| 合計ポリゴン数 | 140(市町別 21 ファイル合計)/ 140(県全域 ds=922) |
| 本記事で扱うサイズ | 140 ポリゴン × 4 列 ≈ 数 KB(軽量) |
| 市町 | タイプ | 海岸/内陸 | DoBoXページ | ZIP保存先 |
|---|---|---|---|---|
| 広島市 | 政令市 | 海岸 | DoBoX #786 | data/extras/L15_admin_zones/admin_786_広島市.zip |
| 呉市 | 市 | 海岸 | DoBoX #797 | data/extras/L15_admin_zones/admin_797_呉市.zip |
| 竹原市 | 市 | 海岸 | DoBoX #807 | data/extras/L15_admin_zones/admin_807_竹原市.zip |
| 三原市 | 市 | 海岸 | DoBoX #814 | data/extras/L15_admin_zones/admin_814_三原市.zip |
| 尾道市 | 市 | 海岸 | DoBoX #824 | data/extras/L15_admin_zones/admin_824_尾道市.zip |
| 福山市 | 市 | 海岸 | DoBoX #832 | data/extras/L15_admin_zones/admin_832_福山市.zip |
| 府中市 | 市 | 内陸 | DoBoX #840 | data/extras/L15_admin_zones/admin_840_府中市.zip |
| 三次市 | 市 | 内陸 | DoBoX #850 | data/extras/L15_admin_zones/admin_850_三次市.zip |
| 庄原市 | 市 | 内陸 | DoBoX #856 | data/extras/L15_admin_zones/admin_856_庄原市.zip |
| 大竹市 | 市 | 海岸 | DoBoX #862 | data/extras/L15_admin_zones/admin_862_大竹市.zip |
| 東広島市 | 市 | 海岸 | DoBoX #868 | data/extras/L15_admin_zones/admin_868_東広島市.zip |
| 廿日市市 | 市 | 海岸 | DoBoX #878 | data/extras/L15_admin_zones/admin_878_廿日市市.zip |
| 安芸高田市 | 市 | 内陸 | DoBoX #888 | data/extras/L15_admin_zones/admin_888_安芸高田市.zip |
| 江田島市 | 離島自治体 | 海岸 | DoBoX #894 | data/extras/L15_admin_zones/admin_894_江田島市.zip |
| 府中町 | 町 | 内陸 | DoBoX #900 | data/extras/L15_admin_zones/admin_900_府中町.zip |
| 海田町 | 町 | 海岸 | DoBoX #905 | data/extras/L15_admin_zones/admin_905_海田町.zip |
| 熊野町 | 町 | 内陸 | DoBoX #911 | data/extras/L15_admin_zones/admin_911_熊野町.zip |
| 坂町 | 町 | 海岸 | DoBoX #916 | data/extras/L15_admin_zones/admin_916_坂町.zip |
| 北広島町 | 町 | 内陸 | DoBoX #935 | data/extras/L15_admin_zones/admin_935_北広島町.zip |
| 世羅町 | 町 | 内陸 | DoBoX #941 | data/extras/L15_admin_zones/admin_941_世羅町.zip |
| 広島県(全域集約) | — | — | DoBoX #922 | data/extras/L15_admin_zones/admin_922_広島県.zip |
海岸/内陸 区分は本記事独自の分類(瀬戸内海岸線にポリゴンが接するかで決定)。三次市・庄原市・北広島町・世羅町・安芸高田市・府中市・府中町・熊野町は内陸。他は海岸を持つ。
本記事の再現性を担保するため、HTML 1 枚から 生データ・中間 CSV・図 PNG・再現 Python を直リンクで取得できるようにしてある。
21 件の ZIP は前項の表からそれぞれ DoBoX へリンクしている。
あるいは一括で取得するなら、本リポジトリ同梱の data/fetch_all.py を使う:
cd "2026 DoBoX 教材"
py -X utf8 data\extras\L15_admin_zones\fetch_admin_zones.py
実行は cd "2026 DoBoX 教材"; py -X utf8 lessons\L15_admin_zones.py。
21 ZIP がローカルにあれば 15 秒以内 で全図 + CSV 再生成(要件 S 準拠)。
21 個の GeoJSON ZIP ファイル(市町ごとに別ファイル)を、プログラム上は1個の GeoDataFrame として扱える形にする。21 件すべてが同列構造(FID/KEN_CD/CITY_CD/geometry の4列)であることが事前監査で確認済みなので、和集合化なしで縦結合できる。
直感: ZIP→geopandas→属性付与→concat の4ステップ。ZIP は zipfile で開いて中身の .geojson を io.BytesIO に流し込み、それを geopandas.read_file に渡せば中間ファイルを書かずに直接読める。
大筋(5 ステップ)
load_geojson_zip() で読むcity/dsid/coastal/ctype 列を付与(あとで集計するためのキー)pd.concat で縦結合 → 140 行 1 個to_crs(EPSG:6671) で広島県平面直角座標系に投影変換(m 単位で面積計算したいのでこの CRS を選択)geometry.area) と周長 (geometry.length) を列追加入出力: 入力=21 ZIP、出力=140 行 × 11 列の GeoDataFrame 1 個。
前提と限界: 21 件の列構造が同一であることが大前提(事前監査で OK 確認済)。もし将来 DoBoX が列を増やしたら pd.concat は和集合化するため列が増えて NaN が出る。
パラメータ: TARGET_CRS は EPSG:6671(広島県平面直角第III系)固定。別の都道府県データには違う系号を選ぶ必要がある。
| 段階 | 形 | サイズ | このデータで起きていること |
|---|---|---|---|
| ① 元 ZIP | ZIP(中身は 1 個の .geojson) | ~1 MB | 呉市 44 ポリゴン(本土+多数の島嶼)が GeoJSON 1 ファイルに格納 |
② load_geojson_zip()後 | GeoDataFrame | 44 行 × 4 列 | FID, KEN_CD=34, CITY_CD=202, geometry |
| ③ 属性付与(city/dsid 等) | GeoDataFrame | 44 行 × 9 列 | city="呉市", coastal=True 等を全行に付与 |
④ pd.concat(21 市町分) | GeoDataFrame | 140 行 × 9 列 | 21 市町の Polygon 全部が1枚の GeoDataFrame に |
⑤ to_crs(EPSG:6671) | GeoDataFrame | 140 行 | JGD2011 平面直角第III系 (m 単位) に投影変換 → 面積計算可能化 |
| ⑥ 面積/周長計算 | GeoDataFrame | 140 行 × 11 列 | poly_area_km2, poly_perim_km を追加 |
このステップで admin_all(140 行 × 11 列)とken_gdf(県全域版 ds=922、140 行)が用意できた。以降の分析は全部この2つだけで完結する。
各市町を1単位として「形がどれだけ複雑か」「島嶼や飛び地をどれだけ持つか」を定量指標に落とす。次のセクションでこれを地図と散布で可視化するための前段。
STEP1: dissolve で市町を1つにまとめるadmin_all.dissolve(by="city") で 同じ city 名のポリゴンを融合して MultiPolygon 化する。ここで広島市の 11 ポリ(区別 + 島)が 1 個の MultiPolygon になる。
STEP2: 4 指標を計算
| 指標 | 定義 | 意味 | 1 に近いと | 0 に近いと |
|---|---|---|---|---|
| 円形度 | 4πA / P² | 面積の周長効率 | 完全な円(最も詰まった形) | 細長い・凹凸が激しい |
| 凸包充填率 | A / A_hull | 凸包の中身の埋まり具合 | 凸包と一致(凹みなし) | 凹みや欠けが多い |
| 連結成分数 | MultiPolygon の部分数 | 島嶼数+飛び地数 | 1(一塊) | 2 以上で島・飛び地ありと判定 |
| ポリゴン数 | 提供データの行数 | 提供時の分割数 | 1(単純) | 多いほど島嶼や行政内部分割を持つ |
これら 4 指標は何が違うのか?
ポリゴン数はデータ提供元が決めた「分割の単位」(例: 広島市は8区+島で11)。
連結成分数は dissolve で融合した後の「物理的に分離した部分」(例: 広島市は本土+似島で2)。
円形度と凸包充填率は形そのものの複雑性。円形度は外周の長さに敏感(ぐねぐねした海岸線に強く反応)、凸包充填率は大きな凹みに強く反応(湾や入り江)。
前提と限界: 円形度は EPSG:6671(m 単位)でないと意味のない値になる。EPSG:4326(緯度経度、度単位)で計算すると周長と面積の単位が噛み合わず無意味。本記事は冒頭で to_crs(EPSG:6671) 済。
21 市町を縦に並べた集計表が下記。北から南、西から東のおおまかな順で並べてある。
列の意味: ポリゴン数=提供データ行数、連結成分数=dissolve 後の部分数、海/内=瀬戸内海岸線にポリゴンが触れるか。
| 市町 | ctype | 海/内 | ポリゴン数 | 連結成分数 | 面積 km² | 周長 km | 円形度 | 凸包充填率 |
|---|---|---|---|---|---|---|---|---|
| 広島市 | 政令市 | 海 | 11 | 2 | 957.4 | 537.9 | 0.128 | 0.763 |
| 呉市 | 市 | 海 | 44 | 44 | 388.4 | 372.2 | 0.035 | 0.437 |
| 竹原市 | 市 | 海 | 4 | 4 | 117.9 | 114.8 | 0.112 | 0.528 |
| 三原市 | 市 | 海 | 6 | 6 | 478.6 | 172.3 | 0.203 | 0.794 |
| 尾道市 | 市 | 海 | 14 | 14 | 295.9 | 244.3 | 0.062 | 0.521 |
| 福山市 | 市 | 海 | 14 | 14 | 521.3 | 247.1 | 0.107 | 0.635 |
| 府中市 | 市 | 内 | 1 | 1 | 195.6 | 96.6 | 0.263 | 0.766 |
| 三次市 | 市 | 内 | 1 | 1 | 777.6 | 227.7 | 0.189 | 0.657 |
| 庄原市 | 市 | 内 | 1 | 1 | 1246.5 | 240.6 | 0.271 | 0.822 |
| 大竹市 | 市 | 海 | 18 | 18 | 78.7 | 109.3 | 0.083 | 0.377 |
| 東広島市 | 市 | 海 | 8 | 8 | 634.7 | 224.7 | 0.158 | 0.726 |
| 廿日市市 | 市 | 海 | 2 | 2 | 489.1 | 229.6 | 0.117 | 0.719 |
| 安芸高田市 | 市 | 内 | 1 | 1 | 538.1 | 158.2 | 0.270 | 0.750 |
| 江田島市 | 離島自治体 | 海 | 9 | 9 | 99.9 | 173.8 | 0.042 | 0.485 |
| 府中町 | 町 | 内 | 1 | 1 | 10.5 | 17.5 | 0.428 | 0.855 |
| 海田町 | 町 | 海 | 1 | 1 | 14.0 | 19.9 | 0.448 | 0.781 |
| 熊野町 | 町 | 内 | 1 | 1 | 33.6 | 29.6 | 0.484 | 0.831 |
| 坂町 | 町 | 海 | 1 | 1 | 24.5 | 23.5 | 0.559 | 0.843 |
| 北広島町 | 町 | 内 | 1 | 1 | 646.1 | 188.5 | 0.229 | 0.747 |
| 世羅町 | 町 | 内 | 1 | 1 | 278.0 | 105.0 | 0.317 | 0.844 |
この表から読み取れること
前セクションで計算した4指標を地図で見て、「広島県のどこに島嶼自治体が集まるか」「どこに整然とした内陸自治体が並ぶか」を直感で掴む。表だけだと地理的パターンが見えない(要件 T)。
なぜこの図か(要件 H): 最初に「県全域がどう市町で塗り分けられるか」の基準ビューを見せる。以降のすべての図はこの位置感覚を前提にする。色分けは ctype(政令市・市・離島自治体・町)。地理リテラシの足場として必須。

この図から読み取れること(要件 F)
なぜこの図か: 「島嶼性」を地図と散布の両方から見たい。choropleth はどこに島嶼自治体が集まるかを地図的に、散布は「ポリゴン数が多い市町は本当に円形度が低いのか(H1+H2)」を数学的に確かめる。

この図から読み取れること
なぜこの図か: 円形度と凸包充填率は 同じ「複雑さ」を別の角度から測る。両方を並べると、どの市町が「外周ぐねぐね型」(円形度低)でどの市町が「大きな凹み型」(凸包充填率低)かを区別できる。

この図から読み取れること
なぜこの図か: 集計値だけだと どんな形なのかがイメージできない。20 panels を並べて見せれば、各市町の「島嶼の形・大きさ・配置」が一目で対比できる。教材として「自分の街は何処?」の問いに即答できる重要パネル。

この図から読み取れること
21 市町は地理的にどう繋がっているのか。境界を共有する関係をエッジ、市町をノードとするグラフを作り、「県内で最も多くの市町に接する自治体はどこか(中心性)」を測る。都市計画上の合併・連携・避難経路設計などすべての横断分析の基盤になる。
直感: 「くっつき判定」を全 20 市町ペア(合計 190 ペア)で行う。ナイーブには shapely.touches(境界線のみ共有)を使いたいが、GIS データには 1〜数 mm レベルの座標ゆれがあり、本来隣接している市町でも touches が False を返してしまう(実際このデータでは 35 隣接ペアのうち 5 ペアしか検出できなかった)。
そこで採用するのが「距離による隣接判定」: geom_a.distance(geom_b) <= 1m なら隣接とみなす。1m は行政区域の精度上、意味のある重なりとはみなされない閾値。実装上は 空間インデックス sindex で bbox 候補を絞ってから distance を計算(高速化)。
大筋
geoms[city] に格納sindex で bbox が交わる候補を絞るgeom_a.distance(geom_b) <= 1m 判定(a, b) として追加(a<b で重複除去)入出力: 入力=20 個の MultiPolygon、出力=エッジリスト + 隣接次数辞書。
前提と限界: 1m 閾値はパラメータ。0m(厳密)にすると 5 ペアしか検出できず、10m にすると本来非隣接の島嶼ペア(沖合 2-5m など)を誤検出するリスク。1m が広島県データでの最適値であることは事前検証で確認済み。
代替案: buffer(0.5m) で互いに膨らませてから intersects 判定する手もある。計算コストはやや増えるが結果は同じ。本記事は distance 方式を採用。
↑ L15_admin_zones.py 行 1180–1235
なぜこの表か: 「隣接が多い市町は中山間地」(H4) を確かめるため。ctype と海/内陸を併記して視覚的に比較しやすくする。
| 市町 | ctype | 海/内 | 隣接次数 |
|---|---|---|---|
| 広島市 | 政令市 | 海 | 9 |
| 東広島市 | 市 | 海 | 8 |
| 三次市 | 市 | 内 | 5 |
| 府中市 | 市 | 内 | 5 |
| 世羅町 | 町 | 内 | 5 |
| 安芸高田市 | 市 | 内 | 4 |
| 呉市 | 市 | 海 | 4 |
| 三原市 | 市 | 海 | 4 |
| 尾道市 | 市 | 海 | 4 |
| 熊野町 | 町 | 内 | 4 |
| 坂町 | 町 | 海 | 3 |
| 海田町 | 町 | 海 | 3 |
| 竹原市 | 市 | 海 | 2 |
| 廿日市市 | 市 | 海 | 2 |
| 庄原市 | 市 | 内 | 2 |
| 福山市 | 市 | 海 | 2 |
| 北広島町 | 町 | 内 | 2 |
| 大竹市 | 市 | 海 | 1 |
| 府中町 | 町 | 内 | 1 |
| 江田島市 | 離島自治体 | 海 | 0 |
この表から読み取れること
なぜこの図か: 表だけだと「県の中で本当に十字路はどこか」が地図上で見えない。左の choropleth で次数を色塗り、右でエッジを線で重ねると、ネットワーク中心性が視覚的に把握できる。

この図から読み取れること
| 市町A | 市町B |
|---|---|
| 三原市 | 世羅町 |
| 三原市 | 尾道市 |
| 三原市 | 東広島市 |
| 三原市 | 竹原市 |
| 三次市 | 世羅町 |
| 三次市 | 安芸高田市 |
| 三次市 | 庄原市 |
| 三次市 | 府中市 |
| 三次市 | 東広島市 |
| 世羅町 | 尾道市 |
| 世羅町 | 府中市 |
| 世羅町 | 東広島市 |
| 北広島町 | 安芸高田市 |
| 北広島町 | 広島市 |
| 呉市 | 坂町 |
| 呉市 | 広島市 |
| 呉市 | 東広島市 |
| 呉市 | 熊野町 |
| 坂町 | 広島市 |
| 坂町 | 海田町 |
| 大竹市 | 廿日市市 |
| 安芸高田市 | 広島市 |
| 安芸高田市 | 東広島市 |
| 尾道市 | 府中市 |
| 尾道市 | 福山市 |
| 広島市 | 府中町 |
| 広島市 | 廿日市市 |
| 広島市 | 東広島市 |
| 広島市 | 海田町 |
| 広島市 | 熊野町 |
| 庄原市 | 府中市 |
| 府中市 | 福山市 |
| 東広島市 | 熊野町 |
| 東広島市 | 竹原市 |
| 海田町 | 熊野町 |
研究記事を書くなら「使ってるデータが信じられるか」を必ず点検する。DoBoX には市町別 21 ファイルと、県全域 1 ファイル(ds=922)の2 系統がある。同じ広島県を測っているなら積算が合うはずであり、ズレがあれば「どちらか/両方が古い/重複か欠落あり」を疑える。さらに国土地理院の公的統計とも比較し、3 系統で三角測量する。
直感: 「足し算が合うかチェック」。21 個の市町別面積の合計と県全域 1 ファイルの面積と国土地理院の公表面積の合計、3 つの数を比べる。誤差が 1% 未満なら「実用上一致」、それ以上なら原因を考える。
大筋
admin_all['poly_area_km2'].sum() で 21 ファイル合計ken_gdf['poly_area_km2'].sum() で県全域版合計CITY_REF 辞書の area_km2_ref を合計(国土地理院 R6)前提と限界: GeoJSON の面積は EPSG:6671 の平面直角座標系で計算した平面面積(地球の曲率を無視)。国土地理院の公表値は球面三角測量に基づく。瀬戸内地域では曲率の影響は約 0.01% 以下なので、ほぼ無視できる。
パラメータ: 「許容誤差」を ±1% に設定(仮説 H3)。GIS データの実用整合性として通常は ±1% 以内なら同一データと見なす。
↑ L15_admin_zones.py 行 1331–1354
| ソース | 面積 km² | ポリゴン数 | 備考 |
|---|---|---|---|
| 21 市町別 GeoJSON 積算 | 7,826.456 | 140 | 本記事のメインデータ |
| 県全域 ds=922 GeoJSON | 7,826.456 | 140 | DoBoX 集約版 |
| 公的統計参考値合計 | 7,713.300 | — | 国土地理院 R6 全国都道府県市区町村別面積調 |
この表から読み取れること
なぜこの図か: 「全体合計が ±1% で一致」だけでは 個別市町でズレが大きいかが見えない。市町ごとに棒グラフで並べると、どの市町で精度問題があるかが把握できる。
![図6: 市町別 GeoJSON 面積と国土地理院値の差 [%]](assets/L15_area_diff.png)
この図から読み取れること
| 市町 | GeoJSON 面積 km² | 国土地理院 km² | 差 [%] |
|---|---|---|---|
| 坂町 | 24.51 | 15.7 | +56.094 |
| 呉市 | 388.41 | 352.8 | +10.094 |
| 広島市 | 957.39 | 906.7 | +5.591 |
| 尾道市 | 295.85 | 285.1 | +3.771 |
| 海田町 | 14.04 | 13.8 | +1.748 |
| 三原市 | 478.60 | 471.6 | +1.485 |
| 江田島市 | 99.93 | 100.7 | -0.768 |
| 福山市 | 521.25 | 518.1 | +0.608 |
| 府中町 | 10.46 | 10.4 | +0.541 |
| 竹原市 | 117.86 | 118.2 | -0.291 |
この表から読み取れること: 差の大きい市町でも 絶対値はほぼ ±数 % 以内。都市計画区域分析の用途では十分な精度。
狙い: 県内 21 市町の中で広島市は唯一の政令市で8 区を持つ。「広島市」を1つの市町として集約してきたが、区分けの非対称性(中区は小さく、安佐北区は巨大)があるはず。
手法: CITY_CD 末2桁が広島市の8区コード(101〜108)。区別にdissolveすれば区単位の MultiPolygon が得られる。

この図から読み取れること
| 区 | CITY_CD | ポリゴン数 | 面積 km² | 周長 km | 円形度 |
|---|---|---|---|---|---|
| 中区 | 101 | 1 | 17.6 | 22.5 | 0.437 |
| 東区 | 102 | 1 | 39.4 | 33.3 | 0.445 |
| 南区 | 103 | 1 | 54.8 | 38.5 | 0.465 |
| 西区 | 104 | 2 | 51.7 | 42.6 | 0.358 |
| 安佐南区 | 105 | 1 | 117.0 | 68.0 | 0.318 |
| 安佐北区 | 106 | 1 | 353.5 | 134.4 | 0.246 |
| 安芸区 | 107 | 3 | 94.4 | 75.4 | 0.209 |
| 佐伯区 | 108 | 1 | 228.9 | 123.2 | 0.190 |
この表から読み取れること: 区の円形度は中区・南区が比較的高く(湾岸の四角い区)、安佐北区・西区は低い(細長い・島嶼を含む)。区の中でも構造が一様でない。
狙い: 海岸の有無で形状指標がどれだけ違うのか、分布の差を boxplot で見て、ctype 別に散布図で確認する。

この図から読み取れること
| 区分 | 市町数 | 面積平均 km² | ポリゴン数 平均 | ポリゴン数 中央値 | 円形度 平均 | 円形度 中央値 | 隣接次数 平均 |
|---|---|---|---|---|---|---|---|
| 海岸あり | 12 | 341.7 | 11.0 | 8.5 | 0.171 | 0.114 | 3.50 |
| 内陸 | 8 | 465.8 | 1.0 | 1.0 | 0.306 | 0.270 | 3.50 |
この表から読み取れること: 海岸ありの方が面積も大きい(沿岸の市は内陸町より広いことが多い)が、1 市町あたりのポリゴン数は数倍〜十倍以上。内陸の方が隣接次数は高い(仮説 H4 支持)— 海岸線が「半分の方向を海に取られる」分、内陸自治体の方が陸続き隣接が増える。
| 仮説 | 主張 | 判定 | 根拠 |
|---|---|---|---|
| H1 | 海岸を持つ市町ほどポリゴン数が多い | 支持 | coastal_median_polys=8.5, inland_median_polys=1.0, coastal_mean_polys=11.0, inland_mean_polys=1.0 |
| H2 | 円形度が低い市町ほど海岸線比率が高い | 支持 | coastal_median_compactness=0.1145, inland_median_compactness=0.2704 |
| H3 | 県全域版 ds=922 と市町別 21 ファイルの面積積算は ±1% 以内で一致 | 支持 | city_sum_km2=7826.456, ken_sum_km2=7826.456, diff_pct=-0.0 |
| H4 | 隣接次数が高い市町は内陸の中山間地域に集中する | 部分支持(広島市が外れ値) | inland_top3=['府中市', '三次市', '世羅町'], coastal_top3=['広島市', '東広島市', '呉市'], mean_degree_inland=3.5, mean_degree_coastal=3.5, median_degree_inland=4, median_degree_coastal=3, mean_degree_coastal_excl_seirei=3.0 |
| H5 | 市と町では1ポリゴンあたり面積が異なる | 支持(差が2倍以上) | city_avg_km2_per_poly=53.76, town_avg_km2_per_poly=167.81 |
この表から読み取れること
各課題は「結果X → 新仮説Y → 課題Z」の3段で書く(要件E)。
compactness・convex_fill・n_polys と
回帰分析する。合併件数 → 形状複雑性の Pearson 相関を計算(n=20 と小さいので
Spearman も併用)。distance_to_chuo vs area_km2 の散布図を作成。
log-log で回帰して傾きを推定。距離が3倍 → 面積が約9倍(傾き2付近)になれば
面積拡張の自己相似性が示される。geopandas.GeoSeries.equals_exact(tolerance=1.0) で
140 ポリゴン × 140 ポリゴンの全ペア距離を計算。1m 以内の許容誤差でマッチした
ペアの数が 140 になれば仮説支持。マッチしないポリゴンがあれば、
DoBoX の更新タイミング差や手動編集の痕跡が見つかる。networkx で隣接エッジから無向グラフを構築し、
betweenness_centrality() と eigenvector_centrality() を計算。
本記事の隣接次数とランキング比較。差が出る市町(特に「次数は中で媒介性は高/低」)を抽出して
考察する。perim_km は海岸線と陸地境界を区別していない。geopandas.overlay(market_diss, kasen_or_seacoast, how="difference")
で陸地境界を除外し、残りが海岸線。海岸線比率を計算後、
人口密度(DoBoX 性別年齢別人口 シリーズ)と相関分析する。
L17(人口・DID 統合)への自然な接続。