iT邦幫忙

2023 iThome 鐵人賽

DAY 21
0

之前幾篇介紹關於 pybaseball 裡使用 Baseball Reference 資料的 functions,在文章內容裡也有包含一些進階數據的介紹,今天會藉由 Splits Page 再多介紹其他數據。

get_splits

在介紹數據前,需要再介紹另外一個 pybaseball 的 function get_splits。這個方法主要是從 Splits Page 這個頁面獲得資料 (範例是 Ronald Acuña Jr. ),裡面提供各種情境的分項數據,對於了解一個球員的習性或特徵十分方便。他會有四個參數可以使用:

  • playerid:字串,必填,需要填入 BR 自己獨特的球員 ID,可以從 player_id_lookup 這個 function 輸入球員姓名來得知,詳細的介紹可以看我之前的文章:

Day 03 - 球員 ID 搜尋 - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天 (ithome.com.tw)

  • year:整數,非必填,想知道數據的年度,預設會是變成搜尋生涯數據。
  • player_info:布林值,非必填,如果設成 True 會多回傳球員的資訊,像是守備位置、慣用手、身高體重與球隊等資訊,如果是 False 就會隱藏,預設是 False
  • pitching_splits:布林值,非必填,要設成 True 才會回傳投手數據,預設會是打者數據,就算搜尋的球員主要都擔任投手。

範例,投手用王建民當例子:

from pybaseball import get_splits

# 獲得 Acuna Jr. 的分項資料
acuna = get_splits("acunaro01")

# 獲得王建民的分項資料
cmw_career = get_splits("wangch01", pitching_splits=True)

# 獲得 2007 王建民的分項資料
cmw_2007 = get_splits("wangch01", year=2007, pitching_splits=True)

# 獲得 2007 王建民的分項資料與球員資訊
cmw_2007_info = get_splits("wangch01", year=2007, player_info=True, pitching_splits=True)

這邊注意幾點,打者沒有 player_info 會直接回傳 DataFrame 的型態,如果有加球員資訊會是 Tuple。如果是投手的話會回傳長度為 2 的 Tuple,如果有加球員資訊會是長度為 3 的 Tuple,第二個 Item 會是球員資訊。用以下的程式碼可以知道有哪些欄位組合,用來得知分項有哪些。

# 打者所有的欄位組合
display(acuna.index.values.tolist())

# 投手所有的欄位組合
display(cmw_career[0].index.values.tolist())
display(cmw_career[1].index.values.tolist())

可以看到有非常多種不同的分項,接下來會挑幾個來介紹。

Splits Type

Clutch Stats

關鍵時刻的球員數據,細項可能會有:兩出局得點圈有人、比賽後段同時比分接近 (7 局或之後比分同分、領先一分或是追平分站上打擊區的情況),還有各分差的成績,可以看出球員面對這些情況下的成績。

Leverage

張力程度,會根據 WPA (Win Probability Added) 增加勝率去計算該打席的緊張程度,這個分項會顯示在高中低張力下的球員成績,使用情況會跟 Clutch Stats 類似但是以不同依據的數據去做計算。張力的計算會隨著分差、壘包情況、局數跟出局數而有不同變化,詳情可以參考 BR 的介紹頁:

Win Expectancy (WE) and Run Expectancy (RE) Stats | Baseball-Reference.com

Advanced OPS+

OPS+ 是根據聯盟打者平均 OPS 去計算的數據標準,聯盟平均的打者 OPS+ 為 100,高於平均 20% 會是 120,如果低於聯盟平均 20% 為 80,BR 在分項這邊又另外定義了兩個不同的 OPS+,差異為計算平均的標準不一樣:

tOPS+

會根據球員的生涯為標準,如果他表現高於他自己平均,tOPS+ 就會大於 100,反之就會小於 100,可以由此知道在各情況打者是不是表現得比平常更好或更差。

sOPS+

會根據各分項的聯盟平均為標準,如果球員的表現在該分項高於該分項的聯盟平均,sOPS+ 就會大於 100,反之則小於 100。可以由這個數據項目知道該球員在各分項的表示是否比聯盟平均還好。

本日小結

今天介紹 Baseball Reference 提供的強大分項數據資料庫,以及解釋一些特別的數據,感謝大家耐心地看完。BR 裡有的分項真的很多元很齊全,很推薦大家上去看看,明天會介紹 pybaseball 的程式碼是怎麼獲得這些 BR 的資料的。

本日的程式碼:
https://colab.research.google.com/drive/1uEa4SFOa9saUC-YLJUW93L-R5Pt8_EEN?usp=sharing


上一篇
Day 20 - Baseball Reference WAR 篇
下一篇
Day 22 - Baseball Reference 原始碼
系列文
Python 棒球數據分析套件 pybaseball 介紹30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言