

「進学偏差」とは、大学の偏差値から高校の偏差値を引くことにより、その高校における進学指導の効果を数値化したものです。
式としては『100+大学偏差値-高校偏差値』で表します。
この指標はあくまで統計的な参考値であり、個々の生徒の努力や様々な要因により、
実際の進学結果は大きく異なる可能性があります。
また、この数値の算出には以下の制約があることにご留意ください:
・大学の偏差値は学部により異なりますが、公表データの制限により平均値を使用しています
・進学先が不明な場合は一定の仮定のもとで計算しています
・単年度のデータに基づいているため、年度による変動があります
なぜ埼玉県か?公立進学校の宝庫とベンチマーク校の存在

次は高校のデータだね。
そうだな。まずは各高校の偏差値がほしいな。
ただ、高校は色々調査する必要があるので少し取得データを絞ろうかと思う。
ん?
今回は、埼玉県で偏差値が65以上の高校に絞ろうと思っている。
偏差値65以上は分かる気がするけど、なんで埼玉なの?
理由は3つ
- 公立の進学校が多い
- ベンチマークになる高校がある
- ろぼが住民だから
個人事情が含まれているもん。。
少し調べてみると分かるが、私立高校はコースが分かれていたり、進学先が分からなかったりと情報としては微妙なものが多い。もちろん、今後はやっていくけど、最初は情報開示の多そうな公立からやっていきたいので、公立の進学校が多い埼玉を選びました。
なるほど。
次にベンチマークになる高校だけど、これは『慶應義塾志木高等学校』と『早稲田大学本庄高等学院』の事を指している。この2校はそれぞれ慶應義塾大学・早稲田大学の付属高校なんだ。
いわゆる、早慶だもん。
そう、そしてこの2校の卒業生は各々の大学に進む。
私立大としては最高峰といってもいい大学だから当然だな。
今回、浪人生や記載のない大学に進んだ生徒の偏差値を一律45として考えているので、この2校を超える高校は少なくとも埼玉には存在しないと思われる。
ただ、あまりに差がありすぎると定義を見直す必要もあるので、そういう意味では非常に良いベンチマークになると考えている。
ちなみに偏差値トップと言われる灘高校も2024年218人中合格者196人なので22人は偏差値45で計算することになります。
そっか、まだ手探り状態だから。データがはっきりしている高校がほしいってことか?
まぁそういうことだ。東京や神奈川もそういった高校はあるにはあるが、公立が弱かったりしてな。
まぁ住んでいる事も多いがいずれ全国もやっていきたいので最初は大目に見てほしい。
了解だもん。
高校データの収集と整形

ということで、埼玉の高校を調べていく。前回同様『みんなの学校情報』さんから取得させてもらおう。
どうやって、取得するの?
前回と同じだな。チマチマと手動でとっていく。
high_11.txt1 慶應義塾志木高等学校 埼玉県志木市/志木駅/私立/男子校 偏差値 75 慶應義塾志木高等学校 1 早稲田大学本庄高等学院 埼玉県本庄市/本庄駅/私立/共学 偏差値 75 早稲田大学本庄高等学院 3 大宮高等学校理数科 埼玉県さいたま市大宮区/さいたま新都心駅/公立/共学 偏差値 74 大宮高等学校 3 栄東高等学校普通科東医クラス 埼玉県さいたま市見沼区/東大宮駅/私立/共学 偏差値 74 栄東高等学校 :
こんな感じ。
順位、学科名 住所情報、偏差値、学校名となっているもん。
そうだな。とりあえず、学校名・学科名・偏差値だけとっていこう。
script_20250205.pydef convert_to_tsv(input_file, output_file): with open(input_file, 'r', encoding='utf-8') as f_in, open(output_file, 'w', encoding='utf-8') as f_out: gakka = ""; hensa = 0; for line in f_in: line = line.strip() if ( line == "" ): continue if ( line.isnumeric() ) : #数字であるか判定 gakka = "" hensa = 0 continue if ( gakka == "" ): tmp = line.split(" ") #スペースで分けて gakka = tmp[0]; #最初の部分を取得 elif ( line[0:3] == '偏差値' ): hensa = line[3:].replace(" ","") else: f_out.write(line + "\t" + gakka.replace(line,"") + "\t" + str(hensa) + "\n") if __name__ == "__main__": if len(sys.argv) != 3: print("使い方: python script.py <入力ファイル> <出力ファイル>", file=sys.stderr) sys.exit(1) input_file = sys.argv[1] output_file = sys.argv[2] convert_to_tsv(input_file, output_file) print(f"ファイル '{input_file}' を '{output_file}' に変換しました。")
前回のプログラムをベースにいじってみた。少し構造違うけど、基本的なところは同じだな。
実行するもん!
# python script_20250205.py high_11.txt high_11.tsv
ファイル 'high_11.txt' を 'high_11.tsv' に変換しました。
high_11.tsv慶應義塾志木高等学校 75 早稲田大学本庄高等学院 75 大宮高等学校 理数科 74 栄東高等学校 普通科東医クラス 74 浦和高等学校 73 開智高等学校 普通科Tコース 73 浦和第一女子高等学校 72 栄東高等学校 普通科αクラス 72 :
完璧!
進学偏差の計算式と入学者数データの取得

