今天再來介紹另一個數據網站,Retrosheet。Retrosheet 是 David Smith 在 1989 年開始與一些棒球愛好者一起開始的 Project。一開始是他們一起建立的資料庫系統,後來在 1997 年正式把它們的內容提供到網路上給全部的人免費使用。
Retrosheet 不一樣的地方是他存有各個比賽的 Play-by-Play 資料,也就是場上發生什麼狀況都會有紀錄,像是打者會怎麼出局,或是壘上跑者怎麼推進。也會每場比賽的 BoxScore 資料,可以參考它們網頁上的資料:
Retrosheet Boxscore: Cincinnati Reds 6, Atlanta Braves 3
在 pybaseball 裡面,獲得 Retrosheet 的方式會跟使用 Lahman
一樣,都是從 Chadwick Bureau 的 Github 裡的檔案抓取資料,不一樣的地方是 Retrosheet 有些 functions 必須取得 Github 的 token 後加入進 GH_TOKEN
這個環境變數才能執行。如何取得 Token 可以參考 Github 的官方文件:
Managing your personal access tokens - GitHub Docs
這邊示範如何在 Colab
上面新增環境變數
from pybaseball import season_game_logs
# 把 <your_token> 換成自己在 Github 上面產生的 token
%env GH_TOKEN=<your_token>
# 如果沒加入環境變數這一行會回傳錯誤
season_game_logs(2022)
需要 token 的 functions 有:
events(season, type="regular", export_dir=".")
:下載輸入球季當季的所有 play-by-play 事件,參數 type
可以選擇例行賽 (regular)、季後賽 (post) 與全明星賽 (asg)。另一個參數 export_dir
則是下載的路徑,因為目前 pybaseball 還沒有把 retrosheet 的檔案轉成 DataFrame
,所以會用下載的方式把檔案下載下來。rosters(season)
:獲得輸入球季的球員資料。不知道為什麼我試了一些球季都會回傳錯誤,可能之後要開個 Issue 問問看。schedules(season)
:獲得輸入球季的賽程資料。可以知道星期與早場晚場等資訊。season_game_logs(season)
:獲得輸入球季的逐場資料。回傳欄位會跟 events
一樣,但只會包含當場的數據總和與先發球員名單。不需要的 functions 則有:
park_codes()
:球場資訊,可以知道甚麼時後啟用跟什麼時候停用。world_series_logs()
:獲得世界大賽的比賽資訊,會跟 season_game_logs
回傳一樣的欄位格式。all_star_game_logs()
:獲得全明星賽的比賽資訊,會跟 season_game_logs
回傳一樣的欄位格式。wild_card_logs()
:獲得季後賽外卡賽的比賽資訊,會跟 season_game_logs
回傳一樣的欄位格式。division_series_logs()
:獲得季後賽分區系列賽的比賽資訊,會跟 season_game_logs
回傳一樣的欄位格式。lcs_logs()
:獲得世界大賽前的聯盟大賽的比賽資訊,會跟 season_game_logs
回傳一樣的欄位格式。再次提醒目前只有 events
那個 function 會下載檔案下來,其他還是會回傳 DataFrame
,所以自己在試的時候要注意一下。
其實在 Statcast 的 Baseball Savant 出來前,很多人是在 Retrosheet 上面來得知一些投打對決的資料的,因為像是 FanGraphs 跟 Baseball Reference 都沒有那麼詳細的 play-by-play 資料,另外 Retrosheet 官網也有自己分類一些有趣的事件給使用者快速查詢,有興趣也可以上去看看:
今天介紹完 Retrosheet 之後,pybaseball 所包含的數據網站大多數已經介紹完了,感謝大家耐心地看到現在,剩下幾天會把一些還沒介紹的 functions 可能用一天介紹完,再來會介紹我之前參加數據比賽是怎麼使用 pybaseball 的,如果還有篇幅會介紹要如何在 Github 上面貢獻 pybaseball。