ある番組でとあるクイズ王の
出身高校の話が出ていて
気になって調べてしまいました。

解説動画はこちら



さて今回はこちらのサイトさんの
データを参考にさせていただいております。

参考:みんなの高校情報



さて
データはCSVなどにして
pandasのデータフレームに取り込みます。

こんな感じのデータになりました。
偏差値ランク学校名住所形態評判
0791灘高等学校兵庫県神戸市東灘区私立4.51
1782お茶の水女子大学附属高等学校東京都文京区国立4.14
2782開成高等学校東京都荒川区私立4.96
3782筑波大学附属高等学校東京都文京区国立4.27
4782筑波大学附属駒場高等学校東京都世田谷区国立4.56

これを使って行きたいと思います。

まず最初は統計情報です。
df['偏差値'].describe()
count    7765.000000
mean       50.005151
std         9.265878
min        35.000000
25%        42.000000
50%        48.000000
75%        57.000000
max        79.000000
Name: 偏差値, dtype: float64

全部で7765校分のデータで
平均偏差値は50ですが
中央値は48とやや低いので
低めにデータが偏っていそうですね。

と言うことで
偏差値ごとの学校数で
グラフ化してみましょう。

偏差値を横軸に
学校数を縦軸にとった
ヒストグラムを生成します。
divine_df  = pd.DataFrame(df['偏差値'].value_counts().sort_index())
divine_df['累積'] = divine_df['偏差値'].cumsum()/sum(divine_df['偏差値'])
divine_df.head()
偏差値累積
3570.000901
36930.012878
371810.036188
382560.069156
393500.114231

fig, ax1 = plt.subplots(figsize=(16,10))
ax2 = ax1.twinx()
ax1.bar(divine_df.index, divine_df['偏差値'], label="偏差値")
ax2.plot(divine_df.index, divine_df['累積'],label="累積",c='orange')
ax1.xaxis.set_ticks(pd.np.arange(35, 80, 1))
for i,d in enumerate(divine_df['偏差値']):
    ax1.text(divine_df.index[i], d, "{0}".format(d), size=10)
plt.show()
download

中央値は48でしたが
一番高校が多い偏差値は42ですね。

大体偏差値57位で
全体の80%の高校がおさまります。


ここからは偏差値TOPの学校を
みていきましょう。
df[df['ランク']<=10]
偏差値ランク学校名住所形態評判
0791灘高等学校兵庫県神戸市東灘区私立4.51
1782お茶の水女子大学附属高等学校東京都文京区国立4.14
2782開成高等学校東京都荒川区私立4.96
3782筑波大学附属高等学校東京都文京区国立4.27
4782筑波大学附属駒場高等学校東京都世田谷区国立4.56
5782東大寺学園高等学校奈良県奈良市私立4.44
6782ラ・サール高等学校鹿児島県鹿児島市私立4.09
7778慶應義塾女子高等学校東京都港区私立4.09
8778東京学芸大学附属高等学校東京都世田谷区国立4.49
9778神戸高等学校兵庫県神戸市灘区公立4.10


偏差値70以上の学校をみるには
こんなコードになりますが
数は218校あるようです。
df[df['偏差値']>=70]

逆にげべはどうなんだって
話になると思うので
げべはこんな感じでした。

df[df['ランク']==max(df['ランク'])]
偏差値ランク学校名住所形態評判
7758357759田口高等学校愛知県北設楽郡設楽町公立3.30
7759357759真壁高等学校茨城県桜川市公立2.77
7760357759京都国際高等学校京都府京都市東山区私立2.19
7761357759西山学院高等学校宮城県刈田郡七ヶ宿町私立2.75
7762357759東大阪大学柏原高等学校大阪府柏原市私立2.83
7763357759耶麻農業高等学校福島県喜多方市公立2.75
7764357759霞城学園高等学校山形県山形市公立2.91

次に都道府県別の偏差値を見てみましょう。

都道府県別などにしたい場合は
カテゴリとして都道府県が必要です。

住所から都道府県を抜き出す関数を作って
うまくデータ化します。
def function(se):
    if '北海道' in se:
        return '北海道'
    elif '東京都' in se:
        return '東京都'
    elif '大阪府' in se or '京都府' in se:
        return '大阪府'
    elif '京都府' in se:
        return '京都府'
    else:
        return se.split('県')[0]+'県'

df['都道府県'] = df['住所'].apply(function)
df[['都道府県','偏差値']].groupby("都道府県").describe().sort_values(('偏差値',  'mean'),ascending=False)
偏差値
countmeanstdmin25%50%75%max
都道府県
埼玉県352.053.9119329.41754940.045.053.061.076.0
東京都585.053.8581209.35388938.046.053.060.078.0
千葉県304.051.9802639.67387038.043.050.059.076.0
大阪府713.051.7082759.40246535.044.050.058.076.0
兵庫県334.051.5838328.87909336.044.050.058.079.0

平均偏差値だと埼玉がTOPになるようです。

偏差値70以上の高校だけに絞るコードは
次のようになりました。
df[df['偏差値']>=70][['都道府県','偏差値']].groupby("都道府県").describe().sort_values(('偏差値',  'count'),ascending=False)

40以下をみる場合は条件を40以下に
変更すれば見られます。

最後に都道府県別での箱ヒゲ図を
見ていたいと思います。

都道府県ごとの分布のような
ものを見たい場合にこの箱ヒゲ図は
非常に役立ちます。

seabornと言うライブラリを用いると
箱ヒゲ図を作ることができます。
import seaborn as sns

plt.figure(figsize=(16,10))
idx = df[['都道府県','偏差値']].groupby("都道府県").agg(np.median).sort_values('偏差値',ascending=False).index
sns.boxplot(x="都道府県", y="偏差値", data=df,order=idx)
plt.xticks(rotation=90)
plt.show()
download-1


まとめですが
埼玉県 , 東京都 , 千葉県 , 大阪府 , 兵庫県
この5県は偏差値の平均が高く

この近隣に住むと偏差値の高い高校に
通いやすいでしょうね。

自分は近所の高校で
卒業時の偏差値20くらいなので
今だとどの高校にも入れなさそうwww

今回はこれまでです
それでは