Rで野球のデータを分析してみよう 2(Statcast2022のフルデータを取ってくる)
ぶっちゃけやり方はこの動画を見れば十分です。とはいえ英語ようわからんって人向けに日本語でも書いてみます。
今回はここに書いてあることを2022年verにしたものをひたすら書くだけです。英語わかるならそちらで十分。
devtoolsをインストール
まずはRにdevtoolsをインストールします。以下のコードを実行します。
install.packages('devtools')
devtoolsはgithubからパッケージをインストールするためのものみたいな解釈でOKだと思います。(あんまり詳しくないので間違ってたらすみません)
インストールしたらlibraryでdevtoolsを呼び出します。
library(devtools)
これでinstall_github関数を使いbaseballrをインストールできるようになりました。
githubからbaseballrをインストール
下記のコードを実行しgithubからbaseballrをインストールします。
install_github("BillPetti/baseballr")
tidyverseを呼び出す
tidyverseという便利なパッケージをlibrary関数で呼び出します。まだインストールしてない人はインストールしてください。
#既にtidyverseインストール済みの人は先頭の#を取らないでください。
#逆にインストールしてない人は先頭の#を削ってインストールしましょう。
#install.packages('tidyverse')
library(tidyverse)
baseballrの関数を使い、データを取ってくる
Statcastからは一度に 10 日間、または 40000 件のデータしかもってこれません。
というわけで週ごとに Statcast データを取ってきます。scrape_statcast_savantという関数は、ゲームの日付とプレーヤーのタイプ(ここでは打者)を指定して、Savantからデータをスクレイピングします。
記述例
date407414 = baseballr::scrape_statcast_savant(start_date = '2022-04-07',
end_date = '2022-04-14', player_type = 'batter')
start_dateは取ってくるデータのはじめの日付、endは終わりの日付。(ここでは一週間ごとに区切ってます)player_typeはplayer_nameという列を打者名にするか、投手名にするかを決めるものです。今回はbatterにしました。
上記のコードが意味するところは
といった感じです。
後はひたすら一週間ごとにレギュラーシーズン終了まで記述します。
date407414 = baseballr::scrape_statcast_savant(start_date = '2022-04-07',
end_date = '2022-04-14', player_type = 'batter')
date415421 = baseballr::scrape_statcast_savant(start_date = '2022-04-15',
end_date = '2022-04-21', player_type = 'batter')
date422428 = baseballr::scrape_statcast_savant(start_date = '2022-04-22',
end_date = '2022-04-28', player_type = 'batter')
date429505 = baseballr::scrape_statcast_savant(start_date = '2022-04-29',
end_date = '2022-05-05', player_type = 'batter')
date506512 = baseballr::scrape_statcast_savant(start_date = '2022-05-06',
end_date = '2022-05-12', player_type = 'batter')
date513519 = baseballr::scrape_statcast_savant(start_date = '2022-05-13',
end_date = '2022-05-19', player_type = 'batter')
date520526 = baseballr::scrape_statcast_savant(start_date = '2022-05-20',
end_date = '2022-05-26', player_type = 'batter')
date527602 = baseballr::scrape_statcast_savant(start_date = '2022-05-27',
end_date = '2022-06-02', player_type = 'batter')
date603609 = baseballr::scrape_statcast_savant(start_date = '2022-06-03',
end_date = '2022-06-09', player_type = 'batter')
date610616 = baseballr::scrape_statcast_savant(start_date = '2022-06-10',
end_date = '2022-06-16', player_type = 'batter')
date617623 = baseballr::scrape_statcast_savant(start_date = '2022-06-17',
end_date = '2022-06-23', player_type = 'batter')
date624630 = baseballr::scrape_statcast_savant(start_date = '2022-06-24',
end_date = '2022-06-30', player_type = 'batter')
date701707 = baseballr::scrape_statcast_savant(start_date = '2022-07-01',
end_date = '2022-07-07', player_type = 'batter')
date708714 = baseballr::scrape_statcast_savant(start_date = '2022-07-08',
end_date = '2022-07-14', player_type = 'batter')
date715721 = baseballr::scrape_statcast_savant(start_date = '2022-07-15',
end_date = '2022-07-21', player_type = 'batter')
date722728 = baseballr::scrape_statcast_savant(start_date = '2022-07-22',
end_date = '2022-07-28', player_type = 'batter')
date729804 = baseballr::scrape_statcast_savant(start_date = '2022-07-29',
end_date = '2022-08-04', player_type = 'batter')
date805811 = baseballr::scrape_statcast_savant(start_date = '2022-08-05',
end_date = '2022-08-11', player_type = 'batter')
date812818 = baseballr::scrape_statcast_savant(start_date = '2022-08-12',
end_date = '2022-08-18', player_type = 'batter')
date819825 = baseballr::scrape_statcast_savant(start_date = '2022-08-19',
end_date = '2022-08-25', player_type = 'batter')
date826901 = baseballr::scrape_statcast_savant(start_date = '2022-08-26',
end_date = '2022-09-01', player_type = 'batter')
date902908 = baseballr::scrape_statcast_savant(start_date = '2022-09-02',
end_date = '2022-09-08', player_type = 'batter')
date909915 = baseballr::scrape_statcast_savant(start_date = '2022-09-09',
end_date = '2022-09-15', player_type = 'batter')
date916922 = baseballr::scrape_statcast_savant(start_date = '2022-09-16',
end_date = '2022-09-22', player_type = 'batter')
date923929 = baseballr::scrape_statcast_savant(start_date = '2022-09-23',
end_date = '2022-09-29', player_type = 'batter')
date9301005 = baseballr::scrape_statcast_savant(start_date = '2022-09-30',
end_date = '2022-10-05', player_type = 'batter')
取ってきたデータを結合する
date407414,date415421…とそれぞれバラバラになっているデータを結合します。結合に使う関数はrbindです。
#rbind(結合したいデータフレーム1,結合したいデータフレーム2,…)
SavantData22 = rbind(date407414, date415421, date422428, date429505,
date506512, date513519, date520526, date527602,
date603609, date610616, date617623, date624630,
date701707, date708714, date715721, date722728,
date729804, date805811, date812818, date819825,
date826901, date902908, date909915, date916922,
date923929, date9301005)
このコードの意味は
といった感じです。
csvファイルに保存する
SavantData22という入れ物に入っているデータをcsv形式で保存します。使う関数はwrite.csvです。
#write.csv(保存したいデータが入ってる入れ物の名前,"保存するときのファイル名.csv", row.names = F ←とりあえずFでOK)
write.csv(SavantData22,"statcast2022.csv", row.names = F)
このコードの意味は
こんな感じです。
ここまでやればStatcast2022のデータは取得できました。
今回のコードまとめ
#devtoolsをRにインストールします。既にインストールしてる人は下のコードの先頭に#付けましょう。
install.packages('devtools')
#devtoolsを呼び出します。
library(devtools)
#githubからbaseballrをインストール
install_github("BillPetti/baseballr")
#tidyverseをインストールします。既にインストールしてる人は下のコードの先頭に#付けましょう。
install.packages('tidyverse')
#tidyverseを呼び出します。
library(tidyverse)
#baseballr::scrape_statcast_savantでStatcastからデータを取ってきます。
#取ってこれる数に制限があるので一週間ごとに区切ります。
#star_dateに始めの日付を、end_dateに終わりの日付を、player_typeはbattarかpicherを
#2021年以前もstart_date = '2021-04-07',end_date = '2021-04-14'とか指定すれば取ってこれると思います。
date407414 = baseballr::scrape_statcast_savant(start_date = '2022-04-07',
end_date = '2022-04-14', player_type = 'batter')
date415421 = baseballr::scrape_statcast_savant(start_date = '2022-04-15',
end_date = '2022-04-21', player_type = 'batter')
date422428 = baseballr::scrape_statcast_savant(start_date = '2022-04-22',
end_date = '2022-04-28', player_type = 'batter')
date429505 = baseballr::scrape_statcast_savant(start_date = '2022-04-29',
end_date = '2022-05-05', player_type = 'batter')
date506512 = baseballr::scrape_statcast_savant(start_date = '2022-05-06',
end_date = '2022-05-12', player_type = 'batter')
date513519 = baseballr::scrape_statcast_savant(start_date = '2022-05-13',
end_date = '2022-05-19', player_type = 'batter')
date520526 = baseballr::scrape_statcast_savant(start_date = '2022-05-20',
end_date = '2022-05-26', player_type = 'batter')
date527602 = baseballr::scrape_statcast_savant(start_date = '2022-05-27',
end_date = '2022-06-02', player_type = 'batter')
date603609 = baseballr::scrape_statcast_savant(start_date = '2022-06-03',
end_date = '2022-06-09', player_type = 'batter')
date610616 = baseballr::scrape_statcast_savant(start_date = '2022-06-10',
end_date = '2022-06-16', player_type = 'batter')
date617623 = baseballr::scrape_statcast_savant(start_date = '2022-06-17',
end_date = '2022-06-23', player_type = 'batter')
date624630 = baseballr::scrape_statcast_savant(start_date = '2022-06-24',
end_date = '2022-06-30', player_type = 'batter')
date701707 = baseballr::scrape_statcast_savant(start_date = '2022-07-01',
end_date = '2022-07-07', player_type = 'batter')
date708714 = baseballr::scrape_statcast_savant(start_date = '2022-07-08',
end_date = '2022-07-14', player_type = 'batter')
date715721 = baseballr::scrape_statcast_savant(start_date = '2022-07-15',
end_date = '2022-07-21', player_type = 'batter')
date722728 = baseballr::scrape_statcast_savant(start_date = '2022-07-22',
end_date = '2022-07-28', player_type = 'batter')
date729804 = baseballr::scrape_statcast_savant(start_date = '2022-07-29',
end_date = '2022-08-04', player_type = 'batter')
date805811 = baseballr::scrape_statcast_savant(start_date = '2022-08-05',
end_date = '2022-08-11', player_type = 'batter')
date812818 = baseballr::scrape_statcast_savant(start_date = '2022-08-12',
end_date = '2022-08-18', player_type = 'batter')
date819825 = baseballr::scrape_statcast_savant(start_date = '2022-08-19',
end_date = '2022-08-25', player_type = 'batter')
date826901 = baseballr::scrape_statcast_savant(start_date = '2022-08-26',
end_date = '2022-09-01', player_type = 'batter')
date902908 = baseballr::scrape_statcast_savant(start_date = '2022-09-02',
end_date = '2022-09-08', player_type = 'batter')
date909915 = baseballr::scrape_statcast_savant(start_date = '2022-09-09',
end_date = '2022-09-15', player_type = 'batter')
date916922 = baseballr::scrape_statcast_savant(start_date = '2022-09-16',
end_date = '2022-09-22', player_type = 'batter')
date923929 = baseballr::scrape_statcast_savant(start_date = '2022-09-23',
end_date = '2022-09-29', player_type = 'batter')
date9301005 = baseballr::scrape_statcast_savant(start_date = '2022-09-30',
end_date = '2022-10-05', player_type = 'batter')
#rbindでデータを結合します
SavantData22 = rbind(date407414, date415421, date422428, date429505,
date506512, date513519, date520526, date527602,
date603609, date610616, date617623, date624630,
date701707, date708714, date715721, date722728,
date729804, date805811, date812818, date819825,
date826901, date902908, date909915, date916922,
date923929, date9301005)
#write.csvでcsvファイルにして保存します
write.csv(SavantData22,"statcast2022.csv", row.names = F)
この記事が気に入ったらサポートをしてみませんか?