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")

baseballrとは?
Bill Pettiが作った野球分析用のRパッケージです。すごい便利。
このパッケージを使いStatcastのデータを取ってくることが可能です。


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にしました。

上記のコードが意味するところは

2022-04-07から2022-04-14のデータを、player_nameの欄を打者名にしてStatcastからデータを取ってくるよ。

といった感じです。

後はひたすら一週間ごとにレギュラーシーズン終了まで記述します。

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)

このコードの意味は

SavantData22という入れ物に(date407414, date415421…)を結合して入れておくよ。

といった感じです。

csvファイルに保存する

SavantData22という入れ物に入っているデータをcsv形式で保存します。使う関数はwrite.csvです。

#write.csv(保存したいデータが入ってる入れ物の名前,"保存するときのファイル名.csv", row.names = F ←とりあえずFでOK)

write.csv(SavantData22,"statcast2022.csv", row.names = F)

このコードの意味は

SavantData22という入れ物に入ってるデータをStatcast2022.csvという名前を付けてcsvファイルで保存するよ。行番号はなしで。

こんな感じです。

ここまでやれば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)








この記事が気に入ったらサポートをしてみませんか?