主要探索分析奥运会的热门体育项目、得金牌数最多的国家,夏季冬季不同性别的参赛运动员的年龄,以及中国的在奥运会上的表现等问题。

项目链接,欢迎一键fork运行

目录

1. 导入包+基本的数据处理

2. 生成奥运会运动项目的词云(Word Cloud)

3. 查看参赛者的男女基本信息

3.1. 120年来参赛者的男女比例

3.2. 查看参赛者的男性与女性的年龄分布

3.3. 查看1896-2014年男女参赛者的平均年龄变化

3.4. 查看120年来 夏季 奥运会获奖运动员不同性别的平均年龄变化

3.5. 查看120年来❄️冬季❄️奥运会获奖运动员不同性别的平均年龄变化

4. 在120年来Top 20 得金牌最多的国家

5. 最热门 的体育项目

6. 中国 奥运会Performance

6.1. 中国历届奥运会运动员获得奖牌人数

6.2. Top 10 中国 的强项运动项目

1. 导入包+基本的数据处理

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

from plotly.offline import iplot

from plotly.graph_objs import *

import colorlover as cl

import seaborn as sns

color = sns.color_palette()

f_p = '/home/kesci/input/olympic/athlete_events.csv'

athlete_events = pd.read_csv(f_p)

#查看dataframe的前四行数数据

athlete_events.head(4)

athlete_events.index.size

#查看数据中各个字段的空值的个数

athlete_events.isnull().sum()

#查看列名及其数值类型

athlete_events.info()

athlete_events.describe()

信息中显示历届奥运会的运动员平均年龄在25-26岁,平均身高175cm,平均体重70.7kg

2. 生成奥运会运动项目的词云(Word Cloud)

kindsport = set()

for m in athlete_events.Sport:

kindsport.update(g for g in m.split('\n'))

print(kindsport)

from wordcloud import WordCloud

wc = WordCloud(

background_color='white',

width=1200,

height=700,

max_words=3000,

random_state=200,

min_font_size=35,

max_font_size=80

)

wc.generate(",".join(kindsport))

plt.imshow(wc, interpolation="bilinear")

plt.axis("off")

plt.show()

3. 查看参赛者的男女基本信息

3.1 120年来参赛者的男女比例

fig = {

"data":[{

"values":athlete_events['Sex'].value_counts(),

"labels":['男性','女性',],

"marker":{'colors':cl.scales['4']['div']['PuOr']},

"name":"参赛者的男女比例",

"hoverinfo":"label+percent+name",

"hole":.4,

"type":"pie"

}],"layout":{"title":"参赛者的男女比例"}

}

iplot(fig,filename='donut')

3.2 查看参赛者的男性与女性的年龄分布

y_f = athlete_events[athlete_events['Sex'] == 'F'].Age

y_m = athlete_events[athlete_events['Sex'] == 'M'].Age

trace_0 = Box(y = y_m,name="男性年龄分布")

trace_1 = Box(y = y_f,name="女性年龄分布")

data = [trace_0,trace_1]

layout = Layout(title = '参赛者不同性别的年龄分布')

fig = Figure(data = data,layout = layout)

iplot(fig)

将光标置于图中的年龄分布,可以看到

男性年龄中数是25岁,最小年龄为10岁,最大年龄是97岁(厉害了我的哥),上限年龄是39岁,下限年龄是12岁

女性年龄中数是23岁,最小年龄为11岁,最大年龄为74岁,上限年龄是37岁,下限年龄是11岁

超出上限与下限的在箱线图中都视为异常值,男性与女性的年龄异常值都集中在较大值一侧,毕竟小于10岁就要出道那怕是要从妈妈肚子里开始练吧。

3.3. 查看1896-2014年男女参赛者的平均年龄变化

year_mean_age_f = athlete_events[athlete_events['Sex'] == 'F'].groupby(by = ['Year']).Age.agg('mean').reset_index(name = "average_age")

year_mean_age_m = athlete_events[athlete_events['Sex'] == 'M'].groupby(by = ['Year']).Age.agg('mean').reset_index(name = "average_age")

y_age_f = year_mean_age_f.average_age

y_age_m = year_mean_age_m.average_age

time_f = year_mean_age_f.Year

time_m = year_mean_age_m.Year

trace1 = Scatter(x = time_f,y = y_age_f)

trace2 = Scatter(x = time_m,y = y_age_m)

data = [trace1, trace2]

layout = Layout(title = '历年男性女性参赛选手的平均年龄变化')

