令和4年度 全国学力・学習状況調査 報告書・調査結果資料から求めた都道府県ごとの正答率を求めてCSV形式にした。公式資料と異なり、小数点以下を丸めていない。
まず、上記サイトからリンクされているファイル群を全部ダウンロードする(これはターミナルで実行するコマンドである)。以下では全部を使うわけではないので、もっと絞れるが、とりあえず:
wget --timestamping --recursive --no-parent --wait=1 \ https://www.nier.go.jp/22chousakekkahoukoku/
全 1283 ファイル、516M バイトを取得した。
必要なファイル名のリストを得るには pathlib と正規表現ライブラリ re を使う:
import pathlib import re path = pathlib.Path("www.nier.go.jp/22chousakekkahoukoku/factsheet") names = sorted([p for p in path.glob("**/*.xlsx") if re.search(r"/\d\dp_22r\.xlsx$", str(p))])
まず小学校についてExcelファイルを読んで平均正答率を計算する:
from openpyxl import load_workbook import numpy as np def f(n): wb = load_workbook(n, read_only=True) ws = wb.worksheets[0]['AE8:AE22'] # 国語 n = len(ws) x = np.array([ws[i][0].value for i in range(n)]) koku = (x @ np.arange(n)[::-1]) / np.sum(x) * (100 / (n-1)) ws = wb.worksheets[1]['AE8:AE24'] # 算数 n = len(ws) x = np.array([ws[i][0].value for i in range(n)]) san = (x @ np.arange(n)[::-1]) / np.sum(x) * (100 / (n-1)) ws = wb.worksheets[2]['AE8:AE25'] # 理科 n = len(ws) x = np.array([ws[i][0].value for i in range(n)]) ri = (x @ np.arange(n)[::-1]) / np.sum(x) * (100 / (n-1)) return [koku, san, ri] sho = np.array([f(n) for n in names])
同様に中学校も:
names = sorted([p for p in path.glob("**/*.xlsx") if re.search(r"/\d\dm_22r\.xlsx$", str(p))]) def f(n): wb = load_workbook(n, read_only=True) ws = wb.worksheets[0]['AE8:AE22'] # 国語 n = len(ws) x = np.array([ws[i][0].value for i in range(n)]) koku = (x @ np.arange(n)[::-1]) / np.sum(x) * (100 / (n-1)) ws = wb.worksheets[1]['AE8:AE22'] # 数学 n = len(ws) x = np.array([ws[i][0].value for i in range(n)]) suu = (x @ np.arange(n)[::-1]) / np.sum(x) * (100 / (n-1)) ws = wb.worksheets[2]['AE8:AE29'] # 理科 n = len(ws) x = np.array([ws[i][0].value for i in range(n)]) ri = (x @ np.arange(n)[::-1]) / np.sum(x) * (100 / (n-1)) return [koku, suu, ri] chu = np.array([f(n) for n in names])
水平方向に結合する:
shochu = np.hstack((sho, chu))
CSV形式で保存(Excelや「メモ帳」で文字化けしないようにBOM付きUTF-8、行末CRLF):
import pandas as pd pd.DataFrame(shochu).to_csv("atest2022.csv", index=False, encoding="utf_8_sig", line_terminator="\r\n", header=["小国","小算","小理","中国","中数","中理"])
結果は atest2022.csv として置いておく。
都道府県名は特に付けていない。必要なら次のリストを使う:
kenmei = ["北海道", "青森県", "岩手県", "宮城県", "秋田県", "山形県", "福島県", "茨城県", "栃木県", "群馬県", "埼玉県", "千葉県", "東京都", "神奈川県", "新潟県", "富山県", "石川県", "福井県", "山梨県", "長野県", "岐阜県", "静岡県", "愛知県", "三重県", "滋賀県", "京都府", "大阪府", "兵庫県", "奈良県", "和歌山県", "鳥取県", "島根県", "岡山県", "広島県", "山口県", "徳島県", "香川県", "愛媛県", "高知県", "福岡県", "佐賀県", "長崎県", "熊本県", "大分県", "宮崎県", "鹿児島県", "沖縄県"]
Last modified: