개발은 처음이라 개발새발
PL 21/22시즌 경합왕을 찾아라! 본문
오늘도 축구를 곁들인 판다스 복습을 진행해보도록 하겠습니다. 이번 시간에는 PL 개막을 기념해서 지난 시즌인 21/22시즌의 기록들 중 경합 항목에 대해 어떤 선수들이 좋은 퍼포먼스를 보여줬는지 확인해보겠습니다.
mport pandas as pd
import numpy as np
df= pd.read_excel('PL2.xlsx',sheet_name='Sheet1')
print(df,'\n')
df1 = df[['league', 'season', 'team',
'name', 'shirtNumber', 'minsPlayed', 'gameStarted',
'totalSubOn','duelWon', 'duelLost', 'aerialWon',
'aerialLost']]
df1 = df1.groupby(['league', 'season', 'team','name', 'shirtNumber']).sum()
df1.reset_index(drop=False, inplace=True)
#그라운드 경합 항목 만들기
df1['groundWon'] = df1['duelWon'] - df1['aerialWon']
df1['groundLost'] = df1['duelLost'] - df1['aerialLost']
#총 경합상황 만들기
df1['totalDuel'] = df1['duelWon']+df1['duelLost']
#총 경기 출장수 만들기
df1['game'] = df1['gameStarted']+ df1['totalSubOn']
print(df1,'\n')
이번에도 groupby 함수를 통해 누적 스탯을 만들었는데요. groupby로 묶이게 되면 groupby를 통해묶인 컬럼들이 모두 인덱스가 되기 때문에 이후 원활하게 계산을 진행하기 위해서는 묶인 컬럼들을 다시 풀어주는 reset_index를 해줘야 합니다. 이번에 확인해볼 데이터는 경기당 경합과 경합 성공%입니다.
#총 경합 상황이 100회 이상인 선수만 추리기
df2 = df1[df1['totalDuel'] > 100].sort_values(by=['totalDuel'], ascending=False)
#경기당 경합 항목 계산
df2['per_game_duel'] = round(df2['duelWon'] / df2['game'],2)
df2['per_game_ground'] = round(df2['groundWon'] / df2['game'],2)
df2['per_game_aerial'] = round(df2['aerialWon'] / df2['game'],2)
# 그라운드/공중볼 경합 성공% 계산
df2['ground%'] = round((df2['groundWon'] / (df2['groundWon'] + df1['groundLost']))*100,2)
df2['aerial%'] = round((df2['aerialWon'] / (df2['aerialWon'] + df1['aerialLost']))*100,2)
print(df2)
print('\n')
#20경기 출장 기준 그라운드 경합 10위
df3 = df2[df2['game'] > 20].sort_values(by=['per_game_ground'], ascending=False, ignore_index=True)
print(df3[['team','name','game','minsPlayed','per_game_ground','ground%']].head(10))
print('\n')
#20경기 출장 기준 공중볼 경합 10위
df4 = df2[df2['game'] > 20].sort_values(by=['per_game_aerial'], ascending=False, ignore_index=True)
print(df4[['team','name','game','minsPlayed','per_game_aerial','aerial%']].head(10))
판다스에서는 특정 컬럼을 가지고 조건을 입혀 필터링을 할수도 있습니다. 저는 척어도 총 경합 상황이 100회이상인 선수들로 1차 필터를 했고 이후 경기 출장수가 선발+후보 출장을 합쳐 20경기 이상인 선수들로 결과를 도출했습니다. 우선 경기당 지상 경합수 탑 10 선수들의 순위와 성공%을 보겠습니다.
team name game minsPlayed per_game_ground ground%
0 Crystal Palace W. Zaha 33 2761 6.55 47.06
1 Aston Villa J. McGinn 35 3092 6.54 59.02
2 Newcastle United A. Saint-Maximin 35 2809 6.03 49.30
3 Wolverhampton Wanderers R. Aït Nouri 23 1827 5.48 55.26
4 Burnley D. McNeil 38 3112 5.37 54.99
5 Southampton K. Walker-Peters 32 2632 5.25 60.22
6 Crystal Palace C. Gallagher 34 2851 5.18 48.22
7 Brighton & Hove Albion Y. Bissouma 26 2116 4.96 59.72
8 Everton Richarlison 30 2526 4.93 51.03
9 Wolverhampton Wanderers Nélson Semedo 25 2137 4.84 55.25
team name game minsPlayed per_game_aerial aerial%
0 Brentford E. Pinnock 32 2697 4.47 66.51
1 Brentford I. Toney 33 2908 4.45 55.89
2 Burnley J. Tarkowski 35 3107 4.37 70.51
3 Leeds United L. Cooper 21 1815 3.90 65.08
4 West Ham United T. Souček 35 3062 3.83 48.73
5 Liverpool J. Matip 31 2790 3.52 68.12
6 Crystal Palace C. Benteke 25 1136 3.44 60.14
7 Liverpool V. van Dijk 34 3060 3.44 77.48
8 Newcastle United J. Lascelles 26 2055 3.42 74.17
9 Leicester City Ç. Söyüncü 28 2498 3.29 65.71
네 이렇게 지난 시즌의 그라운드와 공중볼 경합 탑 10 선수들을 확인했습니다. 개인적으로 인상적이었던 선수는 공중볼 경합 1위에 오른 브랜트포드의 센터백 에단 피녹 선수입니다. 지난 시즌 브랜트포드는 승격팀으로서 굉장히 인상적인 모습을 남겼는데요. 피녹 선수 역시 1분 리그에서 경기당 4.47개의 달하는 공중볼 경합을 성공했고 성공 비율 역시 66.5%로 아주 인상적이었습니다.
이렇게 경합 기록들을 살펴봤는데요. 다음에 기회가 된다면 태클, 크로스 지표에 대해서도 한번 알아보는 시간을 가져보도록 하겠습니다.
'축구' 카테고리의 다른 글
PL 21/22시즌 크로스 TOP10 (0) | 2022.08.10 |
---|---|
21/22시즌 손흥민 경기당 공격 지표를 구해보자 [python/pandas] (0) | 2022.08.01 |
PL 홈구장 지도를 만들어보자![python/folium] (3) | 2022.07.17 |
아놀드의 21/22시즌의 기회 창출과 패스 성공률[python/pandas] (1) | 2022.07.16 |