本文读取了120年奥运会所有参赛纪录和比赛结果的数据源,从五个不同的方面解读出一些有趣的信息,适合对数据分析有兴趣的盆友阅读。

作者 | 倪家禹

责编 | 郭芮

2018年雅加达亚运会转眼闭幕了,中国代表队以132枚金牌、289枚奖牌的绝对优势,一骑绝尘,独领风骚,毫无悬念地再次霸占了金牌榜和奖牌榜首位。既然,区区亚洲已经阻止不了中国队收割奖牌的步伐,那么我们这回放眼世界,来研究一下奥运会吧。

这次的数据来自于Kaggle,一份涵盖120年奥运会所有参赛记录和比赛结果的数据,十分完整。我想通过这份数据,发现一些有趣的东西。

# -*- coding: utf-8 -*-

import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsimport warningswarnings.filterwarnings('ignore') from pyecharts import Barfrom pyecharts import Linefrom pyecharts import Polarfrom pyecharts import Overlapfrom pylab import mpl

mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体mpl.rcParams['axes.unicode_minus'] =False

#数据读入data = pd.read_csv('./athlete_events.csv',engine='python')data_mapping = pd.read_csv('./noc_regions.csv',engine='python')

#数据清洗data_extract = pd.merge(data,data_mapping,how = 'left',                        left_on = 'NOC',right_on = 'NOC')del data_extract['notes']data_extract = data_extract[data_extract['Season'] == 'Summer']del data_extract['Season']

哪些国家站在奥运之巅?

由于百年来历史、政治、战争等因素,数据会略有出入

#得牌最多的国家#金牌data_gold = data_extract[data_extract['Medal'] == 'Gold']\                    [['Games','region','Event','Medal']].drop_duplicates().\                    groupby('region').count()['Medal'].to_frame().\                    sort_values(by='Medal',ascending=False)

x1 = data_gold.index.tolist()[0:10]y1 = data_gold.Medal.tolist()[0:10]bar = Bar('奥运总金牌榜') #参数分别为标题和副标题bar.add('金牌数', x1, y1,label_color = ['#5CACEE'],is_label_show=True)bar.render('./图表/奥运总金牌榜.html')

上图数据统计了奥运总金牌数前十的国家。美国以1035块金牌遥遥领先,而且也是目前唯一一个金牌数超过1000枚的国家;俄罗斯以592枚次之,但俄罗斯的金牌数包括了当下与前苏联时期。金牌榜前五的其他国家——德国、英国、法国均在世界近现代历史上辉煌过或者仍然辉煌的国家。看来国家实力同样很大程度上影响了体育实力。

再来看看中国,以228枚金牌排名第6,但中国是从1984年才正式开始奥运征程的,所以从这点看,中国无疑是进步最快的国家。

#奖牌data_medal = data_extract[['Games','region','Event','Medal']].drop_duplicates().\                    groupby('region').count()['Medal'].to_frame().\                    sort_values(by='Medal',ascending=False)

x2 = data_medal.index.tolist()[0:10]y2 = data_medal.Medal.tolist()[0:10]bar = Bar('奥运总奖牌榜') #参数分别为标题和副标题bar.add('奖牌数', x2, y2,label_color = ['#DC143C'],is_label_show=True)bar.render('./图表/奥运总奖牌榜.html')

奖牌榜和金牌榜的排名变化几乎不大,那些强大的一如既往的强大。中国退后了一个名次,以545枚奖牌名列第7。另外,中国、法国、英国、意大利在金牌榜中差距不大,而奖牌榜中,中国与其他三国的差距被拉大了。看来,中国在综合实力方面还有待提高呀。

1896年——2016年,四年一届的奥运会共应举办31届。由于战争、届间运动会等影响,到今天为止共有29届奥运会成功举办。那么哪些国家达成了全勤的成就呢?希腊,法国,意大利,英国,瑞士——这五个国家参加了全部29届奥运会。而中国,只参加了其中的13届,最早能追溯到1932年。后来在1958到1980年间,由于某几个众所周知的原因缺席了奥运会。1984年重回奥运舞台之后,中国就一发不可收拾地开启了崛起之路。

