“数”说奥运,盘点历届奥运会奖牌,参赛国家、运动员获奖等情况

核桃 269 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、数据动态排序。(本篇文章)

因为奥运数据连续性较差,如果我们分析一些连续性强的数据,如各国人口数据,动态排序的效果会好很多。

最全的历年奥运会金牌排行榜汇总

年夏季奥林匹克运动会,是第一届现代奥林匹克运动会,也是自罗马帝国皇帝狄奥多西一世在公元393年废除古代奥运会以来的首届奥运会,至今刚好满120年。

在过去的30届奥运会中,每一届前10名的国家有哪些,分别获得了多少金牌?稳赚理财助手为您列出了最全的奥运会金牌名单,跨度120年哦~

历届奥运奖牌榜前十,体育强国继续霸榜,荷兰取代韩国入榜

历届奥运奖牌榜前十,体育强国继续霸榜,荷兰取代韩国入榜。

年东京奥运会圆满落幕,中国奥运代表团表现出色,排在奖牌榜第二位,在奥运比赛日最后一天被美国反超。本届奥运会中国奥运代表团获得了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届奥运会奖牌榜前十的情况来看,体育强国之间的竞争越来越强烈了,尤其是前三名之间的争夺,反复换位。根据目前的形式和发展来看,未来一段时间中美之间争夺奖牌榜第一名将长期存在。而前十名还是以:中国、美国、俄罗斯、英国、德国、法国、日本、意大利、澳大利亚、韩国、荷兰等体育强国为主。从本届奥运会来看,韩国的滑落或许与日本的紧张关系有关,或许与他们的优势项目有关,但是荷兰的崛起应该不是偶然现象,他们在将来可能继续竞争奥运奖牌榜前十。

奥与会秉承更快、更高、更强、更团结的口号,希望把这种精神保持下去,让各国选手在公平的环境下进行比赛,这样才能更好地把奥运精神延续下去,我们不希望看到为了获得更多的金牌而有失公平。

“数”说奥运,盘点历届奥运会奖牌,参赛国家、运动员获奖等情况

从年,希腊雅典举行的第一届现代奥运会,到今天即将要开幕的,年第32届东京夏季奥林匹克运动会,中间的31届奥运会,你知道都有哪些国家参与吗?你知道共产生了多少枚奖牌吗?你知道一共有多少运动员吗?你知道哪些运动员获得的奖牌最多吗?你知道。。。今天,给大家盘点回顾一下历届奥运会的“数”。

1.历届奥运会(以下均指年-年之间举办的31届奥运会)中,参赛超过20届的国家有36个。

参加次数超过20的国家

2.历届奥运会中,单届奥运会参赛国家数最多的是里约奥运会和伦敦奥运会,都是205个国家参与。人数最多的一届的是北京奥运会的8人。设置金牌数最多的是里约奥运会的307枚,设置项目最多的也是里约奥运会大项28项,小项306项。

历届参赛国家运动员等数量情况

3.历届奥运会金牌总数获得排名前10的国家。历届奥运会金牌数进前10的国家,次数超过10次的有9个,分别是美国27次、意大利22次、法国21次、匈牙利19次、德国18次、英国18次、澳大利亚16次、日本13次、瑞典10次。

历届奥运会金牌获得排名前10的国家

4.历届奥运会,所有运动员获得奖牌总数排名情况中,美国游泳运动员菲尔普斯以28枚奖牌,高居首位。

运动员奖牌总数排名前0情况

期待本届奥运会,选手们再创佳绩。

历届奥运会奖牌盘点完毕,你最喜欢哪个呢?

话不多说,直接开始:1、第一届年雅典奥运会

2、第二届年巴黎奥运会

3、第三届年圣路易斯奥运会

4、第四届年伦敦奥运会

5、第五届年斯德哥尔摩奥运会

6、第六届年柏林奥运会,因第一次世界大战取消。7、第七届年安特卫普奥运会

8、第八届年巴黎奥运会

9、第九届年阿姆斯特丹奥运会

10、第十届年洛杉矶奥运会

11、第十一届年柏林奥运会

