在正式開始介紹數據功能前,我想先介紹 pybaseball 的球員 ID 搜尋功能。因為各大網站辨別球員的方式會有所不同,所以我們需要先獲得相對應的球員 ID 才能獲得資料。pybaseball 提供幾種方法來獲得這些 ID。
用球員的名字搜尋對應 ID。有三個參數可以使用:
last
:球員的姓,像是 Mike Trout 就是 Trout。不分大小寫,需要是字串。first
:球員的名,像是 Aaron Judge 就是 Aaron。不分大小寫,需要是字串,非必選。fuzzy
:是一個布林值,當我們輸入的名字搜尋不到,fuzzy 會回傳五個最接近輸入名稱名字的球員結果,非必選。這邊用大谷(Ohtani)翔平(Shohei)當作範例,也是我昨天提供的範例程式:
from pybaeball import playerid_lookup
playerid_lookup('Ohtani', 'Shohei')
執行後的結果如下:
key_mlbam
:大聯盟官方使用的球員 ID,如果要查 Statcast 裡的資料就會需要這個 ID。key_retro
:Retrosheet 使用的球員 ID。key_bbref
:Baseball Refererence 使用的球員 ID。key_fangraphs
:Fangraphs 使用的球員 ID。mlb_played_first
:第一次登上大聯盟的年份。mlb_played_last
:最近一次登上大聯盟的年份。除了基本的搜尋,如果多數球員符合輸入的名稱,會回傳所有符合的球員,這邊用Hu
舉例,就能同時得到胡智為跟胡金龍的資訊。
playerid_lookup('Hu')
把 fuzzy 設成 True
就能在搜尋不到結果的時候,回傳五個名字相近的球員,這邊我用我自己的姓,結果出現 Bug ,有重複的球員出現。查了一下有人開了個 Issue 處理,看之後會不會修正。
如果想要一次搜尋不同球員的話,就可以使用 player_search_list 這個 method。需要提供陣列參數 player_list,裡面的值要是 (last, first)
的組成。這個就沒有 fuzzy,需要提供正確的名字。
範例:
from pybaseball import player_search_list
player_search_list([("ohtani","shohei"), ("darvish","yu")])
假設我們只有 ID,不知道球員名稱,pybaseball 也提供可以反向搜尋的 player_reverse_lookup。或是只知道某一個 ID,想搜尋其他的 ID 也能使用這個 method。他需要提供兩個參數:
player_ids
:必須含有球員 ID,要注意 ID 須用 Integer,用字串會搜不到。key_type
:字串,查找的 ID 種類,可以查找的種類為 mlbam
、retro
、bbref
、fangraphs
,預設值為 mlbam
。官方文件提供的範例:
from pybaseball import playerid_reverse_lookup
# a list of mlbam ids
player_ids = [116539, 116541, 641728, 116540]
# find the names of the players in player_ids, along with their ids from other data sources
data = playerid_reverse_lookup(player_ids, key_type='mlbam')
# a list of fangraphs ids
fg_ids = [826, 5417, 210, 1101]
# find their names and ids from other data sources
data = playerid_reverse_lookup(fg_ids, key_type='fangraphs')
結果:
今天介紹如何查找球員 ID,之後在做球員資料搜尋的時候會頻繁用到,感謝耐心看完的大家。另外想提醒一點是有些大聯盟球員的名字有用西班牙文或其他國家的特殊字元,因此沒辦法第一時間找到名字,可以參考這個 Issue。最後附上官方的文件給大家參考,如果有遇到任何問題歡迎在 Github 留下 Issue 或是在下面留言,我會找時間去看看。明天會接著從 FanGraphs 開始介紹。