これまでに学んだデータの読み込み,条件による行の取り出し,可視化,代表値を使って,全国の市区町村の人口を調べよう.本章の問いは,市区町村には,どのくらいの人口があるのかである.
まず,全国の市区町村の人口の平均値と中央値を比べ,その違いを分布から考える.次に,人口が 0 人という記録の背景や,都道府県ごとの市区町村数を調べる.最後に,関心のある地域を一つ選んで,全国の結果と比較しよう.
どのようなデータか
全国の市区町村の人口を調べる.セクション 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 行にまとめられている.
市区町村の人口はどのくらいか
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 倍以上ある.
平均値より人口が少ない市区町村は多いのか
平均値を下回る市区町村の数を数えてみよう.
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()
図 9.1 では,人口が少ない側に多くの市区町村が集まっている.先ほど取り出した大都市などは,図の表示範囲よりも右側にある.人口が多い一部の市の影響を受ける平均値は,中央値よりも右側に位置している.
人口が 0 人という記録をどう読むか
最も人口の少ない市区町村も確かめておこう.population.min() は,最小値を返す.
print("最小値(人):", population.min())
最小値は 0 人である.どの市区町村かを調べる.
no_residents = municipalities[population == 0]
no_residents[["都道府県", "市区町村", "総人口"]]
人口が 0 なのは,福島県の双葉町である.これは入力の誤りではない.双葉町では,2011 年の東京電力福島第一原子力発電所の事故の後,町の全域に避難指示が出された.2020 年 3 月に町の一部で避難指示が解除されたが,町内に再び住めるようになったのは 2022 年 8 月である.2020 年の国勢調査の時点では,町内に住んでいる人がいなかったため,人口は 0 となっている.
市区町村が最も多い都道府県はどこか
最頻値は,カテゴリのデータにも使える.都道府県 の列の最頻値は,最も多くの行に現れる都道府県,つまり市区町村の数が最も多い都道府県を表す.
print(municipalities["都道府県"].mode())
hokkaido = municipalities[municipalities["都道府県"] == "北海道"]
print("北海道の市区町村の数:", len(hokkaido))
0 北海道
Name: 都道府県, dtype: object
北海道の市区町村の数: 179
市区町村の数が最も多いのは北海道で,179 の市町村がある.
身近な地域を調べよう
練習 9.1 (身近な地域の人口を調べる) 本文で読み込んだ SSDSE-A のデータを使い,出身地や住んでいる地域など,関心のある都道府県を一つ選んで,市区町村の人口を調べよう.人口は 2020 年の国勢調査によるものである.
- 選んだ都道府県の行を取り出し,市区町村の数を求めよ.
- 市区町村の人口の平均値と中央値を求め,全国の結果と比べよ.
- 人口が最も多い市区町村とその人口を調べよ.この結果も参考にして,選んだ都道府県の平均値と中央値の違いを説明せよ.
ヒント:神奈川県の行は,次のように取り出せる."神奈川県" を,選んだ都道府県の名前に置き換えよう.
selected = municipalities[municipalities["都道府県"] == "神奈川県"]
最大値は,Series の .max() で求められる.
わかったことをまとめる
全国の市区町村の人口は,平均値が約 7 万 2 千人,中央値が約 2 万 3 千人であった.人口が多い一部の市が平均値を引き上げており,約 78% の市区町村の人口は平均値を下回っていた.市区町村の人口を説明するときは,一つの代表値だけでなく,分布や大きな値も確かめることが大切である.
また,双葉町の例のように,数値を読む際には調査の時点と地域の背景も確認しよう.練習 9.1 で調べた地域についても,平均値と中央値,人口が最も多い市区町村を手がかりに,わかったことを 2〜3 文でまとめてみよう.