Python数据探索奥运数据,从中国队的男女比例找劣势项目

我是数据外星人 2024-02-22 00:49:11

此系列文章收录在公众号中:数据大宇宙 > pandas专辑

转发本文并私信我"python",即可获得Python资料以及更多系列文章(持续更新的)

前言

最近在准备 pandas 专栏的工程化内容,其中用到一份奥运数据的探索分析。这里会截取一些技巧内容让大家参考学习,包括:

怎么找出每个项目首次出现在奥运的时间哪些项目被取消?在哪一届被取消有没有项目被取消之后,又重新纳入奥运项目………………

完整的分析过程,包括如何组织代码,把一些固定参数和逻辑外置在 Excel上等高级技巧,请关注专栏相关章节。

导入这些库:

import pandas as pdimport numpy as npimport matplotlib.pyplot as plt%matplotlib inlineplt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = Falseplt.rcParams['figure.figsize'] = [16,10]plt.rcParams['figure.dpi'] = 140plt.rcParams['font.size'] = 20

数据是从 kaggle 上下载的 csv 文件,此外为了方便阅读,数据中的项目与国家已自动化翻译成中文(google翻译):

df = pd.read_csv('athlete_events.csv')df_trans = pd.read_excel('中英文.xlsx',sheet_name=None)sport_trans = df_trans['Sport'].set_index('en')['cn']noc_trans = df_trans['Noc'].set_index('en')['cn']df['Sport_cn'] = df['Sport'].map(sport_trans)df['NOC_region'] = df['NOC'].map(noc_trans)df

每一行表示一个运动员的记录,包括姓名、性别,国家、参与年份,项目(Sport),拿到的奖项(Medal)数据记录年份截止到2016年奥运(包含2016年数据)

首先创建一些常用函数:

# 对列比例def cal_percent(col:pd.Series): return col/col.sum()# 对表格每一行求比例def cal_percent_byrow(data:pd.DataFrame): return data.div(data.sum(axis=1),axis=0)# 柱状图def plot_bar(data,**kws): data.plot.bar(**kws) # 条形图def plot_barh(data,**kws): data.plot.barh(**kws)整体性别比例

看看整体情况:

df['Sex'].value_counts().pipe(cal_percent).pipe(plot_bar)

意料之中,男性比例高达70%

但是,奥运是世界规模最大的综合性运动会,那么必然不会忽视男女平等问题。

看看历届奥运的男女比例:

( df.pivot_table(index='Year', columns='Sex', aggfunc='size', fill_value=0) .pipe(cal_percent_byrow) .sort_values('Year',ascending=False) .pipe(plot_barh,stacked=True))

可以看到整体走势趋于男女比例均等

其实,奥运项目的增减都会影响男女比例,不妨看看各个项目的男女比例:

kws = {'figsize':[16,25]}( df.pivot_table(index='Sport_cn', columns='Sex', aggfunc='size', fill_value=0) .pipe(cal_percent_byrow) .sort_values('M',ascending=True) .pipe(plot_barh,stacked=True,**kws))行1:因为项目较多,如果图表高度不够,会使得图中内容压缩,导致y轴内容重叠

注意,有些项目只是短暂出现在很久以前的奥运会上

关于项目时间相关探索就不在本文展开

中国队的情况

我们自然关注中国队的情况:

( df.query("NOC_region=='中国' and Year>=2000 and Season=='Summer'") .pivot_table(index='Year', columns='Sex', aggfunc='size', fill_value=0) .pipe(cal_percent_byrow) .sort_values('Year',ascending=False) .pipe(plot_barh,stacked=True))

除开 2008 年北京奥运会是男子占比略高于女子,其他年份都是女子比例更高

为什么呢?

不妨看看 2008 年中国队的参与项目,以及项目的男女比例:

kws = {'figsize':[16,40]}( df.query("NOC_region=='中国' and Season=='Summer' and Year==2008") .pivot_table(index='Sport_cn', columns='Sex', aggfunc='size', fill_value=0) .pipe(cal_percent_byrow) .sort_values('M',ascending=False) .pipe(plot_barh,stacked=True,**kws))

注意3大球类项目(足球、篮球、排球)都有男子项目

奥运东道主有一些"福利",受关注的项目可以直接晋级正赛,比如足球

但是,再看看最近的2016年的情况:

kws = {'figsize':[16,40]}( df.query("NOC_region=='中国' and Season=='Summer' and Year==2008") .pivot_table(index='Sport_cn', columns='Sex', aggfunc='size', fill_value=0) .pipe(cal_percent_byrow) .sort_values('M',ascending=False) .pipe(plot_barh,stacked=True,**kws))

可以看到,足球和排球项目,中国队的男子队都无法参与奥运此外,水球、网球这些小球项目中,中国队的男子队也退步了

此时2020年东京奥运如火如荼进行中,你觉得中国队经过4年的时间,这些项目能有所进步吗?

等2020年奥运数据一出来,马上就能知道

下次再分享基于每个项目的探索,如果对你有帮助,请点赞转发支持!!

如果需要相关数据,请私信"数据"

0 阅读:0

我是数据外星人

简介:感谢大家的关注