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

Arsenal/아스널 2019-2020 시즌 분석하기 with Python

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

Arsenal in 2019-2020

프리미어리그 출범 이후 아스널 역사상 거의 최악의 시즌이라고 볼 수 있는 2019-2020 시즌 아스널을 파이썬으로 분석해보고자 한다. 감독이 한 시즌 3명이었고, 주장도 쟈카에서 오바메양으로 바뀐 아주 변화무쌍한 시즌이었던 만큼 꽤 의미 있는 분석 내용이 있을 것 같다. 이번에도 FBref 사이트에서 데이터를 가져와 분석할 예정이며, 분석 내용은 아래와 같다. 데이터가 많지 않아 간단한 분석만 하려고 한다.

 

  • 포메이션 별 경기 수

  • 시즌에 주장 완장을 찬 선수 리스트

  • 홈/어웨이 경기 결과

  • 볼 점유율에 따른 경기 결과

Data Source

fbref라는 축구 통계 사이트를 활용하겠다. 아래 코드에서 df 변수를 출력하면 19-20 시즌 전체 경기 결과를 확인할 수 있다.

 

fbref.com/en/squads/18bb7c10/2019-2020/Arsenal-Stats

 

2019-2020 Arsenal Stats, Premier League | FBref.com

14-14-10, 56 Pts, 8th in Premier League (England), 56 Goals, 48 Goals Against, 8 GDiff, Gls: Pierre-Emerick Aubameyang - 22, Ast: Nicolas Pépé - 6, CS: Bernd Leno - 7

fbref.com

import pandas as pd
tables=pd.read_html('https://fbref.com/en/squads/18bb7c10/2019-2020/Arsenal-Stats')
df=tables[1]

 

 

포메이션

작년 54경기 동안 어떤 포메이션을 가장 많이 사용했는지 확인해보겠다. 코드는 간단하다.

#데이터 전처리
df['Formation']=df['Formation'].str.replace('4-4-2◆','4-4-2')
form=pd.DataFrame(df.groupby('Formation').count()['Result'])
games=form.sum().values[0]
form['share']=form['Result']/games

#데이터 시각화
import matplotlib.pyplot as plt
plt.rcParams["font.family"] = 'Malgun Gothic'
plt.rcParams["font.size"] = 16
plt.figure(figsize=(16,8))
plt.pie(form.share,autopct='%0.2f%%')
plt.title('포메이션 사용 비중')
plt.legend(form.index)

 

아르테타의 3-4-3 인상이 강해서 그런지 분석 전에는 당연히 3-4-3 전출에 사용 비중이 가장 많은 줄 알았는데 분석 결과로는 에메리의 4-2-3-1이 가장 많았다. 수비가 불안한 아스널이 포백을 쓴다? 왜 전반기 성적이 좋지 않은지 알 수 있을 것 같다. 아스널의 3백 전환은 불가피한 결정이다.

 

 

 

Captian/아스널 주장

그다음으로 아스널에서 주장으로 선수별 경기 수 비중을 봤다. 초반 쟈카가 주장으로 나오다가 팬들과의 그 사건 이후 오바메양이 주장으로 거의 모든 경기에 나섰다고 보면 된다. 특이한 점은 외질이 주장으로 나선 경기가 있는데 이 경기는 카라바오 컵 경기로 로테이션 경기 상황이었다. 그리고 모든 아스널 팬들이 그리워하는 나초 몬레알도 주장으로 나선 경기가 있다.

 

cap=pd.DataFrame(df.groupby('Captain').count()['Result'])
cap['share']=cap['Result']/games

plt.rcParams["font.family"] = 'Malgun Gothic'
plt.rcParams["font.size"] = 16
plt.figure(figsize=(16,8))
plt.pie(cap.share,autopct='%0.2f%%')
plt.title('주장으로 나선 경기 비중')
plt.legend(cap.index)

 

홈/어웨이 경기 결과

 

다음으로는 홈/어웨이 경기별 승률을 보고자 한다. 원정 승률이 33%로 처참하지만 홈경기 승률도 56%에 불과한 점이 더 큰 문제이다. 원정 경기는 그렇다 치더라도 홈에서 이렇게나 많은 경기를 놓치면 좋은 성적은 당연히 불가능하다.

 

df2=pd.get_dummies(df, columns = ['Result'])
df_hw=df2.groupby('Venue').sum()[['Result_W','Result_D','Result_L']]
df_hw['Total_Games']=df_hw['Result_W']+df_hw['Result_D']+df_hw['Result_L']
df_hw['W']=df_hw['Result_W']/df_hw['Total_Games']

plt.rcParams["font.family"] = 'Malgun Gothic'
plt.rcParams["font.size"] = 16
plt.figure(figsize=(16,8))

plt.bar(df_hw.index, df_hw['W'])
for x, y in enumerate( list(df_hw['W']) ):
    plt.text(x, y, '{:.2f}%'.format(y*100), fontsize=15, color='tab:red', 
                    horizontalalignment='center', verticalalignment='bottom')

plt.title('홈원정 승률')

 

 

볼 점유율

분석 전에는 워낙 아스날이 볼 점유를 중요시하는 팀이다 보니당연히 볼 점유율이 높으면 승률도 당연히 같이 높을 것으로 생각했지만, 결과는 달랐다. 오히려 볼 점유가 낮은 경기에서 승률이 조금 높은 점을 확인할 수 있었다.

 

df2['poss_w']=df2['Poss'].apply(lambda x: '>=50%' if x>=50 else '<50%' )
dfp=df2.groupby('poss_w').sum()[['Result_W','Result_D','Result_L']]
dfp['Total_Games']=dfp['Result_W']+dfp['Result_D']+dfp['Result_L']
dfp['W']=dfp['Result_W']/dfp['Total_Games']

plt.rcParams["font.family"] = 'Malgun Gothic'
plt.rcParams["font.size"] = 16
plt.figure(figsize=(16,8))

plt.bar(dfp.index, dfp['W'])
for x, y in enumerate( list(dfp['W']) ):
    plt.text(x, y, '{:.2f}%'.format(y*100), fontsize=15, color='tab:red', 
                    horizontalalignment='center', verticalalignment='bottom')

plt.ylim(0,1,0.2)

plt.title('점유율별 승률')

 

아스널 작년 시즌에 대해 분석해보았다. 너무 변화도 많고 분석 결과도 전반적으로 부정적이라서 올해 시즌에는 이런 결과가 안 나오기를 바란다.

 

 

728x90
반응형

댓글