📜  使用Python奥运会数据分析

📅  最后修改于: 2022-05-13 01:55:45.251000             🧑  作者: Mango

使用Python奥运会数据分析

在本文中,我们将看到使用Python的奥运会分析。现代奥林匹克运动会或奥运会是领先的国际体育赛事,以夏季和冬季运动比赛为特色,来自世界各地的数千名运动员参加各种比赛。奥运会被认为是世界上最重要的体育赛事,有 200 多个国家参加。

奥运会的总项目数为33个项目中的339个。每场比赛都有赢家。因此产生了各种数据。因此,通过使用Python,我们将分析这些数据。

使用的模块

  • Pandas:用于分析数据,
  • NumPy:NumPy 是一个通用的数组处理包。
  • Matplotlib:它是一个数值数学扩展 NumPy
  • seaborn:用于在Python可视化统计图形绘图

模型架构:

分步实施

步骤 1:导入库

Python3
# importing all necessary libraries
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns


Python3
data = pd.read_csv('athlete_events.csv')  # read file
  
# data.head() display first 5 entry
# data.describe describe about model
# data.info give info about data
print(data.head(), data.describe(), data.info())


Python3
# regions and country noc data csv file
regions = pd.read_csv('datasets_31029_40943_noc_regions.csv')
print(regions.head())
  
# merging to data and regions frame
merged = pd.merge(data, regions, on='NOC', how='left')
print(merged.head())


Python3
# creating goldmedal dataframes
goldMedals = merged[(merged.Medal == 'Gold')]
print(goldMedals.head())


Python3
plt.figure(figsize=(20, 10))
plt.title('Distribution of Gold Medals')
sns.countplot(goldMedals['Age'])
plt.show()


Python3
goldMedals = merged[(merged.Medal == 'Gold')]
print('The no of athletes is',
      goldMedals['ID'][goldMedals['Age'] > 50].count(), '\n')
print(goldMedals[goldMedals['Age'] > 50])


Python3
masterDisciplines = goldMedals['Sport'][goldMedals['Age'] > 50]
plt.figure(figsize=(20, 10))
plt.tight_layout()
sns.countplot(masterDisciplines)
plt.title('Gold Medals for Athletes Over 50')
plt.show()


Python3
womenInOlympics = merged[(merged.Sex == 'F') &
                         (merged.Season == 'Summer')]
print(womenInOlympics.head(10))
  
sns.set(style="darkgrid")
plt.figure(figsize=(20, 10))
sns.countplot(x='Year', data=womenInOlympics)
plt.title('Women medals per edition of the Games')
plt.show()


Python3
print(goldMedals.region.value_counts().reset_index(name='Medal').head())
  
totalGoldMedals = goldMedals.region.value_counts()
.reset_index(name='Medal').head(5)
g = sns.catplot(x="index", y="Medal", data=totalGoldMedals,
                height=6, kind="bar", palette="muted")
g.despine(left=True)
g.set_xlabels("Top 5 countries")
g.set_ylabels("Number of Medals")
plt.title('Medals per Country')
plt.show()


Python3
MenOverTime = merged[(merged.Sex == 'M') &
                     (merged.Season == 'Summer')]
wlMenOverTime = MenOverTime.loc[MenOverTime['Sport'] == 'Weightlifting']
  
plt.figure(figsize=(20, 10))
sns.pointplot('Year', 'Weight', data=wlMenOverTime, palette='Set2')
plt.title('Weight over year for Male Lifters')
plt.show()


第 2 步:了解数据库

在处理奥运数据时,我们有两个 CSV 文件。一个包含所有年份奥运会的结果体育相关费用。另一个是包含了他们参加信息的所有年份的运动员的信息。



CSV 数据文件可以从这里下载:数据集

第 3 步:数据清理和格式化

我们使用 .read_csv() 方法将两个数据集导入到使用 Pandas 的数据框中,并显示每个数据集的前 5 行。

蟒蛇3

data = pd.read_csv('athlete_events.csv')  # read file
  
# data.head() display first 5 entry
# data.describe describe about model
# data.info give info about data
print(data.head(), data.describe(), data.info())

输出:

第 4 步:合并两个 DataFrame

在这里,我们将在Python使用 pandas.merge() 合并两个数据帧。

蟒蛇3

# regions and country noc data csv file
regions = pd.read_csv('datasets_31029_40943_noc_regions.csv')
print(regions.head())
  
# merging to data and regions frame
merged = pd.merge(data, regions, on='NOC', how='left')
print(merged.head())

输出:



奥运数据分析

现在可以使用 Pandas 和 matplotlib 获取数据让我们看看一些例子

金牌得主数据分析

创建仅包含金牌得主的新数据框。

蟒蛇3

# creating goldmedal dataframes
goldMedals = merged[(merged.Medal == 'Gold')]
print(goldMedals.head())

输出 :

年龄方面的金牌得主:

在这里,我们将创建一个关于年龄的金牌数量图表。为此,我们将为图形表示创建计数图,其中 X 轴表示玩家的年龄,Y 轴表示奖牌数量。

蟒蛇3

plt.figure(figsize=(20, 10))
plt.title('Distribution of Gold Medals')
sns.countplot(goldMedals['Age'])
plt.show()

输出 :



打印获得金牌且年龄大于 50 岁的运动员的数量及其信息。

蟒蛇3

goldMedals = merged[(merged.Medal == 'Gold')]
print('The no of athletes is',
      goldMedals['ID'][goldMedals['Age'] > 50].count(), '\n')
print(goldMedals[goldMedals['Age'] > 50])

输出 :

创建一个名为 masterDisciplines 的新数据框,我们将在其中插入这组新人,然后用它创建一个可视化

蟒蛇3

masterDisciplines = goldMedals['Sport'][goldMedals['Age'] > 50]
plt.figure(figsize=(20, 10))
plt.tight_layout()
sns.countplot(masterDisciplines)
plt.title('Gold Medals for Athletes Over 50')
plt.show()

输出 :

夏天可以玩的女人

显示所有参加夏季比赛的女运动员,并通过图形表示长时间后女运动员的增加。

蟒蛇3



womenInOlympics = merged[(merged.Sex == 'F') &
                         (merged.Season == 'Summer')]
print(womenInOlympics.head(10))
  
sns.set(style="darkgrid")
plt.figure(figsize=(20, 10))
sns.countplot(x='Year', data=womenInOlympics)
plt.title('Women medals per edition of the Games')
plt.show()

输出 :

获得奖牌最多的前5个国家

在这里,我们将打印前 5 个国家,并使用 catplot 将它们显示在图表中。

蟒蛇3

print(goldMedals.region.value_counts().reset_index(name='Medal').head())
  
totalGoldMedals = goldMedals.region.value_counts()
.reset_index(name='Medal').head(5)
g = sns.catplot(x="index", y="Medal", data=totalGoldMedals,
                height=6, kind="bar", palette="muted")
g.despine(left=True)
g.set_xlabels("Top 5 countries")
g.set_ylabels("Number of Medals")
plt.title('Medals per Country')
plt.show()

输出:

球员体重分析

在这里,我们将使用点图通过图形表示来了解男性举重运动员的体重随时间变化的情况。

蟒蛇3

MenOverTime = merged[(merged.Sex == 'M') &
                     (merged.Season == 'Summer')]
wlMenOverTime = MenOverTime.loc[MenOverTime['Sport'] == 'Weightlifting']
  
plt.figure(figsize=(20, 10))
sns.pointplot('Year', 'Weight', data=wlMenOverTime, palette='Set2')
plt.title('Weight over year for Male Lifters')
plt.show()

输出 :