fig = Figure(data = data,layout = layout)

iplot(fig)

3.4. 查看120年来 夏季 奥运会获奖运动员不同性别的平均年龄变化

year_medal_age_f = athlete_events[(athlete_events.Season == 'Summer')

& (athlete_events['Sex'] == 'F')

& (athlete_events['Medal'].notnull())

].groupby(by = ['Year']).Age.agg('mean').reset_index(name = "average_age")

year_meadl_age_m = athlete_events[(athlete_events.Season == 'Summer')

& (athlete_events['Sex'] == 'M')

& (athlete_events['Medal'].notnull())

].groupby(by = ['Year']).Age.agg('mean').reset_index(name = "average_age")

trace0 = Scatter(x = year_medal_age_f.Year,y = year_medal_age_f.average_age,name = "获奖女性")

trace1 = Scatter(x = year_meadl_age_m.Year,y = year_meadl_age_m.average_age,name = "获奖男性")

data = [trace0, trace1]

layout = Layout(title = '历年夏季 奥运会获得奖牌的男性女性参赛选手的平均年龄变化')

fig = Figure(data = data,layout = layout)

iplot(fig)

获奖男性运动员的平均年龄普遍比获奖女性运动员的平均年龄大,但在近年来,年龄差距在不断缩小。

同理冬季

4. 在120年来Top 20 得金牌最多的国家

# 根据奖牌类型分组,分别计算每个国家的不同奖牌数并给予这列数值'Medal_Count'的列名。

country_medal = athlete_events.groupby(by = ['Medal']).Team.value_counts().reset_index(name = 'Medal_Count')

# 筛选出金牌类型的df,根据字段Medal_Count降序排列国家,选出前20个记录。

top20_country_medal = country_medal[country_medal.Medal == 'Gold'].sort_values(by = ['Medal_Count'],ascending=False).head(20)

trace = Bar(x = top20_country_medal.Team,y = top20_country_medal.Medal_Count,marker = dict(color = cl.scales['11']['div']['PuOr'],reversescale = True))

layout = Layout(title = 'Top 20 的金牌数 最多的国家')

data = [trace]

fig = Figure(data = data,layout = layout)

iplot(fig)

5. 最热门 的体育项目

sports = athlete_events.Sport.value_counts()

trace = Bar(x = sports.index,y = sports.values,marker = dict(color = cl.scales['11']['div']['RdYlBu'],reversescale = True))

layout = Layout(title = "最热门的体育项目")

fig = Figure(data = [trace], layout = layout)

iplot(fig)

由上图可知:田径、体操、游泳 是最热门的三项体育项目。

6. 中国奥运会Performance

china = athlete_events[athlete_events.Team == 'China']

all_medal = china[china.Medal.isin(['Gold','Silver','Bronze'])]

print('2016年获奖运动员人数:{}。'.format(all_medal[all_medal.Year == 2016].shape[0]))

6.1. 中国历届奥运会运动员获得奖牌人数

一直到1992年,冬季奥运会与夏季奥运会都是在同一年举行的。冬季奥运会是从1994年开始4年举办一次,夏季奥运会是从1996开始4年举办一次。所以在下面的柱状图 中,1992年及之前的金牌人数数据都是在一个柱状图中。

在1996年的第一次夏季奥运会上,中国队有66人获得了银牌 ,也是这么多年以来银牌获得人数最多的一届。在近几届的夏季奥运会上,中国表现的都很不错。尤其在2008年夏季北京奥运会,中国共有170名运动员获得了奖牌,其中有72人获得了金牌,49人获得了银牌、49人获得了铜牌。

china = athlete_events[athlete_events.Team == 'China']

china_medal = china.groupby(by = 'Year').Medal.value_counts().reset_index(name = "medal_count")

y0 = china_medal[china_medal.Medal == 'Gold'].medal_count

x0 = china_medal[china_medal.Medal == 'Gold'].Year

y1 = china_medal[china_medal.Medal == 'Silver'].medal_count

x1 = china_medal[china_medal.Medal == 'Silver'].Year

y2 = china_medal[china_medal.Medal == 'Bronze'].medal_count

x2 = china_medal[china_medal.Medal == 'Bronze'].Year

x = china_medal.Year

trace0 = Bar(

x = x0,

y = y0,

name = 'Gold',

text = y0,

textposition = 'auto',

marker=dict(

color='gold',

line=dict(

color='rgb(8,48,107)',

width=1.5),

),

opacity=0.6

)

