2018研究生数学建模成绩分析
2018研究生数学建模成绩分析,主要从以下几个方面进行分析
数据来源:2018研究生数学建模成绩汇总
1. 按‘队长所在单位’统计每个学校的获奖数量,并画出柱状图展示
#coding:utf-8
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style="whitegrid")
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置字体为黑体
plt.rcParams['axes.unicode_minus'] = False # 解决中文字体负号显示不正常问题
path='../data/'
data=pd.read_excel(path+'2018建模成绩汇总.xlsx')
data['奖项']=data['奖项'].apply(lambda x:'一等奖'if x=='一等奖(华为)' else x)
# 按'队长所在单位'分别统计获奖数量
def school_cnt(df):
school_cnt_df=df[df['奖项']!='成功参与奖'][['奖项','队长所在单位']].groupby(['队长所在单位','奖项']).size().unstack()
school_cnt_df['获奖数量']=school_cnt_df[['一等奖','二等奖','三等奖']].sum(axis=1)
school_cnt_df.sort_values(by=['获奖数量','一等奖','二等奖','三等奖'],axis=0,ascending = False,inplace=True)
school_cnt_df=school_cnt_df[['一等奖','二等奖','三等奖','获奖数量']]
school_cnt_df=school_cnt_df.reset_index().rename(columns={'队长所在单位':'学校名称'})
print(school_cnt_df.head(5))
# school_cnt_df.to_excel(path+'school_cnt.xlsx',encoding='gbk')
# 用柱状图给出获奖数量最多的前20个学校
plt.figure(figsize=(15, 10)).subplotpars.update(bottom=0.25)
sns.barplot(x="学校名称", y="获奖数量", data=school_cnt_df.loc[0:20],
palette="muted")
plt.xticks(ha='right', rotation=40)
plt.savefig(path+'school_cnt.png')
plt.show()
用柱状图给出获奖数量最多的前20个学校
2. 按每个学校获奖人数进行统计,并画出柱状图进行展示
# 统计每个学校的获奖人数
# 思路1:使用双层字典嵌套逐个统计
# 思路2:groupby
def team_member_cnt(df):
team_leader_cnt_df=df[['奖项','队长所在单位']].groupby(['队长所在单位','奖项']).size().unstack()
team_member_df=team_leader_cnt_df[['一等奖','二等奖','三等奖']]
team_member_cnt_df1=df[['奖项','第一队友所在单位']].groupby(['第一队友所在单位','奖项']).size().unstack()
team_member_df=team_member_df.join(team_member_cnt_df1[['一等奖','二等奖','三等奖']],how='outer',rsuffix='_2')
team_member_cnt_df2=df[['奖项','第二队友所在单位']].groupby(['第二队友所在单位','奖项']).size().unstack()
team_member_df=team_member_df.join(team_member_cnt_df2[['一等奖','二等奖','三等奖']],how='outer',rsuffix='_3')
team_member_df.rename(columns={'一等奖':'一等奖_1','二等奖':'二等奖_1','三等奖':'三等奖_1'},inplace=True)
team_member_df['获奖总人数']=team_member_df.sum(axis=1)
sort_cols=['获奖总人数','一等奖_1','一等奖_2','一等奖_3','二等奖_1','二等奖_2','二等奖_3','三等奖_1','三等奖_2','三等奖_3']
team_member_df.sort_values(by=sort_cols,ascending=False,inplace=True)
team_member_df=team_member_df.reset_index().rename(columns={'index':'学校名称'})
print(team_member_df.head())
team_member_df.to_excel(path+'各学校获奖人数统计.xlsx',encoding='gbk',index=False)
# 用柱状图给出获奖人数最多的前20个学校
plt.figure(figsize=(15, 10)).subplotpars.update(bottom=0.25)
sns.barplot(x="学校名称", y="获奖总人数", data=team_member_df.loc[0:20],
palette="muted")
plt.xticks(ha='right', rotation=40)
plt.savefig(path+'school_cnt_amount.png')
plt.show()
temp_df=data[data['奖项']!='成功参与奖'][['奖项','队长所在单位','第一队友所在单位','第二队友所在单位']]
if __name__=="__main__":
school_cnt(data)
team_member_cnt(temp_df)
统计每个学校的获奖人数用柱状图展示
3. 分析A、B、C、D、E、F每个题的获奖数量及占比
4. 计算A、B、C、D、E、F每个题获奖人数与参与人数之比,并用饼图展示
5. 按地图省份绘制每个省的参与人数热力图
6. 按地图省份绘制每个省份的获奖人数热力图
7. 总结分析
(双十一剁手)后面内容,抽空不上 2018年11月11日