본문 바로가기
문송충의 코딩하기/NBA 분석 With Python

NBA MVP 야니스 아데토쿤보의 야투 분석 with Python

by 동장군님 2020. 9. 9.
728x90
반응형

Giannis Antetokounmpo

백투백 MVP가 유력한 야니스 아데토쿤보가 또다시 동부의 벽을 넘지 못했다. 정규 시즌에서는 30개 팀 전체 승률 1위를 기록하는 등 압도적인 경기력을 보인 밀워키 벅스의 모습은 어디로 갔는지 모를 정도로 마이애미 히트에 처참히 무너졌다. 이번 시즌의 실패에는 부덴홀저, 미들턴, 블렛소, 부상 등 다양한 원인이 있겠지만 슈퍼스타이자 팀을 이끌어가야 할 1 옵션 야니스 아데토쿤보가 가장 큰 책임이 있다고 생각한다. 그래서 우리 아데토쿤보의 어떤 점이 문제이길래 2년 연속 동부를 뚫지 못했는지 분석해보고자 한다. 우선 아데토쿤보의 가장 큰 약점으로 뽑히는 야투를 데이터로 한번 샅샅이 보고자 한다. 

 

야니스 아데토쿤보

 

 

 

 

분석 내용

쿤보는 뛰어난 운동신경과 긴 팔을 활용해서 인사이드에서는 그 누구도 막지 못하는 폭발적인 득점력을 보여주지만 림과 조금이라도 멀어지면 위력이 약해지는 선수인 만큼 NBA MVP의 야투를 상세히 분석하고자 한다. 이번 글에서 보고자 하는 내용은 다음과 같다.

 

  • 야투 성공률, 3점 성공률
  • 어시스트/비어시스트 기반 득점 비중
  • 어시스트, 비어시스트 기반 2점 야투 비중, 3점 야투 비중
  • 야니스에게 가장 많이 어시스트한 밀워키 벅스 선수

 

 

 

 


Python Code

 

1. NBA 현역 선수 리스트 가져오기 from NBA

 

"pip install nba_api" 패키지를 설치하면 바로 사용할 수 있다. 아래 코드를 돌리면 분석에 필요한 NBA 현역 선수들의 ID 값을 확인할 수 있다. 여기서 query 함수를 통해 야니스 아데토쿤보의 ID값을 kunbo라는 변수에 저장했다.

from nba_api.stats.static import players
import pandas as pd

nba_players=players.get_players()
name=[]
ids=[]

for i in nba_players:
    if i['is_active']== True:
        name.append(i['full_name'])
        ids.append(i['id'])

dff=pd.DataFrame([name,ids]).T
dff.columns=['name','id']
dff['name']=dff['name'].str.lower()

kunbo=dff.query('name=="giannis antetokounmpo"')['id'].values[0]

 


 

2. 19-20 정규 시즌 쿤보의 야투 성공률 & 3점 성공률, 시각화

 

설치한 NBA_API에는 야투와 관련된 상세 지표를 제공하고 있다. 우선 여기서는 쿤보의 야투성공률과 3점 성공률을 갖고 와서 시각화해보도록 하겠다. 확실히 전반적인 야투 성공률은 55%를 굉장히 높다. 다만 최근 NBA 트렌드와는 맞지 않는 3점 성공률을 보여주고 있다. 이번 시즌에 3점이 많이 개선된 것은 맞지만 30% 3점 성공률로는 플레이오프에서는 그 어떤 팀에게도 위협이 되지는 못한다. 

 

from nba_api.stats.endpoints import playerdashboardbyshootingsplits
data=playerdashboardbyshootingsplits.PlayerDashboardByShootingSplits(player_id=kunbo,season_type_playoffs="Regular Season")
shooting=data.nba_response.get_data_sets()

overall=pd.DataFrame(columns=shooting['OverallPlayerDashboard']['headers'])
overall.loc[0]=shooting['OverallPlayerDashboard']['data'][0]

overall2=overall[['GROUP_SET', 'GROUP_VALUE', 'FGM', 'FGA', 'FG_PCT', 'FG3M', 'FG3A',
       'FG3_PCT','PCT_AST_2PM', 'PCT_UAST_2PM',
       'PCT_AST_3PM', 'PCT_UAST_3PM', 'PCT_AST_FGM', 'PCT_UAST_FGM']]

