自分の記録用に。
2022/2/19追記
現在はこちらを活用している。
https://github.com/chadwickbureau
上記サイトにあるregisterをzip形式でダウンロード
↓
dataフォルダにあるpeople.csvを使う。
こちらの場合でもretrosheetやfangraphsのIDとの紐づけが可能なようだ。こっちのほうが漏れはなさそう。確認はしていない。
library(tidyverse)
statcast <- read_csv("statcast_data.csv") #ダウンロードしたstatcastデータ
ID <- read_csv("people.csv")
ID <- ID %>%
select(key_mlbam, name_last, name_first) %>%
mutate(name_full = paste(name_first, name_last, sep = " ")) %>%
select(key_mlbam, name_full)
statcast <- statcast %>%
left_join(ID, by = c("batter" = "key_mlbam"))
2021/6/29作成
baseballrなどを活用してstatcastのデータを収集した際、選手のデータはplayerIDなるもので記録されている。
例えば、AJ Pollockは572041。この数値はMLB.comやbaseballsavantの選手個人のページのURLにも活用されている。
ただ、Rなどで解析するときに選手IDではどの選手を示しているのかわからない。
そのような時に照合してくれるのがSmartFantasyBaseballというサイト
https://www.smartfantasybaseball.com/tools/
ここでダウンロードできるエクセルファイルやcsvには全選手の選手IDと選手名が照合できるようになっている。
また、MLB.comやbaseballsavantの選手IDだけでなく、yahooなどの選手IDにも対応しているらしい。自分はstatcastのデータ収集にしか使わないので詳細は調べていない。
そして、最大の問題点は、全ての選手に対応しきれていないということ。例えば田中賢介とかは入っていない。
DOES THE PLAYER ID MAP INCLUDE ALL MLB PLAYERS?
No. The tool is intended to be used for fantasy baseball purposes. Accordingly, the goal is to include only “fantasy relevant” players. That’s a purposely vague threshold. In the preseason, I generally keep the top 750ish players accordingly to NFBC ADP included in the Player ID Map. This should be enough players to cover most normal leagues. It’s possible the Player ID Map will not be deep enough for your 20-team NL-only league, your AL Central-only league, or your middle-reliever contest. Keep reading for advice on how to get more players added to the Player ID Map.
とのこと。解析とかする時は基本的にIDでフィルタリングやグルーピングをして、グラフ化時のラベル付けにこの対応表を使うといいかも。
statcastから取得したデータをstatcast.csv、
上記サイトで取得したデータをID.csv
と保存した時、statcastデータのIDに対応した選手名の行を追加するときのRのコードは以下の通り
statcast <- read_csv("statcast.csv") %>%
select(-X1)
ID <- read_csv("ID.csv") %>%
select(MLBID, MLBNAME)
statcast %>%
left_join(ID, by =c("batter" = "MLBID")) %>%
rename(BatterID = MLBNAME) -> statcast_ID
事例として、2017年のstatcastデータを集計し、打者別にx軸にフライ打球数、y軸にゴロ打球数をプロットする。そしてフライ打球数が250以上、ゴロ打球数が100以下のプロットに名前をラベル付け事例を書いてみる。(上のコードの続きで記載する)
library(ggplot2)
statcast_ID %>%
filter(type == "X") %>%
group_by(batter, bb_type) %>%
summarize(n = n()) %>%
pivot_wider(names_from="bb_type",
values_from="n", values_fill = 0) -> player_bb
player_bb %>%
left_join(ID, by = c("batter" = "MLBID") )-> player_bb2
library(ggrepel)
ggplot(player_bb2, aes(x = fly_ball, y = ground_ball, label = MLBNAME)) + geom_point() +
geom_text_repel(data = filter(player_bb2, ground_ball > 270, fly_ball<100),
aes(fly_ball, ground_ball, label = MLBNAME))
pivot_widerは便利