俗話說得好:「萬事起頭難」,當你忽然心血來潮想要在下班、下課之餘製作_side project_時,往往會不知道該從何下手。我自己覺得可以從兩個大方向來切入,一是「職涯規劃」,二是「興趣」。所謂的職涯規劃,就是從自己有興趣的行業構想主題,無論是金融業、科技業、醫療產業還是電商,不同的產業關注的議題和需要解決的問題都不盡相同。以職涯規劃作為主題發想,一方面可以讓自己更清楚地了解對這個行業的興趣程度,另一方面也能增加自己的domain knowledge。但對我而言,從自己的興趣著手會更直截了當,因為要足夠熱愛才有辦法變成興趣,日常的一切事物其實都是很好的題材。
以我個人來說,身為十年的資深(?)NBA球迷,籃球對我來說就像伴侶一樣。在鐵人賽的最後,我希望能結合我的摯愛來做一個ending。
要獲得NBA數據除了透過爬蟲或別人整理好的tabular data外,還可以透過nba_api
這個套件來做NBA分析。以下簡單示範如何透過nba_api
來做應用。
程式碼如下:
!pip install nba_api
from nba_api.stats.static import players
from nba_api.stats.endpoints import playercareerstats
# 匯入NBA players的資料
nba_players = players.get_players()
# 查詢特定球員ID
name = 'Kevin Durant'
for player in nba_players:
if player['full_name'] == name:
print(player['id'])
# 顯示特定球員生涯數據(這裡以KD為例)
career = playercareerstats.PlayerCareerStats(player_id='201142')
career.get_data_frames()[0]
有了生涯數據後就可以做EDA跟visualization
程式碼如下:
import matplotlib.pyplot as plt
import seaborn as sns
from nba_api.stats.endpoints import playercareerstats
# 顯示特定球員生涯數據(這裡以KD為例)
career = playercareerstats.PlayerCareerStats(player_id='201142')
df = career.get_data_frames()[0]
# EDA
print(df.info()) # 檢查dataset的基本信息
print(df.describe()) # 檢查dataset的統計摘要
print(df.isnull().sum()) # 檢查缺失值
# Visualization
plt.figure(figsize=(14, 8))
# 每賽季得分、助攻、籃板趨勢圖
plt.subplot(2, 1, 1)
sns.lineplot(data=df, x='SEASON_ID', y='PTS', label='Points')
sns.lineplot(data=df, x='SEASON_ID', y='AST', label='Assists')
sns.lineplot(data=df, x='SEASON_ID', y='REB', label='Rebounds')
plt.title('Kevin Durant Career Stats')
plt.xlabel('Season')
plt.ylabel('Count')
plt.legend()
# 每賽季投籃命中率趨勢圖
plt.subplot(2, 1, 2)
sns.lineplot(data=df, x='SEASON_ID', y='FG_PCT', label='Field Goal %')
sns.lineplot(data=df, x='SEASON_ID', y='FG3_PCT', label='3-Point %')
sns.lineplot(data=df, x='SEASON_ID', y='FT_PCT', label='Free Throw %')
plt.title('Kevin Durant Shooting Percentages')
plt.xlabel('Season')
plt.ylabel('Percentage')
plt.legend()
plt.tight_layout()
plt.show()
輸出結果如下:
從圖表可以看到KD的命中率真的穩的很誇張,難怪大家叫他easy money🤣
禮拜一要上班的話,禮拜天晚上絕對不能嗨不然隔天上班絕對往生。