9  市区町村の人口を調べる

これまでに学んだデータの読み込み,条件による行の取り出し,可視化,代表値を使って,全国の市区町村の人口を調べよう.本章の問いは,市区町村には,どのくらいの人口があるのかである.

まず,全国の市区町村の人口の平均値と中央値を比べ,その違いを分布から考える.次に,人口が 0 人という記録の背景や,都道府県ごとの市区町村数を調べる.最後に,関心のある地域を一つ選んで,全国の結果と比較しよう.

9.1 どのようなデータか

全国の市区町村の人口を調べる.セクション A.2.4 で紹介している独立行政法人統計センターの SSDSE-A を使う.1 行が一つの市区町村に対応する.

SSDSE-A-2026.csv をダウンロードし,チャプター 4 と同じ手順でアップロードする.本章のコードは,上から順に実行する.このファイルは Shift_JIS で保存されており(セクション 4.10.2),先頭の 2 行には項目コードと年度が入っている.そこで,encoding="cp932" と header=2 を指定する.header=2 は,0 から数えて 2 行目,つまり 3 行目を列名として使う指定である.

import pandas as pd
import matplotlib.pyplot as plt

municipalities = pd.read_csv("SSDSE-A-2026.csv", encoding="cp932", header=2)
municipalities[["都道府県", "市区町村", "総人口"]].head()
都道府県 市区町村 総人口
0 北海道 札幌市 1973395
1 北海道 函館市 251084
2 北海道 小樽市 111299
3 北海道 旭川市 329306
4 北海道 室蘭市 82383

SSDSE-A には 125 の項目があるが,ここでは都道府県,市区町村,総人口の 3 列を使う.総人口 は,2020 年の国勢調査による人口である.東京都の 23 区は区ごとに 1 行となっているが,横浜市などの政令指定都市は,区に分けずに 1 行にまとめられている.

9.2 市区町村の人口はどのくらいか

population = municipalities["総人口"]
mean_population = population.mean()
median_population = population.median()

print("市区町村の数:", len(population))
print("合計(人):", population.sum())
print("平均値(人):", round(mean_population))
print("中央値(人):", round(median_population))
市区町村の数: 1741
合計(人): 126146099
平均値(人): 72456
中央値(人): 23426

round(x) は,x を最も近い整数に丸める.

1,741 の市区町村の人口の合計は 126,146,099 人であり,2020 年の日本の人口に等しい.平均値は,この合計を 1,741 で割った約 7 万 2 千人である.一方,中央値は約 2 万 3 千人であり,平均値は中央値の 3 倍以上ある.

9.3 平均値より人口が少ない市区町村は多いのか

平均値を下回る市区町村の数を数えてみよう.

below_mean = municipalities[population < mean_population]
print("平均値を下回る市区町村の数:", len(below_mean))
print("割合:", round(len(below_mean) / len(population), 3))
平均値を下回る市区町村の数: 1354
割合: 0.778

1,741 市区町村のうち 1,354 市区町村,つまり約 78% の市区町村で,人口が平均値を下回る.平均値を引き上げているのは,人口の多い一部の市である.人口が 100 万人以上の市区町村を取り出す.

large_cities = municipalities[population >= 1000000]
large_cities[["都道府県", "市区町村", "総人口"]]
都道府県 市区町村 総人口
0 北海道 札幌市 1973395
252 宮城県 仙台市 1096704
510 埼玉県 さいたま市 1324025
689 神奈川県 横浜市 3777491
690 神奈川県 川崎市 1538262
984 愛知県 名古屋市 2332176
1086 京都府 京都市 1463723
1112 大阪府 大阪市 2752412
1155 兵庫県 神戸市 1525152
1330 広島県 広島市 1200754
1468 福岡県 福岡市 1612392

人口が 100 万人以上の市は 11 市あり,最も人口の多い横浜市の人口は 377 万人を超える.なお,国勢調査の報告書では,東京都の 23 区をまとめた「特別区部」を 1 市として数えるため,人口が 100 万人以上の市は 12 市となる.

人口の分布もヒストグラムで確かめよう.横軸を万人単位にするため,人口を 10,000 で割ってから描く.全 1,741 市区町村のデータでグラフを作り,人口の少ない側を詳しく見るため,plt.xlim(0, 20) で 0〜20 万人の範囲を表示する.20 万人を超える 130 市区町村は,表示範囲の外にある.平均値と中央値の線も,全市区町村から計算した値を使う.