#各国参赛次数data_c = data_extract[['Games','NOC']].drop_duplicates()['NOC']\                    .value_counts().to_frame()data_c.columns=['count']                   data_c = pd.merge(data_c,data_mapping,how='left',left_index=True,right_on = 'NOC')print('奥运会全勤的国家为:' + str(data_c[data_c['count']==29].region.tolist()))print('中国参与了' + str(int(data_c[data_c['NOC']=='CHN']['count'])) + '次')

哪些运动员最牛?

研究完了国家,我们再来看看运动员。同样先上总金牌榜:

横轴起始有调整,下同

#哪些奥运选手得牌最多#金牌data_person_gold = data_extract[data_extract['Medal'] == 'Gold']\                    [['Name','Medal']].groupby\                    ('Name').count()['Medal'].to_frame().\                    sort_values(by='Medal',ascending=False)

x3 = data_person_gold.index.tolist()[0:11]y3 = data_person_gold.Medal.tolist()[0:11]bar = Bar('奥运个人金牌榜',width=1800,height=850) #参数分别为标题和副标题bar.add('金牌数', x3, y3,label_color = ['#68228B'],is_label_show=True,        yaxis_rotate=55,is_convert=True,label_pos='right')bar.render('./图表/奥运个人金牌榜.html')

排名第一的是美国著名游泳运动员迈克尔·菲尔普斯,以23块金牌问鼎。对!就是那位游得飞快,但屡次因为酒驾,嗑药,赌博被停赛的那家伙。

值得一提的是排名第二位的运动员,坐拥奥运会10块金牌。名字叫雷·尤瑞。估计大家都没听过。因为年代比较久远,他参加了1900-1908年的四次奥运会,跳远选手。据说早年患上小儿麻痹症,终日需要轮椅活动,最后获得了10次奥运冠军。这真是一个励志的故事!

继续看奖牌榜:

#奖牌data_person_medal = data_extract[['Name','Medal']].groupby\                    ('Name').count()['Medal'].to_frame().\                    sort_values(by='Medal',ascending=False)

x4 = data_person_medal.index.tolist()[0:11]y4 = data_person_medal.Medal.tolist()[0:11]bar = Bar('奥运个人奖牌榜',width=1800,height=850) #参数分别为标题和副标题bar.add('奖牌数', x4, y4,label_color = ['#EEDC82'],is_label_show=True,        yaxis_rotate=55,is_convert=True,label_pos='right')bar.render('./图表/奥运个人奖牌榜.html')

研究了一下,这些摘牌最多的运动员,绝大多数都是田径和游泳两大领域的。那么是不是田径和游泳是制霸奥运的关键?这个我们稍后研究。

#奥运会参与次数最多data_person_max = data_extract[['Games','Name']].drop_duplicates()\                    .groupby('Name')['Games'].count().to_frame().\                    sort_values(by='Games',ascending=False)print('参加奥运最多的选手为:' + str(data_person_max.Games.index[0]))

#年龄最大的运动员data_age_max = data_extract[['Name','Sport','Age','Year']].drop_duplicates().\sort_values(by='Age',ascending=False)print(data_age_max[data_age_max['Sport']!='Art Competitions'][0:2])

其中年龄最大的运动员,72岁仍参赛。

  • Oscar Swahn:瑞典射击运动员,参加1920年比利时安特卫普奥运会,成为奥运历史上参赛年龄最大的运动员。获得过3金,1银,1铜。

  • Arthur von Pongracz:1936年参加柏林奥运会时,同样72岁,项目是花样骑术。

得田泳者是否得奥运?

我们取近五届奥运会金牌榜霸主美、中、俄三国的数据,分析在每个国家夺得的金牌数中,田泳项目占比有多高。

