python北京奥运会_Python分析奥运会120年历史,谁才是奥运历史的王者?
主要探索分析奥运会的热门体育项目、得金牌数最多的国家,夏季冬季不同性别的参赛运动员的年龄,以及中国的在奥运会上的表现等问题。
项目链接,欢迎一键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年历史,谁才是奥运历史的王者?相关推荐
- python加油视频_python分析6625条视频,揭秘“打工人”凭啥刷爆全网!
原标题:python分析6625条视频,揭秘"打工人"凭啥刷爆全网! CDA数据分析师 出品 作者:Mika 数据:真达 后期:Mika [导读] Show me data,用数据 ...
- python股票买卖问题_Python分析股票买卖点 2
接着上一篇用python对科大讯飞股票分析,利用MA5和Ma20的指标,对股票的买卖点做了一个简单的分析. 下面,继续趁热打铁,结合前面的MA5和MA20来继续分析.最好一眼能看到买卖点. 如下图:分 ...
- python最终价格_python分析北京租房现状,最后的价格分布地图亮了
租房信息已经有了,为了能对北京目前的租房市场有个直观认识,我对数据进行深度分析,并进行可视化展示 从分析结果中,我得到了哪些位置房源多.各区租房平均价格以及心仪价格地理位置分布等重要信息,为帮助我租房 ...
- python地铁车票_Python分析3034个地铁站,发现中国地铁名字的秘密。
原标题:Python分析3034个地铁站,发现中国地铁名字的秘密. 最近看了新周刊的一篇推送,有关地铁名字的分析,链接如下. 我们分析了3447个地铁站,发现了中国城市地名的秘密 于是乎也想着自己去获 ...
- 深圳python如何评价_Python分析18万条《八佰》影评,看看观众怎么说?
原标题:Python分析18万条<八佰>影评,看看观众怎么说? 最近<八佰>这部电影比较火,上映仅15天就已斩获22亿票房.对于沉寂了半年.影院上座率仍限定在50%的电影市场而 ...
- python中奖号_Python分析彩票记录并预测中奖号码过程详解
0 引言 上周被一则新闻震惊到了,<2454万元大奖无人认领!福彩史上第二大弃奖在广东中山产生 >,在2019年5月2日开奖的双色球中,广东中山一位彩民博中2454万元,兑奖时间截至201 ...
- 奥运会数据集分析(部分)
数据科学应用案例实践报告 小组成员:XXX 主要方法:采用pandas 进行数据处理,采用Pyecharts 进行绘图 摘要: 针对奥运会2020夏季奥运会的相关分析,利用了python里面的pand ...
- python温度转换代码分析_Python温度转换实例分析
本文主要研究的是Python语言实现温度转换的相关实例,具体如下. 代码如下: #TempConvert.py val=input("请输入带有温度表示符号的温度值(例如:32c)" ...
- python 标签数量_python实现的批量分析xml标签中各个类别个数功能示例
本文实例讲述了python实现的批量分析xml标签中各个类别个数功能.分享给大家供大家参考,具体如下: 文章目录 需要个脚本分析下各个目标的数目 顺带练习下多进程,自用,直接上代码: # -*- co ...
最新文章
- 图解Spark原理及实践----大数据技术栈12
- 深度学习基础系列(八)| 偏差和方差
- wxWidgets:wxWidgets 验证器示例
- Qt之QAbstractItemView视图项拖拽(二)
- 工具类—KeyValuePair
- IntelliJ IDEA 选中变量名,高亮显示其它地方的这个变量名,高亮颜色如何设置呢?
- 神经网络基本原理简明教程-0-Python-Numpy库的点滴
- 数据结构—链表-单链表应用-拆分链表
- 左边导航条动态增加或缩短高度以及放大缩小问题的解决方法
- python pywinauto 自动控制微信, 关键字回复、收款、定时任务, 代替人工成为微信客服
- sodp软件如何导入多个工作面信息_平方英尺和面积计算软件:Metes and Bounds for Mac...
- Axure原型图 时间跳动 计时动画效果
- 插入u盘计算机未响应,插入U盘打开“我的电脑”后就未响应了,并且所有跟U盘相关的软件都? 爱问知识人...
- ssq历史50【参数化】出现排序,最近未出排序,排行图
- 利用JS实现QQ空间自动点赞
- 安装 centos8 设置基础软件仓库时出错
- css如何绘制一个等边三角形
- 重磅 | Hadoop的第二个十年
- 用户日活月活怎么统计 - Redis HyperLogLog 详解
- git拉取代码出现Unpacking objects
热门文章
- 插件自动解决谷歌翻译用不了,win、mac、linux通用,附链接
- 中国省市区三级城市列表
- 软件培训机构的网络营销那点事儿
- STM32仿真器ST-Link仿真
- 智慧城市建设的原则及规划目标
- 转载:群联PS2251-07主控(Kingston64G)量产CD-ROM+移动磁盘模式过程记录
- CefSharp 常用设置
- 优思学院:质量管理七大手法,就是六西格玛的起点
- EMU,ARC 、NeoGeo CD 、GB/GBC 、MD 、SFC 、GG/SMS 、GBA 、PS 、PCE 模拟器移植方案
- Keyboard, mouse and joystick