plt.figure(figsize=(7, 4))
plt.hist(population / 10000, bins=range(0, 401), edgecolor="white", color="steelblue")
plt.axvline(mean_population / 10000, color="black", linestyle="--", label="Mean")
plt.axvline(median_population / 10000, color="black", linestyle=":", label="Median")
plt.xlabel("Population (10,000 people)")
plt.ylabel("Number of municipalities")
plt.xlim(0, 20)
plt.legend()
plt.tight_layout()
plt.show()
人口を万人単位で示したヒストグラムのうち,0〜20 万人の範囲を表示した図.人口の少ない側に多くの市区町村が集まっている.中央値約2.3万人を点線,平均値約7.2万人を破線で示している.
図 9.1: 市区町村の人口の分布(2020 年).0〜20 万人の範囲を表示している.20 万人を超える 130 市区町村は表示範囲の外にある.平均値と中央値は全 1,741 市区町村の値である.

図 9.1 では,人口が少ない側に多くの市区町村が集まっている.先ほど取り出した大都市などは,図の表示範囲よりも右側にある.人口が多い一部の市の影響を受ける平均値は,中央値よりも右側に位置している.

9.4 人口が 0 人という記録をどう読むか

最も人口の少ない市区町村も確かめておこう.population.min() は,最小値を返す.

print("最小値(人):", population.min())
最小値(人): 0

最小値は 0 人である.どの市区町村かを調べる.

no_residents = municipalities[population == 0]
no_residents[["都道府県", "市区町村", "総人口"]]
都道府県 市区町村 総人口
401 福島県 双葉町 0

人口が 0 なのは,福島県の双葉町である.これは入力の誤りではない.双葉町では,2011 年の東京電力福島第一原子力発電所の事故の後,町の全域に避難指示が出された.2020 年 3 月に町の一部で避難指示が解除されたが,町内に再び住めるようになったのは 2022 年 8 月である.2020 年の国勢調査の時点では,町内に住んでいる人がいなかったため,人口は 0 となっている.

9.5 市区町村が最も多い都道府県はどこか

最頻値は,カテゴリのデータにも使える.都道府県 の列の最頻値は,最も多くの行に現れる都道府県,つまり市区町村の数が最も多い都道府県を表す.

print(municipalities["都道府県"].mode())

hokkaido = municipalities[municipalities["都道府県"] == "北海道"]
print("北海道の市区町村の数:", len(hokkaido))
0    北海道
Name: 都道府県, dtype: object
北海道の市区町村の数: 179

市区町村の数が最も多いのは北海道で,179 の市町村がある.

9.6 身近な地域を調べよう

練習 9.1 (身近な地域の人口を調べる) 本文で読み込んだ SSDSE-A のデータを使い,出身地や住んでいる地域など,関心のある都道府県を一つ選んで,市区町村の人口を調べよう.人口は 2020 年の国勢調査によるものである.

  1. 選んだ都道府県の行を取り出し,市区町村の数を求めよ.
  2. 市区町村の人口の平均値と中央値を求め,全国の結果と比べよ.
  3. 人口が最も多い市区町村とその人口を調べよ.この結果も参考にして,選んだ都道府県の平均値と中央値の違いを説明せよ.

ヒント:神奈川県の行は,次のように取り出せる."神奈川県" を,選んだ都道府県の名前に置き換えよう.

selected = municipalities[municipalities["都道府県"] == "神奈川県"]

最大値は,Series の .max() で求められる.

9.7 わかったことをまとめる

全国の市区町村の人口は,平均値が約 7 万 2 千人,中央値が約 2 万 3 千人であった.人口が多い一部の市が平均値を引き上げており,約 78% の市区町村の人口は平均値を下回っていた.市区町村の人口を説明するときは,一つの代表値だけでなく,分布や大きな値も確かめることが大切である.

また,双葉町の例のように,数値を読む際には調査の時点と地域の背景も確認しよう.練習 9.1 で調べた地域についても,平均値と中央値,人口が最も多い市区町村を手がかりに,わかったことを 2〜3 文でまとめてみよう.