야구 분석/Python

24시즌 오타니와 베츠의 성적 비교

sam_j_s 2024. 5. 11. 17:36
728x90
반응형

시각화 주제

팀당 40경기정도 지난 지금 메이저리그에 미친 듀오가 있습니다. 바로 베츠와 오타니입니다. 다저스의 1번과 2번으로 나서면서 타격의 모든 지표에서 상위권을 달리고 있습니다. 이 폭격기 듀오가 시즌이 끝날 때는 어떤 성적을 기록할지 모르겠지만 우선 현재 타격지표로 비교해 보도록 하겠습니다.

 

 데이터 출처

이번 데이터는 따로 수집을 하지 않고 MLB Stats API를 사용했습니다.

MLB stats API는 MLB서버에 직접 연결하여 필요한 데이터를 편리하게 수집할 수 있는 API입니다.

 

데이터 분석

패키지 임포트

필요한 패키지를 불러오고 오타니와 베츠선수의 id를 검색해보겠습니다.

import statsapi
import pandas as pd
import plotly.offline as pyo
import plotly.graph_objs as go
print(statsapi.lookup_player('ohtani'))
print(statsapi.lookup_player('betts'))

 

오타니, 베츠 2024 시즌 타격 성적 데이터프레임 만들기

ohtani = statsapi.player_stat_data(660271, group="[hitting]", type="season")['stats'][0]['stats']
betts = statsapi.player_stat_data(605141, group="[hitting]", type="season")['stats'][0]['stats']

sr_o = pd.Series(ohtani, name = 'Ohtani')
sr_b = pd.Series(betts, name = 'Betts')

df = pd.concat([sr_o,sr_b], axis = 1)
df

 

시각화

만들어둔 데이터 프레임에서 타율, 출루율, 장타율, ops로 이루어진 데이터프레임과 득점, 2루타, 3루타, 홈런, 삼진, 안타. 타점 데이터프레임을 만들어주었습니다.

df_hit1 = df.iloc[[12, 14, 15, 16]]
df_hit1

df_hit2 = df.iloc[[3, 4, 5, 6, 7, 10, -8]]
df_hit2

각각 만들어준 데이터 프레임으로 그래프를 만들어서 비교해 보겠습니다.

ohtani = go.Bar(x=df_hit2['Ohtani'].keys(), y=df_hit2['Ohtani'].values,
                marker = {'color': 'blue'},
                name='Ohtani')
betts = go.Bar(x=df_hit2['Betts'].keys(), y=df_hit2['Betts'].values,
               marker = {'color': 'skyblue'},
               name='Betts')
data = [ohtani, betts]
layout = go.Layout(title='주요 타격 지표 비교')
fig = go.Figure(data=data, layout=layout)
pyo.iplot(fig)

 

1번인 베츠가 출루를 하고 2번인 오타니가 베츠를 불러들이는 것이 가장 이상적인 그림입니다. 오타니 선수가 안타, 2루타, 홈런은 더 많이 친 것을 알 수 있고 베츠 선수는 득점이 더 많은 것을 알 수 있습니다.

 

이제 타율, 출루율, ops 데이터 프레임을 가지고 비교를 해보겠습니다.

ohtani = go.Bar(x=df_hit1['Ohtani'].keys(), y=df_hit1['Ohtani'].values,
                marker = {'color': 'blue'},
                name='Ohtani')
betts = go.Bar(x=df_hit1['Betts'].keys(), y=df_hit1['Betts'].values,
               marker = {'color': 'skyblue'},
               name='Betts')
data = [ohtani, betts]
layout = go.Layout(title='주요 타격 지표 비교')
fig = go.Figure(data=data, layout=layout)
pyo.iplot(fig)

데이터가 소수점을 인식하지 못해 이상한 그래프가 나오게 되는데 데이터의 값을 바꿔주고 그래프를 그려보았습니다.

df_hit1.loc['avg', 'Ohtani'] = 0.359
df_hit1.loc['avg', 'Betts'] = 0.346
df_hit1.loc['obp', 'Ohtani'] = 0.427
df_hit1.loc['obp', 'Betts'] = 0.452
df_hit1.loc['slg', 'Ohtani'] = 0.679
df_hit1.loc['slg', 'Betts'] = 0.551
df_hit1.loc['ops', 'Ohtani'] = 1.106
df_hit1.loc['ops', 'Betts'] = 1.003
df_hit1

출루율을 제외하고는 오타니의 지표들이 더 높은 것을 알 수 있습니다.

반응형

'야구 분석/Python'의 다른글

  • 현재글 24시즌 오타니와 베츠의 성적 비교

관련글