iT邦幫忙

2023 iThome 鐵人賽

DAY 11
0

跟 FanGraphs 一樣,Statcast 資料也有做分類,今天會先來介紹打擊相關的 methods。

statcast_batter

用來獲得單一打者的逐球 Statcast 數據,會需要填入三個參數,獲得的資料欄位介紹可以參考這份放在 Savant 上面的官方文件:

Statcast Search CSV Documentation | baseballsavant.com (mlb.com)

  • start_dt:搜尋的開始日期,需符合 YYYY-MM-DD 的字串格式,預設會是昨天,如果只填開始日期會只有填入當天的資料。
  • end_dt:搜尋的結束日期,需符合 YYYY-MM-DD的字串格式,預設是 None,如果要找一天以上的資料一定要填結束日期。
  • player_id:球員 ID,需為整數,可以參考 Day 03 - 球員 ID 搜尋 - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天 (ithome.com.tw) 的教學來得知 Statcast 的球員 ID (key_mlbam),為必填,沒填入數字會出現錯誤。

範例:

from pybaseball import statcast_batter

# 獲得大谷翔平(mlbam=660271)2023-03-30 到 2023-09-20 的數據
statcast_batter(start_dt="2023-03-31", end_dt="2023-09-20", player_id=660271)

# 獲得大谷翔平昨天的數據,因為他沒上場所以會是空的 DataFrame
statcast_batter(player_id=660271)

# 獲得大谷翔平 2023-03-30 當天的數據
statcast_batter("2023-03-30", player_id=660271)

# 不是例行賽的數據也可以獲得,要做資料篩選的時候可能要注意一下
statcast_batter(start_dt="2023-03-01", end_dt="2023-03-29", player_id=660271)

通常如果要抓取一天以上的資料,或需要一點時間。另外 官方文件 也有提醒就是資料最多只到 2008,再更之前的會找不到,然後 2015 前的也會沒有打擊仰角之類的進階數據,也請多注意。

statcast_batter_exitvelo_barrels

獲得打者的擊球初速相關數據,像是 avg_hit_angle (平均擊球仰角)、barrels (出色擊球)、anglesweetspotpercent (擊中甜蜜點率) 等。也可以從這頁獲得資訊:

https://baseballsavant.mlb.com/leaderboard/statcast

  • year:查詢的球季,必填,需為整數。
  • minBBE最小 Batted Ball Event (BBE),也就是最小的打擊事件發生次數,因為當一個打擊有結果,Statcast 會標記他為一個事件像是三振或安打跟出局,這時候就會算成一個 BBE。預設是 Qualified,但跟傳統打擊數據的 3.1 * 球隊出賽數不一樣,這個是 2.1 * 球隊出賽數

範例:

from pybaseball import statcast_batter_exitvelo_barrels

# 獲得 2023 球季的打擊初速相關數據
statcast_batter_exitvelo_barrels(2023)

# 獲得 2023 球季的打擊初速相關數據但沒有限制 BBE
statcast_batter_exitvelo_barrels(2023, minBBE=0)

statcast_batter_expected_stats

打者預期成績,x-Stats 系列像是 xwOBA (預期 wOBA)、xBA (預期打擊率)、xSLG (預期長打率)。Statcast 會根據打者擊出的球的數值,像是擊球初速跟擊球仰角,並移除守備和球場因素,最後進行預算打擊結果,而產生各種預期數據。希望能更客觀評比打者。

Statcast Expected wOBA, xBA, xSLG | baseballsavant.com (mlb.com)

  • year:查詢的球季,必填,需為整數。
  • minPA:最小打席數,預設是 Qualified ,也跟一般的不一樣,是用 2.1 * 球隊出賽數計算。
from pybaseball import statcast_batter_expected_stats

# 獲得 2023 球季的打擊預測數據
statcast_batter_expected_stats(2023)

# 獲得 2023 球季的打擊預測數據但沒有限制打席數
statcast_batter_expected_stats(2023, minPA=0)

statcast_batter_percentile_ranks

獲得打者的百分比排名,也就是 PR 值,最高是 100,最低是 0,用來知道球員的進階數據在聯盟中的排名分佈為何,可以從這個頁面觀看,可以看到 Savant 在不同區間用不同顏色表示:

Statcast Percentile Rankings | baseballsavant.com (mlb.com)

  • year:查詢的球季,必填,需為整數。
from pybaseball import statcast_batter_percentile_ranks

# 獲得 2023 球季的各項打擊數據 PR 值
statcast_batter_percentile_ranks(2023)

要注意的是裡面有些數據要球員符合資格才會算進 PR 裡,像是 xwOBA,一樣是只會留超過 2.1 * 球隊出賽數個打席數的球員。但如果是像擊球初速或衝刺數字這種單一數字的 PR 就沒有限制。另外也能看到防守數據 OAA (Out Above Average) 的 PR。

statcast_batter_pitch_arsenal

顯示不同球種對不同打者的數據,可以看打者對某些特定球種的表現,還有 Run Value (得分價值),如果是透過網頁還能點選其中一列觀看逐球數據與影片:

Statcast Pitch Arsenal Stats | baseballsavant.com (mlb.com)

  • year:查詢的球季,必填,需為整數。
  • minPA:最小打席數,預設是 25 個打席。
from pybaseball import statcast_batter_pitch_arsenal

# 獲得 2023 球季各打者對決各種球種的數據
statcast_batter_pitch_arsenal(2023)

# 獲得 2023 球季各打者對決各種球種的數據但沒有限制打席數
statcast_batter_pitch_arsenal(2023, minPA=0)

本日小結

今天介紹完了 Statcast 的打擊數據 methods,再次感謝大家耐心的看完。裡面提到很多 Statcast 的進階數據,之後會有另一篇再詳細介紹。相較於 FanGraphs 的 methods,Statcast 的需要調整的參數比較少,相對使用會比較容易,但也分成比較多種 methods,大家可以根據需要的內容挑選適合的一個。

其實 Savant 上面也還有很多其他的功能沒放進 pybaseball ,可能以後會陸續加進去,大家也可以多關注一下他們的更新情報。明天接下來介紹關於投球的 methods。

今天的程式碼:
https://colab.research.google.com/drive/1o_9h166NxTnMqQzGZlMOY1pl1CBt460G?usp=sharing


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

尚未有邦友留言

立即登入留言