データ取得・準備
データ取得・準備は以前書いた記事と同じなので、興味のある方はそちらを参照してみてください。
グラフの描画
早速ですが、今回は大谷翔平選手のスイーパーの球速、横の変化、縦の変化をヒストグラムで描画してみます。
コードは以下です。
import matplotlib.pyplot as plt
import japanize_matplotlib
fig, axs = plt.subplots(1, 3, figsize=(15, 5))
# ヒストグラムを描画するため大谷翔平選手をフィルタリング
df_pitch_sweepsr_ohtani = df_pitch_sweepsr.filter(pl.col("投手名") == "Ohtani, Shohei")
# 球速のヒストグラム
speed = df_pitch_sweepsr_ohtani["球速"]
axs[0].hist(speed, bins=10, color='lightblue')
axs[0].set_xlabel("スイーパーの球速[km/h]", fontsize=12)
axs[0].set_ylabel("度数", fontsize=12)
axs[0].set_title("大谷翔平選手のスイーパーの球速の分布", fontsize=12)
axs[0].text(speed.mean(), axs[0].get_ylim()[1]*0.2, f"平均値:{speed.mean():.1f}", color='red', fontsize=12, ha='center', va='top')
axs[0].text(speed.median(), axs[0].get_ylim()[1]*0.1, f"中央値:{speed.median():.1f}", color='orange', fontsize=12, ha='center', va='top')
axs[0].text(speed.max(), axs[0].get_ylim()[1]*0.18, f"最大値:{speed.max():.1f}", color='blue', fontsize=10, ha='center', va='top')
axs[0].text(speed.min(), axs[0].get_ylim()[1]*0.18, f"最小値:{speed.min():.1f}", color='green', fontsize=10, ha='center', va='top')
axs[0].tick_params(axis='both', labelsize=10)
# 横の変化量のヒストグラム
horizontal = df_pitch_sweepsr_ohtani["横の変化量"]
axs[1].hist(horizontal, bins=10, color='lightblue')
axs[1].set_xlabel("スイーパーの横の変化量[cm]", fontsize=12)
axs[1].set_ylabel("度数", fontsize=12)
axs[1].set_title("大谷翔平選手のスイーパーの横の変化量の分布", fontsize=12)
axs[1].text(horizontal.mean(), axs[1].get_ylim()[1]*0.2, f"平均値:{horizontal.mean():.1f}", color='red', fontsize=12, ha='center', va='top')
axs[1].text(horizontal.median(), axs[1].get_ylim()[1]*0.1, f"中央値:{horizontal.median():.1f}", color='orange', fontsize=12, ha='center', va='top')
axs[1].text(horizontal.max(), axs[1].get_ylim()[1]*0.18, f"最大値:{horizontal.max():.1f}", color='blue', fontsize=10, ha='center', va='top')
axs[1].text(horizontal.min(), axs[1].get_ylim()[1]*0.18, f"最小値:{horizontal.min():.1f}", color='green', fontsize=10, ha='center', va='top')
axs[1].tick_params(axis='both', labelsize=10)
# 縦の変化量のヒストグラム
vertical = df_pitch_sweepsr_ohtani["縦の変化量"]
axs[2].hist(vertical, bins=10, color='lightblue')
axs[2].set_xlabel("スイーパーの縦の変化量[cm]", fontsize=12)
axs[2].set_ylabel("度数", fontsize=12)
axs[2].set_title("大谷翔平選手のスイーパーの縦の変化量の分布", fontsize=12)
axs[2].text(vertical.mean(), axs[2].get_ylim()[1]*0.2, f"平均値:{vertical.mean():.1f}", color='red', fontsize=12, ha='center', va='top')
axs[2].text(vertical.median(), axs[2].get_ylim()[1]*0.1, f"中央値:{vertical.median():.1f}", color='orange', fontsize=12, ha='center', va='top')
axs[2].text(vertical.max(), axs[2].get_ylim()[1]*0.18, f"最大値:{vertical.max():.1f}", color='blue', fontsize=10, ha='center', va='top')
axs[2].text(vertical.min(), axs[2].get_ylim()[1]*0.18, f"最小値:{vertical.min():.1f}", color='green', fontsize=10, ha='center', va='top')
axs[2].tick_params(axis='both', labelsize=10)
以下が上記コードの出力です。大谷翔平選手のスイーパーの"球速"、"横の変化量"、"縦の変化量"の3つの変化量をヒストグラムでグラフ化し、そのそれぞれの平均値と中央値、最大値と最小値を表示させてみました。
大谷翔平選手のスイーパーは、平均球速が137.3km/hで、横の変化の平均が35.7cmということが簡単に言えます。(※ 縦の変化については、マイナス?もあり、今回は使えないということとし、説明は省きますした。)
この大谷翔平選手のスイーパーについて、他のMLB投手と比較し、どれほど凄いのか?ということを見てみたいと思います。
以下が、ダルビッシュ選手のスイーパーの分布です。
ダルビッシュ選手のスイーパーは、平均球速が133.1km/hで、横の変化の平均が41.2cmということがわかりました。
大谷翔平選手とダルビッシュ選手のヒストグラムをそれぞれ見比べると、大谷翔平選手のスイーパーはより高速に曲がり、ダルビッシュ選手のスイーパーはより横に曲がるということがわかります。
以前の記事でも書きましたが、大谷翔平投手のスイーパーの横の曲がりの平均は約35.6cmで、これは全MLB投手の中で32位でした。
これを踏まえたうえで、MLB投手の中でもスイーパーの横の曲がりが優れている選手たちと大谷翔平選手を比較してみたいと思います。
以前の記事にて求めたMLBの全投手の中で、スイーパーの横の曲がりの平均が一番大きいRoberts, Ethan選手と二番目のWeissert, Greg選手、さらにスイーパーの平均球速が135km/h以という条件を加えた場合のスイーパーの横の曲がりの平均が一番大きいPhillips, Evan選手と二番目に大きいHolmes, Clay選手の計4名の選手と大谷翔平のスイーパーの分布を見比べていきます。
結果を以下に示します。上から順に、Roberts選手、Weissert選手、Phillips選手、Holmes選手、そして最後に大谷翔平選手選手です。
スイーパーの曲がりの大きさがMLBでトップのRoberts選手とWeissert選手ですが、スイーパーの投球数を数えたら100球にも満たず、それぞれ46球と60球でちょっと少ないかなと思いました。(多分、リリーフ系の投手で2022年はけがでそんなに投げなかったのか?)
というか、大谷翔平選手はスイーパーを983球も投げていていて、これは5選手の中で断トツでした。
1000球近くのスイーパーを投げて、この質を担保するのは凄いと言えるのではないでしょうか?
球速の平均が135km/h以上の高速スイーパーという条件のもとで考えた場合、1位のPhillips選手のスイーパーの投球数は408球で、3位の大谷翔平選手のスイーパー投球数は983球で1位の選手と比較した場合、約2倍以上大谷翔平選手はスイーパーを投じていることがわかります。
これだけスイーパーを投げても質の高さではMLBトップクラスということをデータが物語っていますし、MLBのバッターからしたら「高速スイーパー」と言えば、大谷翔平選手と思い浮かべるのも必然かと思いました。
参考までに上記の5選手のグラフ出力コードは以下に示します。
# スイーパーが優秀なMLB投手名リスト
pitchers = ["Roberts, Ethan","Weissert, Greg","Phillips, Evan","Holmes, Clay","Ohtani, Shohei"]
for i, pitcher in enumerate(pitchers):
# subplotsの設定
fig, axs = plt.subplots(1, 3, figsize=(15, 5))
# ヒストグラムを描画するデータのフィルタリング
df_pitch_sweepsr_pitcher = df_pitch_sweepsr.filter(pl.col("投手名") == pitcher)
# 球速のヒストグラム
speed = df_pitch_sweepsr_pitcher["球速"]
axs[0].hist(speed, bins='auto', color='lightblue')
axs[0].set_xlabel("スイーパーの球速[km/h]", fontsize=12)
axs[0].set_ylabel("度数", fontsize=12)
axs[0].set_title(f"{pitcher}投手のスイーパー球速の分布", fontsize=12)
axs[0].text(speed.mean(), axs[0].get_ylim()[1]*0.2, f"平均値:{speed.mean():.1f}", color='red', fontsize=12, ha='center', va='top')
axs[0].text(speed.median(), axs[0].get_ylim()[1]*0.1, f"中央値:{speed.median():.1f}", color='orange', fontsize=12, ha='center', va='top')
axs[0].text(speed.max(), axs[0].get_ylim()[1]*0.18, f"最大値:{speed.max():.1f}", color='blue', fontsize=10, ha='center', va='top')
axs[0].text(speed.min(), axs[0].get_ylim()[1]*0.18, f"最小値:{speed.min():.1f}", color='green', fontsize=10, ha='center', va='top')
axs[0].tick_params(axis='both', labelsize=10)
# 横の変化量のヒストグラム
horizontal = df_pitch_sweepsr_pitcher["横の変化量"]
axs[1].hist(horizontal, bins='auto', color='lightblue')
axs[1].set_xlabel("スイーパーの横の変化量[cm]", fontsize=12)
axs[1].set_ylabel("度数", fontsize=12)
axs[1].set_title(f"{pitcher}投手のスイーパーの横の変化量分布", fontsize=12)
axs[1].text(horizontal.mean(), axs[1].get_ylim()[1]*0.2, f"平均値:{horizontal.mean():.1f}", color='red', fontsize=12, ha='center', va='top')
axs[1].text(horizontal.median(), axs[1].get_ylim()[1]*0.1, f"中央値:{horizontal.median():.1f}", color='orange', fontsize=12, ha='center', va='top')
axs[1].text(horizontal.max(), axs[1].get_ylim()[1]*0.18, f"最大値:{horizontal.max():.1f}", color='blue', fontsize=10, ha='center', va='top')
axs[1].text(horizontal.min(), axs[1].get_ylim()[1]*0.18, f"最小値:{horizontal.min():.1f}", color='green', fontsize=10, ha='center', va='top')
axs[1].tick_params(axis='both', labelsize=10)
# 縦の変化量のヒストグラム
vertical = df_pitch_sweepsr_pitcher["縦の変化量"]
axs[2].hist(vertical, bins='auto', color='lightblue')
axs[2].set_xlabel("スイーパーの縦の変化量[cm]", fontsize=12)
axs[2].set_ylabel("度数", fontsize=12)
axs[2].set_title(f"{pitcher}投手のスイーパーの縦の変化量分布", fontsize=12)
axs[2].text(vertical.mean(), axs[2].get_ylim()[1]*0.2, f"平均値:{vertical.mean():.1f}", color='red', fontsize=12, ha='center', va='top')
axs[2].text(vertical.median(), axs[2].get_ylim()[1]*0.1, f"中央値:{vertical.median():.1f}", color='orange', fontsize=12, ha='center', va='top')
axs[2].text(vertical.max(), axs[2].get_ylim()[1]*0.18, f"最大値:{vertical.max():.1f}", color='blue', fontsize=10, ha='center', va='top')
axs[2].text(vertical.min(), axs[2].get_ylim()[1]*0.18, f"最小値:{vertical.min():.1f}", color='green', fontsize=10, ha='center', va='top')
axs[2].tick_params(axis='both', labelsize=10)
# グラフタイトルを設定する
fig.suptitle(pitcher+f":トータル投球数 {len(df_pitch_sweepsr_pitcher)}")
# グラフを表示する
plt.show()
まとめ
今回は、大谷翔平選手のスイーパーの球速、横の変化、縦の変化をヒストグラムで描画し、MLBのほかのスイーパーを得意とする投手と比較しました。
去年2022年から大谷翔平選手はスイーパーを試合でかなり多投しているイメージが強く、実際にそれで投手成績が向上したとのことです。
(糸井選手もそのスイーパーの多投についてYouTubeで言及していました。)
https://www.youtube.com/watch?v=RGzHSOtCkPY&t=400s
余談ですが、直近の23年のWBCでの大谷選手対トラウトの最後のスイーパーは約43cm曲がったのだとか。。
https://hochi.news/articles/20230323-OHT1T51024.html
2022年の大谷選手のスイーパーの平均と中央値が約36cmと考えると、WBC決勝でのパフォーマンスは比較的に優れていたことがわかります。(というか大事な場面で決めに行くときは、意図的に大きく曲げさせているのかとも思いました。。)
どちらにせよ、大谷選手のWBCでのコンディションは比較的に良かったということが言えるでしょう。
あと、最近2023年のMLBの試合で大谷選手が投げるスイーパーの曲がりがまた一段と大きくなったような気がして、さらにまた進化しているんだろうと個人的に思っています。。(大谷選手の進化はどこまで行くのやら。。ファンとして目が離せませんね!!)