12、第十二届年东京奥运会,因第二次世界大战取消。13、第十三届年伦敦奥运会,因第二次世界大战取消。14、第十四届年伦敦奥运会

15、第十五届年赫尔辛基奥运会

16、第十六届年墨尔本奥运会

17、第十七届年罗马奥运会

18、第十八届年东京奥运会

19、第十九届年墨西哥城奥运会

20、第二十届年慕尼黑奥运会

21、第二十一届年蒙特利尔奥运会

22、第二十二届年莫斯科奥运会

23、第二十三届年洛杉矶奥运会

24、第二十四届年汉城奥运会

25、第二十五届年巴塞罗那奥运会

26、第二十六届年亚特兰大奥运会

27、第二十七届年悉尼奥运会

28、第二十八届年雅典奥运会

29、第二十九届年北京奥运会

30、第三十届年伦敦奥运会

31、第三十一届年里约热内卢奥运会

32、第三十二届年东京奥运会

盘点完毕,你最喜欢哪个呢?评论区分享下吧。

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、数据动态排序。(本篇文章)

因为奥运数据连续性较差,如果我们分析一些连续性强的数据,如各国人口数据,动态排序的效果会好很多。

最全的历年奥运会金牌排行榜汇总

年夏季奥林匹克运动会,是第一届现代奥林匹克运动会,也是自罗马帝国皇帝狄奥多西一世在公元393年废除古代奥运会以来的首届奥运会,至今刚好满120年。

在过去的30届奥运会中,每一届前10名的国家有哪些,分别获得了多少金牌?稳赚理财助手为您列出了最全的奥运会金牌名单,跨度120年哦~

“数”说奥运,盘点历届奥运会奖牌,参赛国家、运动员获奖等情况

从年,希腊雅典举行的第一届现代奥运会,到今天即将要开幕的,年第32届东京夏季奥林匹克运动会,中间的31届奥运会,你知道都有哪些国家参与吗?你知道共产生了多少枚奖牌吗?你知道一共有多少运动员吗?你知道哪些运动员获得的奖牌最多吗?你知道。。。今天,给大家盘点回顾一下历届奥运会的“数”。

1.历届奥运会(以下均指年-年之间举办的31届奥运会)中,参赛超过20届的国家有36个。

参加次数超过20的国家

2.历届奥运会中,单届奥运会参赛国家数最多的是里约奥运会和伦敦奥运会,都是205个国家参与。人数最多的一届的是北京奥运会的8人。设置金牌数最多的是里约奥运会的307枚,设置项目最多的也是里约奥运会大项28项,小项306项。

历届参赛国家运动员等数量情况

3.历届奥运会金牌总数获得排名前10的国家。历届奥运会金牌数进前10的国家,次数超过10次的有9个,分别是美国27次、意大利22次、法国21次、匈牙利19次、德国18次、英国18次、澳大利亚16次、日本13次、瑞典10次。

历届奥运会金牌获得排名前10的国家

4.历届奥运会,所有运动员获得奖牌总数排名情况中,美国游泳运动员菲尔普斯以28枚奖牌,高居首位。

运动员奖牌总数排名前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、数据动态排序。(本篇文章)

因为奥运数据连续性较差,如果我们分析一些连续性强的数据,如各国人口数据,动态排序的效果会好很多。

历届奥运奖牌榜前十,体育强国继续霸榜,荷兰取代韩国入榜

历届奥运奖牌榜前十,体育强国继续霸榜,荷兰取代韩国入榜。

年东京奥运会圆满落幕,中国奥运代表团表现出色,排在奖牌榜第二位,在奥运比赛日最后一天被美国反超。本届奥运会中国奥运代表团获得了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届奥运会奖牌榜前十的情况来看,体育强国之间的竞争越来越强烈了,尤其是前三名之间的争夺,反复换位。根据目前的形式和发展来看,未来一段时间中美之间争夺奖牌榜第一名将长期存在。而前十名还是以:中国、美国、俄罗斯、英国、德国、法国、日本、意大利、澳大利亚、韩国、荷兰等体育强国为主。从本届奥运会来看,韩国的滑落或许与日本的紧张关系有关,或许与他们的优势项目有关,但是荷兰的崛起应该不是偶然现象,他们在将来可能继续竞争奥运奖牌榜前十。

