Claudeで塾の模試を成績分析して面談資料にする手順 — 単元別正答率から月次課題まで
塾の模試・確認テストのCSVをClaudeに渡し、単元別正答率の推移、クラスの弱点分布、生徒ごとの次の1か月の課題を出して、保護者面談の1枚資料にまとめる手順です。
模試や確認テストの結果は、塾に点数としては必ず溜まります。ところが面談の前日に「この子は何の単元が弱いのか」「クラス全体ではどうか」を手で集計して資料にする時間は、なかなか取れません。採点結果をCSVで持っているなら、Claudeにコードを実行させて、集計からグラフ入りの面談資料までを一続きで作れます。
この記事では、単元別の正答率の推移、クラス内の弱点の分布、生徒ごとの次の1か月の課題という3つの集計を軸に、CSVの形、依頼文、検算、保護者向けの資料化、生徒データの扱いまでを順に説明します。教材づくりの側は塾講師・家庭教師の教材作成にClaudeを使う方法が扱っています。ここでは、すでに出た成績をどう読み解いて面談に持ち込むかに絞ります。
模試CSVから面談資料までの流れ
- 1
CSVを縦持ちにそろえる
1行を「生徒×回×単元」にして、正答数と出題数を持たせます。
- 2
氏名を匿名IDに置き換える
氏名・保護者名の列を外し、生徒IDだけで渡します。
- 3
3つの集計を頼む
単元別の推移、クラスの弱点分布、生徒別の課題を順に出させます。
- 4
数字を検算する
Claudeが書いたコードと合計値を、手元の集計と突き合わせます。
- 5
1枚の面談資料にする
保護者向けの言葉に直し、WordかPowerPointで書き出させます。
模試CSVは「縦持ち」にすると集計の頼み方が単純になる
模試の結果は、採点システムから出すと「生徒ごとに1行、単元ごとに列」の横持ちになりがちです。この形でも分析はできますが、回や単元が増えるたびに列が増え、依頼文で列名を説明する手間が増えます。Claudeに渡す前に、次のような縦持ちにそろえておくと、依頼が短く済みます。
student_id,class,exam_date,unit,correct,total
S001,A,2026-07-12,一次関数,6,8
S001,A,2026-07-12,図形の証明,2,5
S001,A,2026-09-13,一次関数,7,8
S001,A,2026-09-13,図形の証明,3,6
S002,A,2026-07-12,一次関数,3,8ここでの要点は、点数ではなく正答数と出題数を別々に持たせることです。単元ごとの正答率は「正答数の合計÷出題数の合計」で出すのが筋で、各回の正答率を平均すると、出題数が少ない回に引きずられます。同じ単元が回によって3問だったり10問だったりする模試では、この差が数字に出ます。
偏差値や順位の列がある場合は、そのまま残して構いません。ただし模試会社が全受験者を母集団に出した偏差値と、塾内の生徒だけで計算し直した値は別物です。依頼文では「偏差値は模試会社の値なので、塾内で再計算しない」と書いておくと、Claudeが勝手に作り直すことを避けられます。
アップロードできる形式は、実行環境の側でCSV、Excel(.xlsx、.xls)、JSON、XML、画像、テキストファイルなどが扱えるとされています。採点システムがExcelで書き出すなら、そのまま渡せます。Excelの読み込みと作成についてはClaude Excel読み込みと作成に詳しい手順があります。
氏名は渡さず、生徒IDで集計する
分析に必要なのは「誰が」ではなく「どの生徒の数字がどう動いたか」です。氏名、保護者名、学校名、連絡先の列は、集計に使わないので外してから渡します。生徒IDと氏名の対応表は塾側の手元に置き、資料の最終段階で自分で差し込めば、Claudeに氏名を見せる必要はありません。
CSVのうちでも、自由記述の「講師コメント」列は要注意です。本人や家庭の事情が書かれていることがあり、集計には要らないことがほとんどです。この列も外します。
この判断は、資料の質にも効きます。氏名が入った状態で依頼すると、Claudeが生成する文面にも氏名が散らばり、面談資料の使い回しや共有の際に消し忘れが起こりやすくなります。IDで通しておけば、クラス全体の資料にそのまま使い、個別の資料だけ差し込む運用にできます。
単元別正答率の推移を出す
最初の依頼は、単元ごとの正答率を回の順に並べるものです。CSVを添付して、次のように頼みます。
添付のCSVは、中2数学の模試3回分の結果です。
列は student_id, class, exam_date, unit, correct, total です。
次を行ってください。
1. unit と exam_date ごとに、correct の合計÷total の合計で
正答率を出し、表にする
2. 単元ごとの正答率の推移を折れ線グラフにする
3. 回をまたいで正答率が10ポイント以上下がった単元を挙げる
計算に使ったコードも見せてください。最後の一文が大事です。Claudeはコードを書いて実行して数字を出す仕組みなので、そのコードを見せてもらえば、集計の式が意図どおりかをその場で確認できます。依頼文に「10ポイント以上」のような閾値を入れておくのも同じ理由で、数字の線引きを自分で決めておくと、結果の読み違いが減ります。
実行されるコードは、おおよそ次のような形になります(例示であり、実際の出力そのものではありません)。
import pandas as pd
df = pd.read_csv("mock_exam.csv")
# 単元×回の正答率は、正答数と出題数をそれぞれ合計してから割る
rate = (
df.groupby(["unit", "exam_date"])[["correct", "total"]]
.sum()
.assign(rate=lambda t: t["correct"] / t["total"])
.reset_index()
)
pivot = rate.pivot(index="unit", columns="exam_date", values="rate")
print((pivot * 100).round(1))出てきた表を見て、推移が下がった単元が複数あるときは、その単元を扱った授業の時期や、単元の出題数の変化も合わせて確認します。正答率の低下が、出題数が減って1問の重みが増えたことによる見かけの変動である可能性があるためです。
クラス内の弱点の分布を出す
次は、クラスの中で「誰がどの単元で落としているか」を見る集計です。クラスの平均正答率だけでは、全員が少しずつ低いのか、一部の生徒だけが極端に低いのかが分かりません。分布で見ると、授業全体で補うべき単元と、個別に見るべき生徒が分かれます。
依頼文の例は次のとおりです。
直近の回だけを使って、単元ごとに次を出してください。
- クラス全体の正答率
- 正答率が60%未満の生徒の人数と割合
- その割合が高い順の棒グラフ
出題数が3問以下の単元は、割合の隣に「少数のため参考」と注記してください。60%という線は、あくまで例です。塾の合格ラインや、単元の難易度に合わせて変えてください。「出題数が3問以下は注記する」という条件を入れておくのは、少ない問題数では1問の正誤で正答率が大きく動き、弱点に見えて実は偶然ということが起こるためです。
結果の読み方としては、割合が高い単元は次回の授業で全体に扱い直す候補、割合は低いのに人数が数名いる単元は、個別の宿題や面談での声かけの候補、と分けられます。この切り分けは、生徒の学力を断定するものではなく、補う順番を決めるための目安です。
生徒ごとの次の1か月の課題を作る
3つ目は、生徒ごとに「次の1か月で扱う単元」を決める集計です。ルールを先に決めておくと、再現性のある課題づくりになります。例えば次のようなルールです。
- 直近2回の合計で正答率を出し、出題数が合計で5問未満の単元は候補から外す
- 残った単元のうち、正答率が低い順に最大2つを課題にする
- 前回と今回のどちらも下位3つに入る単元があれば、先に課題にする
これを依頼文に書くと、Claudeが生徒ごとに表を作ります。
生徒IDごとに、直近2回の単元別正答率を合算し、上のルールで
課題の単元を最大2つ選んでください。
結果は student_id, 課題1, 課題2, 根拠(正答率と出題数)の表にして、
CSVでも出してください。「根拠」の列を必ず付けさせる点がポイントです。講師が面談で「なぜこの単元か」を説明するときに、正答率と出題数が横にあれば、数字を見ながら話せます。根拠のない課題リストは、保護者に説明しにくいうえに、講師自身も妥当性を確かめられません。
課題の単元が決まったら、取り組む問題の選び方や類題づくりは教材作成の話になります。教材側の手順は塾講師・家庭教師の教材作成にClaudeを使う方法に任せ、この記事では課題の単元を決めるところまでを扱います。模試を使った練習問題の自己採点という別の使い方は、Claudeで資格試験の過去問から問題を作らせて自己採点する使い方で見られます。
面談資料を1枚にまとめる
数字が出たら、保護者に渡す資料にします。実行環境には、Word文書を扱うpython-docxやPowerPointを扱うpython-pptx、グラフ用のmatplotlibが標準で入っているので、Claudeに書き出しまで任せられます。
生徒S001さんの面談用に、A4・1枚のWord文書を作ってください。
構成: ①単元別正答率の推移グラフ(クラス平均を点線で併記)
②伸びた単元と課題の単元を各1〜2行
③次の1か月の取り組み(課題の単元ごとに1行)
保護者向けなので専門用語は避け、他の生徒の名前や順位は書かないでください。他の生徒の名前や順位を書かない、という指定は忘れずに入れます。クラス平均との比較は保護者が状況をつかむのに役立ちますが、特定の子どもが特定できる形の数字は、資料に混ざらない設計にしておきます。
文面は、数字を並べるより「どこが伸びて、どこを次に扱うか」を先に書く構成が面談に向きます。正答率の低い単元だけを強調すると、保護者の不安を煽る資料になりがちです。伸びた単元を1つ入れるように頼んでおくと、面談の入りが穏やかになります。
グラフを入れたら、日本語のラベルが四角に化けていないかを目で確かめます。崩れていた場合は、グラフの軸ラベルを短くするか、見出しを資料側のテキストで補う形に切り替えます。
数字を面談に出す前の検算
Claudeに任せるのは集計までで、数字が面談に出る前の最終確認は人が行います。次の3点は、毎回行う価値があります。
- 生徒数と行数: 回ごとの受験者数が、塾の名簿と合っているか。欠席者が正答率0%として扱われていないか
- 合計値: クラス全体の正答数と出題数の合計を、採点システムの数字と突き合わせる
- 閾値のすれすれの生徒: 60%未満という線の上下1〜2ポイントにいる生徒は、課題に入るかどうかが紙一重なので、講師の目で判断する
もう一つ、同じ依頼を2回流して結果が一致するかを見る方法もあります。コードが違っていると数字がずれるので、再現性の確認になります。結果が毎回変わるなら、依頼文のルールがあいまいな証拠です。
生徒データを渡す前に確認すること
生徒の成績は、保護者との関係では個人情報にあたります。Claudeに渡す前に、使っているプランと設定を確認します。
claude.aiでは、Free・Pro・Maxでコード実行とファイル作成が既定で有効です。TeamとEnterpriseでも既定で有効ですが、組織の所有者が無効にでき、ネットワークアクセスはTeamでパッケージ管理ツールのみ許可、Enterpriseで無効が既定です。塾が組織で契約している場合は、所有者の設定を確認してください。
学習への利用設定は、プランごとに既定が異なります。確認の手順はClaudeを学習させない設定に、一次資料の探し方はClaudeに個人情報を入力する前に確認する一次資料はどれかにまとめています。
実行環境の保持期間にも注意が必要です。コード実行のコンテナは、作成から30日で失効し、コンテナ内のデータ、アップロードしたファイル、出力は最大30日保持されます。さらに、コード実行ツールとFiles APIはどちらもZDR(ゼロデータリテンション)の対象外と記載されています。したがって、ZDRを前提に生徒データを扱う契約や社内規程の塾は、この経路を使えるかを先に確認します。
実務での最小の守り方は次の3つです。
- 氏名・連絡先・コメントの列を外し、生徒IDだけで渡す
- 不要になったファイルは、チャットから消すか、API利用ならファイルを削除する
- 資料に氏名を入れるのは、手元に戻してから自分で差し込む
毎月の作業を自動で回す(APIを使う場合)
毎月同じ形式のCSVが出るなら、APIでコード実行ツールを呼び出し、集計と資料作成を定型化できます。CSVはFiles APIでアップロードし、メッセージではcontainer_uploadブロックにfile_idを渡します。
import anthropic
from pathlib import Path
client = anthropic.Anthropic()
file_object = client.files.upload(file=Path("mock_exam.csv"))
response = client.messages.create(
model="claude-opus-5-5",
max_tokens=4096,
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "添付のCSVを単元別に集計し、推移グラフをPNGで保存してください"},
{"type": "container_upload", "file_id": file_object.id},
],
}],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)ファイルの有効期限は、アップロード時にexpires_in_secondsというフォームのフィールドで指定します(上のコードでは省略しています)。値は3,600秒(1時間)から7,776,000秒(90日)の整数で、設定後は変更できません。
生成されたグラフや資料は、コード実行の結果に含まれるfile_idを使い、Files APIでダウンロードします。ダウンロードできるのは、コード実行ツールやスキルが作ったファイルに限られ、自分がアップロードしたファイルをダウンロードしようとすると400エラーになります。
料金は、Web検索やWebフェッチと併用しない場合、実行時間で課金されます。1か月あたり組織ごとに1,550時間の無料枠があり、超えた分は1コンテナあたり1時間0.05ドルです。実行時間の最小は5分で、ファイルを付けたリクエストはツールを呼ばなくても実行時間が課金されます。
APIでは、コンテナのメモリが5GiB、CPUが1つ、Pythonは3.11という制限があります。数百人分の模試データなら問題ない規模ですが、実行環境にはインターネット接続がないため、追加のライブラリを実行中に入れることはできません。入っているライブラリ(pandas、matplotlib、python-docx、python-pptxなど)の範囲で組み立てます。
つまずきやすい点
グラフの単元の並びが回ごとに違う: 単元の並び順を依頼文に書いておくと、複数の資料で揃います。単元名の並びを列挙し、「この順で表示」と指定します。
正答率の合計が100%を超える、または0%になる: 出題数が0の行や、欠席の行がCSVに残っている可能性があります。依頼文で「totalが0の行と欠席の行は除外して集計する」と書いておきます。
クラスや学年が混ざる: 複数クラスのCSVをまとめて渡すと、クラス平均が学年平均になることがあります。class列を使って絞るよう、依頼の冒頭で対象を明示します。
普通のCSVなのに数字が出ない: チャット画面で、コード実行とファイル作成の設定が有効か確認します。無効だと、コードによる集計ができません。設定の場所はClaude CSV分析の使い方に整理してあります。
まとめ
模試のCSVを縦持ちにそろえ、氏名を外し、3つの集計をルール付きで頼む。この流れで、面談の前日に手で集計する作業をClaudeのコード実行に移せます。数字に責任を持つのは人なので、コードの確認、名簿との突き合わせ、閾値すれすれの生徒の判断は講師の仕事として残します。
生徒データを扱う以上、ZDRの対象外であること、コンテナと出力が最大30日保持されることを踏まえ、渡す列を最小限に絞るところから始めるのが現実的です。