#田径和游泳是否决定奥运会成绩data_gold_all = data_extract[data_extract['Medal'] == 'Gold'][['Year','Event','Medal']]\                        .drop_duplicates().groupby('Year').count().reset_index()del data_gold_all['Event']data_gold_all.columns = ['Year','Medal_all']data_gold_country_cat = data_extract[data_extract['Medal'] == 'Gold'][['Year','region','Event','Medal']]\                        .drop_duplicates().groupby(['Year','region']).count().reset_index()del data_gold_country_cat['Event']

data_gold_together = pd.merge(data_gold_country_cat,data_gold_all,how = 'left',                              left_on = 'Year',right_on = 'Year')

data_gold_country_cat = data_extract[data_extract['Medal'] == 'Gold']\                        [data_extract['Sport'].isin(['Athletics','Swimming'])]\                                [['Year','region','Event','Medal']]\            .drop_duplicates().groupby(['Year','region']).count().reset_index()                del data_gold_country_cat['Event']data_gold_country_cat.columns = ['Year','region','Medal_AS']

data_gold_together = pd.merge(data_gold_together,data_gold_country_cat,                              how = 'left',on = ['Year','region'])data_gold_together = data_gold_together.fillna(0)data_gold_together['Medal_other'] = data_gold_together['Medal'] - data_gold_together['Medal_AS']data_gold_together['Medal_AS_per'] = data_gold_together['Medal_AS']/data_gold_together['Medal']data_gold_together2 = data_gold_together[data_gold_together['region'].isin(['USA','China','Russia'])]data_gold_together2 = data_gold_together[data_gold_together['Year'] >=2000]

year = data_gold_together2.Year.unique().tolist()v_p_usa = data_gold_together2[data_gold_together2['region'] =='USA'].Medal_AS_per.tolist()v_p_china = data_gold_together2[data_gold_together2['region'] =='China'].Medal_AS_per.tolist()v_p_russia = data_gold_together2[data_gold_together2['region'] =='Russia'].Medal_AS_per.tolist()

line = Line("近五届奥运会田泳项目金牌占比",'取美,中,俄三国',width=800)line.add("美国", year, v_p_usa)line.add("中国", year, v_p_china)line.add("俄罗斯", year, v_p_russia)line.render('./图表/各国近五届奥运会田泳项目金牌占比.html')

果然,美国队田泳项目占其金牌总数的60%左右。而俄罗斯,其田泳项目对金牌数的贡献逐届增加,至于2016年的“零”!那是因为被禁赛了。至于中国,从往届来看貌似田泳向来不是强项。结果说明,田泳项目由于奖牌产量大,确实对总成绩有不小的贡献。但也并不是绝对,奥运会毕竟是一个综合性的体育比赛。

主场优势真的存在吗?

这里取近9届奥运会主办国的表现来观察。统计其主办届及前后两届,共三次奥运会的金牌数:

#主场优势真的存在吗data_home_dict = {        '中国':[32,51,38],        '英国':[19,29,27],        '澳大利亚':[9,16,17],        '希腊':[4,6,0],        '美国(亚特兰大)':[37,44,37],        '西班牙':[1,13,5],        '韩国':[6,12,12],        '美国(洛杉矶)':[0,83,36],        '苏联':[49,80,0]        }data_home = pd.DataFrame(data_home_dict,index=['前一届','当届','后一届'])\                        .T.stack().reset_index()data_home.columns = ['国家','届','金牌数']