奥与会秉承更快、更高、更强、更团结的口号,希望把这种精神保持下去,让各国选手在公平的环境下进行比赛,这样才能更好地把奥运精神延续下去,我们不希望看到为了获得更多的金牌而有失公平。

最全的历年奥运会金牌排行榜汇总

年夏季奥林匹克运动会,是第一届现代奥林匹克运动会,也是自罗马帝国皇帝狄奥多西一世在公元393年废除古代奥运会以来的首届奥运会,至今刚好满120年。

在过去的30届奥运会中,每一届前10名的国家有哪些,分别获得了多少金牌?稳赚理财助手为您列出了最全的奥运会金牌名单,跨度120年哦~

“数”说奥运,盘点历届奥运会奖牌,参赛国家、运动员获奖等情况

从年,希腊雅典举行的第一届现代奥运会,到今天即将要开幕的,年第32届东京夏季奥林匹克运动会,中间的31届奥运会,你知道都有哪些国家参与吗?你知道共产生了多少枚奖牌吗?你知道一共有多少运动员吗?你知道哪些运动员获得的奖牌最多吗?你知道。。。今天,给大家盘点回顾一下历届奥运会的“数”。

1.历届奥运会(以下均指年-年之间举办的31届奥运会)中,参赛超过20届的国家有36个。

参加次数超过20的国家

2.历届奥运会中,单届奥运会参赛国家数最多的是里约奥运会和伦敦奥运会,都是205个国家参与。人数最多的一届的是北京奥运会的8人。设置金牌数最多的是里约奥运会的307枚,设置项目最多的也是里约奥运会大项28项,小项306项。

历届参赛国家运动员等数量情况

3.历届奥运会金牌总数获得排名前10的国家。历届奥运会金牌数进前10的国家,次数超过10次的有9个,分别是美国27次、意大利22次、法国21次、匈牙利19次、德国18次、英国18次、澳大利亚16次、日本13次、瑞典10次。

历届奥运会金牌获得排名前10的国家

4.历届奥运会,所有运动员获得奖牌总数排名情况中,美国游泳运动员菲尔普斯以28枚奖牌,高居首位。

运动员奖牌总数排名前0情况

期待本届奥运会,选手们再创佳绩。

如何评价里约奥运奖牌榜英国超过中国?

历时半月的里约奥运会帷幕降下,中国代表团最终以26枚金牌、18枚银牌、26枚铜牌,位列金牌榜第3,奖牌榜第2的成绩完成比赛,取得这样的成绩实属不易,祝贺中国体育健儿。

虽然金牌数稍逊于英国,这大概是大家没有想到的,但在作者眼里,完全没有必要以近三届最差战绩而妄自菲薄。

竞技场上,什么都有可能发生,这就是体育!丧失了不确定性,就丧失了体育的快乐。

在传统媒体依然强势占据报道一线,新媒体(微信微博……)迅速以各种段子、表情包、故事、点评等方式参与奥运报道的泛媒体泛娱乐时代,民众也能够更加全面地获取各种奥运信息,表达自己对于中国代表团的态度观点。

一、“差强人意”还是“东边不亮西边亮”?

此次中国代表团派出史上最强阵容参加奥运会,但出师不利,首日比赛竟无一斩获。此外在体操、羽毛球等项目上表现不尽如人意,在人们分析原因和检讨的同时,我们在自行车、跆拳道、女排、田径等项目上接连又有出色发挥。特别是女排在郎平带领下几乎以完美的表现获得份量最重的大球项目金牌。

这恰恰体现了大国参赛的最大特点——“东边不亮西边亮”。强大的整体实力保证了我们即使部分项目表现不佳,恐怕也不会再出现当年所谓的“兵败汉城”。体育赛场上永远没有常胜将军,成绩高低起伏也完全是正常现象,有问题及时总结改进,大可不必上纲上线,更淡定一些,给我们的队伍、教练员、运动员更多时间,他们会用智慧去解决“成长的烦恼”。

