
1. 项目缘起一次“非典型”的数据分析实践去年年底我在整理硬盘时偶然翻到了一个尘封已久的压缩包里面是2020年“华为杯”第十七届中国研究生数学建模竞赛的获奖名单。这份数据当年比赛结束后我只是粗略地扫了一眼确认了本校队伍的成绩便没再深究。但这次重新打开看着那密密麻麻的Excel表格一个念头突然冒了出来除了看个名次这份数据还能告诉我们什么它背后是否隐藏着一些关于竞赛格局、高校实力分布乃至题目难易度的有趣信息这并非一个严格意义上的学术研究项目更像是一次基于好奇心的数据探索。没有预设的复杂模型也没有宏大的分析目标。我的初衷很简单用最基础的统计学方法和可视化工具像“解谜”一样去挖掘这份公开数据中那些被忽略的细节。对于参加过数模竞赛的同学这可能是一次复盘和共鸣对于准备参赛的同学这或许能提供一些关于竞争态势的直观感受而对于数据爱好者这就是一个绝佳的、干净的、结构化的真实数据集可以用来练手。整个分析过程我主要使用了Python的Pandas进行数据清洗与统计Matplotlib和Seaborn进行可视化。下面我就把这次探索的完整过程、发现的有趣结论以及过程中踩过的坑和心得毫无保留地分享出来。2. 数据初探与清洗从原始名单到结构化数据拿到原始数据通常是一份包含“获奖等级”、“参赛单位”、“队员姓名”、“指导教师”等列的Excel或PDF名单第一步永远是“看”和“理”。2.1 原始数据的“坑”与处理这份名单的数据质量其实相当高毕竟是官方发布的。但为了后续分析仍需进行标准化处理。主要问题集中在“参赛单位”这一列。名称不统一同一个学校可能有多种表述。例如“北京大学”和“北京大学校本部”“武汉大学”和“武汉大学主校区”。这会导致在按学校统计时同一个实体被拆分成多个。二级单位混杂很多名单会详细到学院如“华中科技大学计算机科学与技术学院”。如果我们想分析学校层面的整体实力就需要将其归并到“华中科技大学”。我的处理策略是建立学校名称映射表手动对于几百所高校写个小脚本半自动更高效整理一个字典将各种变体映射到标准名称。这是最耗时但最关键的一步保证了统计口径的一致。提取一级单位对于包含学院的名称使用简单的字符串匹配或正则表达式提取出学校名。例如用规则匹配“XX大学”或“XX学院”之前的文本。# 示例简单的名称清洗函数实际处理更复杂 def clean_school_name(name): # 去除括号及括号内内容如“校本部” name re.sub(r.*?, , name) name re.sub(r\(.*?\), , name) # 映射常见别名 name_mapping { 北大: 北京大学, 清华: 清华大学, 华中科大: 华中科技大学, # ... 更多映射 } return name_mapping.get(name, name) # 提取一级单位假设学院名在学校名之后用空格或特殊字符分隔 def get_first_level_unit(full_name): # 这是一个简化的示例实际情况需要根据数据特点调整 for university in [大学, 学院]: if university in full_name: # 找到第一个“大学”或“学院”的位置并取到该词为止 idx full_name.find(university) if idx ! -1: return full_name[:idx2] # 包含“大学”或“学院”二字 return full_name # 如果未匹配返回原名称注意数据清洗没有银弹。尤其是中文机构名处理必须结合数据实际情况反复检查和修正。我建议清洗后对获奖数量前50的学校进行人工复核确保万无一失。2.2 关键字段的构建清洗完单位名称后我构建了几个核心字段用于后续分析获奖等级编码将“一等奖”、“二等奖”、“三等奖”、“成功参赛奖”分别编码为数值如4,3,2,1或保留有序类别便于加权计算。学校类型标识根据学校名称判断其是否为“双一流”建设高校、原“985工程”高校、原“211工程”高校等。这部分数据需要外部知识库我手动整理了一份列表进行匹配。区域划分根据学校所在地划分到华北、华东、华中、华南、西南、西北、东北等区域。至此我们得到了一份干净的结构化数据框DataFrame每一行代表一支获奖队伍包含标准化后的学校、区域、获奖等级、学校类型等信息。真正的探索可以开始了。3. 整体获奖格局透视一等奖都去了哪儿首先我们来俯瞰一下整体的获奖分布。2020年研赛共有来自全国500多所高校和科研院所的约5万支队伍参赛。我们分析的重点是获奖名单这大约涵盖了前40%的队伍一、二、三等奖及部分成功参赛奖。3.1 获奖等级分布计算各等级获奖数量及占比这是最基础的描述统计。结果通常符合预期三等奖数量最多二等奖次之一等奖最少呈金字塔结构。但有趣的是可以计算一下“一等奖获奖率”一等奖数量/获奖总数这个比例可以粗略反映当年竞赛的“头部竞争”激烈程度。2020年的这个数字与前后年份对比或许能看出题目难度或评审尺度的微妙变化。3.2 一等奖的院校集中度分析这是第一个洞察点。我们统计所有一等奖队伍的学校分布。计算Top N院校占比计算获得一等奖数量最多的前10名、前20名院校其一等奖总数占全国一等奖总数的比例。这个比例非常高。以2020年数据为例一等奖的集中度非常显著排名前20的院校囊括了超过60%的一等奖。这直观地表明顶尖奖项的竞争主要在少数顶尖高校之间进行。绘制一等奖院校排行榜用柱状图展示一等奖数量Top 20的院校。不出所料榜单前列清一色是传统的理工科强校和顶尖综合性大学如清华大学、浙江大学、上海交通大学、华中科技大学、武汉大学等。一个关键发现在这个榜单中除了第一梯队的顶尖高校我还注意到一些非“顶尖985”但表现异常突出的高校。例如国防科技大学、解放军理工大学现陆军工程大学等军队院校以及一些特色鲜明的行业类高校如中国石油大学、哈尔滨工程大学它们的一等奖数量甚至超过了不少综合排名更高的985高校。这提示我们在数学建模这项侧重解决实际工程、科学问题的竞赛中学校的学科特色、对学生数理基础和工程实践能力的培养模式可能比单纯的“综合排名”更具影响力。4. 院校竞争力深度评估不仅仅是数奖牌如果只看一等奖数量就像奥运金牌榜虽然直接但略显片面。为了更全面地评估各院校的竞争力我引入了两个量化指标4.1 “获奖积分”与院校排行榜我设计了一个简单的“获奖积分”制度为不同奖项赋予权重一等奖5分二等奖3分三等奖1分成功参赛奖0.5分若数据中包含每支队伍为其所在学校贡献相应的积分。将所有队伍积分按学校汇总就得到了每个学校的“总获奖积分”。这个指标综合考虑了获奖的数量和质量。制作“总获奖积分榜”Top 30并与纯一等奖榜进行对比。变化出现了一些一等奖数量不多但二、三等奖数量庞大的“巨无霸”型高校例如部分省内学生基数大的重点大学排名大幅上升。这反映了其深厚的参与基础和整体较强的实力。少数“精英型”高校虽然一等奖摘金能力很强但可能因为参赛队伍总数相对较少在总积分榜上的位置略有下滑。这个榜单更能反映一所学校在该赛事上的整体实力和厚度。4.2 “获奖效率”与“投入产出比”总积分高可能只是因为参赛队伍多。那么如果考虑“投入”呢虽然我们无法精确知道每个学校具体派出了多少支队伍但我们可以用“获奖数量”来近似替代“产出”并引入“获奖效率”的概念。一个合理的代理指标是一等奖数量 / 该校获奖总数。这个比值越高说明该校获奖队伍中摘得最高荣誉的比例越大可能意味着其顶尖队伍的选拔和培养更有效率或者其优势队伍的实力断层领先。计算这个“一等奖效率比”并排序会发现一些有趣的现象一些顶尖高校如清华、北大、上交、复旦的这个比值通常很高维持在15%-25%的区间这符合其生源和师资的顶尖水平。而之前提到的某些军队院校和行业特色高校这个比值可能异常突出甚至超过部分顶尖高校。这强烈暗示这些学校在数学建模竞赛上采取了高度聚焦、资源倾斜的培养模式其王牌队伍的实力极强成功率极高。相反一些总积分榜上的“巨无霸”高校这个比值可能相对较低。这说明其获奖主要依靠庞大的基数在培养顶尖拔尖队伍方面还有提升空间。实操心得这种多维度交叉分析的价值就在于此。它避免了单一指标的片面性帮助我们勾勒出更立体的院校画像谁是“全能王”总积分高谁是“尖刀班”一等奖效率高谁是“集团军”获奖总量大。对于备赛学生来说了解自己学校在哪个维度有优势有助于找准定位和策略。5. 区域对比与“地理”特征将学校按所属区域分组我们可以从地理维度观察竞赛版图。5.1 各区域获奖总量与质量分布计算华北、华东、华中、华南、西南、西北、东北七大区域的获奖总积分、一等奖数量。毫无悬念华东地区江浙沪鲁皖赣闽和华北地区京津冀晋蒙是绝对的强势区域两者合计贡献了超过全国一半的获奖积分和一等奖。这与其高等教育资源密集、经济发达、高水平大学数量多的现状完全吻合。华中地区鄂湘豫紧随其后表现强劲尤其是湖北省武大、华科等堪称中流砥柱。相比之下西南、西北、东北地区的总量份额较小但区域内均有表现亮眼的“领头羊”高校。5.2 区域内部分析与“校均产出”更有趣的是看区域内部。我们引入“校均一等奖数”或“校均获奖积分”指标。即用该区域的总一等奖数或总积分除以该区域内拥有获奖记录的学校数量。华东、华北虽然总量大但由于区域内参赛高校数量也极多从985到普通省属高校其“校均产出”可能并不是最高。华中地区特别是湖北省可能呈现出“总量可观且校均强度高”的特点说明该地区高校整体在该赛事上竞争力普遍较强。某些总量不大的区域其“校均产出”指标可能反而不错这说明该地区少数重点高校在该赛事上投入大、表现专注形成了区域内的“高地”。这个分析对于观察高等教育资源的均衡性以及不同地区对特定类型学科竞赛的重视程度提供了一个微小的侧面参考。6. 题目选择倾向性分析如果数据支持这是一个更进阶的分析方向依赖于更细粒度的数据。理想的原始数据应该包含每支队伍选择的赛题A、B、C、D、E、F。如果能有这部分信息分析将极具价值。我们可以分析不同层次高校的选题偏好顶尖高校是否更倾向于选择理论性强、前沿性的题目如A题而工程见长的高校是否更偏爱数据量大、需要编程实现的题目如B/C题这可以反映不同学校培养方向的侧重。题目难度与获奖等级关系统计选择各题目的队伍中获得一、二、三等奖的比例。理论上如果所有题目评审尺度一致这个比例应该相近。如果某个题目的一等奖比例显著偏低可能意味着该题目当年难度较大或竞争更激烈反之则可能相对容易或“性价比”高。“题目-学校”关联挖掘计算每个学校在不同题目上的获奖积分或一等奖数量。你可能会发现一些学校在特定类型的题目上具有传统优势形成了“品牌效应”。例如某校在“优化类”赛题上历年表现强势这可能源于其运筹学学科的深厚底蕴。踩坑提醒这部分分析高度依赖数据完整性。如果原始名单未包含选题信息则无法进行。我在本次分析中因数据所限未能深入。但如果你能找到带选题的数据这将是挖掘深度洞察的富矿。处理时需注意有些队伍可能因未获奖而未出现在名单中这会导致选题样本有偏分析结论需谨慎外推。7. 可视化呈现让数据自己说话数据分析的最终成果需要直观的呈现。我使用了以下几种可视化方式横向柱状图条形图用于展示院校一等奖排行榜、总积分排行榜。清晰直观适合排名比较。中国地图热力图将各省或各区域的总获奖积分或一等奖数量映射到地图上用颜色深浅表示强弱。可以瞬间把握全国范围内的实力分布格局。Python的pyecharts或geopandas库可以很好地实现。堆叠柱状图展示Top 20院校内部一、二、三等奖的构成比例。既能看总量又能看质量结构。散点图以“获奖总数”为X轴“一等奖数量”为Y轴每个点代表一所学校。可以添加一条趋势线观察整体相关性。同时可以按“学校类型”如985/211/其他给点着色观察不同类型学校的分布规律。那些远离趋势线、位于左上角一等奖多但总数不多的点就是我们要找的“效率王者”。8. 分析局限与心得反思最后必须坦诚这次“业余分析”的局限性数据层面我们只有获奖名单缺乏未获奖队伍信息、每支队伍的具体得分、选题信息、队员专业背景等。这限制了许多更深度的分析如准确计算获奖率、分析专业影响等。指标设计“获奖积分”的权重分配是主观的。虽然符合常识但改变权重可能会导致排名微调。因果推断我们观察到的是相关性而非因果性。一所学校获奖多是源于生源好、师资强、培训体系完善还是单纯因为重视并组织了更多队伍参赛无法从本数据中得出确凿结论。尽管如此这次探索的价值是毋庸置疑的对于参赛者你可以清晰地看到自己所处学校在全国版图中的位置是冲击最高奖的“种子选手”还是依靠整体实力“稳中求进”这有助于制定合理的参赛目标。你也能看到哪些学校是你的主要竞争对手。对于组织者与教练可以借鉴表现优异院校的分布特征和结构反思自身的培训选拔机制。例如是否在培养“尖子队”上力度不够是否在选题策略上可以更有针对性对于数据爱好者这是一个干净、有明确业务背景的数据集非常适合练习数据清洗、多维分析和可视化。你可以复现我的分析也可以尝试提出自己的新问题、新指标。对我个人而言最大的收获是重新认识到即使面对一份看似简单的名单数据只要提出正确的问题并耐心地进行多维度、多指标的交叉审视依然能挖掘出超越表面排名的、丰富的、具有启发性的信息。数据分析的魅力不在于工具的复杂而在于思维的深度。下次如果你手头也有一份类似的竞赛成绩单不妨也试试看或许会有意想不到的发现。