overall2['FG_PCT']=overall2['FG_PCT'].astype(float)
overall2['FG3_PCT']=overall2['FG3_PCT'].astype(float)
import matplotlib.pyplot as plt
plt.figure(figsize=(12,8))
plt.bar(['FG_PCT'],overall2['FG_PCT'])
plt.bar(['FG3_PCT'],overall2['FG3_PCT'])
plt.ylim(0.0, 0.8)

plt.text(0,overall2['FG_PCT'][0],overall2['FG_PCT'][0],fontsize=14, horizontalalignment='center', verticalalignment='bottom')
plt.text(1,overall2['FG3_PCT'][0],overall2['FG3_PCT'][0],fontsize=14, horizontalalignment='center', verticalalignment='bottom')

plt.show()

 

 

 

 

 


 

3. 어시스트 기반 & 비어시스트 기반 야투 비중

 

 

밀워키 벅스라는 팀이 워낙 조직력과 패스 플레이가 좋다 보니 분석 전에는 야니스의 어시스트 기반 득점 비중이 높지 않을까라고 예상했는데, 오히려 비어시스트 즉 아이솔 플레이 기반의 득점이 전체에서 55%를 차지하고 있었다.  거의 하프라인에서 야니스가 가지고 있는 긴 다리와 긴 팔을 활용해서 닥돌 하는 플레이가 많아서 이런 데이터가 나오지 않았나 싶다. 이번 플레이오프 경기에서는 이런 플레이를 시도조차 못하게 철저하게 차단한 점이 마이애미가 이번 시리즈를 가져온 큰 이유라고 생각된다. 

 

kunbo_assists_by=pd.DataFrame(columns=shooting['AssistedBy']['headers'])
for i in range(len(shooting['AssistedBy']['data'])):
    kunbo_assists_by.loc[i]=shooting['AssistedBy']['data'][i]
    
assist_shares=kunbo_assists_by['FGM'].sum()/overall2['FGM'][0]

unassist_shares=1-assist_shares

plt.rcParams["font.family"] = 'Malgun Gothic'
plt.rcParams["font.size"] = 16
plt.figure(figsize=(16,8))
plt.pie([assist_shares,unassist_shares],autopct='%0.1f%%')
plt.title('어시스트/비어시스트 창출 득점 비중')

 


 

4. 어시스트/비어시스트 기반 2점, 3점 야투 비중

 

코드는 조금 번거롭지만 어려운 코드는 없다. 데이터 분석 결과 특이한 점은 2점 야투 비중은 비어시스트 기반의 야투가 높은 반면 3점 야투에서는 어시 기반의 야투가 비중이 높은 점을 확인할 수 있다. 확실히 야니스가 아이솔 닥돌을 통해서 득점을 하는 플레이가 많다 보니 2점 야투는 비어시스트 비중이 높은 것 같고, 3점의 경우 수비를 앞에 두고 풀업으로 3점을 쏘는 경우보다 상대방이 야니스를 새깅하고 있을 때 동료의 패스를 받아 오픈 3점을 쏘는 경우가 더 많아 이러한 수치가 나오는 듯싶다.

 

overall2['PCT_AST_2PM']=overall2['PCT_AST_2PM'].astype(float)
overall2['PCT_UAST_2PM']=overall2['PCT_UAST_2PM'].astype(float)
overall2['PCT_AST_3PM']=overall2['PCT_AST_3PM'].astype(float)
overall2['PCT_UAST_3PM']=overall2['PCT_UAST_3PM'].astype(float)
overall2['PCT_AST_FGM']=overall2['PCT_AST_FGM'].astype(float)
overall2['PCT_UAST_FGM']=overall2['PCT_UAST_FGM'].astype(float)

plt.figure(figsize=(14,7))

