축구 데이터 - 2. 라운드별 순위가 높은 팀과 낮은 팀 간의 승패
재미로 보는 축구 데이터 두번째는 라운드별 결과로 살펴본 순위가 높은 팀과 낮은 팀 간의 승패 입니다.
지난번에는 순위가 높은 팀과 낮은 팀간의 승패를 팀 별로 알아보았다면 , 이번에는 라운드 별로 순위가 높은 팀과 낮은 팀이 맞붙었을 때 순위가 높은 팀이 이긴 경우를 살펴보도록 하겠습니다.
이번 글에서도 역시 1편에서 사용한 EPL 20/21 시즌의 라운드별 순위와 경기별 승, 패 기록을 가지고 살펴보도록 하겠습니다.
필요한 정보는 EPL 20/21 시즌 각 팀들의 라운드별 순위 / 각 팀의 라운드별 승, 무, 패 기록입니다.
해당 정보들은 웹 크롤링을 통해 엑셀 파일로 만들어 두었습니다.
import openpyxl
rd = openpyxl.load_workbook("./Round.xlsx")
rds = rd.active
wrd = openpyxl.load_workbook("./WDL_Round.xlsx")
wdl = wrd.active
draw = 0
normal = 0
exp = 0
same_level = 0 # 등수가 같은 팀간 대결
round_array = [] # 1 -> normal / draw -> 0 / exp -> -1 / same -> -2
1편에서 사용한 코드와 같은 코드를 사용합니다.
1편에서 사용하지 않았던 배열인 round_array에 2 ~ 38 라운드 까지의 결과가 들어가게 됩니다.
normal의 경우 등수가 높은 팀이 승리 , 등수가 낮은 팀이 패배 하는 일반적인 경우입니다.
exp의 경우 등수가 높은팀이 패배 , 등수가 낮은팀이 승리하는 예외적인 경우입니다.
draw의 경우 두 팀이 무승부를 기록하는 경우입니다.
same_level의 경우 두 팀의 라운드별 등수가 같아 , 어느 팀이 승리하건 , 무승부를 기록하건 상관없는 경우입니다.
각 팀별로 normal , exp , draw , same_level의 결과가 round_array 배열에 저장됩니다.
for i in range(2+k,39+k):
if str(wdl["A{}".format(i)].value).replace("\n","").replace(" ","") == team_name:
ori_team = str(wdl["A{}".format(i)].value).replace("\n","").replace(" ","")
sub_team = str(wdl["B{}".format(i)].value).replace("\n","").replace(" ","")
if wdl["C{}".format(i)].value > wdl["D{}".format(i)].value:
check = 1
elif wdl["C{}".format(i)].value < wdl["D{}".format(i)].value:
check = -1
elif wdl["C{}".format(i)].value == wdl["D{}".format(i)].value:
check = 0
elif str(wdl["B{}".format(i)].value).replace("\n","").replace(" ","") == team_name:
sub_team = str(wdl["A{}".format(i)].value).replace("\n", "").replace(" ", "")
ori_team = str(wdl["B{}".format(i)].value).replace("\n", "").replace(" ", "")
if wdl["C{}".format(i)].value > wdl["D{}".format(i)].value:
check = -1
elif wdl["C{}".format(i)].value < wdl["D{}".format(i)].value:
check = 1
elif wdl["C{}".format(i)].value == wdl["D{}".format(i)].value:
check = 0
for t in range(1,21):
if str(rds["A{}".format(t)].value).replace("\n", "").replace(" ", "") == sub_team:
idx = t
break
sub_team_level = rds.cell(row = t, column = i%39).value
ori_team_level = rds.cell(row = ori_team_idx, column=i%39).value
if check == 1:
if ori_team_level > sub_team_level:
exp += 1
round_array.append(-1)
elif ori_team_level < sub_team_level:
normal += 1
round_array.append(1)
else:
same_level += 1
round_array.append(-2)
elif check == -1:
if ori_team_level > sub_team_level:
normal += 1
round_array.append(1)
elif ori_team_level < sub_team_level:
exp += 1
round_array.append(-1)
else:
same_level += 1
round_array.append(-2)
elif check == 0: # 무승부도 순위에 따라 가르려면 이쪽 건드리면 됨
draw += 1
round_array.append(0)
이후 각 팀별로 나온 round_array를 통해 각 라운드별 순위에 따른 승 패 결과를 살펴보도록 하겠습니다.
정리
- 2 ~ 14 라운드 까지는 강팀과 약팀의 순위가 정리되지 않아 들쭉날쭉한 경기 결과를 보인다.
- 15라운드 부터는 비교적 강팀과 약팀이 순위로 분리되기 때문에 한라운드의 10경기당 4~6경기는 순위의 높고 낮음에 따라 경기결과가 나오게 된다.
- 이번 결과 역시 EPL에서의 정확한 통계를 보기 위해서는 이번 시즌을 제외한 다른 시즌의 경우도 살펴보아야 한다.
'데이터 분석 > 축구 데이터 분석' 카테고리의 다른 글
6. K-Means Clustering을 통한 선수 스카우팅 (0) | 2022.01.01 |
---|---|
5. EPL 03/04 ~ 20/21 시즌 사이 가능한 등수 변화 (0) | 2021.10.11 |
4. EPL 20/21 시즌 최근 5경기 전적으로 살펴본 다음경기 결과 (0) | 2021.08.30 |
3. EPL 20/21 시즌 의적팀 알아보기 (0) | 2021.08.22 |
1. EPL 20/21 시즌 순위에 따른 팀별 승패 통계 (0) | 2021.08.14 |