シーズン平均を計算してプロットする
前の演習では、endpoints()とperiod.apply()を使って、各シーズンの終わり時点でのBoston Red Soxの勝率を手早く計算しました。では、各シーズンを通しての累積平均が知りたい場合はどうすればよいでしょうか。統計家やスポーツファンは、チーム同士を比較する際にこの平均をよく使います。
各シーズン内で累積平均を計算するには、Chapter Threeで練習した「split-lapply-rbind」の手順に戻ります。まずデータをシーズンごとに分割し、次に各シーズンのwin_loss列に累積平均関数を適用し、最後に値を結合してxtsオブジェクトに戻します。
累積和を求めて、その和に含まれる値の個数で割るカスタム関数cummean()が用意されています。win_loss列を含むredsox_xtsデータはワークスペースに読み込まれています。
この演習はコースの一部です
ケーススタディ:Rで都市の時系列データを分析する
演習の手順
split()を使ってredsox_xtsデータをシーズン(ここではyears)ごとに分割し、redsox_seasonsに代入します。lapply()を使って各シーズンの累積平均を計算します。この演習では、合計(cumsum())を求め、その合計に含まれるエントリ数(seq_along())で割るcummean()関数が用意されています。結果はredsox_ytdに保存します。do.call()とrbindを使って、リストの出力を1つのxtsオブジェクト(redsox_winloss)に変換し、各シーズンを通した勝率の累積平均を格納します。plot.xts()を使って、2013シーズンの累積勝率を表示します。事前に用意されたコードのylim引数はそのままにしてください。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Split redsox_xts win_loss data into years
redsox_seasons <- split(___$___, f = "___")
# Use lapply to calculate the cumulative mean for each season
redsox_ytd <- lapply(___, cummean)
# Use do.call to rbind the results
redsox_winloss <- do.call(___, ___)
# Plot the win_loss average for the 2013 season
plot.xts(___["___"], ylim = c(0, 1))