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个学校
2018研究生数学建模成绩分析
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)

统计每个学校的获奖人数用柱状图展示
2018研究生数学建模成绩分析
3. 分析A、B、C、D、E、F每个题的获奖数量及占比

4. 计算A、B、C、D、E、F每个题获奖人数与参与人数之比,并用饼图展示

5. 按地图省份绘制每个省的参与人数热力图

6. 按地图省份绘制每个省份的获奖人数热力图

7. 总结分析


(双十一剁手)后面内容,抽空不上 2018年11月11日