2018第十五届全国研究生数学建模竞赛完整赛题下载
2018研究生数学建模成绩分析,主要从以下几个方面进行分析
建模成绩数据来源:2018研究生数学建模成绩汇总
1. 按‘队长所在单位’统计每个学校的获奖数量,并画出柱状图展示
这里是代码的头部
#coding:utf-8
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from geopy.geocoders.baidu import Baidu
import os
import time
sns.set(style="whitegrid")
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置字体为黑体
plt.rcParams['axes.unicode_minus'] = False # 解决中文字体负号显示不正常问题
path='../data/'
save_dir='../tmp/'
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[['一