使用 Python 進行奧運會資料分析


現代奧林匹克運動會,有時被稱為奧運會,是一項重要的國際體育賽事,包括夏季和冬季運動專案,來自世界各地的數千名參與者在各種學科中展開競爭。隨著超過 200 個國家/地區的參與,奧運會被認為是世界上最主要的體育賽事。在本文中,我們將使用 Python 來研究奧運會。讓我們開始吧。

匯入必要的庫

!pip install pandas !pip install numpy import numpy as np import pandas as pd import seaborn as sns from matplotlib import pyplot as plt

匯入和理解資料集

在處理奧運會資料時,我們有兩個 CSV 檔案。一個詳細記錄了所有奧運會的全部體育相關費用。另一個包含了所有年份參賽運動員的資訊。

您可以點選此處獲取 CSV 資料檔案:

data = pd.read_csv('/content/sample_data/athlete_events.csv') # data.head() display first 5 entry print(data.head(), data.describe(), data.info())

合併兩個資料集

# regions and country noc data CSV file regions = pd.read_csv('/content/sample_data/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())

從這裡開始資料分析。

金牌分析的資料分析

示例

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

輸出

  
 ID                     Name    Sex   Age  Height  Weight            Team  \
3    4     Edgar Lindenau Aabye   M  34.0     NaN     NaN  Denmark/Sweden   
42  17  Paavo Johannes Aaltonen   M  28.0   175.0    64.0         Finland   
44  17  Paavo Johannes Aaltonen   M  28.0   175.0    64.0         Finland   
48  17  Paavo Johannes Aaltonen   M  28.0   175.0    64.0         Finland   
60  20       Kjetil Andr Aamodt   M  20.0   176.0    85.0          Norway   

    NOC        Games  Year  Season         City          Sport  \
3   DEN  1900 Summer  1900  Summer        Paris     Tug-Of-War   
42  FIN  1948 Summer  1948  Summer       London     Gymnastics   
44  FIN  1948 Summer  1948  Summer       London     Gymnastics   
48  FIN  1948 Summer  1948  Summer       London     Gymnastics   
60  NOR  1992 Winter  1992  Winter  Albertville  Alpine Skiing   

                               Event Medal   region notes  
3        Tug-Of-War Men's Tug-Of-War  Gold  Denmark   NaN  
42  Gymnastics Men's Team All-Around  Gold  Finland   NaN  
44      Gymnastics Men's Horse Vault  Gold  Finland   NaN  
48  Gymnastics Men's Pommelled Horse  Gold  Finland   NaN  
60       Alpine Skiing Men's Super G  Gold   Norway   NaN  

根據年齡分析金牌獲得者

在這裡,我們將製作一個圖表,顯示金牌數量與年齡的關係。為此,我們將開發一個計數圖用於圖表表示,參與者的年齡顯示在 X 軸上,獎牌數量顯示在 Y 軸上。

示例

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

輸出

建立一個名為“masterDisciplines”的新資料框,用於放置這組新人員。然後,使用該資料框進行視覺化。

示例

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()

輸出

分析女性獲得的獎牌

示例

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 個國家/地區

示例

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()

輸出

運動員的演變

示例

MenOverTime = merged[(merged.Sex == 'M') & (merged.Season == 'Summer')] WomenOverTime = merged[(merged.Sex == 'F') & (merged.Season == 'Summer')] part = MenOverTime.groupby('Year')['Sex'].value_counts() plt.figure(figsize=(20, 10)) part.loc[:,'M'].plot() plt.title('Variation of Male Athletes over time')

輸出

示例

part = WomenOverTime.groupby('Year')['Sex'].value_counts() plt.figure(figsize=(20, 10)) part.loc[:,'F'].plot() plt.title('Variation of Female Athletes over time')

輸出

結論

我們已經完成了一些資料分析,您也可以更進一步並找出更多見解。

更新於:2022-12-01

1K+ 閱讀量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告