历届奥运奖牌榜前十,体育强国继续霸榜,荷兰取代韩国入榜
历届奥运奖牌榜前十,体育强国继续霸榜,荷兰取代韩国入榜。年东京奥运会圆满落幕,中国奥运代表团表现出色,排在奖牌榜第二位,在奥运比赛日最后一天被美国反超。本届奥运会中国奥运代表团获得了38金,32银,18铜,总奖牌数88枚的好成绩。美国队由于田径、游泳等金牌大项优势明显,再加上球类项目又安排在奥运会最后阶段,因此被他们反超也是可以预见的,不过这次竞争非常激烈,只相差1枚金牌。值得注意的是,奖牌榜的前十名,依然是体育强国继续霸榜,下面我们通过最近四届奥运会来分析一下奖牌榜的排名情况。
本届东京奥运会,与以往3届奥运会有几个不同之处。第一,总金牌数没有超过40枚的国家;第二,排名前五的国家金牌数都上了20枚,这在以往的奥运会中是没有出现过的情况;第三,奥运奖牌榜前十都有10枚或以上的金牌。从以上的数据可以看出,奥运金牌榜前五的竞争非常激烈,体育强国的竞争力更强了。但是有一点却出人意料,在最近4届奥运会中,我们的邻国韩国都进入了奖牌榜前十,但是本届奥运会却遭遇了滑铁卢,他们最终只获得了6枚金牌,最终排在加拿大、巴西、新西兰、古巴、和匈牙利之后,仅获得了第16名。韩国的滑落或许是他们竞争力的减弱,或许是与东道主紧张的关系有关,原因应该是多方面的。
下面我们来回顾一下最近3届奥运会奖牌榜的情况。先来看年北京奥运会,我们国家作为东道主,获得了51金,21银,28铜的好成绩,位居奖牌榜第一名。美国、俄罗斯分列第二、三位。从历届奥运会来看,东道主获得好成绩成为普遍现象,比如此次日本就获得了前所未有的好成绩,他们获得了27枚金牌,是年奥运会的3倍;此外,他们的女子篮球实力一般,也获得了奥运会的银牌,这些都是东道主的优势。
再来回顾一下年伦敦奥运会的奖牌榜。伦敦奥运会排名第一的是美国队,他们在这届奥运会中获得了46金,29银,29铜,总奖牌数104枚。排在第二的是中国奥运代表团,获得了38金,27银,23铜的好成绩。排名第三的是东道主英国,他们获得了29金,17银,19铜。排名第7-10名的国家分别是:俄罗斯、韩国、德国、法国、意大利、匈牙利、澳大利亚。
距离年东京奥运会最近的一届奥运会是年里约奥运会。这届奥运会中国奥运代表团的成绩不是很理想,只获得了26枚金牌,18枚银牌,26枚铜牌,排在奖牌榜第3名。排名第一的是美国,他们获得了46金,37银,38铜。英国以27金,23银,17铜排在第三。排名前十的其他国家分别是:俄罗斯、德国、日本、法国、韩国、意大利、澳大利亚。
从最近4届奥运会奖牌榜前十的情况来看,体育强国之间的竞争越来越强烈了,尤其是前三名之间的争夺,反复换位。根据目前的形式和发展来看,未来一段时间中美之间争夺奖牌榜第一名将长期存在。而前十名还是以:中国、美国、俄罗斯、英国、德国、法国、日本、意大利、澳大利亚、韩国、荷兰等体育强国为主。从本届奥运会来看,韩国的滑落或许与日本的紧张关系有关,或许与他们的优势项目有关,但是荷兰的崛起应该不是偶然现象,他们在将来可能继续竞争奥运奖牌榜前十。
奥与会秉承更快、更高、更强、更团结的口号,希望把这种精神保持下去,让各国选手在公平的环境下进行比赛,这样才能更好地把奥运精神延续下去,我们不希望看到为了获得更多的金牌而有失公平。
奥运奖牌数背后的规则
奥运会作为一项盛大的体育赛事,在全球范围内都有巨大的影响力,从历届奥运奖牌榜可以看出,不同国家奖牌数差异巨大,美国、中国、欧洲国家奖牌常常几十枚,而有的国家一枚奖牌都没有,除去国家本身综合国力外,本文主要分析奥运会规则的公平问题。得到的结论如下,数据分析见附录:
(1) 每个国家都有优势项目,欧美奖牌如此之多的一个重要原因是把自己的优势项目搞得奖牌数多,重复率高,比如游泳、自行车、皮划艇、剑术等,而且还把别人的优势项目搞得重复率很低,区分度很大,如摔跤、举重、柔道等。
(2) 中国的特色是在个别项目上有绝对优势,如乒乓球等,在其他项目上也能依靠巨大的经济、人力、物力的资源投入分一杯羹。
(3) 广大亚非拉国家本身比较落后,在优势奥运项目上受规则打压,难以获得多枚奖牌,而自身的优势体育项目根本进入不了奥运会。
(4) 所谓的奥运公平根本就不存在,在经济实力和政治影响力的巨大差别下,奥运会不可能做到公平,毕竟屁股决定脑袋,力量博弈决定如何制定奥运规则,美国不可能不顾自己而去照顾乌干达。
欧美在控制奥运规则时也同时控制世界舆论话语权,把奥运会描述成公平合理的赛事,突显自身所谓“体育强国”地位,从精神上制造高别人一等的形象。不仅如此,这些国家还同时利用舆论等优势进行拓展,在诸如“兴奋剂”之类问题上打压其他国家,却忽略自己在兴奋剂问题上的严重黑历史,这种行为比奥运项目设置上的不公平更加无耻。
每个中国人都应该了解奥运规则的不公平及来源,毕竟这个世界的规则从来都是弱肉强食适者生存而不是人人生而平等。有人认为每个项目对每个国家的参赛机会都是公平的,那可以反过来想一下,如果给举重增加单手举、双手举、推举,把抓举和挺举再分开,把项目的重复率增加到60%,然后大幅削减游泳项目,把重复率降到0,那时候奖牌榜会是什么样呢?另外还可以问问美国和澳大利亚人同不同意把游泳奖牌减少80%?同不同意把乒乓球的女双、男双和混双加进来?同不同意把法老搏击加入到奥运项目?
附录:数据分析
本文定义了一个重复率指标来体现项目的重复性,指标定义为重复得牌的运动员的得牌总数与项目总奖牌数的对比,例如:有两个项目,其中一个项目的前三名为A、B、C三人,第二个项目为双人项目,前三名为AB、EF、GH六人,可以看到重复的有A、B两人,A和B分别得到1.5枚奖牌(多人项目每人得牌数=1/队员数),重复得牌的运动员得牌总数为1.5+1.5=3,项目总奖牌数为6块(金、银、铜),则项目重复率为3/6=50%。以此指标为工具,本文统计了年所有奥运项目的重复率,并按重复率高低排序列出,具体数据如下:
表1 奥运会项目重复情况统计
项目 重复得牌数 总奖牌数 重复率 优势国家
乒乓球 8.00 12 66.67 中
游泳 67.75 102 66.42 美、澳大利亚
花样游泳 3.67 6 61.11 俄
体操 26.00 48 54.17 俄、中、美、英
网球 5.50 15 36.67 美、英国
跳水 7.50 24 31.25 中、美、墨
自行车 15.90 54 29.44 英、澳、德、法
马术 5.25 18 29.17 英、德、荷兰
射箭 2.67 12 22.22 韩国
剑术 6.25 30 20.83 意、德、韩
皮划艇 7.00 36 19.44 德、匈、加
田径 24.75 141 17.55 美、俄、德、肯尼亚,牙买加
射击 6.00 45 13.33 韩、美、意、中
羽毛球 1.00 15 6.67 中国、丹麦
赛艇 1.50 42 3.57 英国、新西兰、德国
篮球 0.00 6 0.00 美国
沙滩排球 0.00 6 0.00 美国、巴西
拳击 0.00 39 0.00 俄、英、哈、古巴
激流回旋 0.00 12 0.00 英国、法、德
足球 0.00 6 0.00 美、巴西
手球 0.00 6 0.00 法、挪
曲棍球 0.00 6 0.00 德、荷兰
柔道 0.00 42 0.00 俄、德、法、日
现代五项 0.00 6 0.00 立陶宛、捷克
帆船 0.00 30 0.00 澳、西班牙、英
跆拳道 0.00 24 0.00 西班牙、中
蹦床 0.00 6 0.00 中、加
铁人三项 0.00 6 0.00 英、瑞士
排球 0.00 6 0.00 巴西、俄
水球 0.00 6 0.00 美、克罗地亚
举重 0.00 45 0.00 中、哈、朝鲜
摔跤 0.00 54 0.00 俄、日、伊朗
同时,本文还统计了不同项目能拿多块奖牌的运动员个数及他们的平均得牌数,如表2所示。
表2 运动员重复得牌情况统计
项目 拿多块奖牌人数 多块奖牌获得者平均得牌数
游泳 40 1.69
体操 17 1.53
田径 14 1.77
自行车 10 1.59
皮划艇 6 1.17
花样游泳 6 0.61
乒乓球 6 1.33
跳水 5 1.50
击剑 5 1.25
马术 4 1.31
网球 4 1.38
射击 3 2.00
射箭 2 1.33
羽毛球 1 0.50
赛艇 1 1.50
篮球 0 0.00
沙滩排球 0 0.00
拳击 0 0.00
激流回旋 0 0.00
足球 0 0.00
手球 0 0.00
曲棍球 0 0.00
柔道 0 0.00
现代五项 0 0.00
帆船 0 0.00
跆拳道 0 0.00
蹦床 0 0.00
铁人三项 0 0.00
排球 0 0.00
水球 0 0.00
举重 0 0.00
摔跤 0 0.00
表3 年奥运会奖牌排行榜(仅列前22位)
排名国家/地区 金牌 银牌 铜牌 总数
1 美国 46 29 29 104
2 中国 38 27 23 88
3 英国 29 17 19 65
4 俄罗斯 24 25 33 82
5 韩国 13 8 7 28
6 德国 11 19 14 44
7 法国 11 11 12 34
8 意大利 8 9 11 28
9 匈牙利 8 4 5 17
10 澳大利亚 7 16 12 35
11 日本 7 14 17 38
12 哈萨克斯坦 7 1 5 13
13 荷兰 6 6 8 20
14 乌克兰 6 5 9 20
15 古巴 5 3 6 14
16 新西兰 5 3 5 13
17 伊朗 4 5 3 12
18 牙买加 4 4 4 12
19 捷克 4 3 3 10
20 朝鲜 4 0 2 6
21 西班牙 3 10 4 17
22 巴西 3 5 9 17
(1) 从表1项目重复率一列可以看出,不同项目间重复率差别巨大,游泳、乒乓球等项目重复率很高,甚至达到60%多。但这些项目间奖牌数不一样,其中游泳、体操、自行车重复率高,奖牌数很多。而乒乓球、花样游泳等项目重复率虽高,但总奖牌数少,即使占绝对优势,在这些项目中也难取得大量奖牌。
(2) 通过比较表2中拿多块奖牌的人数和表1中的重复率两列可以发现,两拿多块奖牌数多的项目和重复率高的项目基本相同,这表明这些项目重复率高的原因是下设小项间相似度强,区分度小,运动员在些项目中很容易拿多块奖牌。
(3) 从表2优势国家一列可以看出,不同国家都有自己的优势项目。欧美国家的主要优势项目为游泳、体操、跳水、自行车、马术、剑术、皮划艇、田径等。而发展中国家的优势项目主要为拳击、柔道、跆拳道、举重、摔跤等
(4) 通过对比表1不同项目的优势国家可以发现,高重复率项目中的主要优势国家为欧美等国,而低重复率项目的优势国家主要为发展中国家或不发达国家。其原因主要是发达国家掌握规则制定权,能把自己的优势项目搬进奥运并多多设置小项,增加重复率,变相增加自己的拿牌数量和概率。而发展中国家国力处于一般水平,这些国家也能基于优势项目获得一些奖牌,但根本无法与欧美抗衡。
(5) 通过分析表1奖牌数多,重复率高等项目的优势国家可以发现,这些国家基本在最后的奖牌榜中也是前几位(表3),说明这些国家的奖牌数与他们在高重复率项目上的优势有很大关系。
(6) 奥运项目中几乎没有亚非拉贫穷国家的优势项目,这个原因主要包括两方面,一是本身自己贫穷落后,无法投入大量资源发展体育,二是自身优势项目根本无法进入奥运会。
(7) 从三个表中单独分析中国,可以发现,中国的特点是在个别项目中有很大优势,如乒乓球、羽毛球、举重等;在多个项目中也能一定优势,获得几枚奖牌,如射击、蹦床等;在一些项目上能获得少量奖牌,如击剑、皮划艇等。最终实现在奖牌榜中排名靠前的位置。
参考文献:
[1]. 奥运官方网站 Olympic Results
[2]. 李玲蔚.夏季奥运会项目设置演变过程与发展趋势[D].北京体育大学,.
[3]. 不同国家兴奋剂黑历史。 18/_4.shtml
[4]. 纽约时报,Athletes Who Were Denied Their Olympic Medal Moments Because Others Were Doping. 4/sports/olympi cs-medal-doping.html?_r=0
1896-2021历届奥运会奖牌榜动态排序(Matplotlib图表动画)
摘 要
在制作动态排序动画之前,我们看一下数据的整理情况:
a、对第1)种大部分数据的情况,先爬取下来,输出到excel(1);
b、对第2)种小部分数据的情况,也先爬取下来,输出到另一个excel(2);
c、对第3)种个别的,还有第31-32届的数据,算了,别折腾了,手动复制粘贴到excel(3)吧。
d、最后把这3个excel合并到一个excel,进行数据处理吧。
二、数据处理
经过-历届奥运会奖牌榜动态排序系列的数据处理(第二篇),我们得到了a数据:
看到这张数据表,还有以下几点需要调整:
1、合并3个excel数据;
2、标题、年份列顺序调整到名次前;
3、'国家'列名修改为'国家/地区';
4、计算奖牌的合计数量;
5、根据年份,计算各国的奖牌合计数排名。
1)合并DataFrame:concat(),合并函数还有merge、join函数,有兴趣可以进入以下链接进行学习()
df1 = pd.read_excel("./data/Olympic10.xlsx") df2 = pd.read_excel("./data/Olympic11.xlsx") df3 = pd.read_excel("./data/Olympic12.xlsx") df = pd.concat([df1,df2,df3],axis=0,ignore_index=True,sort=True)
2)调账列顺序
columns = ['标题','年份','国家','金牌','银牌','铜牌'] df = pd.DataFrame(df, columns=columns)
3)列名修改
df.rename(columns={'国家':'国家/地区'},inplace=True)
4)计算奖牌合计
df['合计'] = '' df['合计'] = df['金牌'] + df['银牌'] + df['铜牌']
5)按年份,计算各国的奖牌合计数排名
df['排名'] = df.groupby('年份',axis=0)['合计'].rank(method='first',ascending=False)
另外,再对数据进行一些微调
df=df.drop_duplicates(subset=['年份', '国家/地区'], keep='first') df.sort_values(["年份","排名"],inplace=True,ascending=True) #将国家/地区列字符串中的空格都去除 df['国家/地区'].replace('\s+','',regex=True,inplace=True)
最终获得我们的完整数据
df.to_excel("./data/Olympic_final.xlsx")
完整代码如下:
import pandas as pd df1 = pd.read_excel("./data/Olympic10.xlsx") df2 = pd.read_excel("./data/Olympic11.xlsx") df3 = pd.read_excel("./data/Olympic12.xlsx") df = pd.concat([df1,df2,df3],axis=0,ignore_index=True,sort=True) columns = ['标题','年份','国家','金牌','银牌','铜牌'] df = pd.DataFrame(df, columns=columns) df.rename(columns={'国家':'国家/地区'},inplace=True) df['合计'] = '' df['合计'] = df['金牌'] + df['银牌'] + df['铜牌'] df.loc[df['年份']==,'年份'] = df=df.drop_duplicates(subset=['年份', '国家/地区'], keep='first') df['排名'] = df.groupby('年份',axis=0)['合计'].rank(method='first',ascending=False) df.sort_values(["年份","排名"],inplace=True,ascending=True) #将国家/地区列字符串中的空格都去除 df['国家/地区'].replace('\s+','',regex=True,inplace=True) df.to_excel("./data/Olympic_final.xlsx")
输出结果:
三、动态排序
经过一系列的数据处理,终于可以验证下劳动成果了。完整代码如下:
import pandas as pd import random import matplotlib.pyplot as plt import matplotlib.ticker as ticker import matplotlib.animation as animation from IPython.display import HTML import matplotlib plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签 plt.rcParams['axes.unicode_minus']=False #这两行需要手动设置 #防止动漫内存太大,报错 matplotlib.rcParams['animation.embed_limit'] = 2**128 def randomcolor(): colorlist = ['1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'] color ='' for i in range(6): color += random.choice(colorlist) return '#'+ color df = pd.read_excel(./data/Olympic_final.xlsx") #对地区列表进行去重,分类; area_list1 = set(df['国家/地区']) # color_list用于存放随机生成颜色代码个数 # 因为后面区域个数 要与颜色个数保持一致,这里用了len函数; color_list =[] for i in range(len(area_list1)): str_1 = randomcolor() color_list.append(str_1) str_1 = randomcolor() #area_list转化为列表 area_list_1 = [i for i in area_list1] #colors表示 所在城市:颜色 一一对应字典形式; colors =dict(zip(area_list_1,color_list)) # 用plt加理图表,figsize表示图标长宽,ax表示标签 fig, ax = plt.subplots(figsize=(15, 8)) #dras_barchart生成current_year这一年各城市人口基本情况; def draw_barchart(current_year): #dff对year==current_year的行,以”合计“降序排序,取前十名; dff = df[df['年份'].eq(current_year)].sort_values(by='合计',ascending = True).tail(10) # 所有坐标、标签清除 ax.clear() #显示颜色、城市名字 ax.barh(dff['国家/地区'],dff['合计'],color = [colors[x] for x in dff['国家/地区']]) dx = dff['合计'].max()/200 #ax.text(x,y,name,font,va,ha) # x,y表示位置; # name表示显示文本; # va,ba分别表示水平位置,垂直放置位置; for i ,(value,name) in enumerate(zip(dff['合计'], dff['国家/地区'])): ax.text(value-dx,i,name,size=18,weight=600,ha ='right',va = 'bottom',color='#77') ax.text(value+dx,i ,f'{value:,.0f}',size = 14,ha = 'left',va ='center') #ax.transAxes表示轴坐标系,(1,0.4)表示放置位置 ax.text(1,0.4,current_year,transform = ax.transAxes,color ='#77',size = 46,ha ='right',weight=800) ax.text(0,1.06,'Olympic Medals',transform = ax.transAxes,size=12,color='#77') #set_major_formatter表示刻度尺格式; ax.xaxis.set_major_formatter(ticker.StrMethodFormatter('{x:,.0f}')) ax.xaxis.set_ticks_position('top') ax.tick_params(axis='x',colors='#77',labelsize=12) ax.set_yticks([]) #margins表示自动缩放余额; ax.margins(0,0.01) # 设置后面的网格 ax.grid(which='major',axis='x',linestyle='-') #刻度线和网格线是在图标上方还是下方,True为下方 ax.set_axisbelow(True) ax.text(0,1.15,'历届奥运会奖牌排行榜', transform=ax.transAxes,size=24,weight=600,ha='left',va='top') ax.text(1,0,'Officetouch制作',transform = ax.transAxes, size=16,color ='#77',ha = 'right', bbox = dict(facecolor='white',alpha = 0.8,edgecolor='white')) #取消图表周围的方框显示 plt.box(False) #draw_barchart() #将原来的静态图拼接成动画 fig, ax = plt.subplots(figsize=(15, 8)) animator = animation.FuncAnimation(fig, draw_barchart, frames=df['年份'].drop_duplicates(),interval = ) animator.save("./data/Olympic.gif", writer='pillow')
输出结果:
结 语
学习需要耐心和时间的投入,初学的时候可能需要投入比较多的时间和精力,但只要有这样一个过程,你就会脱胎换骨,一点一滴的积累成就自己。
1、数据采集-爬虫;
Bertram Xu:-历届奥运会奖牌动态排序动画(Python数据采集)2、数据处理-数据清洗;
Bertram Xu:-历届奥运会奖牌榜(Python数据处理)3、数据动态排序。(本篇文章)
因为奥运数据连续性较差,如果我们分析一些连续性强的数据,如各国人口数据,动态排序的效果会好很多。
奥运排行榜的变迁
无聊,想看看排行榜到底是经历了哪些变迁。
Google了一下。关键词一样,只改年份。有意思。北京奥运排行榜排序方式,和其他年份不一样。
:搜索排名第一的,按总数计,但是按金牌排名。
:前四名金牌和奖牌排名一致。
:搜索排名第一的,按总数计,但是按金牌排名。
:排名第一按奖牌总数排名。
:搜索排名第一的,按总数计,但是按金牌排名。
:搜索排名第一的,按总数计,但是按金牌排名。