2022年レギュラーシーズン、ジャッジ選手と村上選手のホームランペース比較(最終)(大谷2021、ボンズ2001、トラウト各選手の結果付き)
MLBの2022レギュラーシーズンが終わりました。
ということで前々回試作した、ホームラン数の経過をまとめとして作ってみたいと思います。
今回は比較で、トラウト選手の今年の結果もつけてみました。休養が長かったのに、最後は40号まで行きましたが、果たしてペースはどうだったんでしょう?
ホームランのペース比較(静的グラフ)
トラウト選手、休養明けは驚異的なペースでホームランを打っていましたが、最終的には去年の大谷選手のペースに近くなっていました。
ジャッジ選手は最後に1伸びした感じです
村上選手はNPBの試合数がMLBのそれより少ないので、どうしても本数は減ってしまいます。出場試合数はジャッジ選手が158、村上選手は144でした。ただペース自体は終盤でも両者拮抗していたことがわかります。シーズン終盤はチームの順位次第で敬遠されることも増えるので、一概には言えませんが、両者とも歴史に残るペースだったようです。
それにしてもボンズ選手はペースがずっとすごかった。ほとんど落ち込みがない。
ホームランのペース比較(アニメーション)
前回宿題にしていた動画のコードです。
ここでもplotlyというライブラリを使います。
「# アニメーションで実際に表示する部分をフレームで設定」以下がなくても、グラフの拡大縮小はできます。dataframeの変数名などは前回のコードを参照してください。
#ライブラリのインポート
import plotly.graph_objects as go
import plotly.io as pio
import kaleido
# plotlyで、動かせるグラフ(拡大縮小、移動など)を作成
# 先にfigを箱として用意してからadd_traceでどんどん追加
# 初期表示のデータ
fig = go.Figure()
fig.add_trace(go.Scatter(x=dfMLB_NPB['Game'], y=dfMLB_NPB['HR_Judge'],
mode='lines',
name='ジャッジ',
line=dict(color='Navy', width=2)))
fig.add_trace(go.Scatter(x=dfMLB_NPB['Game'], y=dfMLB_NPB['HR_Murakami'],
mode='lines',
name='村上',
line=dict(color='Lime', width=2)))
fig.add_trace(go.Scatter(x=dfMLB_NPB['Game'], y=dfMLB_NPB['HR_Ohtani2021'],
mode='lines',
name='大谷(2021)',
line=dict(color='Red', width=2)))
fig.add_trace(go.Scatter(x=dfMLB_NPB['Game'], y=dfMLB_NPB['HR_Trout'],
mode='lines',
name='トラウト',
line=dict(color='Cyan', width=2)))
fig.add_trace(go.Scatter(x=dfMLB_NPB['Game'], y=dfMLB_NPB['HR_Bonds2001'],
mode='lines',
name='ボンズ(2001)',
line=dict(color='Orange', width=2)))
# グラフレイアウトを設定
fig.update_layout(title=dict(text='HRのペース比較(ジャッジ、村上、トラウト選手2022、大谷選手2021年,ボンズ選手2001年)',
font=dict(size=16,color='Black'),
xref='container',xanchor='center',yanchor='bottom',x=0.5,y=0.9),
legend=dict(xanchor='left',yanchor='bottom',x=0.02,y=0.65,orientation='v'),
xaxis=dict(title='出場試合数',range=(0,165)),
yaxis=dict(title='HR数',range=(0,80)),
hovermode='x unified',
)
# アニメーションで実際に表示する部分をフレームで設定
# 1試合目からk試合目までを、kを+1しながら表示することで、線が伸びているように見せる
fig.update(frames=[
go.Frame(
data=[
go.Scatter(x=dfMLB_NPB['Game'][:k], y=dfMLB_NPB['HR_Judge'][:k]),
go.Scatter(x=dfMLB_NPB['Game'][:k], y=dfMLB_NPB['HR_Murakami'][:k]),
go.Scatter(x=dfMLB_NPB['Game'][:k], y=dfMLB_NPB['HR_Ohtani2021'][:k]),
go.Scatter(x=dfMLB_NPB['Game'][:k], y=dfMLB_NPB['HR_Trout'][:k]),
go.Scatter(x=dfMLB_NPB['Game'][:k], y=dfMLB_NPB['HR_Bonds2001'][:k])]
)
for k in range(len(dfMLB_NPB)+1)])
# アニメーション動作をボタンに設定
def set_buttons():
# ボタン内容の設定
# duration: frameごとの遅延 easing: frameの進み方
transition = {'duration': 100, 'easing': 'linear'}
animation = {
'frame': {'duration': 20, 'redraw': False},
'transition': transition
}
# ボタンの細かい設定 method animateでアニメーションに
args = [None, animation]
buttons = [dict(label='ReDraw', method='animate', args=args)]
return buttons
# ボタン設定
updatemenus = dict(type='buttons', buttons=set_buttons())
# グラフレイアウトにボタンを配置
fig.update_layout(updatemenus=[updatemenus])
fig.show()
# グラフをhtmlで保存
pio.write_html(fig, 'HR比較アニメーション.html',auto_open=False) #読み込み時は拡大状態で読むので遅いが全体を読んでしまえば速い
初期表示のデータはこのようになります。このグラフが、Redrawボタンをクリックすると、アニメーション表示されるようになります。
これを動画にしたのがこちらです。
まとめ
今回は2022年シーズンが終わった節目としてのデータの更新に加え、アニメーション作成のコードについて触れました。
コードの書き方は同じライブラリを使っていても様々なようなので、ぜひ皆さんのいろいろ調べてみてください。plotly, animationなどとググるとヒットすると思います。
終わりに
ここまでご覧いただきありがとうございました。
今回の投稿は以上です。