저번 시간에 이어서 최애 선수 크리스 폴에 대한 분석을 해보도록 하겠다. 이번에는 크리스 폴이 2005년 데뷔 이후 뛴 모든 경기 기록을 Basketball_Reference 사이트에서 크롤링해와서 다음과 같은 분석을 해보겠다. Basketball_reference 사이트는 NBA 팬들이라면 모두 알고 있는 NBA 데이터 사이트로 특히 선수 하나하나의 경기별 상세 데이터를 제공하고 있다. 진짜 선수에 대한 세부적인 지표까지 제공할 수 있어서 크리스 폴 선수 분석은 한 #10까지 이어질 수 있지 않을까 생각이 든다.
- 크리스 폴 커리어 내 홈, 어웨이 경기에 따른 평균 스탯 비교
- 상대팀별 평균 스탯 차이 비교
크리스 폴이 홈, 원정에 따라 기복이 있는 선수인지, 어떤팀한테는 강했고 어떤 팀한테는 경기력이 안 좋았는지 종합적으로 분석하고자 한다. 분석하기 전 내가 크리스 폴에 가지고 있던 인상은 굉장히 기복이 없는 선수라 크게 차이가 없을 것으로 추측된다.
우선 크리스폴 데뷔 이후 뛴 모든 경기 기록을 가져오도록 하겠다. 이번에도 마찬가지로 Pandas에 있는 Read_html 함수를 사용하겠다. 2006년부터 2020년까지의 시즌을 다 가져와야 되기 때문에 반복문을 사용했고, data라는 빈 데이터 프레임에 추가하였다.
import pandas as pd
data=pd.DataFrame()
for i in range(2006,2021):
tables =pd.read_html(f'https://www.basketball-reference.com/players/p/paulch01/gamelog/{i}/')
df=tables[7]
data=data.append(df)
OutPut: Data 데이터 프레임을 출력하면 아래와 같다.
그다음으로 데이터에 대한 전처리가 필요하다. 크리스 폴이 안 뛴 경기를 제외하고, 그리고 칼럼명이 데이터 중간중간에 있어 이 부분도 함께 처리를 해야 된다.
#데이터 중간에 있는 컬럼명 제외
data=data[data['G']!='G']
#결장한 경기 행 제외
data=data[(data['PTS']!='Inactive')&(data['PTS']!='Did Not Dress')&(data['PTS']!='Did Not Play')&(data['PTS']!='Not With Team')]
#홈, 원정 컬럼 변경
data.rename(columns={'Unnamed: 5':'Home_Away'},inplace=True)
#홈, 원정 값 추가
data['Home_Away']=data['Home_Away'].fillna('H')
data['Home_Away']=data['Home_Away'].str.replace('@','A')
#필요없는 첫 두 컬럼 제외
data=data.drop(['Rk','G'],axis=1)
수치 데이터가 문자열로 저장되어 있기에 우선 숫자 int 타입으로 바꾸도록 하겠다. 그리고 분석할 지표는 대표적인 농구 선수 지표인 득점, 어시스트, 스틸, 리바운드를 선정했다.
data['PTS']=data['PTS'].astype(int)
data['AST']=data['AST'].astype(int)
data['STL']=data['STL'].astype(int)
data['TRB']=data['TRB'].astype(int)
분석을 위한 사전 준비 작업은 끝났고, 바로 크리스 폴 선수 지표 분석을 해보도록 하겠다.
1. 홈, 어웨이 경기 별로 경기 스텟 비교
역시 크리스 폴이다. 홈, 원정 경기 간 차이가 크지 않은 점을 확인할 수 있다. 커리어 평균 득점은 오히려 원정에서 좋다. 야투율은 홈에서 1% 정도 낮기는 하지만 이 정도는 큰 차이라고 볼 수도 없다. 역시 S 클래스 선수들은 홈, 원정 가리지 않는다.
Home_Away_stats=data.groupby('Home_Away')['PTS','AST','TRB','STL'].mean()
Output:
home_away_fg=data.groupby('Home_Away')['FG'].sum()/data.groupby('Home_Away')['FGA'].sum()
Output:
2. 상대팀 별 경기 스텟 비교
상대팀 별 경기 스텟 비교하는 것도 크게 어렵지 않다. 위에서 긁어온 데이터 안에 선수 경기 기록뿐만 아니라 상대팀 별 경기 기록도 함께 제공하기 때문이다. 어떻게 분석을 할 것이냐면 상대팀 별로 4대 지표 평균 기록을 계산한 다음 각 지표 기록 별로 4 분위로 구분할 것이다. 그리고 상대팀 별 기록 분위를 합산한 수치를 상대 팀 별로 비교하고자 한다. 즉 가장 낮은 수치를 기록한 상대팀일수록 크리스 폴의 평균 득점, 평균 어시스트, 평균 스틸, 평균 리바운드가 가장 높은 수치를 기록했다고 이해하면 될 것이다.
#상대팀 별 평균 기록 계산
opp_stats=data.groupby('Opp')['PTS','AST','TRB','STL'].mean()
r_labels = range(4, 0, -1)
#4대 지표를 4분위로 구분
pts_groups = pd.qcut(opp_stats['PTS'], q=4, labels=r_labels)
ast_groups = pd.qcut(opp_stats['AST'], q=4, labels=r_labels)
trb_groups = pd.qcut(opp_stats['TRB'], q=4, labels=r_labels)
stl_groups = pd.qcut(opp_stats['STL'], q=4, labels=r_labels)
rank_df=pd.DataFrame([pts_groups,ast_groups,trb_groups,stl_groups]).T
rank_df 경기 지표 4분위 합산한 후 오름차순으로 정렬하면 다음과 같은 결과를 얻을 수 있다.
rank_df['Scores']=rank_df['PTS']+rank_df['AST']+rank_df['TRB']+rank_df['STL']
rank_df=rank_df.sort_values(by='Scores',ascending=True)
평균 기록 지표만 볼 경우 크리스 폴은 브루클린, 오클라호마 시티, 새크라멘토 팀에 굉장히 좋은 기록을 찍은 점을 확인할 수 있고, 반대로 위에 이미지에서는 짤렸지만 인디애나, 밀워키, 마이애미 팀한테는 커리어 못 미치는 기록은 찍었다. 이것만 보고 단정할 수는 없지만 동부팀에 오히려 약하지 않았나 생각이 들기도 한다.
분석을 하면 할수록 크리스폴이 얼마나 좋은 선수인지를 확인할 수 있다. 비록 성질이 더러운 선수인 점은 동의하나, 이정도 기복 없이 뛰는 선수도 없다고 생각한다. 다음 시간에도 동일하게 크리스 폴에 대해서 더 재밋는 주제를 가져와 분석해보도록 하겠다.
'문송충의 코딩하기 > NBA 분석 With Python' 카테고리의 다른 글
LA 레이커스의 빅2 르브론 제임스과 앤서니 데이비스 분석 #2 (0) | 2020.08.30 |
---|---|
LA 레이커스의 빅2 르브론 제임스과 앤서니 데이비스 분석 (0) | 2020.08.26 |
[NBA] 크리스 폴(Chirs Paul) 분석 With Python #4 (0) | 2020.08.11 |
NBA 크리스 폴 선수 파이썬으로 분석하기 #2 (0) | 2020.08.04 |
NBA 크리스 폴 선수의 평균 득점/어시스트/스틸 수 추이 분석 With 파이썬 (0) | 2020.08.03 |
댓글