二、“娱乐化个性化”与“封闭化军事化”是不可调和的矛盾?

此次奥运会,要说谁最火,除了中国女排和郎平,当属之前不太出名的游泳运动员——

傅园慧

。极富个性化的表达迅速引爆网络,当我们对于感谢组织感谢国家这类“套路”失去兴趣的时候,傅园慧充满搞笑风格、但真情流露的话语深深打动了我们。

连国家体育总局局长刘鹏在点评中国代表团时,都不得不提及她:“傅园慧创造了个人最好成绩并获得奖牌,她在赛后的采访时那种发自内心的激动和欣喜正是对享受体育运动、超越自我、追求卓越的奥林匹克精神最好的诠释,是体育运动中最能感染和打动人心的一种力量。”

当然,作为国民老公——

宁泽涛

,在依然作为焦点人物的同时,差强人意的表现也验证了各种风波对于训练的影响。这个时代,体育明星就是娱乐明星,体育明星身上有着巨大的商业价值,怎样平衡专注训练和商业活动之间的矛盾,更深一层来说,市场经济占主导的社会运作和仍旧包办管理的专业化训练体制的矛盾如何解决,仍然值得我们智慧地思考。

菲尔普斯、博尔特等顶级巨星如何与赞助商合作,确保奥运最后一年备战等经验都值得我们学习,毕竟,体育明星长久地保持巅峰水平才能实现个人、国家、商业等利益最大化。

三、举国体制是功是过?

每逢奥运会,举国体制都是大家热议的焦点。用体育总局官员的话来说:“举国体制下,输了,大家要骂娘,说拿了钱花了资源,还取得不了成绩,赢了,也挨骂,说再多的金牌也换不来全民健康素质的提升”,也有人说英国此次奥运会的成功,是借鉴了中国的举国体制,这样的说法大概是自做多情了,国情的不同,决定了各自国家不会照搬别国的做法,即使是英国,能否将此次奥运会的优异表现延续到东京奥运会尚不得而知。

市场经济条件下,许多项目如足球篮球几乎已经完全职业化,基本不需举国体制支持,而很多项目仍然需要国家支持,这就是现实。即使项目不普及,也能集合少数人完成壮举这是举国体制优势的体现,那么项目普及后,是否就一定能带来成绩提升呢?总体应该是这样的,但也不绝对。

四、职业化背的那些黑锅

在我们讨论女排、女足奋力拼搏的时候,往往就会以姑娘们收入如何如何低,条件如何如何差来反衬男篮、男足的“不思进取”,大有应该劫富济贫的味道。

这样的观点其实已经过时,职业化带来的高收入恰恰是我们乐于看到的,让艰苦付出的运动员得到更好地回报又有什么不好呢,何况还是市场买单,而非纳税人买单,某些项目职业化开展较好跟项目本身属性有关,职业化也并不意味着拼搏精神的丧失。

中国男篮此次奥运会场场皆负,总体属于技不如人,但就此以缺乏拼搏精神打压运动员,显得不够客观,

职业化没有带来竞技水平的提升才是我们要去思考的问题

,因此,有些黑锅不该职业化背。不是职业化使得拼搏精神丧失,而是职业化还进行得不够彻底。

五、体育能让政治走开吗

顾拜旦设立的现代奥运,初衷就是要让奥运成为传递友谊和进步的使者,奥运要让政治走开,让战争走开!但政治似乎从来也没有离开过奥运会。里约奥运会俄罗斯田径队被整体禁赛,甚至即将开始的残奥会,俄罗斯残奥代表团也被整体禁赛,俄罗斯人是疯了吗?让残疾人集体服药?一时间,阴谋论硝烟四起。

就中国队而言,在举重、体操、田径、拳击等项目也似乎饱受裁判判罚影响。有人说是中国被黑,体育比赛就是政治比拼,也有人说是技不如人找借口,官方说法是争夺更多话语权。总而言之,奥运并非天神,政治也不是恶魔。政治与奥运一直难解难分。不贴标签,直面当下,我们无需回避什么。

