축구 데이터 - 1. 팀별 순위가 높은 팀과 낮은 팀 간의 승패
재미로 보는 축구 데이터 첫 번째는 팀별 순위가 높은 팀과 낮은 팀 간의 승패입니다.
대부분 순위가 높은 팀이 이긴다고 생각하시겠지만 , 실제 데이터를 통해서 살펴보도록 하겠습니다.
이번 글에서는 EPL 20/21 시즌의 라운드별 순위와 경기별 승, 패 기록을 가지고 확인 해보도록 하겠습니다.
필요한 정보는 EPL 20/21 시즌 각 팀들의 라운드별 순위 / 각 팀의 라운드별 승, 무, 패 기록입니다.
해당 정보들은 웹 크롤링을 통해 엑셀 파일로 만들어 두었습니다.
EPL 20/21 시즌은 다른 EPL 시즌과 다른 점이 있습니다.
바로 코로나로 인한 경기 연기가 많았다는 점인데요 , 이번에 살펴보는 데이터의 경우는 연기된 경기는 연기된 시점을 고려하지 않는 데이터입니다.
연기된 경기들을 시간순으로 나열해 당시의 등수를 비교하기에는 무리가 있어 , 위의 데이터를 사용하게 되었습니다.
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
엑셀 파일을 열어 등수에 따른 승, 무, 패를 정리합니다.
normal의 경우 등수가 높은 팀이 승리 , 등수가 낮은 팀이 패배 하는 일반적인 경우입니다.
exp의 경우 등수가 높은팀이 패배 , 등수가 낮은팀이 승리하는 예외적인 경우입니다.
draw의 경우 두 팀이 무승부를 기록하는 경우입니다.
same_level의 경우 두 팀의 라운드별 등수가 같아 , 어느 팀이 승리하건 , 무승부를 기록하건 상관없는 경우입니다.
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)
위의 코드를 통해 각 팀별로 normal , draw , exp , same_level 의 빈도수를 확인하고 살펴보겠습니다.
정리
- EPL 20/21 시즌의 경우 순위가 높은 팀이 낮은 팀을 이긴 경우는 전체의 49.7% 이다.
- 따라서 순위가 높다고 해서 무조건 낮은팀을 이긴다고 보기는 어렵다.
- EPL에서의 정확한 통계를 보기 위해서는 EPL 20/21 시즌을 제외한 다른 시즌의 경우 역시 살펴볼 필요가 있다.
'데이터 분석 > 축구 데이터 분석' 카테고리의 다른 글
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 |
2. EPL 20/21 시즌 순위에 따른 라운드 별 승패 통계 (0) | 2021.08.14 |