最近在准备 pandas 专栏的工程化内容,其中用到一份奥运数据的探索分析。这里会截取一些技巧内容让大家参考学习,包括:
完整的分析过程,包括如何组织代码,把一些固定参数和逻辑外置在 Excel上等高级技巧,请关注专栏相关章节。
导入这些库:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['figure.figsize'] = [16,10]
plt.rcParams['figure.dpi'] = 140
plt.rcParams['font.size'] = 20
数据是从 kaggle 上下载的 csv 文件:
df = pd.read_csv('athlete_events.csv')
df
本文主题是夏季奥运与冬季奥运,而数据的颗粒是某一届奥运的某一位运动员,显然太细了。
很简单,取出我们需要的字段,然后去重就可以得到需要的颗粒度:
df[['Year','Season']].drop_duplicates().sort_values('Year')
数据太多,不好看。简单可视化:
(
df[['Year', 'Season']]
.drop_duplicates()
.sort_values('Year')
.pivot_table(index='Year',columns='Season',values='Season',aggfunc='size')
.plot.bar(stacked=True)
)
我们知道,由于疫情原因,今年(现在是2021年了)看到的东京奥运其实是 2020 年的夏季奥运会
所以你会看到东京奥运会上的标识年份是 2020
现在我们不考虑时间,只看季节与项目的关系:
(
df[['Season','Sport']]
.drop_duplicates()
.groupby('Season').count()
)
可视化也是一样的套路:
(
df[['Season','Sport']]
.drop_duplicates()
.groupby('Season').count()
.plot.bar(table=True)
)
这个很容易理解,冬季奥运项目都是与冰雪有关的项目:
(
df[['Season','Sport']]
.drop_duplicates()
.query('Season=="Winter"')
)
但是夏季奥运很多项目是不受冰雪天气限制的项目,因此非常多
同样套路,看看参与国家的数量:
(
df[['Season','NOC']]
.drop_duplicates()
.groupby('Season').count()
.plot.bar(table=True)
)
原因显然易见,大部分国家都有夏季,而且很多项目可能在室内,不受环境影响,所以夏季奥运是所有国家都参与。
而冬季项目在那些常年冰天雪地的国家中,自然受众较多,参与人数和发展较好。
相比之下,一些没有这样气候环境的国家可能就不会投入资源在冬季项目中,既然没有夺金希望,那索性不参与
下次再分享基于每个项目的探索,如果对你有帮助,请点赞转发支持!!