개발은 처음이라 개발새발

아놀드의 21/22시즌의 기회 창출과 패스 성공률[python/pandas] 본문

축구

아놀드의 21/22시즌의 기회 창출과 패스 성공률[python/pandas]

leon_choi 2022. 7. 16. 19:43
반응형

리버풀의 플레이메이커 트렌트 알렉산더-아놀드

오늘도 축구 데이터를 가지고 df.plot의 다양한 그래프를 그려보고자 하는데요. 이번에 다뤄볼 데이터는 제가 최근에 입덕한 리버풀의 플레이메이커 트렌트 알렉산더-아놀드의 데이터입니다. 아놀드는 포지션은 오른쪽 풀백이지만 실제 경기를 보고 있으면 공격 전개시 중앙으로 침투하여 중앙 미드필더 같은 모습을 보이거나 우측에서 롱패스와 크로스를 통해 플레이메이커로서 98년생인 어린 나이에도 불구하고 굉장히 좋은 모습을 보여주고 있습니다.그래서 이번에 아놀드의 패스 관련 데이터를 수집해 그래프로 표현봤는데요. 참고한 사이트는 지난 번과 동일하게 fotmob을 통해 수집했습니다.

 

https://www.fotmob.com/

 

FotMob

FotMob is the essential app for matchday. Get live scores, fixtures, tables, match stats, and personalised news from over 200 football leagues around the world.

www.fotmob.com

fotmob에서는 다양한 패스 스탯을 제공하는데요. 그중에서 저는 기회창출 패스(키패스), 롱패스, 크로스, 패스성공%을 가지고 그래프를 그려보겠습니다. 우선 코드를 실행해서 데이터프레임으로 표출된 결과를 보겠습니다. 

 

import pandas as pd
import matplotlib.pyplot as plt

#한글 처리
from matplotlib import font_manager, rc
font_path = "c:/windows/Fonts/malgun.ttf" #한글 폰트 경로
font_name = font_manager.FontProperties(fname=font_path).get_name()
rc('font', family = font_name)

df = pd.read_excel('아놀드.xlsx',sheet_name='Sheet1')

print(df)

네 이렇게 데이터프레임에 저장된 결과를 확인했습니다. 여기서 변경해야 할 것은 인덱스를 재설정하고 컬럼명을 영어에서 한글로 변경해줄 겁니다. 인덱스는 vs 컬럼으로 재설정해야 하기 때문에 df.set_index('컬럼')을 통해 변경하고 컬럼명 변경은 df.rename(columns={'변경전 컬럼명':'변경후 컬럼명'}) 매소드를 통해 변경하면됩니다.

 

import pandas as pd
import matplotlib.pyplot as plt

#한글 처리
from matplotlib import font_manager, rc
font_path = "c:/windows/Fonts/malgun.ttf" #한글 폰트 경로
font_name = font_manager.FontProperties(fname=font_path).get_name()
rc('font', family = font_name)

df = pd.read_excel('아놀드.xlsx',sheet_name='Sheet1')

df=df.set_index('vs')
df= df.rename(columns={'keyPass':'키패스','longPass':'롱패스','Cross':'크로스','pass%':'패스%'})

print(df)

잘 변경된 것을 확인했습니다. 저는 이번 시간에 키패스,롱패스, 크로스는 중첩된 막대그래프로 표현하고 패스%는 선그래프로 활용해 하나의 표안에 그려보려고 하는데요. 결국은 막대 그래프와 선그래프 2개를 그리는 것입니다. 그리고 컬럼별 항목을 보면 패스%는 비율이기 때문에 다른 컬럼과 비교했을 때 축의 범위가 달라집니다. 이럴 때 보조축을 하나 더 설정해 표를 그리면됩니다. 우선 막대 그래프는 ax1이라는 변수에 막대그래프로 표현할 부분들을 설정합니다. 그리고 ax2에는 선그래프로 표현할 것을 넣어주면 됩니다. 여기서 한 화면에 두개의 그래프를 모두 보여주기 위해서는 둘을 연결해주기 위한 코드를 짜야 하는데요. 바로 ax2 = ax1.twinx() 매소드 입니다.  이는 ax2라는 변수는 ax1의 쌍둥이 객채라는 것을 뜻합니다. 그러면 이제 코드를 쭉 써보겠습니다. 

 

import pandas as pd
import matplotlib.pyplot as plt

#한글 처리
from matplotlib import font_manager, rc
font_path = "c:/windows/Fonts/malgun.ttf" #한글 폰트 경로
font_name = font_manager.FontProperties(fname=font_path).get_name()
rc('font', family = font_name)

df = pd.read_excel('아놀드.xlsx',sheet_name='Sheet1')

df=df.set_index('vs')
df= df.rename(columns={'keyPass':'키패스','longPass':'롱패스','Cross':'크로스','pass%':'패스%'})

print(df)

plt.style.use('ggplot')

#막대 그래프
ax1= df[['키패스','롱패스','크로스']].plot(kind ='bar', figsize=(20,10), width =0.7, stacked=True)

#ax1,ax2 연결
ax2 = ax1.twinx()

#선그래프
ax2.plot(df.index,df['패스%'], ls = '--', marker ='o', markersize = 20, color ='green', label = '경기별 패스 성공%')

plt.title('21/22 아놀드 주요 패스 능력', size = 20)
ax1.set_xlabel('상대팀', size=10)
ax1.set_ylabel('주요 패스', size=15)
ax2.set_ylabel('패스 성공%', size=15)
ax1.set_ylim(0,30)
ax2.set_ylim(0.00,1)
ax1.legend(loc='upper left')
ax2.legend(loc='upper right')
plt.show()

네 이렇게 아놀의 21/22 시즌 패스 관련 기록들을 그래프로 나타내 봤습니다. 서로 다른 기록이지만 여러 그래프 종류와 보조축을 만들어 표현해 좀 더 보기 쉬운 그래프가 됐습니다. 

반응형