都道府県人口のヒストグラム

e-Statの人口推計 / 各年10月1日現在人口から2022年10月1日現在の都道府県人口データをいただいてくる(1000人単位):

total = 124947
population = [5140, 1204, 1181, 2280, 930, 1041, 1790, 2840, 1909,
              1913, 7337, 6266, 14038, 9232, 2153, 1017, 1118, 753, 802, 2020, 1946,
              3582, 7495, 1742, 1409, 2550, 8782, 5402, 1306, 903, 544, 658, 1862,
              2760, 1313, 704, 934, 1306, 676, 5116, 801, 1283, 1718, 1107, 1052,
              1563, 1468]

このヒストグラムを描いてみる:

import matplotlib.pyplot as plt
import numpy as np

plt.hist(population, color="lightgray", edgecolor="black", bins=np.arange(16)*1000)
plt.yticks([0, 5, 10, 15, 20], [0, 5, 10, 15, 20])
plt.ylim(0, 25)
mean = total / 47
median = np.median(population)
sd = np.std(population)  # これはNで割る流儀。N-1で割るにはnp.std(population, ddof=1)とする
tokyo = max(population)
plt.axvline(mean, ymin=6/25, ymax=22/25, color="black", linewidth=1)
plt.axvline(median, ymin=21/25, ymax=23/25, color="black", linewidth=1)
plt.annotate("", xy=(mean,8), xytext=(mean+sd,8), arrowprops=dict(arrowstyle="<->"))
plt.text(mean, 22.5, "平均値", ha="center")
plt.text(median, 23.5, "中央値", ha="center")
plt.text(mean+sd/2, 8.5, "標準偏差", ha="center")
plt.text(tokyo, 3.5, "東京都", ha="center")
plt.axvline(tokyo, ymin=1/25, ymax=3/25, color="black", linewidth=1)
plt.xlabel("人口(1000人)")
plt.ylabel("度数")
都道府県人口のヒストグラム

ちなみに、東京は平均より標準偏差の4倍以上離れている:

print((tokyo - mean) / sd)

何σ以上離れていたら「外れ値」なので捨てる、と教えている向きがあるようだが、東京を捨てないでほしい。