본문 바로가기
데이터 분석/축구 데이터 분석

2. EPL 20/21 시즌 순위에 따른 라운드 별 승패 통계

반응형

축구 데이터 - 2. 라운드별 순위가 높은 팀과 낮은 팀 간의 승패

 

 


재미로 보는 축구 데이터 두번째는 라운드별 결과로 살펴본 순위가 높은 팀과 낮은 팀 간의 승패 입니다.

 

지난번에는 순위가 높은 팀과 낮은 팀간의 승패를 팀 별로 알아보았다면 , 이번에는 라운드 별로 순위가 높은 팀과 낮은 팀이 맞붙었을 때 순위가 높은 팀이 이긴 경우를 살펴보도록 하겠습니다.

 

이번 글에서도 역시 1편에서 사용한 EPL 20/21 시즌의 라운드별 순위와 경기별 승, 패 기록을 가지고 살펴보도록 하겠습니다.

 

필요한 정보는 EPL 20/21 시즌 각 팀들의 라운드별 순위 / 각 팀의 라운드별 승, 무, 패 기록입니다.

 

해당 정보들은 웹 크롤링을 통해 엑셀 파일로 만들어 두었습니다.

 

 

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에서의 정확한 통계를 보기 위해서는 이번 시즌을 제외한 다른 시즌의 경우도 살펴보아야 한다.
반응형