はじめに
今季メジャーリーグで歴史的な活躍をし、数々の記録を更新した大谷翔平選手。今季のレギュラーシーズンでは最終的に54本のホームランを打ち、メジャーでのホームラン数が通算225本となりました。今回は、大谷翔平選手がメジャーで打った全ホームランについて、分析をしながら印象的だったホームランを映像で振り返ります。
分析での使用言語はPythonで、Google Colaboratoryで作業しました。
データの取得
まずはデータを取得します。pybaseballをインストールして、プレイヤーのデータを取得します。
# pybaseballのインストール
!pip install pybaseball
import pybaseball as pb
# 大谷翔平のデータを取得
ohtani_info = pb.playerid_lookup('Ohtani', 'Shohei')
# バッティングのデータを取得
player_id = ohtani_info.iloc[0,2] # player_id = 660271
start_date = '2018-01-01'
end_date = '2024-09-30'
ohtani_data = pb.statcast_batter(start_date, end_date, player_id)
ohtani_data.head()
pitch_type game_date release_speed release_pos_x release_pos_z player_name batter pitcher events description ... post_home_score post_bat_score post_fld_score if_fielding_alignment of_fielding_alignment spin_axis delta_home_win_exp delta_run_exp bat_speed swing_length
0 SL 2023-09-03 88.7 2.17 6.01 Ohtani, Shohei 660271 666205 field_out hit_into_play ... 0 0 0 Infield shade Standard 134.0 0.011 -0.130 NaN NaN
1 CU 2023-09-03 83.9 1.96 6.19 Ohtani, Shohei 660271 666205 NaN ball ... 0 0 0 Infield shade Standard 346.0 0.000 0.040 NaN NaN
2 CU 2023-09-03 82.3 2.01 6.20 Ohtani, Shohei 660271 666205 NaN ball ... 0 0 0 Infield shade Standard 326.0 0.000 0.016 NaN NaN
3 FF 2023-09-03 94.3 1.92 6.02 Ohtani, Shohei 660271 666205 NaN foul ... 0 0 0 Infield shade Standard 142.0 0.000 -0.027 NaN NaN
4 FF 2023-09-03 93.9 2.07 5.83 Ohtani, Shohei 660271 666205 NaN swinging_strike ... 0 0 0 Infield shade Standard 136.0 0.000 -0.022 NaN NaN
5 rows × 94 columns
表示されるデータ項目の一覧は以下の通りです。
今回はホームランについて分析をするため、上記のデータからレギュラーシーズンの試合でホームランを打ったときの投球データのみを抽出します。
# レギュラーシーズンの試合でホームランを打った打席のデータを時系列で抽出
hr_data = ohtani_data.query("game_type=='R' and events=='home_run'").sort_values(by=['game_date', 'inning'])
hr_data.head()
pitch_type game_date release_speed release_pos_x release_pos_z player_name batter pitcher events description ... post_home_score post_bat_score post_fld_score if_fielding_alignment of_fielding_alignment spin_axis delta_home_win_exp delta_run_exp bat_speed swing_length
11602 CU 2018-04-03 73.6 -1.56 5.79 Ohtani, Shohei 660271 458708 home_run hit_into_play ... 6 6 2 Standard Standard 47.0 0.200 2.687 NaN NaN
11580 FF 2018-04-04 91.6 -2.15 5.34 Ohtani, Shohei 660271 446372 home_run hit_into_play ... 2 2 2 Standard Standard 202.0 0.260 1.795 NaN NaN
11567 SI 2018-04-06 93.8 -1.55 5.98 Ohtani, Shohei 660271 605254 home_run hit_into_play ... 1 1 6 Standard Standard 217.0 0.033 0.961 NaN NaN
11455 FF 2018-04-27 97.2 -1.74 6.15 Ohtani, Shohei 660271 622663 home_run hit_into_play ... 1 1 0 Standard Standard 204.0 0.113 1.007 NaN NaN
11370 SI 2018-05-10 90.8 -3.59 4.55 Ohtani, Shohei 660271 657610 home_run hit_into_play ... 7 7 4 Standard Standard 267.0 0.061 1.000 NaN NaN
5 rows × 94 columns
このhr_dataを元に、以下から様々な分析と可視化を行います。
データの分析・可視化
投手の左右・球種
まずは、投手の左右と球種について、以下のように項目を指定して可視化します。
import seaborn as sns
sns.heatmap(pd.crosstab(hr_data['pitch_name'], hr_data['p_throws']), annot=True, cmap='OrRd')
p_throwsのLが左投手、Rが右投手を示していますが、右投手の方がホームランが多くなっています。対右ではフォーシームが最も多く、次いでスライダー、シンカーとなっています。対左ではスライダー、フォーシームという順になっており、左打者に対して左投手がスライダーを投じる場面が多いことも関係していると考えられます。実際、投手の左右別に投じられたすべてのボールの球種を調べると、左投手ではスライダーの割合が多くなっています。
import seaborn as sns
sns.heatmap(pd.crosstab(ohtani_data['pitch_name'], ohtani_data['p_throws']), annot=True, cmap='OrRd', fmt='g')
球種・球速
続いて、ホームランを打った球種ごとに球速の分布を可視化します。なお、球速はマイル(mph: miles per hour, 1mph ≒ 1.61km/h)で表示されています。
import seaborn as sns
hr_data2 = hr_data.reset_index()
sns.catplot(x='pitch_name', y='effective_speed', data=hr_data2, height=6, aspect=3)
各球種、幅広い球速に対応していますが、100mph近い速球になると流石にホームランの数が少なくなっています。
唯一100mphを超えるボールを打ったホームラン
コース
次に、コース別でホームランを分析します。まずは以下のように投手目線でストライクゾーンを分割して、ホームラン数の分布を可視化します。
import numpy as np
import seaborn as sns
zone = hr_data.query('zone <= 9').groupby('zone')['events'].count()
matrix = np.fliplr(np.array(zone).reshape(3,3))
sns.heatmap(matrix, annot=True, cmap='OrRd')
真ん中が最も多く、コーナーが少ないという結果になっています。また、高低や内外に関してはほとんど差がありませんでした。
コースについては更に詳細に可視化します。以下では、ボール球を含めたすべてのホームランについて、ストライクゾーンとともに可視化しています。なお、打者目線でのボールの位置を示しており、最初の図ではプロットの色が濃いほど球速が速いことを示しています。
import matplotlib.pyplot as plt
plt.scatter(hr_data['plate_x'], hr_data['plate_z'], c=hr_data['effective_speed'], cmap='OrRd')
# ストライクゾーンを描画
x = [-0.83, 0.83, 0.83, -0.83]
y = [1.5, 1.5, 3.5, 3.5]
plt.fill(x, y, color='k', alpha=0.1)
plt.xlim(-1.5, 2.75)
plt.ylim(1, 4.5)
plt.gca().set_facecolor('lightgray')
plt.show()
import matplotlib.pyplot as plt
import pandas as pd
# カテゴリカルデータを数値に変換
pitch_names, unique = pd.factorize(hr_data['pitch_name'])
plt.scatter(hr_data['plate_x'], hr_data['plate_z'], c=pitch_names, cmap='Paired') # cにカテゴリの数値を使用
# ストライクゾーンを描画
x = [-0.83, 0.83, 0.83, -0.83]
y = [1.5, 1.5, 3.5, 3.5]
plt.fill(x, y, color='k', alpha=0.1)
# 凡例を表示
for i, pitch in enumerate(unique):
plt.scatter([], [], c=plt.cm.Paired(i / len(unique)), label=pitch)
plt.xlim(-1.5, 2.75)
plt.ylim(1, 4.5)
plt.legend(fontsize='small')
plt.gca().set_facecolor('0.6')
plt.show()
最初の図では低めの速いボールが少ない印象がありましたが、球種を見てみると実際にフォーシームは真ん中や高めに位置しています。また、ストライクゾーンからかなり離れた位置のボールもホームランにしていますが、特に明確なボール球だった2つのホームランは以下のようなホームランでした。
最も高いボールを打ったホームラン
最も体に近い位置のボール打ったホームラン
なお、この2本が誰から打ったホームランだったのか知るためには、ボールの位置を表す項目であるplate_z(高低)およびplate_x(左右)の絶対値を使って、以下のようにデータを取得しています。
#plate_zの絶対値が最大のpitcherを抽出
hr_z = hr_data[hr_data['plate_z'].abs() == hr_data['plate_z'].abs().max()]
pitcher_z = hr_z['pitcher']
pb.playerid_reverse_lookup([pitcher_z.iloc[0]])
name_last name_first key_mlbam key_retro key_bbref key_fangraphs mlb_played_first mlb_played_last
0 hentges sam 656529 hents001 hentgsa01 18548 2021.0 2024.0
#plate_xの絶対値が最大のpitcherを抽出
hr_x = hr_data[hr_data['plate_x'].abs() == hr_data['plate_x'].abs().max()]
pitcher_x = hr_x['pitcher']
pb.playerid_reverse_lookup([pitcher_x.iloc[0]])
name_last name_first key_mlbam key_retro key_bbref key_fangraphs mlb_played_first mlb_played_last
0 snead kirby 669912 sneak001 sneadki01 19179 2021.0 2024.0
最も高いボールはSam Hentges、最も体に近いボールはKirby Sneadからのホームランでした。
打球速度・角度・飛距離
次に、ホームランの打球速度や角度、飛距離といった打ったボールに関する分析を行います。まず打球速度の統計量と分布は以下の通りです。
hr_data['launch_speed'].describe()
launch_speed
count 225.000000
mean 108.587111
std 4.765254
min 93.800000
25% 105.600000
50% 108.400000
75% 111.900000
max 118.700000
import matplotlib.pyplot as plt
plt.hist(hr_data['launch_speed'], bins=25)
plt.xlabel('velocity / mph')
plt.ylabel('HR count')
plt.show()
打球速度の平均が108mph(約174km/h)、分布を見てもほとんどが100mph(約161km/h)を優に超える打球速度で、140~150km/h程が平均と言われる日本のプロ野球でのホームランの平均速度を大きく上回っています。
最も打球速度が速かったホームラン(同速で2本)
hr_fast = hr_data[hr_data['launch_speed']==hr_data['launch_speed'].max()]
print(hr_fast[['game_date', 'pitcher', 'launch_speed']])
pitcher_fast = hr_fast['pitcher']
pb.playerid_reverse_lookup(pitcher_fast.iloc[[0, 1]].values)
game_date pitcher launch_speed
2401 2024-04-23 598264 118.7
996 2024-07-27 669854 118.7
name_last name_first key_mlbam key_retro key_bbref key_fangraphs mlb_played_first mlb_played_last
0 barnes matt 598264 barnm001 barnema01 12863 2014.0 2024.0
1 blanco ronel 669854 blanr001 blancro01 19407 2022.0 2024.0
それぞれMatt Barnes、Ronel Blancoから打ったホームランでした。
最も打球速度が遅かったホームラン
hr_slow = hr_data[hr_data['launch_speed']==hr_data['launch_speed'].min()]
print(hr_slow[['game_date', 'pitcher', 'launch_speed']])
pitcher_slow = hr_slow['pitcher']
pb.playerid_reverse_lookup([pitcher_slow.iloc[0]])
game_date pitcher launch_speed
1447 2024-06-25 623167 93.8
name_last name_first key_mlbam key_retro key_bbref key_fangraphs mlb_played_first mlb_played_last
0 flexen chris 623167 flexc001 flexech01 13896 2017.0 2024.0
Chris Flexenから打ったホームランでした。
次に打球の角度の分布を可視化しました。
hr_data['launch_angle'].describe()
launch_angle
count 225.000000
mean 28.857778
std 5.493279
min 18.000000
25% 25.000000
50% 28.000000
75% 33.000000
max 46.000000
import matplotlib.pyplot as plt
plt.hist(hr_data['launch_angle'], bins=25)
plt.xlabel('angle / degree')
plt.ylabel('HR count')
plt.show()
おおよそ25~30度がホームランに最適な角度と言われており、実際に平均角度の28度前後のホームランが多くなっています。
最も打球角度が大きかったホームラン
hr_high = hr_data[hr_data['launch_angle']==hr_data['launch_angle'].max()]
print(hr_high[['game_date', 'pitcher', 'launch_angle']])
pitcher_high = hr_high['pitcher']
pb.playerid_reverse_lookup([pitcher_high.iloc[0]])
game_date pitcher launch_angle
1031 2024-07-25 643511 46.0
name_last name_first key_mlbam key_retro key_bbref key_fangraphs mlb_played_first mlb_played_last
0 rogers tyler 643511 roget002 rogerty01 15541 2019.0 2024.0
Tyler Rogersから打ったホームランでした。
最も打球角度が小さかったホームラン(同じ角度で2本)
hr_low = hr_data[hr_data['launch_angle']==hr_data['launch_angle'].min()]
print(hr_low[['game_date', 'pitcher', 'launch_angle']])
pitcher_low = hr_low['pitcher']
pb.playerid_reverse_lookup(pitcher_low.iloc[[0, 1]].values)
game_date pitcher launch_angle
6561 2021-06-18 570632 18.0
6388 2021-06-29 592791 18.0
name_last name_first key_mlbam key_retro key_bbref key_fangraphs mlb_played_first mlb_played_last
0 ureña josé 570632 urenj001 urenajo01 11589 2015.0 2024.0
1 taillon jameson 592791 tailj001 taillja01 11674 2016.0 2024.0
それぞれJosé Ureña、Jameson Taillonから打ったホームランでした。
次に飛距離の分布です。なお、225本のうち2本は計測データがないため、223本分のデータになります。また、飛距離はフィート(ft, 1ft ≒ 30.5cm)で表示されています。
hr_data['hit_distance_sc'].describe()
hit_distance_sc
count 223.000000
mean 414.130045
std 27.399877
min 338.000000
25% 396.500000
50% 414.000000
75% 433.500000
max 493.000000
import matplotlib.pyplot as plt
plt.hist(hr_data['hit_distance_sc'], bins=25)
plt.xlabel('distance / ft')
plt.ylabel('HR count')
plt.show()
平均飛距離が414ft(約126m)、最長は約150mのホームランでした。
最長飛距離のホームラン
hr_max = hr_data[hr_data['hit_distance_sc']==hr_data['hit_distance_sc'].max()]
print(hr_max[['game_date', 'pitcher', 'hit_distance_sc']])
pitcher_max = hr_max['pitcher']
pb.playerid_reverse_lookup([pitcher_max.iloc[0]])
game_date pitcher hit_distance_sc
867 2023-06-30 674072 493.0
name_last name_first key_mlbam key_retro key_bbref key_fangraphs mlb_played_first mlb_played_last
0 henry tommy 674072 henrt001 henryto01 26285 2022.0 2024.0
Tommy Henryから打ったホームランでした。
最短飛距離のホームラン
hr_min = hr_data[hr_data['hit_distance_sc']==hr_data['hit_distance_sc'].min()]
print(hr_min[['game_date', 'pitcher', 'hit_distance_sc']])
pitcher_min = hr_min['pitcher']
pb.playerid_reverse_lookup([pitcher_min.iloc[0]])
game_date pitcher hit_distance_sc
555 2024-08-24 671737 338.0
name_last name_first key_mlbam key_retro key_bbref key_fangraphs mlb_played_first mlb_played_last
0 bradley taj 671737 bradt002 bradlta01 22543 2023.0 2024.0
Taj Bradleyから打ったホームランでした。
打球方向
次に、打球の方向について分析します。打球の到達位置を表すデータについて、以下を参考に数値の変換を行ってプロットしました。まずは打ったボールの球速と打球方向の関係を可視化します。プロットの色が濃いほど、速いボールを打ったことを表しています。
import matplotlib.pyplot as plt
# ホームベースを(0, 0)として、単位をftに変換
x = (hr_data['hc_x']-125.42)*2.5
y = (198.27-hr_data['hc_y'])*2.5
plt.scatter(x, y, c=hr_data['effective_speed'], cmap='OrRd')
plt.xlim(-350, 350)
plt.ylim(0, 550)
# ファールラインと内野を描画
plt.plot([0, -300], [0, 300], color='w')
plt.plot([0, 300], [0, 300], color='w')
plt.plot([-63, 0], [63, 126], color='w')
plt.plot([63, 0], [63, 126], color='w')
plt.gca().set_facecolor('green')
plt.show()
速球は逆方向(レフト方向)に打ち返していることがわかります。また、以下のように打球速度と打球方向の関係をプロットすると、ライト方向のホームランほど打球速度が速い(プロットの色が濃い)ことがわかりました。
import matplotlib.pyplot as plt
x = (hr_data['hc_x']-125.42)*2.5
y = (198.27-hr_data['hc_y'])*2.5
plt.scatter(x, y, c=hr_data['launch_speed'], cmap='OrRd')
plt.xlim(-350, 350)
plt.ylim(0, 550)
plt.plot([0, -300], [0, 300], color='w')
plt.plot([0, 300], [0, 300], color='w')
plt.plot([-63, 0], [63, 126], color='w')
plt.plot([63, 0], [63, 126], color='w')
plt.gca().set_facecolor('green')
plt.show()
また球種と打球方向の関係は以下のようになりました。
import matplotlib.pyplot as plt
import pandas as pd
x = (hr_data['hc_x']-125.42)*2.5
y = (198.27-hr_data['hc_y'])*2.5
pitch_names, unique = pd.factorize(hr_data['pitch_name'])
plt.scatter(x, y, c=pitch_names, cmap='Paired')
for i, pitch in enumerate(unique):
plt.scatter([], [], c=plt.cm.Paired(i / len(unique)), label=pitch)
plt.xlim(-350, 350)
plt.ylim(0, 650)
plt.plot([0, -300], [0, 300], color='w')
plt.plot([0, 300], [0, 300], color='w')
plt.plot([-63, 0], [63, 126], color='w')
plt.plot([63, 0], [63, 126], color='w')
plt.legend(fontsize='small', ncol=4)
plt.gca().set_facecolor('0.6')
plt.show()
シーズンごとの比較
ここからはいくつかの項目について、シーズンごとにどのようにデータが変化しているのか分析を行います。まずは以下のようにしてデータを分割します。
yearly_data = {}
for year in range(2018, 2025):
yearly_data[year] = hr_data[hr_data['game_date'].str.startswith(str(year))]
# 例として2024年のデータを表示
hr_2024 = yearly_data[2024]
hr_2024.head()
pitch_type game_date release_speed release_pos_x release_pos_z player_name batter pitcher events description ... post_home_score post_bat_score post_fld_score if_fielding_alignment of_fielding_alignment spin_axis delta_home_win_exp delta_run_exp bat_speed swing_length
2680 SI 2024-04-03 93.2 1.64 5.64 Ohtani, Shohei 660271 573124 home_run hit_into_play ... 5 5 3 Strategic Standard 134.0 0.114 0.939 74.36720 8.27785
2655 CH 2024-04-05 79.4 -2.87 6.06 Ohtani, Shohei 660271 543294 home_run hit_into_play ... 6 4 6 Standard Standard 231.0 -0.115 1.583 73.82423 8.34844
2602 SL 2024-04-08 85.6 -2.38 5.77 Ohtani, Shohei 660271 543351 home_run hit_into_play ... 2 4 2 Infield shade Standard 168.0 -0.141 0.982 82.31695 7.41697
2564 FF 2024-04-12 95.4 -2.70 5.83 Ohtani, Shohei 660271 650633 home_run hit_into_play ... 1 1 2 Infield shade Standard 216.0 0.099 0.976 70.75460 7.72320
2408 SL 2024-04-21 81.7 -1.38 5.85 Ohtani, Shohei 660271 605288 home_run hit_into_play ... 2 2 0 Infield shade Standard 86.0 0.200 1.739 82.79045 8.16199
シーズンごとのホームラン数は以下の通りです。
yearly_hr = []
for year, hr in yearly_data.items():
yearly_hr.append([year, len(hr)])
yearly_hr = pd.DataFrame(yearly_hr, columns=['year', 'hr'])
yearly_hr
year hr
0 2018 22
1 2019 18
2 2020 7
3 2021 46
4 2022 34
5 2023 44
6 2024 54
import matplotlib.pyplot as plt
plt.bar(yearly_hr['year'], yearly_hr['hr'])
plt.xlabel('year')
plt.ylabel('HR count')
plt.show()
2020年は怪我やシーズンの短縮などの影響もあってホームラン数も7本のみとなっていますが、2021年からはホームラン数が増加しています。
次に、ストライクゾーン内のコース別のホームランをシーズンごとに比較します。なお、コースは投手目線の位置となっています。
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
fig, axes = plt.subplots(2, 4, figsize=(9, 4))
for idx, year in enumerate(range(2018, 2025)):
zone = yearly_data[year].query('zone <= 9').groupby('zone')['events'].count()
for i in range(1, 10):
if i not in zone.index:
zone.loc[i] = 0
matrix = np.fliplr(np.array(zone).reshape(3, 3))
ax = axes[idx // 4, idx % 4]
sns.heatmap(matrix, annot=True, cmap='OrRd', ax=ax)
ax.set_title(f'{year}')
fig.delaxes(axes[1, 3])
plt.tight_layout()
plt.show()
2020年までは低めのボールをほとんど打っていなかったのに対し、ここ数シーズンでは低めのボールもホームランにしています。21年や22年では、左打者に対して多く投じられるであろうアウトコースのホームランが多く、うまく対応できるようになっていると考えられます。また今シーズンは真ん中のホームランが圧倒的に多く、甘いボールを逃すことなくホームランにしていると言えます。
次に飛距離と打球速度をシーズンごとに比較します。それぞれ、年度、平均値、最大値と、該当年度の全数値を羅列した表を取得した後、箱ひげ図を作成して比較しています。
yearly_dis = []
for year in range(2018, 2025):
yearly_dis.append([year, yearly_data[year]['hit_distance_sc'].mean(),
yearly_data[year]['hit_distance_sc'].max(),
yearly_data[year]['hit_distance_sc'].values])
yearly_dis = pd.DataFrame(yearly_dis, columns=['year', 'average', 'longest distance', 'distance'])
yearly_dis
year average longest distance distance
0 2018 413.300000 449.0 [397.0, 400.0, 449.0, 410.0, 414.0, 411.0, 443...
1 2019 406.388889 447.0 [429.0, 393.0, 362.0, 388.0, 400.0, 396.0, 416...
2 2020 401.571429 439.0 [402.0, 402.0, 351.0, 417.0, 439.0, 385.0, 415.0]
3 2021 416.065217 470.0 [421.0, 451.0, 422.0, 431.0, 402.0, 413.0, 440...
4 2022 407.647059 462.0 [406.0, 415.0, 390.0, 419.0, 407.0, 413.0, 418...
5 2023 421.659091 493.0 [447.0, 431.0, 397.0, 391.0, 415.0, 401.0, 413...
6 2024 414.944444 476.0 [430.0, 379.0, 362.0, 403.0, 423.0, 450.0, 360...
import seaborn as sns
import pandas as pd
data = []
for i, row in yearly_dis.iterrows():
year = row['year']
for value in row['distance']:
data.append([year, value])
df = pd.DataFrame(data, columns=['year', 'distance'])
sns.boxplot(x='year', y='distance', data=df)
平均飛距離が大きく伸びているわけではないですが、2021年からは最長距離が伸びており、以下のシーズンごとの打球速度と相関があるような結果となっています。
yearly_vel = []
for year in range(2018, 2025):
yearly_vel.append([year, yearly_data[year]['launch_speed'].mean(),
yearly_data[year]['launch_speed'].max(),
yearly_data[year]['launch_speed'].values])
yearly_vel = pd.DataFrame(yearly_vel, columns=['year', 'average', 'max velocity', 'velocity'])
yearly_vel
year average max velocity velocity
0 2018 106.390909 112.9 [104.5, 100.0, 112.4, 112.0, 108.7, 102.8, 108...
1 2019 107.022222 114.4 [111.6, 111.0, 107.2, 104.1, 104.3, 106.9, 107...
2 2020 106.885714 111.3 [101.0, 105.4, 102.0, 110.4, 111.3, 109.1, 109.0]
3 2021 109.917391 117.2 [106.3, 115.2, 108.2, 108.9, 107.2, 108.3, 107...
4 2022 107.973529 118.0 [108.0, 108.1, 108.0, 108.3, 109.4, 109.8, 110...
5 2023 109.081818 117.1 [110.8, 110.3, 108.6, 116.7, 107.3, 103.9, 114...
6 2024 109.074074 118.7 [105.6, 105.2, 106.9, 107.3, 110.0, 118.7, 96....
import seaborn as sns
import pandas as pd
data = []
for i, row in yearly_vel.iterrows():
year = row['year']
for value in row['velocity']:
data.append([year, value])
df = pd.DataFrame(data, columns=['year', 'velocity'])
sns.boxplot(x='year', y='velocity', data=df)
2021年から打球速度の最速値が上がっており、よりパワーが増していることが示唆されます。
最後にシーズンごとの打球方向の比較です。
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
fig, axes = plt.subplots(2, 4, figsize=(14, 6))
for idx, year in enumerate(range(2018, 2025)):
x = (yearly_data[year]['hc_x']-125.42)*2.5
y = (198.27-yearly_data[year]['hc_y'])*2.5
ax = axes[idx // 4, idx % 4]
ax.scatter(x, y, c='w')
ax.set_xlim(-350, 350)
ax.set_ylim(0, 550)
ax.plot([0, -300], [0, 300], color='w')
ax.plot([0, 300], [0, 300], color='w')
ax.plot([-63, 0], [63, 126], color='w')
ax.plot([63, 0], [63, 126], color='w')
ax.set_facecolor('green')
ax.set_title(f'{year}')
fig.delaxes(axes[1, 3])
plt.tight_layout()
plt.show()
2018、19年はライト方向に偏っているわけでもなく、センターから逆方向にもバランスよく打っています。21年にはそれ以前よりも全ホームラン数自体が増えていましたが、特にライト方向へのホームランが急増していることがわかります。その後もライト方向は多いですが、センターから左中間方向も増えています。
分析結果の総括と所感
以上のデータ分析から、2021年に傾向が変化し、ホームラン数の増加や飛距離・打球速度の向上が見られ、メジャー移籍当初と比較してパワーアップしていることがわかります。また打ったボールのコースや打球方向にも偏りがなくなっていて、どのようなボールでも広角に強い打球でホームランを打つことができるようになっていると言えます。今シーズンは移籍初年度、打者専念、リハビリと投手復帰に向けた調整など、過去数シーズンとは異なる状況の中でのシーズンでしたが、様々な項目でキャリアハイの成績を残しました。来シーズン以降、これらのデータがどのように変化し、さらに記録を更新していくのか楽しみです。
終わりに
今回は大谷選手のメジャー全ホームランを分析しました。以前の投稿でも大谷選手の打撃結果の分析と予測モデルの作成を行いましたが、来シーズンは投手としての復帰も予定されています。投手データについてはまだ分析をしたことがないため、大谷選手のみならず今季非常に良い結果を残した今永投手を含め、山本投手、ダルビッシュ投手、松井投手、菊池投手などの投球データの分析にも取り組んでみたいと思います。