全国学力テストの都道府県別平均正答率(2019年版)の2021年版。
令和3年度 全国学力・学習状況調査 報告書・調査結果資料から求めた都道府県ごとの正答率を求めてCSV形式にした。公式資料と異なり,小数点以下を丸めていない。
まず,上記サイトからリンクされているファイル群を全部ダウンロードする(これはターミナルで実行するコマンドである)。以下では全部を使うわけではないので,もっと絞れるが,とりあえず:
wget --timestamping --recursive --no-parent --wait=1 \
https://www.nier.go.jp/21chousakekkahoukoku/
必要なファイル名のリストを得るには pathlib と正規表現ライブラリ re を使う:
import pathlib, re
path = pathlib.Path("www.nier.go.jp/21chousakekkahoukoku/factsheet/21prefecture-City")
names = sorted([p for p in path.glob("**/*.xlsx") if re.search(r"/\d\dp_21r\.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))
return [koku, san]
sho = np.array([f(n) for n in names])
同様に中学校も:
names = sorted([p for p in path.glob("**/*.xlsx") if re.search(r"/\d\dm_21r\.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:AE24']
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))
return [koku, suu]
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("atest2021.csv", index=False,
encoding="utf_8_sig", line_terminator="\r\n",
header=["小国","小算","中国","中数"])
結果は atest2021.csv として置いておく。
都道府県名は特に付けていない。必要なら次のリストを使う:
kenmei = ["北海道", "青森県", "岩手県", "宮城県", "秋田県", "山形県",
"福島県", "茨城県", "栃木県", "群馬県", "埼玉県", "千葉県", "東京都",
"神奈川県", "新潟県", "富山県", "石川県", "福井県", "山梨県", "長野県",
"岐阜県", "静岡県", "愛知県", "三重県", "滋賀県", "京都府", "大阪府",
"兵庫県", "奈良県", "和歌山県", "鳥取県", "島根県", "岡山県", "広島県",
"山口県", "徳島県", "香川県", "愛媛県", "高知県", "福岡県", "佐賀県",
"長崎県", "熊本県", "大分県", "宮崎県", "鹿児島県", "沖縄県"]
Last modified: