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

NBA 크리스 폴 선수의 평균 득점/어시스트/스틸 수 추이 분석 With 파이썬

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

축구 다음으로 좋아하는 스포츠가 농구이고, 그중에서도 NBA 그리고 그중에서도 그 유명한 그그컨(그래서 그분 컨파 진출하심?) 크리스 폴이라는 선수를 좋아한다. NBA 선수에 대해 다양한 분석을 이번 글을 시작으로 해보고자 한다. 아직까지 상세한 데이터를 찾지를 못해서 이번 시간에는 ESPN NBA 스탯 사이트에서 크리스 폴의 데뷔 이후 스텟 기록들을 파이썬 크롤링해서 간단하게 시각화하도록 하겠다. 크리스 폴은 NBA의 대표적인 1번 포인트 가드 포지션으로 중요시하게 보는 지표인 경기당 평균 득점, 어시스트, 스틸을 시즌 별 추이가 어떤지 분석해보겠다. 

 

이번 크롤링에도 pandas 패키지에 있는 read_html 함수를 사용하도록 하겠다. NBA ESPN 사이트에 들어가면 선수 별로 Stats을 보여주는 페이지가 있다. 여기도 table 형태로 스탯이 보여주고 있기에 read_html를 사용하면 쉽게 가져올 수 있다. 


1. 크리스 폴  Stats 데이터 가져오기

import pandas as pd
url = 'https://www.espn.com/nba/player/stats/_/id/2779/chris-paul'
tables=pd.read_html(url)

#테이블이 2개로 구분되어 있어 하나로 테이블을 합치도록 하겠다.
df=pd.concat([tables[0],tables[1]],axis=1).dropna()

Output: 아래 테이블과 같이 크리스 폴의 전반적인 주요 기록 지표를 다 받아 올 수 있다.

2. 크리스 폴  시즌 별 평균 득점/어시스트/스틸 수 시각화

 

시즌 별로 포인트 가드로서 중요한 평균 득점, 평균 어시스트 수, 평균 스틸 수를 가져와 꺾은 선형의 그래프를 그리도록 하겠다.

season = df['season']
assists = df['AST']
steals=df['STL']
points=df['PTS']

plt.figure(figsize = (18,10))
plt.plot(season, points, lw =10)
plt.xlabel('Season', size =10)
plt.ylabel('Average Points', size = 10)
plt.title('Average Points', size=45)
plt.grid()
plt.show()

plt.figure(figsize = (18,10))
plt.plot(season, assists, lw=10)
plt.xlabel('Season', size =10)
plt.ylabel('Average Assists', size = 10)
plt.title('Average Assists', size=45)
plt.grid()
plt.show()

plt.figure(figsize=(18,10))
plt.plot(season, steals,lw=10)
plt.xlabel('Season', size =10)
plt.ylabel('Average Steals', size = 10)
plt.title('Average Steals', size=45)
plt.grid()
plt.show()

Output: 

전반적으로 2007, 2008 시즌 커리어 최고 기록을 찍은 뒤 꾸준히 하락하는 추세이다. 솔직히 이때 코비 브라이언트 대신 MVP를 타도 무방하다고 생각한다.

 

3. 야투 성공 개수 중 3점 슛이 차지하는 비중

 

요즘 트렌드가 3점 슛인 만큼 크리스 폴이라는 선수는 시즌 별로 성공한 야투 중에 3점 슛이 몇 퍼센트를 차지하는지 분석해보도록 하겠다. 왜 이 분석을 하냐면 크리스 폴 선수는 물론 3점 슛도 쏘지만 전형적인 미들 슛 장인이다. 그렇지만 휴스턴이라는 극단적 양궁 부대 팀으로 가서 3점 슛 비중이 늘어났는지 한번 확인해보고 싶었기 때문이다.

df['FGM']=df['FG'].str.split('-').str[0].astype(float)
df['3PT FGM']=df['3PT'].str.split('-').str[0].astype(float)
df['3PT Portion']=df['3PT FGM']/df['FGM']

Output: 아래처럼 3점 슛 비중 칼럼이 만들어진다.

plt.figure(figsize = (30,10))
plt.bar(season, df['3PT Portion'])
plt.show()

Output: 

전반적으로 성공한 야투 중에서 3점 야투가 시즌 별로 늘어나고 있는 점을 확인할 수 있다. 그리고 무엇보다 실제로 극단적 스몰라인업을 하고 있는 휴스턴에 있던 2017~2019 시즌에 3점 비중이 가장 높은 점을 확인할 수 있다. 휴스턴을 떠난 이번 2020 시즌에서는 3점 슛 비중이 다시 커리어 평균 수준으로 돌아온 점을 확인할 수 있다. 휴스턴이 얼마나 3점을 선수들에게 강요했는지 알 수 있는 대목이다.

 

이번 시간에는 ESPN 사이트에서 크리스 폴 데이터를 가져와 이 선수의 시즌 별 스텟 추이를 분석해보았다. 내가 아무래도 NBA를 좋아하다 보니 계속해서 NBA 선수들에 대해 다양한 관점으로 분석해보도록 하겠다. 해복 싶은 게 클러치 시즌에서의 야투 성공률, 즉 1 옵션 선수들이 실제로 우리가 자주 부르는 새가슴인지를 확인을 데이터 분석해보고 싶다. 이런 데이터를 어디서 찾아야 될지는 모르겠지만, 이러한 데이터가 있으면 재미가 있을 것 같다. 다음 시간에 좀 더 재밌는 내용으로 찾아오겠다.

728x90
반응형

댓글