trace1 = Bar(

x = x1,

y = y1,

name = 'Silver',

text = y1,

textposition = 'auto',

marker=dict(

color = 'silver',

line=dict(

color='rgb(8,48,107)',

width=1.5),

),

opacity=0.6

)

trace2 = Bar(

x = x2,

y = y2,

name = 'Bronze',

text = y2,

textposition = 'auto',

marker=dict(

color='olive',

line=dict(

color='rgb(8,48,107)',

width=1.5),

),

opacity=0.6

)

data = [trace0, trace1, trace2]

layout = Layout(

barmode='group',

width=800,

hovermode='closest',

title = '中国历届奥运会运动员获得 金牌 银牌 铜牌 的人数'

)

fig = Figure(data = data, layout = layout)

iplot(fig)

6.2. Top 10 中国的强项运动项目

# 选出中国金牌数据

china_gold = china[china.Medal == 'Gold']

# 将金牌字段值映射到1

china_gold.Medal = china_gold.Medal.map({'Gold' : 1})

#查看前四行数据

china_gold.head(4)

# 根据运动项目group,分别计算group内的值之合

china_sports = china_gold.groupby(by = 'Sport',as_index=False).Medal.agg('sum')

# 按从大到小的顺序排序

china_sports = china_sports.sort_values(['Medal'], ascending= False)

# 选出前10的运动项目

top10_china_sports = china_sports.head(10)

# 定义颜色盘

colors = ['#91BBF4', '#91F4F4', '#F79981', '#F7E781', '#C0F781','rgb(32,155,160)', 'rgb(253,93,124)', 'rgb(28,119,139)', 'rgb(182,231,235)', 'rgb(35,154,160)']

n_phase = top10_china_sports.Sport.shape[0]

plot_width = 200 # 绘制宽度

section_h = 100 # section的高度

section_d = 15 # sections之间的间隔

# 用来计算其他section的宽度的乘系数

unit_width = plot_width / max(top10_china_sports['Medal']) # 200 / 56 = 3.57

# 每个漏斗部分相对于绘图宽度的宽度

phase_w = [int(v * unit_width) for v in top10_china_sports['Medal']]

# 绘制图的总高度

height = section_h * n_phase + section_d * (n_phase - 1)

shapes = [] # 列表存储所有的绘制形状

label_y = [] # 列表存储每个section的name、value文本的Y轴地址

for i in range(n_phase):

if(i == n_phase - 1):

points = [phase_w[i] / 2, height, phase_w[i] / 2, height - section_h]

else:

points = [phase_w[i] / 2, height, phase_w[i+1] / 2, height - section_h]

path = 'M {0} {1} L {2} {3} L -{2} {3} L -{0} {1} Z'.format(*points)

shape = {'type': 'path','path': path,'fillcolor': colors[i],'line': {'width': 1,'color': colors[i]}}

shapes.append(shape)

# Y-axis location for this section's details (text)

label_y.append(height - (section_h / 2))

height = height - (section_h + section_d)

label_trace = Scatter(

x=[-200]*n_phase,

y=label_y,

mode='text',

text= top10_china_sports['Sport'],

textfont=dict(

color='rgb(200,200,200)',

size=15

)

)

# For phase values

value_trace = Scatter(

x=[-350]*n_phase,

y=label_y,

mode='text',

text=top10_china_sports['Medal'],

textfont=dict(

color='rgb(200,200,200)',

size=12

)

)

data = [label_trace, value_trace]

layout = Layout(

title="Top 10 中国 的强项运动项目",

titlefont=dict(

size=12,

color='rgb(203,203,203)'

),

shapes=shapes,

height=600,

width=800,

showlegend=False,

paper_bgcolor='rgba(44,58,71,1)',

plot_bgcolor='rgba(44,58,71,1)',

xaxis=dict(

showticklabels=False,

zeroline=False,

),

yaxis=dict(

showticklabels=False,

zeroline=False

)

)

fig = Figure(data=data, layout=layout)

iplot(fig)

根据中国的金牌数最多的排名前十的运动项目来看,中国的强项项目主要是跳水、体操、排球、举重、乒乓球、射击、游泳、短道速度滑冰、柔道、田径运动。

