basket=pd.read_csv(path)
basket=basket.drop(basket.columns[0],axis=1)
basket.head(10)
head.shape
(2761, 41)
basket.columns
Index(['Team_H', 'Team_A', 'HomeWin', 'MP_H', 'FG_H', 'FGA_H', 'FG%_H', '3P_H',
'3PA_H', '3P%_H', 'FT_H', 'FTA_H', 'FT%_H', 'ORB_H', 'DRB_H', 'TRB_H',
'AST_H', 'STL_H', 'BLK_H', 'TOV_H', 'PF_H', 'PTS_H', 'MP_A', 'FG_A',
'FGA_A', 'FG%_A', '3P_A', '3PA_A', '3P%_A', 'FT_A', 'FTA_A', 'FT%_A',
'ORB_A', 'DRB_A', 'TRB_A', 'AST_A', 'STL_A', 'BLK_A', 'TOV_A', 'PF_A',
'PTS_A'],
dtype='object')
같은 세부 스탯에 대해 홈팀에 대한 feature와 원정팀에 대한 feature가 각각 존재합니다. 따라서 feature 설명은 세부 스탯별로 한번씩만 진행합니다. 홈팀에 대한 feature 명은 "세부스탯명_H"이고, 원정팀에 대한 feature명은 "세부스탯명_A"입니다.
basket.describe()
basket.info()
basket.isna().sum()
col_n = 4
row_n = 10
fig, ax = plt.subplots(ncols=col_n, nrows=row_n, figsize=(20,row_n*5))
for i,col in enumerate(basket.columns[2:]):
sns.kdeplot(x=basket[col],data=basket, ax=ax[int(i/col_n),int(i%col_n)], hue="HomeWin")
right skewed 형태를 띠는 다음 변수들은 log transformation을 고려해볼만 합니다.
그러나 BLK_H와 BLK_A를 제외하고는 skewed된 정도가 그리 심하지 않기 때문에 추후 BLK_H와 BLK_A만 log transformation을 진행합니다.
left skewed 형태를 띠는 'FT%_H','FT%_A'는 square transformation을 진행합니다.
경기 결과는 홈팀/원정팀의 상대적인 스탯에 따라 결정되기 때문에 홈팀이 원정팀에 '비해'얼마나 잘 했는지가 중요합니다. 따라서 홈팀의 경기 승리 여부에 따라 홈팀과 원정팀의 스탯 차이 분포에 차이가 있는지 확인해 볼 필요가 있습니다.
basket_diff=pd.DataFrame(columns=['PTS','FG%','3P%','TRB','HomeWin'])
basket_diff['HomeWin']=basket['HomeWin']
basket_diff['PTS']=basket['PTS_H']-basket['PTS_A']
basket_diff['FG%']=basket['FG%_H']-basket['FG%_A']
basket_diff['3P%']=basket['3P%_H']-basket['3P%_A']
basket_diff['TRB']=basket['TRB_H']-basket['TRB_A']
basket_diff.head(10)
col_n = 4
row_n = 1
fig, ax = plt.subplots(ncols=col_n, nrows=row_n, figsize=(20,row_n*5))
for i,col in enumerate(basket_diff.columns[:-1]):
sns.kdeplot(x=basket_diff[col],data=basket_diff, ax=ax[int(i%col_n)], hue="HomeWin")
위 그래프에서 볼 수 있듯 홈팀의 승리/패배에 따라 주요 스탯의 분포가 약간씩 다르다는 것을 알 수 있으며, 홈팀이 승리한 경우 해당 feature의 차이가 더 오른쪽으로 치우칩니다. 이는 곧 승리했을 경우 해당 feature들에 대해 홈팀이 원정팀에 비해 더 높은 수치의 값을 가짐을 의미하고, 일반적인 해석과 일맥상통합니다.
basket_corr=basket[2:].corr()
plt.figure(figsize=(20,20))
sns.heatmap(basket_corr, annot=True, fmt=".2f", cmap="Blues")