当前位置 : 主页 > 编程语言 > python >

120年奥运历史数据分析

来源:互联网 收集:自由互联 发布时间:2022-08-15
一、数据概览 背景描述 该数据集整理了从1896年雅典奥运会至2016年里约热内卢奥运会120年的奥林匹克运动会的历史数据。 需要注意的是,在1896年-1992年期间,冬季奥运会与夏季奥运会

一、数据概览

背景描述

该数据集整理了从1896年雅典奥运会至2016年里约热内卢奥运会120年的奥林匹克运动会的历史数据。

需要注意的是,在1896年-1992年期间,冬季奥运会与夏季奥运会都是在同一年举行的。在这之后,冬季与夏季的奥运会才被错开举办,冬季奥运会从1994年开始4年举办一次,夏季奥运会从1996开始4年举办一次。大家在分析这些数据时,经常会犯得一个错误就是认为夏季与冬季奥运会是一直错开举办的。

受疫情影响,2020东京奥运会将延期至2021年举行;

虽然延期,但此次奥运会依旧会沿用「2020东京奥运会」这个名称;

这也将是奥运会历史上首次延期(1916年、1940年、1944年曾因一战,二战停办);

数据说明

文件列表 该数据集包含两个文件:

athlete_events.csv :参赛运动员基本生物数据和奖牌结果

noc_regions.csv : 国家奥委会3个字母的代码与对应国家信息

属性描述

文件athlete_events.csv中包含15个字段,具体信息如下:

每一行代表的是一个参加个人比赛运动员

No 属性 数据类型 字段描述

1 ID Integer 给每个运动员的唯一ID

2 Name String 运动员名字

3 Sex Integer 性别

4 Age Float 年龄

5 Height Float 身高

6 Weight Float 体重

7 Team String 所代表的国家队

8 NOC String 国家奥委会3个字母的代码

9 Games String 年份与季节

10 Year Integer 比赛年份

11 Season String 比赛季节

12 City String 举办城市

13 Sport String 运动类别

14 Event String 比赛项目

15 Medal Sring 奖牌

文件noc_regions.csv中包含3个字段,具体信息如下:

No

属性

数据类型

字段描述

1

NOC

String

国家奥委会3个字母的代码

2

Region

String

国家

3

Notes

String

地区

数据来源

数据集源自于kaggle平台用户分享,基于证书 CC0: Public Domain 发布,具体信息内容源自​​Sports Reference​​。

二、数据集可探索、研究的方向

可以从以下几个方面来探索奥林匹克运动会的演变历程:

  • 历年来 男女参赛运动员的表现如何?
  • 那不同地区?
  • 不同运动项目?
  • 不同比赛项目?

三、可视化分析

1.各国累计奖牌数

import pandas as pd
from pyecharts.charts import *
from pyecharts import options as opts
from pyecharts.commons.utils import JsCode

athlete_data = pd.read_csv('./data/athlete_events.csv')
noc_region = pd.read_csv('./data/noc_regions.csv')

# 关联代表国家
data = pd.merge(athlete_data, noc_region, on='NOC', how='left')
print(data.head())

medal_data = data.groupby(['Year', 'Season', 'region', 'Medal'])['Event'].nunique().reset_index()
medal_data.columns = ['Year', 'Season', 'region', 'Medal', 'Nums']
medal_data = medal_data.sort_values(by="Year", ascending=True)


def medal_stat(year, season='Summer'):
t_data = medal_data[(medal_data['Year'] <= year) & (medal_data['Season'] == season)]
t_data = t_data.groupby(['region', 'Medal'])['Nums'].sum().reset_index()
t_data = t_data.set_index(['region', 'Medal']).unstack().reset_index().fillna(0, inplace=False)
t_data = sorted(
[(row['region'][0], int(row['Nums']['Gold']), int(row['Nums']['Silver']), int(row['Nums']['Bronze']))
for _, row in t_data.iterrows()], key=lambda x: x[1] + x[2] + x[3], reverse=True)[:20]
return t_data


year_list = sorted(list(set(medal_data['Year'].to_list())), reverse=True)

tl = Timeline(init_opts=opts.InitOpts(theme='dark', width='1000px', height='1000px'))
tl.add_schema(is_timeline_show=True, is_rewind_play=True, is_inverse=False,
label_opts=opts.LabelOpts(is_show=False))

for year in year_list:
t_data = medal_stat(year)[::-1]
bar = (
Bar(init_opts=opts.InitOpts())
.add_xaxis([x[0] for x in t_data])
.add_yaxis("铜牌
上一篇:Python----pipenv 的使用方法
下一篇:没有了
网友评论