python北京奥运会_Python分析奥运会120年历史,谁才是奥运历史的王者?相关推荐

  1. python加油视频_python分析6625条视频,揭秘“打工人”凭啥刷爆全网!

    原标题:python分析6625条视频,揭秘"打工人"凭啥刷爆全网! CDA数据分析师 出品 作者:Mika 数据:真达 后期:Mika [导读] Show me data,用数据 ...

  2. python股票买卖问题_Python分析股票买卖点 2

    接着上一篇用python对科大讯飞股票分析,利用MA5和Ma20的指标,对股票的买卖点做了一个简单的分析. 下面,继续趁热打铁,结合前面的MA5和MA20来继续分析.最好一眼能看到买卖点. 如下图:分 ...

  3. python最终价格_python分析北京租房现状,最后的价格分布地图亮了

    租房信息已经有了,为了能对北京目前的租房市场有个直观认识,我对数据进行深度分析,并进行可视化展示 从分析结果中,我得到了哪些位置房源多.各区租房平均价格以及心仪价格地理位置分布等重要信息,为帮助我租房 ...

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

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

  5. 深圳python如何评价_Python分析18万条《八佰》影评,看看观众怎么说?

    原标题:Python分析18万条<八佰>影评,看看观众怎么说? 最近<八佰>这部电影比较火,上映仅15天就已斩获22亿票房.对于沉寂了半年.影院上座率仍限定在50%的电影市场而 ...

  6. python中奖号_Python分析彩票记录并预测中奖号码过程详解

    0 引言 上周被一则新闻震惊到了,<2454万元大奖无人认领!福彩史上第二大弃奖在广东中山产生 >,在2019年5月2日开奖的双色球中,广东中山一位彩民博中2454万元,兑奖时间截至201 ...

  7. 奥运会数据集分析(部分)

    数据科学应用案例实践报告 小组成员:XXX 主要方法:采用pandas 进行数据处理,采用Pyecharts 进行绘图 摘要: 针对奥运会2020夏季奥运会的相关分析,利用了python里面的pand ...

  8. python温度转换代码分析_Python温度转换实例分析

    本文主要研究的是Python语言实现温度转换的相关实例,具体如下. 代码如下: #TempConvert.py val=input("请输入带有温度表示符号的温度值(例如:32c)" ...

  9. python 标签数量_python实现的批量分析xml标签中各个类别个数功能示例

    本文实例讲述了python实现的批量分析xml标签中各个类别个数功能.分享给大家供大家参考,具体如下: 文章目录 需要个脚本分析下各个目标的数目 顺带练习下多进程,自用,直接上代码: # -*- co ...

最新文章

  1. 图解Spark原理及实践----大数据技术栈12
  2. 深度学习基础系列(八)| 偏差和方差
  3. wxWidgets:wxWidgets 验证器示例
  4. Qt之QAbstractItemView视图项拖拽(二)
  5. 工具类—KeyValuePair
  6. IntelliJ IDEA 选中变量名,高亮显示其它地方的这个变量名,高亮颜色如何设置呢?
  7. 神经网络基本原理简明教程-0-Python-Numpy库的点滴
  8. 数据结构—链表-单链表应用-拆分链表
  9. 左边导航条动态增加或缩短高度以及放大缩小问题的解决方法
  10. python pywinauto 自动控制微信, 关键字回复、收款、定时任务, 代替人工成为微信客服
  11. sodp软件如何导入多个工作面信息_平方英尺和面积计算软件:Metes and Bounds for Mac...
  12. Axure原型图 时间跳动 计时动画效果
  13. 插入u盘计算机未响应,插入U盘打开“我的电脑”后就未响应了,并且所有跟U盘相关的软件都? 爱问知识人...
  14. ssq历史50【参数化】出现排序,最近未出排序,排行图
  15. 利用JS实现QQ空间自动点赞
  16. 安装 centos8 设置基础软件仓库时出错
  17. css如何绘制一个等边三角形
  18. 重磅 | Hadoop的第二个十年
  19. 用户日活月活怎么统计 - Redis HyperLogLog 详解
  20. git拉取代码出现Unpacking objects

热门文章

  1. 插件自动解决谷歌翻译用不了,win、mac、linux通用,附链接
  2. 中国省市区三级城市列表
  3. 软件培训机构的网络营销那点事儿
  4. STM32仿真器ST-Link仿真
  5. 智慧城市建设的原则及规划目标
  6. 转载:群联PS2251-07主控(Kingston64G)量产CD-ROM+移动磁盘模式过程记录
  7. CefSharp 常用设置
  8. 优思学院:质量管理七大手法,就是六西格玛的起点
  9. EMU,ARC 、NeoGeo CD 、GB/GBC 、MD 、SFC 、GG/SMS 、GBA 、PS 、PCE 模拟器移植方案
  10. Keyboard, mouse and joystick