Python数据分析处理(三) -- 运动员信息的分组与聚合
1. 前言
在数据分析过程中,数据的分组和聚合是必不可少的步骤。Python中的Pandas库提供了丰富的方法来实现这个目标。本篇博文将会利用Python的Pandas库,对一组运动员信息进行分组和聚合的操作,以便更好的进行数据分析。
2. 数据准备
我们将使用一个包含有运动员信息的csv文件作为我们的数据源。可以从以下链接下载:
https://github.com/abhat222/Data-Science--Cheat-Sheet/blob/master/Winter%20Olympics%20Medals/medals.csv
将csv文件下载后,我们可以在Python中通过Pandas库的read_csv方法将文件读取为一个DataFrame对象。
import pandas as pd
df = pd.read_csv('medals.csv')
print(df.head())
运行以上代码后,我们可以看到pandas成功读取了文件,并展示了数据的前5行。
其中,我们关心的列包括"Year"(年份)、"Sport"(运动项目)、"Discipline"(项目细分)、"Athlete"(运动员姓名)和"Medal"(获得的奖牌)。
3. 数据分组
接下来,我们需要对数据进行分组。在python中,可以使用pandas中的groupby方法实现数据分组。
例如,我们将数据按照年份进行分组,并统计每年的奖牌数量:
grouped_year = df.groupby('Year').size()
print(grouped_year)
运行以上代码后,将会输出每年的奖牌数量:
Year
1924 17
1928 25
1932 60
...
1994 316
1998 374
2002 407
Length: 20, dtype: int64
我们也可以按照项目统计每年的奖牌数量,例如:
grouped_sport = df.groupby(['Year','Sport']).size()
print(grouped_sport)
运行以上代码后,将会输出每年每个项目的奖牌数量:
Year Sport
1924 Figure Skating 4
Ice Hockey 1
Nordic Combined 3
Speed skating 9
1928 Bobsleigh 4
Figure Skating 3
Ice Hockey 1
...
2002 Ski Jumping 6
Snowboarding 6
Length: 471, dtype: int64
4. 数据聚合
在完成数据分组后,我们可以使用各种聚合函数来对数据进行统计。在python中,可以使用pandas中的agg方法来完成数据的聚合。
例如,我们可以计算每个项目(包括不同的细分)在每年中的奖牌数量和金牌数量,例如:
agg_dict = {'Medal':{'Total_medals':'count','Gold_medals': lambda x: x[x=='Gold'].count()}}
grouped = df.groupby(['Year','Sport','Discipline']).agg(agg_dict)
print(grouped)
运行以上代码后,将会输出每个项目在每年中的奖牌数量和金牌数量:
Medal
Total_medals Gold_medals
Year Sport Discipline
1924 Biathlon Biathlon 1 0
BobsleighBobsleigh 1 0
Curling Curling 1 0
Figure Skating Singles 4 2
Special Figures 2 2
... ... ...
2002 Nordic Combined Team 3 0
Short Track Speed Skating1000m 3 1
...
2022 Freestyle Skiing Moguls 6 2
Ice Hockey Ice Hockey 25 0
Short Track Speed Skating1000m 6 1
Length: 6235, dtype: int64
其中,"Total_medals"对应每年中该项目的总奖牌数,"Gold_medals"对应每年中该项目的金牌数量。
5. 结语
至此,我们已经成功地实现了Python中数据的分组和聚合。在实际应用过程中,数据分组和聚合往往是数据清洗的重要步骤,也是进一步进行数据探索和分析的基础。
本篇博客的完整代码如下:
import pandas as pd
df = pd.read_csv('medals.csv')
print(df.head())
grouped_year = df.groupby('Year').size()
print(grouped_year)
grouped_sport = df.groupby(['Year','Sport']).size()
print(grouped_sport)
agg_dict = {'Medal':{'Total_medals':'count','Gold_medals': lambda x: x[x=='Gold'].count()}}
grouped = df.groupby(['Year','Sport','Discipline']).agg(agg_dict)
print(grouped)
以上为本篇博客的内容,感谢您的阅读。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python数据分析处理(三)–运动员信息的分组与聚合 - Python技术站