六、为运动员创造更美好的未来

作为奥运赛场最重要的角色——运动员,我们为他们的高超表演而欢呼,为他们的胜利而欢欣鼓舞,为他们的失败而黯然神伤,这就是体育的感染力。如果这样的感染力能够变为人们的实际参与那最好不过。

但现实总是残酷的,即使女排站上最高领奖台,恐怕也难以掩盖排球参与人数的低迷和后备力量的缺乏,面对基层体校的萎缩,面对越来越多家长更愿意让孩子接受系统教育,普遍不愿意让孩子走专业体育之路,我们的体育根基还扎实吗?传统体校如何变革?学校体育如何开展?学训矛盾如何化解?

其实,可能并不是家长不愿意让孩子参与体育,接受训练,而是传统体校轻文化重训练,无法培养全面发展的下一代的弊端早已被家长看穿。为运动员提供最好的教育,让体育回归教育,用体育培养更加完美的下一代是全社会的责任。

另一方面,体育热的兴起,让我们实实在在看到运动员退役后更加美好的未来,若干年前,马拉松运动员、举重运动员、自行车运动员退役几乎找不到工作,但长跑热、骑行热、crossfit综合健身的兴起,让这些项目退役运动员一下炙手可热,运动员退役不再是没有技能,没有文化的“废人”,良好的基本文化素养加之无可比拟的运动技能让他们成为市场紧缺人才。

七、奥林匹克拯救人类

体育的投入形式主要两种,一种是观赏,一种是参与。观赏是为了娱乐,参与则既是娱乐,也是为了更好地自己,体育对于健康的益处已无需强调。一个老生常谈的话题就是即使我们拿了再多的金牌,也无法改变我们快速增长的肥胖人口,也无法摘掉世界第一高血压、糖尿病大国的帽子。金牌纵然可以鼓舞民众,除了观看转播时的一时之快,大部分人应该还是该干嘛干嘛,缺乏运动吧。

如何让我们对于奥运会、对于体育的关注变成人们,特别是下一代的实际参与,在运动缺乏成为全球健康核心问题的时代,这仍然是一个巨大的课题。当然,所有责任不应该只由政府承担,近年来的马拉松热是因为政府推动的吗?是因为政府强制老百姓参与的吗?显然不是,大众运动意识的觉醒、跑步相对低的门槛成为马拉松热最直接的推动力,但激励大众、为大众营造更好地运动环境,创造更好的运动条件,是政府的责任。面对运动缺乏,面对肥胖,面对慢性病,奥林匹克可以拯救人类。

八、总结

奥运会四年一次,让我们等得太久,但奥林匹克精神一直试图鼓舞着我们积极投身运动,如果中国人都热爱运动,金牌的获得和全民健康素质的提升会不会皆大欢喜呢?

奥运会结束,中国代表队奖牌榜大概排第几?

2024巴黎奥运会中国金牌能达到第一么?

绝对有希望,就看体育总局敢不敢领下这个指标了。

美国在奥运赛场上直接面对的对手并不是中国,而是和他有着高优势项目重合度的其它西方国家和俄罗斯。换而言之,中美间的此消彼长不在于双方向对方优势项目上的渗透,而是美国能不能守住自己基本盘(游泳、田径、大球),以及中国能否在自己的基本盘(乒乓球跳水举重射击)之外开辟出新的夺金大项。

美国12年伦敦,16年里约能拿到46块金牌是因为有菲尔普斯和拜尔斯这两个夺金大户,只要巴黎奥运周期内,美国没有出现这种天才型运动员,美国金牌数量也就在35-40块上下,和本届东京及冷战后除美国主场外几届奥运会基本一致。

美国在游泳和田径上的统治力正受到来自澳大利亚和欧洲国家(归化黑人)的冲击,而澳洲和欧洲看到狙击战略相当有效,必然会加大该类项目的投入,在后续的奥运中继续给美国带来更多的压力。更重要的一点,下届巴黎奥运会欧洲是主场,欧洲国家在田径赛场上预期会有更好的表现。

当然受级别合并缩减影响,下届奥运会中国在举重项目上可能不能再获得今年一样的成绩;在跳水、乒乓球等项目上将继续保持统治力;羽毛球、体操预期和本届表现差别不会很大;射击新增男女混合项目会继续成为我方优势项目;交手(搏击)类项目受本次失利影响,下届会有所爆发;今年田径、游泳表现符合预期,但有运气因素,估计下届并不会有更好的表现。

中国队新增夺金关键是赛艇、皮划艇等水上项目,本届赛艇、皮划艇均有金牌和奖牌入账,多项比赛进入决赛,证明该项目上只要训练得当,相较田径和游泳这些有较长学习、培养、选拔周期的项目,会是我们未来更有可能丰收的新的夺金点。

从目前来看,如果下届我们能在守住自己基本盘的基础上,在水上项目(赛艇、皮划艇)以及交手格斗类项目上实现突破,大概率能将金牌上限提升到40-45枚左右。

只要我们的政策往冲击奖牌榜第一的方向上制定,必然有希望能拿到第一。伦敦38金,里约26金,东京又回到38金,就证明我们这个体制(不管你认为他好还是不好)弹性极大,如果上头定下要拿奖牌榜第一的指标,大概率也能取得比这届更好的成绩。

(不信的话我们可以看看明年冬奥会中国能拿到几块金牌,上届平昌只拿到1枚,仲文同志可是想在北京拿到12枚)

说白了,奥运会金牌奖牌用钱是可以砸出来的,英国在96年亚特兰大失利后(仅获一枚金牌),通过体育彩票拨款支持远动员生活训练,很快就保持稳定在奖牌榜前五的水平了。澳大利亚在76年蒙特利尔0金羞辱后,转型举国体制,高薪供养运动员,现在每届也都能保证15金左右了。更不用说冷战期间的苏东国家和现在的古巴,开足马力超负荷运行体制机器,个顶个压着西方国家。

这次直到最后一天才被美国反超,我相信总局领导也没想到,以前是不敢想在境外能拿第一,现在应该是想不想在境外拿第一了。

总之一句话,只要体育总局愿意领指标,人大愿意给钱,就有很大的希望拿第一。关键是拿这个第一有什么用?不用说苏联了,就是东德区区一千多万人口,冷战期间几次力压美国,现在不都没了吗。

我觉得除非是出于地缘政治需要,例如中美彻底脱钩走向对抗,为了进一步提升国际地位,去争一争第一是有必要的;如果没有这方面的需求,坐二望一就足够了,毕竟我们的全民健身还没有成为文化,就算拿到第一了,心里也不踏实。

==================================

更新:

有很多朋友提到了会不会是时差和疫情的因素导致了这次美国表现不如前几届,这些因素肯定是有的,但美国在各个项目上丢的金牌大多数都是被同样疫情严重的欧洲国家抢去了,下届奥运会在巴黎举办,Reddit上有些美国人也认为等于他们的半个主场,但是对于欧洲国家来说,那就是0时差的主场啊!谁更有优势?至于游泳项目上,特别是女子项目,澳洲的00后蒂特姆斯和麦基翁是新的霸主,美国的莱德基已是昨日黄花,下届奥运预期美国女队将继续面临这种青黄不接的状态。

“数”说奥运,盘点历届奥运会奖牌,参赛国家、运动员获奖等情况

从年,希腊雅典举行的第一届现代奥运会,到今天即将要开幕的,年第32届东京夏季奥林匹克运动会,中间的31届奥运会,你知道都有哪些国家参与吗?你知道共产生了多少枚奖牌吗?你知道一共有多少运动员吗?你知道哪些运动员获得的奖牌最多吗?你知道。。。今天,给大家盘点回顾一下历届奥运会的“数”。

1.历届奥运会(以下均指年-年之间举办的31届奥运会)中,参赛超过20届的国家有36个。

参加次数超过20的国家

2.历届奥运会中,单届奥运会参赛国家数最多的是里约奥运会和伦敦奥运会,都是205个国家参与。人数最多的一届的是北京奥运会的8人。设置金牌数最多的是里约奥运会的307枚,设置项目最多的也是里约奥运会大项28项,小项306项。