g = sns.FacetGrid(data_home, col="国家", col_wrap=3,   # 设置每行的图表数量                  size=2.5,    # 图表大小                  aspect=1.2,sharex=False)g.map(plt.plot, "届", "金牌数",       marker="o",linewidth = 2,color='orange')# 绘制图表矩阵g.set(xlim = (-1,3),      ylim = (0,85),      xticks = [0,1,2,3,4],      xticklabels = ["前一届", "当届","后一届"],      yticks = [0,20,40,60,80],      )# 图表设置g.add_legend()  # 图例plt.savefig('./图表/主场优势真的存在吗.png',dpi=400)plt.show()

折线图呈现中间高过两边的三角形,说明作为东道主成绩确实好过以往,甚至有的有超过50%的提升。所以,主场优势是真的存在的。

题外话:第五、第六张图,出现了两个数据为0的极端值。然后我发现主办国是美国和苏联。呵呵~我的历史老师告诉我,当初两个国家在冷战,而期间,双方又各举办了一届奥运会,对方的奥运会当然是不可能去捧场的……

中国的奥运会足迹

#中国奥运得牌数量变迁史data_china = data_extract[data_extract['region']=='China']\[['Year','region','Event','Medal']].drop_duplicates()\                [['Year','region','Medal']]data_china.dropna(inplace=True)

data_china = data_china.groupby(['Year','Medal']).count()['region'].reset_index()

attr = data_china.Year.unique().tolist()g = data_china[data_china['Medal']=='Gold'].region.tolist()s = data_china[data_china['Medal']=='Silver'].region.tolist()b = data_china[data_china['Medal']=='Bronze'].region.tolist()

bar = Bar("中国奥运成绩变迁史")bar.add("铜牌", attr, b, is_stack=True,label_color = ['#EEB422'])bar.add("银牌", attr, s, is_stack=True,label_color = ['#969696'])bar.add("金牌", attr, g, is_stack=True,label_color = ['#8B5742'])line = Line('中国奥运成绩变迁史')line.add('金牌',attr, g, is_smooth=True,mark_point=["max"])line.add('银牌',attr, s, is_smooth=True,mark_point=["max"])line.add('铜牌',attr, b, is_smooth=True,mark_point=["max"])overlap = Overlap()overlap.add(bar)overlap.add(line)overlap.render('./图表/中国奥运成绩变迁史.html')

从1984年首次参赛以来一直在进步。巅峰为2008年北京奥运会,坐拥主场,获得了100枚奖牌。在2016年,出现了明显的滑铁卢,主要是金牌方面。

有些项目一直以来都是中国摘金夺银的有力保障,我们把这些强势项目的团队称之为“梦之队”。我们来看看中国有哪些“梦之队”。

下图分别统计金牌数和奖牌数:

#中国有哪些强势项目data_china_dt = data_extract[data_extract['region']=='China']\    [['Year','region','Sport','Event','Medal']].drop_duplicates()\    [['Year','Sport','Medal']]data_china_dt = data_china_dt[data_china_dt['Medal'] == 'Gold']data_china_dt = data_china_dt.groupby(['Year','Sport']).count()['Medal'].reset_index()

data_china_dt_all = pd.DataFrame(columns=data_china_dt['Year'].unique().tolist(),                                 index=data_china_dt.Sport.unique().tolist())

for st in data_china_dt['Year'].unique().tolist():    for i in data_china_dt[data_china_dt['Year'] == st][['Sport','Medal']].iterrows():        data_china_dt_all[st][i[1][0]] = i[1][1]data_china_dt_all.fillna(0,inplace=True)

radius =data_china_dt_all.index.tolist()polar = Polar('中国奥运强势项目', width=1200, height=800)for r in data_china_dt_all.columns.tolist():    num = data_china_dt_all[r].tolist()    polar.add(str(r),num, radius_data=radius,type='barAngle', is_stack=True)polar.render('./图表/中国奥运强势项目(金牌).html')

data_china_dt = data_extract[data_extract['region']=='China']\    [['Year','region','Sport','Event','Medal']].drop_duplicates()\    [['Year','Sport','Medal']]#data_china_dt = data_china_dt[data_china_dt['Medal'] == 'Gold']data_china_dt = data_china_dt.groupby(['Year','Sport']).count()['Medal'].reset_index()

data_china_dt_all = pd.DataFrame(columns=data_china_dt['Year'].unique().tolist(),                                 index=data_china_dt.Sport.unique().tolist())

for st in data_china_dt['Year'].unique().tolist():    for i in data_china_dt[data_china_dt['Year'] == st][['Sport','Medal']].iterrows():        data_china_dt_all[st][i[1][0]] = i[1][1]data_china_dt_all.fillna(0,inplace=True)

radius =data_china_dt_all.index.tolist()polar = Polar('中国奥运强势项目', width=1600, height=1000)for r in data_china_dt_all.columns.tolist():    num = data_china_dt_all[r].tolist()    polar.add(str(r),num, radius_data=radius,type='barAngle', is_stack=True)polar.render('./图表/中国奥运强势项目(奖牌).html')

最强大的无疑是中国跳水梦之队,几乎可以摘得每届奥运会所有的金银牌,而跳水运动项目又十分多。其次,乒乓球,这个项目同样天下无敌,可惜项目少了点,所以奖牌也少了点。同样还有体操,射击,举重等,中国都曾不同程度地制霸赛场。所以,相比于老牌强队专注于田泳,中国的奥运之路乃是遍地开花,而且哪怕是田径和游泳,目前也走上了崛起之路。

我们相信在不久的将来,中国终将会站上奥运之巅,睥睨天下。

作者:数据侠倪家禹,城市数据团特约撰稿人,数据分析师(python)微专业学员,喜欢用数据挖掘生活中的小秘密。对数据研究有着敏锐的洞察力,善于把复杂的问题简单化,简单的问题流程化。希望大家通过数据感受生活的魅力。

声明:本文为公众号数据团学社投稿,版权归对方所有。

苹果手机的微信改版了,

想快速看到CSDN的热乎文章,

赶快把CSDN公众号设为星标吧,

打开公众号,点击“设为星标”就可以啦!

安卓手机的用户,

点击公众号右上角小人,就可以置顶啦。

推荐阅读:

  • @程序员,拒绝无聊的代码面试!

  • 继中美之后,欧盟会成为下一个 AI 超级体吗?

  • 这届程序员,要做好苦日子的准备了?

  • C# 翻身?微软重写开源的 C# 编译器!

  • 爬取去哪儿网 6000 多个景点数据告诉你,国庆哪里不是人山人海!

  • 为什么我放弃了 Chrome?

  • Skr!如何用 Python 爬取中国新说唱热门歌曲?

  • 开源社区该面对现实了!

2018 AI开发者大会

只讲技术,拒绝空谈

2018 AI开发者大会首轮重磅嘉宾及深度议题现已火热出炉,扫码抢“鲜”看。国庆特惠,购票立享 折优惠!

点击“阅读原文”,也可立即报名。

分析 120 年的 Kaggle 数据,中国何时站上奥运之巅?相关推荐

  1. 基于Kaggle数据的词袋模型文本分类教程

     基于Kaggle数据的词袋模型文本分类教程 发表于23小时前| 454次阅读| 来源FastML| 0 条评论| 作者Zygmunt Z 词袋模型文本分类word2vecn-gram机器学习 w ...

  2. 机器学习从零开始-Kaggle数据用PurePython实战

    数据集链接 链接:https://pan.baidu.com/s/1hK-eTBgkLL7ZQuWCKqyvNA 提取码:fz74 线性回归 纯Python构建的经典算法实战Kaggle真实项目:红酒 ...

  3. 语言学博士、Kaggle数据分析师,她说:读研不是必选项,这4项技能学校不教

    2019独角兽企业重金招聘Python工程师标准>>> 学校里教的数据科学和实际工作中的数据科学的差距,往往让很多刚毕业踌躇满志的职场菜鸟陷入迷茫. 事实是,在学校里你可以把模型做得 ...

  4. 至少12亿元收支差,分析运营商7大数据产品应用

    本文不讨论运营商在大数据的应用上暂时的颓势,也不评击其拥有金库却见不着有数的着的商业模式.或许是因为运营商们探索时间起步较晚:也可能由于运营商对于如何开放用户数据还没想明白:又或者是历史遗留的用户数据 ...

  5. 数据可视化和可视化分析:你能看到数据世界

    看了很多介绍数据可视化的文章,但是解释的可能都比较片面,数据可视化的用途在于辅助数据分析,那么数据可视化和可视化分析又具体是什么? 在一个日益以数据为主导的世界中,各种各样的用户正在以多种方式收集数据 ...

  6. python地铁车票_Python分析3034个地铁站,发现中国地铁名字的秘密。

    原标题:Python分析3034个地铁站,发现中国地铁名字的秘密. 最近看了新周刊的一篇推送,有关地铁名字的分析,链接如下. 我们分析了3447个地铁站,发现了中国城市地名的秘密 于是乎也想着自己去获 ...

  7. 盘点分析 | 2021第一季度国内外重大数据泄漏事件

    盘点分析 | 2021第一季度国内外重大数据泄漏事件 国内 01 超10万条学生信息被泄露 广东珠海有10万余条中小学生个人信息已经被非法泄露.近日,珠海网警在"净网2021"专项 ...

  8. tableau实战案例-分析120个国家和地区的自杀率情况

    做数据分析,避免不了的要做可视化展示,这次就讲解一下如何通过tableau制作一份可视化图表,来分析一些问题. 需要的工具:excel.tableau public(就是免费版) 需要的技能:数据清洗 ...

  9. 5W1H(六何分析法)全景洞察大数据

    大数据是什么? 这是一个很大的话题,大数据特点总结起来大约有5个,大量.高速.多样.价值.真实性.笔者也只能根据自己的看法,阐述一二. 大量,根据 中投顾问的数据,最近几年的数据增长为100%-200 ...

最新文章

  1. TensorFlow 实现分类操作的函数学习
  2. vector机器人 HOW TO RESET, ERASE AND RESTORE VECTOR 如何重置,删除和恢复向量
  3. 浅析如何让企业网站实现精准营销?
  4. 【Android 应用开发】Android 图表绘制 achartengine 示例解析
  5. android studio 写文件,在Android Studio中从我自己的类读取和写入文本文件
  6. 鸿蒙系统开发者如何加入,鸿蒙开发实战系列之五:鸿蒙系统原生数据库
  7. 利用深度学习识别滑动验证码缺口位置
  8. master节点重置后添加node报错_超强教程!在树莓派上构建多节点K8S集群!
  9. 京沪等地11月房价半年来首涨 平价走量将成主流
  10. 《智能优化算法及其MATLAB实现》书籍出版啦
  11. 为什么边缘概率密度是联合概率密度的积分_5.27005柏林联合VS美因茨
  12. 【T+】win10/win11系统安装畅捷通T+Cloud专属云18.0
  13. Android 直播调研
  14. 运维监控系列(4)-Prometheus控制台功能详解
  15. Autel Maxisys Elite Common FAQs
  16. Java堆:Shallow Size和Retained Size
  17. 来自首次Ray聚会的记录
  18. Qt5实现可配置截图及基于百度OCR自动识别标题保存文件
  19. cmmi实践访谈测试ppt_CMMI模型基础知识考试试题-(标准答案).xls
  20. Drynx: 基于区块链的去中心化隐私保护机器学习系统

热门文章

  1. 新机发布会用鸿蒙吗,鸿蒙操作系统及华为全场景新品发布会即将到来,硬件生态发展有望迎来加速度...
  2. 记录——《C Primer Plus (第五版)》第七章编程练习第六题
  3. 2018级C语言大作业 - 坦克动荡
  4. Vue+Webpack使用规范
  5. 开放下载!2021 解锁 Serverless 从入门到实战大“橙”就
  6. linux 网站获取数据失败,AnyBackup-Linux 环境下 Sybase 授权数据库实例时,提示错误:获取实例失败...
  7. SQL注入学习part05:(结合sqli-libs学习:41-50关)
  8. AI科学计算领域的再突破,昇思MindSpore做“基石”的决心有多强?
  9. 谷歌:开源捐赠需分成,否则下架!
  10. 字节跳动 CEO 张楠谈遭微信封禁;传蚂蚁集团将重组 ;Apache ECharts 5 发布| 极客头条...