PISA学校質問票データを用いた学校タイプ分類(PCA+クラスタリング)
PISA(OECD学習到達度調査)には、生徒質問票だけでなく「学校質問票(School Questionnaire)」が存在します。
学校の設備、ICT環境、教員配置、規律、運営方針など、学校レベルの特徴が非常に多く含まれており、教育データ分析の素材としてとても興味深いデータです。
今回は PISA 2022 の学校質問票データを用いて、
・学校の特徴を PCA(主成分分析)で可視化し、
・KMeans によるクラスタリングで学校を分類し、
・PC1×PC2 の4象限で学校タイプを整理する
という探索的分析を行いました。
1. データの準備
1-1. データの入手方法
PISA データは OECD の公式サイトからダウンロードできます。
- https://www.oecd.org/en/about/programmes/pisa.html
- 「PISA data and methodology」→ PISA 2022
- ダウンロードには名前・所属・メールアドレスの登録が必要です。
1-2. 使用データ
- PISA School Questionnaire(学校質問票)
- 形式:
.sav(SPSS) - 分析単位:学校
1-3. SPSS(.sav)ファイルの読み込み
PISA の学校質問票は .sav 形式で提供されており、
Python では pyreadstat を使って読み込みます。
import pyreadstat
# 日本の学校データを抽出
df, meta = pyreadstat.read_sav("CY07_MSU_SCH_QQQ.sav")
df_school = df[df["CNT"] == "JPN"].copy()
# 分析の効率化のため CSV に保存
df_school.to_csv("df_school.csv", index=False)
# 以降の分析は CSV を読み込んで実行
df_school = pd.read_csv("df_school.csv")
変数ラベル(メタデータ)は JSON に保存しておくと便利です。
※※
.sav ファイルを pyreadstat で読み込んだ後、日本の学校データ(df_school)を抽出し、分析の効率化と再現性確保のために CSV 形式で保存しています。
CSV に変換すると SPSS の value labels(Likert 尺度の順序情報)や欠損値コードが失われるため、分析時には語彙パターンから Likert 項目を再判定し、マッピング(likert_map)で順序尺度を復元しています。
この処理により、.sav のラベル情報がなくても同じ尺度構造を再現でき、分析結果の再現性を確保しています。
2. 前処理
学校質問票は Yes/No、Likert 尺度、カテゴリ変数などが混在しており、
欠損も一定数存在します。
今回の前処理方針は以下の通りです。
・欠損値のあるカラムは削除
・Yes/No 以外のカテゴリ変数を使用
・Likert 尺度と名義尺度を分けてエンコード
Qiitaでは概要のみ記載し、詳細コードは GitHub に掲載しています。
3. PCA(主成分分析)による次元削減
前処理後のデータは 87項目あり、
そのままでは学校間の違いが見えにくいため PCA を実施しました。
3-1. PCA の実行(8次元に圧縮)
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
X = StandardScaler().fit_transform(df_all)
pca = PCA(n_components=8, random_state=42)
X_pca = pca.fit_transform(X)
3-2. 累積寄与率
8次元で約 50% 程度の情報を保持しています。
教育データは学校の多様性を反映しており、少数の主成分で大部分を説明することが難しい領域です。そのため、50%前後の寄与率は自然だと思われます。
4. クラスタリング(KMeans)
4-1. k の決定(エルボー法・シルエット法)
・シルエットスコア:k=3 と k=4 はほぼ同程度(これも微妙だが...)
Silhouette Score (3 clusters): 0.1458264
Silhouette Score (4 clusters): 0.1453513
散布図の分離度を踏まえ、k=3 を採用しました。
4-2. KMeans の実行
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3, random_state=42)
clusters = kmeans.fit_predict(X_pca)
5. バイプロット(PC1・PC2 の解釈)
PC1・PC2 の因子負荷量をもとに、
主成分がどのような意味を持つかを解釈します。
PC1(横軸):学校リソースの豊富さ
右側(+):
・ICT・デジタル機器が充実(SC155系)
・教員数が多い(TOTAT)
・私立学校が多い(SC016系)
左側(−):
・教材不足・設備不足(EDUSHORT、SC017系)
・職員不足(STAFFSHORT)
・公立学校が多い(SC016系)
➡ 「学校の物的・人的リソースの豊富さ vs 不足」
PC2(縦軸):規律・行動管理の良好さ
上側(+):
・生徒行動が良好(SC061系)
・教師行動が良好(SC061系)
・欠席・サボりが少ない(SC061系)
下側(−):
・無断欠席・サボり(SC061系)
・授業への集中不足(SC061系)
・教員不足・補助員不足(TOTAT、STAFFSHORT)
➡ 「学校の規律・行動管理の良好さ vs 課題の多さ」
6. PC1×PC2 による学校タイプ分類(4象限)
クラスタリング結果を PC1・PC2 平面に投影し、
4象限で学校タイプを分類しました。
第1象限(右上):先進的・安定型(High-resource & Well-managed)
・ICT・設備が充実
・規律・行動管理が良好
・私立普通科が相対的に多く分布する傾向
➡ 教育活動を安定的に展開しやすい環境にある学校群
第2象限(左上):伝統的・秩序型(Low-resource & Well-managed)
・設備は不足気味だが規律は良好
・公立普通科が比較的多く分布する傾向
➡ 安定した運営が行われている一方、ICT 投資など改善余地も見られる学校群
第3象限(左下):課題集中型(Low-resource & Challenges in management)
・資源不足・設備不足
・教員不足
・規律に課題
・公立専門高校が相対的に多く分布する傾向
➡ 複合的な支援ニーズが示唆される学校群
第4象限(右下):潜在力高いが統制不足型(High-resource & Challenges in management)
・リソースは豊富
・しかし規律に課題
・私立普通科・専門高校が相対的に多く分布する傾向
➡ リソースを活かしきるための運営改善が期待される学校群
※
本記事の分類は、特定の学校種別や学校の価値判断・優劣を示すものではありません。あくまで相対的な分布傾向として解釈しています。
7. まとめ
・PCA により学校の特徴を「リソース」「規律」の2軸で整理できた
・KMeans により 3 つの学校群が確認できた
・4象限で学校タイプを分類すると、教育政策的な示唆が得られる
8. GitHub(Notebook)
前処理・可視化・バイプロットなどの
全コード(Jupyter Notebook)はこちら:
https://github.com/Goki-0324/PISA-2022-School-Questionnaire-Analysis/tree/main



