iT邦幫忙

2023 iThome 鐵人賽

DAY 5
0

昨天介紹了 FanGraphs 這個網站,讓大家對這個數據網站有的資訊有初步的了解。今天會從 pybaseball 上的 FanGraphs 打擊資料開始介紹。

batting_stats

用來取得 FanGraphs Leaderboard 的打擊資料,官方文件提供 5 個參數使用:

start_season:開始的球季,會依據這個參數獲得以他為起點的數據。需為整數,必填。舉例來說如果要查找今年的資料,就會是 batting_stats(2023)

end_season:結束的球季,配合前面的參數,獲得所選範圍的資料,如果不填這個欄位的話會只抓 start_season 所填入的球季。

league:字串,可以篩選想要的聯盟,all 取得全部資料、al 取得美聯資料、nl 取得國聯資料。另外在這個 PR 有提到也能尋找其他聯盟像是 黑人聯盟(Negro League) 的資料,不過會需要注意年分,不然可能會得到錯誤訊息,我有另外開一個 Issue 反應這個問題。預設是 all

qual:資料最小打席數,預設值是 None 但程式會幫我們轉成上一篇提到的 Qualified,也就是 3.1 * 球隊出賽數的打席數。

ind:當我們選複數以上的球季,又想直接獲得這些球季的數據總和,可以把這個參數設為 ind=0,程式會自動幫我們加總或平均相關數據。不過要注意一點,Source Code 上面寫說這個參數已經棄用,如果要用相似的功能要用 split_seasonsTrue 的話會把各季分出來,False 的話會總和。預設為 True,雖然他的註解寫 False 但程式碼是 True

範例:

from pybaseball import batting_stats

# 2023 打擊排行榜資料
data = batting_stats(2023)

# 2023 最小打席數 50 的打擊排行榜資料
data = batting_stats(2023, qual=50)

# 2023 美聯的打擊排行榜資料
data = batting_stats(2023, league="al")

# 2023 黑人聯盟的打擊排行榜資料
# data = batting_stats(2023, league="mnl") 2023 沒有資料會出錯
data = batting_stats(1940, league="mnl")

# 2020 - 2023 打擊排行榜資料
data = batting_stats(2020, 2023)

# 2020 - 2023 打擊排行榜資料資料總和
data = batting_stats(2020, 2023, split_seasons=False)

由於回傳的資料龐大,我就不提供表格,大家可以自己玩玩看各種參數組合。我想提的一點是回傳的欄位,可以發現,在沒調整參數的情況,會有 319 個欄位 (我們可以執行 data.columns 來知道回傳的 DataFrame 有多少欄位)。

會那麼多的原因是 pybaseball 的預設是把 Fangraphs 上所有可能抓下來,之後會打算有一篇去帶大家看 Source Code,那時候會再做更詳細的解說。

如果想要只拿到自己想要的欄位,就會需要傳入 stat_columns 這個參數。他要帶的資料為一個字串或是一個字串陣列,會需要知道不同欄位的代表字串,可以從 batting_data_enum.py 這個檔案知道對應的字串。

範例:

batting_stats(2023, stat_columns=['1','2','3','4','5','6','7','8', 'SO'])

結果 (前五名):

應用

如同上一篇的介紹,這個 method 會抓下來的資料是 FanGraphs 所排的打擊排行榜數據,會依照 WAR 做排序。有了這些資料,我們可以大致了解現在大聯盟最火燙的打者們有哪些,以及他們的各項進階數據,也可以藉此使用機械學習之類的演算法,知道各項數據的相關性。

再更延伸的運用,可以使用上面提到的 splits_season=False 參數來獲得球員的累積資料,來知道球員的生涯累積。

如果想要只看一位球員的資料的話,其實也可以辦到,只需要加 players 這個參數並代入想搜尋的球員 ID,就能獲得數據,players 可以是一個字串或是一個字串陣列。有趣的是他也會照 FanGraphs 的標準 (WAR) 去做排序,所以也可以比較不同球員或是同個球員不同球季的排名。

範例:

# 大谷翔平與 Cody Bellinger 2020 - 2023 成績排名
# qual 要設成 0 不然不符合最小打席會搜不到
batting_stats(2020, 2023, players=[19755, 15998], qual=0)

結果:

本日小結

今天介紹了可以取得 FanGraphs Leaderboard 打擊資料的 batting_stats method,感謝大家耐心地看完。其實還有其他參數我沒介紹到,官方文件也沒提供,會需要自己看程式碼,不過剩下的都是比較少用到的,可能等之後介紹原始碼的時候再多介紹。關於欄位的部分也因為實在太多種類,我也會另外開一篇介紹裡面一些我覺得挺重要或有趣的進階數據,這樣可能會比較好吸收。打擊完明天換介紹投球數據,希望大家會喜歡,也歡迎任何留言討論或是發現我有任何錯誤提醒我,再次感謝大家的閱讀。

本日的範例程式:https://colab.research.google.com/drive/1i3JytNE8nhgr6R_1YW0tvMKo1_a84i30?usp=sharing


上一篇
Day 04 - FanGraphs 介紹
下一篇
Day 06 - FanGraphs 投球篇
系列文
Python 棒球數據分析套件 pybaseball 介紹30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言