2025年共通テスト数学Iのデータ分析の問題
2025年共通テスト数学Iおよび数学I・数学Aに、47都道府県における令和4年の外国人宿泊者数と日本人宿泊者数の散布図の問題がある。この図をPythonで描いてみよう。
データは国土交通省観光庁の宿泊旅行統計調査のページにある2022年(令和4年)1月〜12月分(年の確定値)集計結果のようだ。
import numpy as np import matplotlib.pyplot as plt 全宿泊者数 = np.array( [29169350, 4078250, 5038930, 8383450, 2772210, 4040420, 8794110, 5274670, 9320350, 7098620, 4639240, 22800170, 59036970, 22090800, 8396590, 3067460, 6551460, 2711050, 6867120, 14172210, 5489670, 18307600, 15811550, 6880120, 3555830, 21110420, 30522480, 12633720, 2071520, 4028270, 1881870, 2872700, 4576140, 8530290, 3924230, 1842230, 3240390, 3758730, 2564090, 13993570, 1994730, 6340870, 6300840, 6301710, 3299080, 6089460, 18232940]) 外国人宿泊者数 = np.array( [857170, 32930, 25640, 65620, 16280, 25900, 38350, 55400, 65360, 46670, 57100, 851640, 6775590, 509100, 87450, 41660, 87210, 12460, 167200, 179910, 121540, 170960, 342470, 48740, 41060, 1413310, 2129680, 125650, 31660, 73800, 12390, 10920, 59130, 142540, 48600, 18140, 33930, 33420, 9890, 606420, 20490, 95330, 100160, 169630, 23430, 38070, 582900]) 日本人宿泊者数 = 全宿泊者数 - 外国人宿泊者数
これを1万人単位にしてプロットする。ついでに、下のほうの固まっているところ以外の点に都道府県名を付けてみる。
import matplotlib.pyplot as plt 都道府県 = ["北海道", "青森", "岩手", "宮城", "秋田", "山形", "福島", "茨城", "栃木", "群馬", "埼玉", "千葉", "東京", "神奈川", "新潟", "富山", "石川", "福井", "山梨", "長野", "岐阜", "静岡", "愛知", "三重", "滋賀", "京都", "大阪", "兵庫", "奈良", "和歌山", "鳥取", "島根", "岡山", "広島", "山口", "徳島", "香川", "愛媛", "高知", "福岡", "佐賀", "長崎", "熊本", "大分", "宮崎", "鹿児島", "沖縄"] plt.figure(figsize=(6, 6)) plt.scatter(外国人宿泊者数/10000, 日本人宿泊者数/10000) plt.plot([0, 700], [0, 7000]) for x, y, s in zip(外国人宿泊者数/10000, 日本人宿泊者数/10000, 都道府県): if y > 1000: plt.text(x, y, s) plt.xlabel("外国人宿泊者数") plt.ylabel("日本人宿泊者数")
東京都が圧倒的であるが、これは東京都の規模を考えれば当然であろう。「原点を通り,傾きが10の直線」は何の意味もなさそうだが、問題の図にあるので付けた。
このあと、外れ値(Tukeyの箱ひげ図の意味での)を求めたりしている(数学Iと数学I・数学Aとで若干流れが異なる)。しかし、各都道府県が外れ値か外れ値でないかといった外れ値の定義に依存する議論はあまり生産的でない。
むしろ、上の図の相関関係は都道府県の規模(例えば人口)が交絡しているだろうということのほうが気になる。そこで、人口で割ってからプロットしてみる。都道府県人口はe-Statの人口推計 / 各年10月1日現在人口にある2022年10月1日現在の都道府県人口データ(1000人単位)を使った。
人口 = np.array( [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]) * 1000 plt.scatter(外国人宿泊者数/人口, 日本人宿泊者数/人口) for x, y, s in zip(外国人宿泊者数/人口, 日本人宿泊者数/人口, 都道府県): plt.text(x, y, s) plt.xlabel("人口あたり外国人宿泊者数") plt.ylabel("人口あたり日本人宿泊者数")
これで、京都・東京・沖縄が人気、日本人に限れば東京より沖縄が人気、といった傾向が見える。埼玉はどちらにも不人気である。