前幾天陸續介紹了 Statcast 的打擊、投球與守備等數據方法,今天會把剩下還沒介紹的一起補完,會有跑壘相關數據,還有上次在 Day 12 - Statcast 投球篇 - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天 (ithome.com.tw) 提到的 statcast_pitcher_spin
。
球員的衝刺數據,Statcast 會計算出球員的 Competitive Runs (本壘到一壘的衝刺,還有長打跑到二壘的衝刺),並用來算各球員的平均跑速。另外像打擊的 Barrel,衝刺數據也會另外計算 Bolt (跑速超過每秒 30 英呎 的 Competitive Runs)。Savant 有提供各守備位置的圖表供大家參考:
Statcast Sprint Speed Leaderboard | baseballsavant.com (mlb.com)
year
:查詢的球季,必填,需為整數。min_opp
:最小衝刺機會,預設是 10 次。範例:
from pybaseball import statcast_sprint_speed
# 獲得 2023 球季至少有 50 次 Competitive Runs 的衝刺資料
statcast_sprint_speed(2023, 50)
各衝刺距離的平均跑速,會從 0 英呎到 90 英呎每 10 英呎顯示一次平均跑速。
year
:查詢的球季,必填,需為整數。min_opp
:最小衝刺機會,預設是 5 次。raw_splits
:布林值,如果是 True 會回傳各英呎下的平均跑速,False 會回傳各英呎下的跑速 PR 值。預設是 True。但我發現下載下來的 CSV 檔不會是 PR,因此設 True or False 沒有差別。目前沒看到有人開 Issue,之後再看看怎麼處理。範例:
from pybaseball import statcast_running_splits
# 獲得 2023 球季的各距離衝刺資料
statcast_running_splits(2023)
# statcast_running_splits(2023, splits=False) 會是一樣的資料
# 獲得 2023 球季至少有 50 次 Competitive Runs 的各距離衝刺資料
statcast_running_splits(2023, 50)
會跟使用 statcast_pitcher
一樣,不過回傳值會多回傳球的旋轉資料,運算方式是參考 Alan Nathan 教授所撰寫的 文章:
Mx
:單獨受到 馬格納斯效應 影響的 X-軸位移量,往投手視角的左邊。Mz
:單獨受到 馬格納斯效應 影響的 Z-軸位移量,投手視角向上。theta
:根據位移的 0 - 90 轉軸角度,0 度代表轉軸跟位移垂直,90 度代表轉軸跟位移平行。phi
:X-Z 面與 X 軸的角度,官方文件解釋是從捕手角度看到的球的轉軸,但我看回傳資料會有破 360 的情況,我也不是很了解,這裡有當初的討論 PR,也許可以參考看看。範例:
from pybaseball.statcast_pitcher_spin import statcast_pitcher_spin
# 獲得 達比修 (mlbam=506433) 的 Statcast + 轉軸資料
statcast_pitcher_spin('2023-07-01', '2023-07-31', player_id = 506433)
要注意的是這個 method 一樣沒有 import 在 init.py ,所以也要另外寫一個 import。
可以獲得一場的 Statcast 資料,需要知道 game_pk
(比賽 ID)。ID 可以去從 Savant 的網址上知道,例如:https://baseballsavant.mlb.com/gamefeed?gamePk=716480
範例:
from pybaseball.statcast import statcast_single_game
# 獲得 2023-09-22 洋基對響尾蛇的 Statcast 資料
statcast_single_game(716480)
可以獲得一段時間區間內,所有比賽的 Statcast 資料,假設時間區間拉很長,可能會消耗很多資源,使用的時候還請多注意。如果都不設參數會抓取昨天所有比賽的 Statcast 資料。
start_dt
:搜尋的開始日期,需符合 YYYY-MM-DD
的字串格式,預設會是昨天,如果只填開始日期會只有填入當天的資料。end_dt
:搜尋的結束日期,需符合 YYYY-MM-DD
的字串格式,預設是 None
,如果要找一天以上的資料一定要填結束日期。team
:篩選的隊伍,需填入隊伍簡寫像是 BOS
、NYY
等。verbose
:布林值,可以在執行的時候看到每個階段的進度,因為通常抓取的資料龐大,pybaseball 會自動切成不同階段抓取資料。預設是 True
。parallel
:布林值,因為有時候時間拉長,抓取資料量變大會執行很慢,就可以開啟平行處理讓速度快一點,但要看執行環境有沒有支援多執行緒處理。預設是 True
。from pybaseball import statcast
# 獲得昨天所有比賽的 Statcast 資料
statcast()
# 獲得 7 月所有比賽的 Statcast 資料
statcast('2023-07-01', '2023-07-31')
# 獲得 7 月天使所有比賽的 Statcast 資料
statcast('2023-07-01', '2023-07-31', team="LAA")
終於把所有 Statcast methods 介紹完,感謝大家耐心地看完。很抱歉最近都很晚才更新,白天實在太忙沒時間寫,之後會努力想辦法趕上時間完成。介紹完 methods 明天會介紹一些 Statcast 的進階數據,很多可能在之前的文章裡有先簡單介紹了,明天會講解的更詳細些。
本日程式碼:https://colab.research.google.com/drive/1COvIfgnFQ6_v9qypF3ecPKxX9zE2Id6O?usp=sharing