問題はこれからなんだよなぁ。まず、生徒数を把握せねば。偏差値は2025年のだけど、進学実績はないので2024年を考えます。2024年卒業だから2021年の入学者数を調べる。
2024年の卒業生の数じゃないの?
少し、進学偏差のおさらいをしよう。
α高校の2024年の進学偏差をxとすると次の式で表される。
AとBはそれぞれこんな式になる。
各変数の意味は次の通り。
同じ生徒達で比較しないと進学偏差は意味がないと思うので、
高校の偏差値の算出は3年前に遡る必要があるってこと。
でも、偏差値は2025年しかないよ。
そうなんだよ。
だから、ちゃんと出るのは3年後ってことになる。
まぁそういうことで今回は2021年の入学生数を調べる。
ただ、データ自体は埼玉県教育委員会のページから入手できる。
おぉ。楽に取得できた!
ただ、残念ながら私立高校の場合コース分かれている場合がほとんど。
だから、そのまま使えないんだよな~。
コース?
例えば、栄東高校は『普通科東医クラス』と『普通科αクラス』がある。
どちらも普通科なので教育委員会のデータは合算した生徒数しかない。
でも、偏差値は違うからそれぞれのクラスに分けないといけないんだよな。
大変。。
しかも、クラスの人数を明記されていない場合も多いから、
単純に分割している高校もあるが、正直これは仕方ない。。
というわけで高校HPみながら作成したのがこちら
high_11_2.tsv慶應義塾志木高等学校 75 237 早稲田大学本庄高等学院 75 322 大宮高等学校 理数科 74 40 栄東高等学校 普通科東医クラス 74 134 浦和高等学校 73 357 開智高等学校 普通科Tコース 73 84 浦和第一女子高等学校 72 359 栄東高等学校 普通科αクラス 72 312 西武学園文理高等学校 普通科グローバル選抜クラス 72 32 大宮高等学校 普通科 71 318 :
ん?なんか下の方に偏差値が65以下のがあるよ?
そうそう、その学校の偏差値を出すためには全学科を調べる必要があるから追加している。
高校別偏差値の算出

高校ごとの偏差値を出していくぞ。これも前回のプログラムを少し加工すれば行けそうだな。
script_20250205_2.pyimport sys def generate_hensa(input_file, output_file): with open(input_file, 'r', encoding='utf-8') as f_in, open(output_file, 'w', encoding='utf-8') as f_out: hensa_list = {} num_list = {} for line in f_in: tmp = line.strip().replace(" ","").split("\t") if ( tmp[0] in hensa_list ) : num_list[tmp[0]] += int(tmp[3]) # 生徒数を追加 hensa_list[tmp[0]] += int(tmp[2]) * int(tmp[3]) # 偏差値*生徒数を追加 else : num_list[tmp[0]] = int(tmp[3]); #学校名をキーとして生徒数を格納 hensa_list[tmp[0]] = int(tmp[2]) * int(tmp[3]) #学校名をキーとして偏差値*生徒数を格納 if ( tmp[1] in ['理数科','普通科'] ) : #理数科と普通科はそのまま算出 hensa_list[tmp[0] + '(' + tmp[1] + ')' ] = int(tmp[2]) * int(tmp[3]); num_list[tmp[0] + '(' + tmp[1] + ')' ] = int(tmp[3]) for key in hensa_list.keys() : hensa = round(hensa_list[key] // num_list[key],1) f_out.write(key + "\t" + str(hensa) + "\n") if __name__ == "__main__": if len(sys.argv) != 3: sys.exit(1) input_file = sys.argv[1] output_file = sys.argv[2] generate_hensa(input_file, output_file) print(f"ファイル '{input_file}' を '{output_file}' に変換しました。")
なんか、普通科とか理数科とか入っているけど?
大宮高校の進路実機は理数科と普通科で分かれていたんだ。
だからこちら側も分けてみた。
ただ、全ての高校がそうとは思えないから
一応、普通科と理数科の平均値も出しているぞ。
high_11_3.tsv慶應義塾志木高等学校 75 早稲田大学本庄高等学院 75 大宮高等学校 71 大宮高等学校(理数科) 74 栄東高等学校 72 浦和高等学校 73 開智高等学校 69 浦和第一女子高等学校 72 西武学園文理高等学校 67 大宮高等学校(普通科) 71 :
プログラムに入れるための中間データだから、ソート不要!
平均とると結構順位が変わっている気がするもん。
特に私立高校は幅広く入学生を募っているからなあ。
進学実績を別に出してくれていたらこちらも別に分けることができるのだが。
私立も商売だから仕方ないね。。
これでようやく準備が整った。
後は学校ごとに大学の進学先を調べていくぞ。
これも地道にやるしかなさそうなんだよな~。