plt.bar(['PCT_AST_FGM'],overall2['PCT_AST_FGM'])
plt.bar(['PCT_UAST_FGM'],overall2['PCT_UAST_FGM'])
plt.bar(['PCT_AST_2PM'],overall2['PCT_AST_2PM'])
plt.bar(['PCT_UAST_2PM'],overall2['PCT_UAST_2PM'])
plt.bar(['PCT_AST_3PM'],overall2['PCT_AST_3PM'])
plt.bar(['PCT_UAST_3PM'],overall2['PCT_UAST_3PM'])
plt.ylim(0.0, 0.8)

plt.text(0,overall2['PCT_AST_FGM'][0],overall2['PCT_AST_FGM'][0],fontsize=14, horizontalalignment='center', verticalalignment='bottom')
plt.text(1,overall2['PCT_UAST_FGM'][0],overall2['PCT_UAST_FGM'][0],fontsize=14, horizontalalignment='center', verticalalignment='bottom')
plt.text(2,overall2['PCT_AST_2PM'][0],overall2['PCT_AST_2PM'][0],fontsize=14, horizontalalignment='center', verticalalignment='bottom')
plt.text(3,overall2['PCT_UAST_2PM'][0],overall2['PCT_UAST_2PM'][0],fontsize=14, horizontalalignment='center', verticalalignment='bottom')
plt.text(4,overall2['PCT_AST_3PM'][0],overall2['PCT_AST_3PM'][0],fontsize=14, horizontalalignment='center', verticalalignment='bottom')
plt.text(5,overall2['PCT_UAST_3PM'][0],overall2['PCT_UAST_3PM'][0],fontsize=14, horizontalalignment='center', verticalalignment='bottom')

plt.show()


 

5. 야니스에게 가장 많은 어시스트를 기록한 밀워키 벅스 선수 List

 

야니스가 성공한 야투 중 밀워키 벅스 동료가 어시스트한 야투의 비중을 아래와 같이 추출한 것이다. 미들턴과 블렛소는 그렇다 치고 생각보다 벤치 자원인 디빈첸조가 야니스와 호흡이 좋은 점을 확인할 수 있다. 여기서 아쉬운 점은 블렛소다. 주전 포인트가드가 겨우 야니스에게 이 정도밖에 어시스트를 못 뿌렸다는 게 조금 불만족스럽다. 블레소보다 패스 지향적 가드가 있었으면 야니스가 지금보다 더 좋은 활약을 펼칠 수 있지 않았을까 생각이 든다. 

kunbo_assists_by['Assists_Share']=kunbo_assists_by['FGM'].apply(lambda x : x/overall2['FGM'][0])
assist_shares=kunbo_assists_by[['PLAYER_NAME','Assists_Share']]
assist_shares=assist_shares.sort_values(by='Assists_Share',ascending=False)

 


결론

플레이오프와 같이 수비가 타이트한 상황에서는 샤크 오닐이 아니고서야 인사이드 공략 갖고만은 한계가 있다. 르브론도 이 부분은 깨닫고 미들슛과 3점 슛 비중을 엄청나게 높여 결국 우승컵을 들 수 있었다. 야니스 아데토쿤보도 당연히 이 부분을 알고 있겠지만 3점 성공률을 최소 33%까지는 높여야 되고, 인사이드가 막혔을 때 해볼 수 있는 미들 슛 옵션도 장착을 해야 한다. 이 점이 힘들다고 하면 3점 성공률이 미친 선수들이 있는 팀으로 런하는 것도 방법이기는 하다. 별로 좋아 보이지는 않지만... 팀에 남고 만약 슛 개선이 불가하다면 림 근처에 포지션만 잡으면 긴 팔로 쉽게 레이업을 올릴 수 있는 만큼 인사이드에 적재적소에 패스를 넣어줄 패스 지향의 포인트가드가 필요하다.(블렛소는 야니스와 플레이 스타일이 너무 겹친다.) 야니스의 아이솔도 위력적이긴 하지만 이번 마이애미 전을 경험했듯이 막을 수 없는 수준이 아니기 때문이다. 크리스 폴 트레이스 썰도 이 부분 때문에 갑자기 나오지 않았을까 생각된다. 여하튼 이번 분석은 여기서 마무리하고 다음 시간에 더 상세한 분석으로 찾아오겠다. 

 

 

 

 

728x90
반응형

댓글