正文
,
'Name'
,
'Sex'
,
'Age'
,
'Height'
,
'Weight'
,
'Team'
,
'NOC'
,
'Games'
,
'Year'
,
'Season'
,
'City'
,
#
'Sport'
,
'Event'
,
'Medal'
]
我能想到的一些事情是,我们可以查看奥运会运动员的平均身高和体重,或者通过不同的运动来划分他们。我们还可以查看依赖于性别的两个变量的分布。我们甚至还可以看到每个国家有多少奖牌,将此作为时间序列,来查看整个二十世纪文明的兴衰。
可能性是无限的!但首先让我们来解决这个难题:我们的数据集有多完整?
def NaN_percent(df, column_name):
row_count = df[column_name].shape[0]
empty_values = row_count - df[column_name].count()
return (100.0*empty_values)/row_count
for i in list(df):
print(i +': ' + str(NaN_percent(df,i))+'%')
'''
0% incomplete columns omitted for brevity.
Age: 3.49444518214%
Height: 22.193821095%
Weight: 23.191180159%
Medal: 85.3262072323% --Notice how 15% of athletes did not get any medals
'''
在序列数据上使用 Pandas 的计数方法可以得到非空行的数量。而通过查看 shape 属性,可以查看到总的行数,不管它们是否为空。
之后就是减法和除法的问题了。我们可以看到只有四栏的属性不完整:身高、体重、年龄和奖牌。
奖牌属性的不完整是因为一个运动员可能实际上并没有赢得奖牌,所以可以预料到这条数据是不完全的。然而,在体重、身高和年龄的方面,不完整的数据让我们面临着相当大的挑战。
我试着用不同的年份对这些数据行进行过滤,但这种不完整性似乎随着时间的推移而保持一致,这让我觉得可能是有一些国家不提供运动员的这些相关数据。
开始我们真正的分析: 奖牌情况是怎样的?
我们问的第一个问题是,自 1900 年以来,有多少不同的人获得过奖牌?下面的代码片段回答了这个问题: