iT邦幫忙

2023 iThome 鐵人賽

DAY 14
0

前幾天陸續介紹了 Statcast 的打擊、投球與守備等數據方法,今天會把剩下還沒介紹的一起補完,會有跑壘相關數據,還有上次在 Day 12 - Statcast 投球篇 - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天 (ithome.com.tw) 提到的 statcast_pitcher_spin

statcast_sprint_speed

球員的衝刺數據,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)

statcast_running_splits

各衝刺距離的平均跑速,會從 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_spin

會跟使用 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_single_game

可以獲得一場的 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 資料,假設時間區間拉很長,可能會消耗很多資源,使用的時候還請多注意。如果都不設參數會抓取昨天所有比賽的 Statcast 資料。

  • start_dt:搜尋的開始日期,需符合 YYYY-MM-DD 的字串格式,預設會是昨天,如果只填開始日期會只有填入當天的資料。
  • end_dt:搜尋的結束日期,需符合 YYYY-MM-DD的字串格式,預設是 None,如果要找一天以上的資料一定要填結束日期。
  • team:篩選的隊伍,需填入隊伍簡寫像是 BOSNYY 等。
  • 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


上一篇
Day 13 - Statcast 守備篇
下一篇
Day 15 - Statcast 進階數據解釋
系列文
Python 棒球數據分析套件 pybaseball 介紹30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言