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

1. EPL 20/21 시즌 순위에 따른 팀별 승패 통계

반응형

 

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

 

 


재미로 보는 축구 데이터 첫 번째는 팀별 순위가 높은 팀과 낮은 팀 간의 승패입니다.

 

대부분 순위가 높은 팀이 이긴다고 생각하시겠지만 , 실제 데이터를 통해서 살펴보도록 하겠습니다.

 

이번 글에서는 EPL 20/21 시즌의 라운드별 순위와 경기별 승, 패 기록을 가지고 확인 해보도록 하겠습니다.

 

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

 

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

 

 

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 시즌을 제외한 다른 시즌의 경우 역시 살펴볼 필요가 있다.
반응형