-
2021 NBA 파이널 - 야니스 아데토쿤보 없는 밀워키 벅스의 희망 크리스 미들턴(Kris Middleton)Data Analysis/LifeStyles 2021. 7. 6. 15:11
비록 밀워키 벅스에 '그리스 괴인' 야니스 아데토쿤보가 빠지지만 아데토쿤보와 함께 팀의 프랜차이즈 스타로 팀 파이널 진출에 혁혁히 공을 세운 크리스 미들턴이 있기 때문에 걱정이 없다. 야니스가 부상을 결장할 가능성이 높음에도 찰스 바클리를 포함한 많은 전문가들은 오히려 밀워키 벅스의 우승을 점치고 있는 이유도 미들턴 존재라고 생각한다.
밀워키 벅스 경기를 많이 보지는 않지만 최근 플레이오프 경기를 보면 오히려 야니스 아데토쿤보가 결장했을때 크리스 미들턴이 더 잘하는 것 같고, 밀워키 벅스의 팀플레이가 더 잘 사는 느낌을 받았다. 아데토쿤보 물론 슈퍼 에이스로서 상대 수비와 공격을 파괴할 수 있는 선수지만 종종 야니스가 코트 위에 있을 때 너무 답답하다는 느낌이 없지 않아 있었다. 그래서 이번 포스팅에서는 팀의 2옵션이 크리스 미들턴이 실제로 야니스 아데토쿤보 출전 여부에 따라 얼마나 경기력이 달라지는 데이터로 확인해보도록 하겠다.
1. 데이터 추출 후 전처리
basketball_reference_web_scraper 라이브러리를 사용해서 이번 20-21 시즌 크리스 미들턴, 야니스 아테토쿤보의 정규 시즌 기록을 모두 가져오도록 하겠다. 야니스 아테토쿤보 플레이 유무에 따른 크리스 미들턴 경기력 차이를 기록으로 보고자 하는 것이기 때문에 크리스 미들턴 플레이한 날짜를 기준으로 해서 야니스 경기 기록과 left join을 하겠다. 그렇다면 당연히 두 선수가 같이 뛴 경기와 미들턴은 뛰었지만 야니스가 뛰지 않은 경기로 구분할 수 있을 것이다. 아래와 같이 x는 미들턴, y는 야니스의 경기 기록을 확인할 수 있다.
from basketball_reference_web_scraper import client import pandas as pd km=client.regular_season_player_box_scores( player_identifier="middlkh01", season_end_year=2021 ) ga=client.regular_season_player_box_scores( player_identifier="antetgi01", season_end_year=2021 ) km1=pd.DataFrame(km) ga1=pd.DataFrame(ga) km1['results']=km1['outcome'].apply(lambda x:x.name) df=pd.merge(left=km1, right=ga1, how ='left', left_on=cm1.date, right_on=ga1.date)
다음으로는 위에서 만든 테이블을 기준으로 해서 미들턴과 야니스가 함께 뛴 경기 그리고 미들턴 혼자 뛴 경기 구분하도록 하겠다. y가 야니스의 기록이므로 y가 Null 값이면 당연히 야니스가 출전하지 않은 경기다.
df2=df[df['points_scored_y'].isnull()] df3=df[df['points_scored_y']>0]
야니스 출전 여부별 크리스 미들턴의 평균 기록을 아래와 같이 계산한 이후 데이터프레임에 저장하도록 하겠다. 여기서 내가 보고자 하는 데이터는 평균 득점, 평균 어시스트, 평균 마진, 야투율, 3점 성공률, 승률 총 6개다.
avg_points_noga=df2['points_scored_x'].mean() avg_points_ga=df3['points_scored_x'].mean() avg_assists_noga=df2['assists_x'].mean() avg_assists_ga=df3['assists_x'].mean() avg_pm_noga=df2['plus_minus_x'].mean() avg_pm_ga=df3['plus_minus_x'].mean() fg_noga=df2['made_field_goals_x'].sum()/df2['attempted_field_goals_x'].sum() fg_ga=df3['made_field_goals_x'].sum()/df3['attempted_field_goals_x'].sum() pt3_noga=df2['made_three_point_field_goals_x'].sum()/df2['attempted_three_point_field_goals_x'].sum() pt3_ga=df3['made_three_point_field_goals_x'].sum()/df3['attempted_three_point_field_goals_x'].sum() win_pct_noga=len(df2[df2['results']=='WIN'])/df2['results'].count() win_pct_ga=len(df3[df3['results']=='WIN'])/df3['results'].count() columns=['Data','Number'] tb=pd.DataFrame(columns=columns) tb=tb.append(pd.Series(['avg_pts',avg_points_noga],index=tb.columns),ignore_index=True) tb=tb.append(pd.Series(['avg_pts',avg_points_ga],index=tb.columns),ignore_index=True) tb=tb.append(pd.Series(['avg_ast',avg_assists_noga],index=tb.columns),ignore_index=True) tb=tb.append(pd.Series(['avg_ast',avg_assists_ga],index=tb.columns),ignore_index=True) tb=tb.append(pd.Series(['avg_PlusMinus',avg_pm_noga],index=tb.columns),ignore_index=True) tb=tb.append(pd.Series(['avg_PlusMinus',avg_pm_ga],index=tb.columns),ignore_index=True) tb=tb.append(pd.Series(['FG%',fg_noga],index=tb.columns),ignore_index=True) tb=tb.append(pd.Series(['FG%',fg_ga],index=tb.columns),ignore_index=True) tb=tb.append(pd.Series(['3PT%',pt3_noga],index=tb.columns),ignore_index=True) tb=tb.append(pd.Series(['3PT%',pt3_ga],index=tb.columns),ignore_index=True) tb=tb.append(pd.Series(['winpct',win_pct_noga],index=tb.columns),ignore_index=True) tb=tb.append(pd.Series(['winpct',win_pct_ga],index=tb.columns),ignore_index=True)
2. 시각화
크리스 미들턴이 뛴 경기는 8경기에 불과해서 비교하기에는 조금 무리가 있지만 여하튼 파이널에서 야니스 출전이 거의 불가능한 상황에서 어느 정도 참고해 볼 수는 있어 보인다.
야니스 아테토쿤보가 출전하지 않은 정규 시즌 8경기에서 크리스 미들턴은 득점, 어시스트, 마진에서 모두 높은 기록을 기록했다. 물론 야니스가 없는 상황에서 크리스 미들턴이 1 옵션으로 볼을 더 만지기 때문에 볼륨은 상승할 수밖에 없다. 득점, 어시스트는 그렇다 치더라도 마진이 2배 이상 증가하는 부분은 유의미하다고 볼 수 있을 것 같다.
import plotly.express as px tb['Giannis']=['Without','With','Without','With','Without','With','Without','With','Without','With','Without','With'] fig = px.bar(tb[:6], x="Data", y="Number", color='Giannis', barmode='group', height=700, title='Kris Middleton 2021 Regular Season Stats with/without Giannis') fig.show() fig.to_json()
다음으로는 야투 성공률, 3점 성공률 그리고 팀 승률이다. 크리스 미들턴의 3점 성공률이 야니스가 없었을 때 오히려 상승하는 모습을 보이고 있는데, 농알못인 내가 추측하기로는 아무래도 야니스가 없을 경우 코트 위에 뛰는 5명 모두(디비첸조, 즈루 할리데이, 포르티스, 미들턴, 로페즈) 뛰어난 3점 슈터로 팀 공격 시 스페이싱이 잘되는 바람에 3점이 잘 들어가지 않나 싶다.
야니스가 없을 경우 승률이 65%에서 75%로 증가하는 점도 같이 확인할 수 있다. 이게 맞는 비교는 아니지만 여하튼 야니스가 없어도 밀워키는 강한 팀이라는 점을 뒷받침하는 데이터로 볼 수 있을 것 같다.
fig = px.bar(tb[6:], x="Data", y="Number", color='Giannis', barmode='group', height=500, title='Kris Middleton 2021 Regular Season Stats with/without Giannis') fig.show() fig.to_json()
야니스가 출전하지 않을 경기 수가 많지가 않아 정확한 비교는 할 수 없었지만 그래도 미들턴의 기록이나 효율 모두 야니스 결장했을 때 증가하는 점을 확인할 수 있다. 이번 애틀란타 호크스와의 마지막 5, 6차전 경기에서 미들턴이 야니스 없이 경기를 캐리한 점만 봐도 알 수 있다. 개인적으로도 야니스가 없는 밀워키 벅스가 오히려 크리스 미들턴의 활약으로 6차전 안에 우승을 차지 않을까 조심스럽게 예상한다.
'Data Analysis > LifeStyles' 카테고리의 다른 글
서울 열린데이터광장을 통해 버스 정류장 합정역의 승하차 승객 수를 분석해보자~ (0) 2021.08.08 전국 프랜차이즈 빵집(파리바게뜨, 뚜레쥬르) 지점 위치 시각화 (0) 2021.07.08 카카오 지도에서 오레노라멘 맛집 리뷰 파이썬으로 크롤링 & 분석 해보자 (0) 2021.07.02 네이버 쇼핑인사이트 - 종근당 락토핏 유산균 검색 클릭량 추이 가져오기 With Python (0) 2021.06.25 2013년 ~ 2020년 연도별 한강공원 방문 이용객 수 데이터 분석 With Python, folium, Plotly (0) 2021.06.13