12 月 9 日
今天闲着没什么事情,统计了下我校保研学生在去向学校
,分数
,性别
,使用邮箱
,自身专业
,自身学院
上的区别,仅供娱乐。本文代码已经放在了github,自取。如果有问题,我的邮箱是memoiry@outlook.com。
下面是发现的一些有趣的事实。
76
人,机械工程 72
人,船舶与海洋工程 51
人。331
人), ('华中科技大学', 236
人), ('武汉大学', 68
人), ('华南理工大学', 42
人), ('湖南大学', 42
人), ('浙江大学', 40
人)。qq
邮箱,然后大部分是 163
邮箱,貌似还看到有人用 wutnews,应该是经纬的?硕士有 1151
人, 直博生有 91
人。
分学院来看,平均综测最高的是自动化学院,最好保研的学院是资环学院(平均排名100+),平均绩点最高的依次是外国语,文法,政治学院,见如下结果统计(只计前5)
学院 | 综测平均分数 | 人数 |
---|---|---|
自动化学院 | 95.395000 | 70 |
文法学院 | 95.328000 | 35 |
艺术与设计学院 | 95.129737 | 38 |
外国语学院 | 93.661176 | 17 |
管理学院 | 93.350652 | 92 |
学院 | 年级平均排名 | 人数 |
---|---|---|
外国语学院 | 26.176471 | 17 |
交通学院 | 39.180723 | 83 |
土木工程与建筑学院 | 42.693548 | 62 |
化学化工与生命科学学院 | 51.057143 | 35 |
机电工程学院 | 52.469027 | 113 |
学院 | 平均 GPA | 人数 |
---|---|---|
外国语学院 | 4.044706 | 17 |
文法学院 | 3.888571 | 35 |
政治与行政学院 | 3.818824 | 17 |
自动化学院 | 3.764714 | 70 |
经济学院 | 3.751698 | 53 |
保研学校 | 综测平均分数 | 人数 |
---|---|---|
清华大学 | 99.406364 | 11 |
浙江大学 | 98.396000 | 40 |
北京大学 | 97.448750 | 8 |
同济大学 | 97.050667 | 15 |
北京航空航天大学 | 96.088125 | 16 |
保研学校 | 年级平均排名 | 人数 |
---|---|---|
清华大学 | 8.727273 | 11 |
上海交通大学 | 11.757576 | 33 |
同济大学 | 17.266667 | 15 |
中国科学技术大学 | 20.095238 | 21 |
浙江大学 | 24.500000 | 40 |
保研学校 | 平均 GPA | 人数 |
---|---|---|
清华大学 | 4.132727 | 11 |
北京大学 | 4.062500 | 8 |
上海交通大学 | 3.993030 | 33 |
中南财经政法大学 | 3.953333 | 12 |
浙江大学 | 3.948500 | 40 |
如果想看更加详细的结果,可以看看下面的代码与结果,主要四个部分
这里先导入必要的库,中文与邮箱格式处理
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="ticks")
file = 'test.xls'
df = pd.read_excel(file)
plt.rcParams['font.sans-serif'] = ['SimHei'] # for Chinese characters
df['电子邮箱'] = df['电子邮箱'].apply(lambda x: x.split('@')[1].split('.')[0])
定义一个函数进行分类统计
def plot_cat(dataframe, attri, attri2 = None, attri3 = None, prep = None):
plt.figure(figsize=(15,5))
print('统计类型:{} '.format(attri))
if attri2 is not None:
dataframe = dataframe[dataframe[attri2] == attri3]
types = np.unique(dataframe[attri])
num_type = len(types)
stat_num = []
for i in range(num_type):
stat_num.append(dataframe[dataframe[attri] == types[i]].shape[0])
print('类型数:{}'.format(num_type))
order = np.argsort(stat_num)[::-1]
print('统计个数排序:{}'.format(list(zip(types[order],np.sort(stat_num)[::-1]))))
sns.barplot(types, stat_num)
plt.show()
print()
college = '自动化学院'
plot_cat(df, '性别', '本科学院名称', college)
plot_cat(df, '毕业专业名称','本科学院名称', college)
plot_cat(df, '录取学校名称','本科学院名称', college)
plot_cat(df, '招生类型','本科学院名称', college)
plot_cat(df, '电子邮箱','本科学院名称', college)
plot_cat(df, '性别')
plot_cat(df, '毕业专业名称')
plot_cat(df, '录取学校名称')
plot_cat(df, '本科学院名称')
plot_cat(df, '招生类型')
plot_cat(df, '电子邮箱')
在定义一个函数进行 group box 统计。
def plot_contra(dataframe, attri1, attri2, topk = 10, pre_defined_type = None, rev = False):
plt.figure(figsize=(15,5))
print("平均{}排名:".format(map_list[attri2]))
types = np.unique(dataframe[attri1])
num_type = len(types)
stat_num = []
for i in range(num_type):
stat_num.append(dataframe[dataframe[attri1] == types[i]].shape[0])
order = np.argsort(stat_num)[::-1]
topk_type = types[order][:topk]
dataframe_temp = []
for i in range(topk):
dataframe_temp.append(dataframe[dataframe[attri1] == topk_type[i]])
if pre_defined_type is not None:
for i in range(len(pre_defined_type)):
dataframe_temp.append(dataframe[dataframe[attri1] == pre_defined_type[i]])
dataframe_temp = pd.concat(dataframe_temp)
stats = dataframe_temp.groupby(attri1)[attri2].mean()
stats_num = dataframe_temp.groupby(attri1)[attri2].count().rename('count')
if rev:
print(pd.concat([stats, stats_num], axis=1).sort_values(attri2)[::-1])
else:
print(pd.concat([stats, stats_num], axis=1).sort_values(attri2))
sns.boxplot(x = attri1, y = attri2, data = dataframe_temp)
plt.show()
map_list = {'tjzhcj': '综测总分',
'tjzhmc': '年级排名',
'tjgpa': 'GPA'}
plot_contra(df, '录取学校名称', 'tjzhcj', 20, ['清华大学', '北京大学'], True)
plot_contra(df, '录取学校名称', 'tjzhmc', 20, ['清华大学', '北京大学'])
plot_contra(df, '录取学校名称', 'tjgpa', 20, ['清华大学', '北京大学'], True)
plot_contra(df, '本科学院名称', 'tjzhcj', 20, [], True)
plot_contra(df, '本科学院名称', 'tjzhmc', 20, [])
plot_contra(df, '本科学院名称', 'tjgpa', 20, [], True)