历届参赛国家运动员等数量情况

3.历届奥运会金牌总数获得排名前10的国家。历届奥运会金牌数进前10的国家,次数超过10次的有9个,分别是美国27次、意大利22次、法国21次、匈牙利19次、德国18次、英国18次、澳大利亚16次、日本13次、瑞典10次。

历届奥运会金牌获得排名前10的国家

4.历届奥运会,所有运动员获得奖牌总数排名情况中,美国游泳运动员菲尔普斯以28枚奖牌,高居首位。

运动员奖牌总数排名前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、数据动态排序。(本篇文章)

因为奥运数据连续性较差,如果我们分析一些连续性强的数据,如各国人口数据,动态排序的效果会好很多。

最全的历年奥运会金牌排行榜汇总

年夏季奥林匹克运动会,是第一届现代奥林匹克运动会,也是自罗马帝国皇帝狄奥多西一世在公元393年废除古代奥运会以来的首届奥运会,至今刚好满120年。

在过去的30届奥运会中,每一届前10名的国家有哪些,分别获得了多少金牌?稳赚理财助手为您列出了最全的奥运会金牌名单,跨度120年哦~

历届奥运奖牌榜前十,体育强国继续霸榜,荷兰取代韩国入榜

历届奥运奖牌榜前十,体育强国继续霸榜,荷兰取代韩国入榜。

年东京奥运会圆满落幕,中国奥运代表团表现出色,排在奖牌榜第二位,在奥运比赛日最后一天被美国反超。本届奥运会中国奥运代表团获得了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届奥运会奖牌榜前十的情况来看,体育强国之间的竞争越来越强烈了,尤其是前三名之间的争夺,反复换位。根据目前的形式和发展来看,未来一段时间中美之间争夺奖牌榜第一名将长期存在。而前十名还是以:中国、美国、俄罗斯、英国、德国、法国、日本、意大利、澳大利亚、韩国、荷兰等体育强国为主。从本届奥运会来看,韩国的滑落或许与日本的紧张关系有关,或许与他们的优势项目有关,但是荷兰的崛起应该不是偶然现象,他们在将来可能继续竞争奥运奖牌榜前十。

奥与会秉承更快、更高、更强、更团结的口号,希望把这种精神保持下去,让各国选手在公平的环境下进行比赛,这样才能更好地把奥运精神延续下去,我们不希望看到为了获得更多的金牌而有失公平。

“数”说奥运,盘点历届奥运会奖牌,参赛国家、运动员获奖等情况

从年,希腊雅典举行的第一届现代奥运会,到今天即将要开幕的,年第32届东京夏季奥林匹克运动会,中间的31届奥运会,你知道都有哪些国家参与吗?你知道共产生了多少枚奖牌吗?你知道一共有多少运动员吗?你知道哪些运动员获得的奖牌最多吗?你知道。。。今天,给大家盘点回顾一下历届奥运会的“数”。

1.历届奥运会(以下均指年-年之间举办的31届奥运会)中,参赛超过20届的国家有36个。

参加次数超过20的国家

2.历届奥运会中,单届奥运会参赛国家数最多的是里约奥运会和伦敦奥运会,都是205个国家参与。人数最多的一届的是北京奥运会的8人。设置金牌数最多的是里约奥运会的307枚,设置项目最多的也是里约奥运会大项28项,小项306项。

历届参赛国家运动员等数量情况

3.历届奥运会金牌总数获得排名前10的国家。历届奥运会金牌数进前10的国家,次数超过10次的有9个,分别是美国27次、意大利22次、法国21次、匈牙利19次、德国18次、英国18次、澳大利亚16次、日本13次、瑞典10次。

历届奥运会金牌获得排名前10的国家

4.历届奥运会,所有运动员获得奖牌总数排名情况中,美国游泳运动员菲尔普斯以28枚奖牌,高居首位。

运动员奖牌总数排名前0情况

期待本届奥运会,选手们再创佳绩。