なお,セイバー指標等の説明についてはこの資料では省略する. 日本語での説明としては,「1.02 ESSENSE OF BASEBALL」というサイト内の
や,ページ上部の6つのリンクが非常に詳しい.
また,パッケージ自体の説明は公式サイト
や,Marchi, Albert and Baumer (2018) “Analyzing Baseball Data with R, Second Edition” などを参照されたい.
なお,MLB以外のデータ(NCAA等)も一部取得可能であるが,ここでは触れない.
baseballr パッケージは CRAN にはなく,github からのインストールが必要.
devtools パッケージのインストールをした上で,以下を実行.
devtools::install_github("BillPetti/baseballr")
最新バージョンは 0.5.0(2019年6月24日リリース). 詳しくはhttp://billpetti.github.io/baseballr/を参照のこと.
ついでにいくつかのパッケージも読み込んでおく(require しているがもちろん library でも可).
require("baseballr")
require("tidyverse")
require("DT")
require("knitr")
野球のデータは大きく分けて,
に分けられる.順に紹介する.
指定シーズンの各チームの試合結果は team_results_bref 関数で取得できる.
datatable(team_results_bref("LAA", 2019))
指定日のチーム順位を取得する場合は standing_on_date_bref 関数を用いる.
standings_on_date_bref(date = "2019-07-16", division = "AL West", from = FALSE)
## $`AL West_up to_2019-07-16`
## Tm W L W-L% GB RS RA pythW-L%
## 1 HOU 59 37 0.615 -- 493 407 0.587
## 2 OAK 54 41 0.568 4.5 497 407 0.590
## 3 TEX 50 45 0.526 8.5 511 497 0.513
## 4 LAA 50 46 0.521 9.0 501 473 0.526
## 5 SEA 39 59 0.398 21.0 486 587 0.414
指定期間の打者のスタッツを見るには daily_batter_bref 関数を用いる. なぜか警告が出るが,一応取得できている.
bat1 <- daily_batter_bref(t1 = "2019-03-20", t2 = "2019-07-16")
datatable(bat1)
指定期間の投手のスタッツを見るには daily_pitcher_bref 関数を用いる. 同様に警告が出るが,一応取得できている.
pit1 <- daily_pitcher_bref(t1 = "2019-03-20", t2 = "2019-07-16")
datatable(pit1)
指定期間の打者ランキング(リーダーボード)は fg_bat_leaders 関数で取得できるが,データ提供元のフォーマットが変わったのか(マニュアル上正しいが)エラーが返ってくる.
head(fg_bat_leaders(x = 2015, y = 2016, league = "all", qual = "y", ind = 0)) %>% select(Seasons:AVG)
全体および打者利き腕毎のパークファクターは fg_park および fg_park_hand 関数で取得できる.
park18 <- fg_park(2018)
datatable(park18)
park18hand <- fg_park_hand(2018)
datatable(park18hand)
wOBAやFIPなどのセイバー指標を計算するために必要な定数は fg_guts 関数で取得できる.
datatable(fg_guts())
打者の各試合ごとの結果は batter_game_logs_fg 関数で取得できる. 例えば,大谷翔平選手の各試合ごとの結果を取得するには以下のようにすればよい.
ohtani2019b.fg <- batter_game_logs_fg(playerid = 19755, year = 2019)
datatable(ohtani2019b.fg)
ここで playerid には調べたい打者のfangraphsでのIDを入れる. fangraphs.com で “Shohei Ohtani” を検索すると,結果のページのURLが https://www.fangraphs.com/statss.aspx?playerid=19755&position=DH となり,そこにIDが表示されている.
あるいは,以下のようにして取得することもできる.
playerid_lookup(last_name="Ohtani", first_name="Shohei")$fangraphs_id
## [1] 19755
同様に投手の成績は以下のように pitcher_game_logs_fg 関数で取得できる.大谷翔平選手の投手としての2018年の成績は以下のように取得できる. 野手同様,playerid には調べたい投手のfangraphsでのIDを入れる.
ohtani2018p.fg <- pitcher_game_logs_fg(playerid = 19755, year = 2018)
datatable(ohtani2018p.fg)
MLB の Play by Play データは statcast(や以前は PITCHf/x)による トラッキングデータである.これらの取得には
を用いることができるが,ここでは汎用的な scrape_statcast_savant 関数を紹介する.なお,playerid を NULL とすれば,全選手のデータを取得できる.
kikuchi <- scrape_statcast_savant(start_date="2019-03-20", end_date="2019-07-18", playerid=579328, player_type = 'pitcher')
datatable(kikuchi)
playerid は,先の FanGraphs のものとは異なり,MLBAM と呼ばれるID(baseballsavant.com で検索するとURLに表示されるもの)なので注意されたい.
なお,MLBAMは以下の関数で取得することも可能である.
playerid_lookup(last_name="Kikuchi", first_name="Yusei")$mlbam_id
## [1] 579328
打者についても同様にデータ取得できる.
ohtani <- scrape_statcast_savant(start_date="2019-03-28", end_date="2019-07-17", playerid=660271, player_type = 'batter')
datatable(ohtani)
なお,取得できるのは2008年以降である.また,複数年に渡ったデータは入手できないようである.
地区ごとのチーム順位の推移はviz_gb_on_period関数で表示できる.
viz_gb_on_period("2019-07-01","2019-07-17","AL West")
## # A tibble: 10 x 7
## League Date Team W L WLpct GB
## <chr> <date> <chr> <int> <int> <dbl> <dbl>
## 1 AL West 2019-07-01 HOU 53 32 0.624 0
## 2 AL West 2019-07-01 TEX 46 38 0.548 6.5
## 3 AL West 2019-07-01 OAK 46 39 0.541 7
## 4 AL West 2019-07-01 LAA 42 43 0.494 11
## 5 AL West 2019-07-01 SEA 37 51 0.42 17.5
## 6 AL West 2019-07-17 HOU 60 37 0.619 0
## 7 AL West 2019-07-17 OAK 55 41 0.573 4.5
## 8 AL West 2019-07-17 TEX 50 46 0.521 9.5
## 9 AL West 2019-07-17 LAA 50 47 0.515 10
## 10 AL West 2019-07-17 SEA 39 60 0.394 22
このグラフはオンマウスで数値が表示される機能も有している.
トラッキングデータからスプレー・チャートを描く関数ggspraychartも用意されている (ggprot2 の機能を援用している).
ggspraychart(ohtani, point_alpha = .6, fill_legend_title = "Hit Type", fill_value = "bb_type",
fill_palette = c("1"="#A2C8EC", "2"="#006BA4", "3"="#FF940E",
"Out"="#595959", "4"="#C85200")) +
facet_wrap(~game_year, nrow = 2) +
ggtitle("\nOhtani") +
labs(subtitle = "Spray Charts")
ggspraychart(ohtani, point_alpha = .2, density = TRUE, bin_size = 30) +
facet_wrap(~game_year, nrow = 2) +
ggtitle("\nOhtani") +
labs(subtitle = "Spray Charts")
打者の指標として最もよく用いられる wOBA は woba_plus 関数を用いて計算できる.daily_batter_bref でスクレイピングしたデータセットから計算すればよい.
bat1w <- woba_plus(bat1)
datatable(bat1w)
投手の指標として代表的な FIP は,同様に daily_pitcher_bref でスクレイピングしたデータセットから fip_plus 関数で計算できる.
pit1w <- fip_plus(pit1)
datatable(pit1w)
statcast のデータに得点期待値や linear weight を付加する関数が run_expectancy_code である.
ohtani1 <- run_expectancy_code(ohtani)
他にも以下のような関数などが存在する:
run_expectancy_table(ohtani1)
linear_weights_savant(ohtani1)
edge_scrape("2019-03-20", "2019-07-17", "pitcher") %>% .[, c(1:3,7:12)] %>% head(10)
team_consistency(2019)
改めて,菊池投手の statcast データを簡単に触ってみる.
datatable(kikuchi)
変数の説明は以下の通り.詳細は公式サイトを参照されたい.
| 変数名 | 説明 |
|---|---|
| pitch_type | 球種略称(statcast からの推定結果) |
| game_date | 試合日 |
| release_speed | 球速の初速(2008〜16 は PITCHf/x、2017以降はstatcast) |
| release_pos_x | リリースポイントの水平位置(捕手視点、フィート) |
| release_pos_z | リリースポイントの垂直位置(フィート) |
| player_name | プレイヤー名 |
| batter | 打者の MLBAM ID |
| pitcher | 投手の MLBAM ID |
| events | 打席結果 |
| description | 投球結果 |
| spin_dir | (現システムでは不使用) |
| spin_rate_deprecated | (現システムでは不使用) |
| break_angle_deprecated | (現システムでは不使用) |
| break_length_deprecated | (現システムでは不使用) |
| zone | キャッチャー視点のプレート上でのゾーン(1〜14、ストライクゾーン内左上から1〜9、ゾーン外左上から11〜14) |
| des | 打席結果の説明 |
| game_type | 試合の種類(E=Exhibition、S=Spring Training、R=Regular Season、F=Wild Card、D=Divisional Series、L=League Championship Series、W=World Series) |
| stand | 打席左右 |
| p_throws | 投手左右 |
| home_team | ホームチーム |
| away_team | アウェイチーム |
| type | 投球結果概要 B=ボール、S=ストライク、X=インプレー |
| hit_location | 最初にボールに触れた野手ポジション |
| bb_type | 打球タイプ ground_ball(ゴロ)、line_drive(ライナー)、fly_ball(フライ)、popup(ポップアップ) |
| balls | 投球前ボールカウント |
| strikes | 投球前ストライクカウント |
| game_year | 試合年 |
| pfx_x | 水平方向の変化量(捕手視点、フィート) |
| pfx_z | 垂直方向の変化量(フィート) |
| plate_x | ホームプレート上の水平位置(捕手視点) |
| plate_z | ホームプレート上の垂直位置 |
| on_3b | 投球前三塁ランナー |
| on_2b | 投球前二塁ランナー |
| on_1b | 投球前一塁ランナー |
| outs_when_up | 投球前アウトカウント |
| inning | 投球前イニング |
| inning_topbot | 投球前の表裏 |
| hc_x | 打球のx座標 |
| hc_y | 打球のy座標 |
| tfs_deprecated | (現システムでは不使用) |
| tfs_zulu_deprecated | (現システムでは不使用) |
| fielder_2 | 投球前捕手のMLBAM ID |
| umpire | (現システムでは不使用) |
| sv_id | ゲームごとのプレーID |
| vx0 | リリースポイント付近(y=50フィート)での球速のx成分(フィート/分) |
| vy0 | リリースポイント付近(y=50フィート)での球速のy成分(フィート/分) |
| vz0 | リリースポイント付近(y=50フィート)での球速のz成分(フィート/分) |
| ax | リリースポイント付近(y=50フィート)での球速の加速度のx成分(フィート/分) |
| ay | リリースポイント付近(y=50フィート)での球速の加速度のy成分(フィート/分) |
| az | リリースポイント付近(y=50フィート)での球速の加速度のz成分(フィート/分) |
| sz_top | バッターのストライクゾーンの上端 |
| sz_bot | バッターのストライクゾーンの下端 |
| hit_distance_sc | 打球の飛距離 |
| launch_speed | 打球初速度(一部推定したものも含まれる) |
| launch_angle | 打球角度(一部推定したものも含まれる) |
| effective_speed | 体感球速(ピッチャーのリリースポイントを考慮) |
| release_spin_rate | 回転速度 |
| release_extension | ピッチング・プレート前端から投球のリリース・ポイントまでの距離 |
| game_pk | 試合ID |
| pitcher_1 | 投手のMLBAM ID |
| fielder_2_1 | 捕手のMLBAM ID |
| fielder_3 | 一塁手のMLBAM ID |
| fielder_4 | 二塁手のMLBAM ID |
| fielder_5 | 三塁手のMLBAM ID |
| fielder_6 | 遊撃手のMLBAM ID |
| fielder_7 | 左翼手のMLBAM ID |
| fielder_8 | 中堅手のMLBAM ID |
| fielder_9 | 右翼手のMLBAM ID |
| release_pos_y | リリース位置のy座標 |
| estimated_ba_using_speedangle | 打球角度と打球初速度から推定した打者の打率 |
| estimated_woba_using_speedangle | 打球角度と打球初速度から推定した打者のwOBA |
| woba_value | プレー結果によるwOBAの値 |
| woba_denom | プレー結果によるwOBAの分母の値 |
| babip_value | プレー結果によるBABIPの値 |
| iso_value | プレー結果によるISOの値 |
| launch_speed_angle | 打球の速度/角度のゾーン(図参照)、1:Weak、2:Topped、3:Under、4:Flare/Burner、5:Solid Contact、6:Barrel |
| at_bat_number | 打席数 |
| pitch_number | 打席ごとの投球数 |
| pitch_name | 球種 |
| home_score | 投球前のホームチームスコア |
| away_score | 投球前のアウェイチームスコア |
| bat_score | 投球前の攻撃側チームスコア |
| fld_score | 投球前の守備側チームスコア |
| post_away_score | 投球後のアウェイチームスコア |
| post_home_score | 投球後のホームチームスコア |
| post_bat_score | 投球後の攻撃側チームスコア |
| post_fld_score | 投球後の守備側チームスコア |
| if_fielding_alignment | 内野の守備隊形 |
| of_fielding_alignment | 外野の守備隊形 |
| barrel | バレルフラグ |