야구 분석/Python

2023시즌 메이저리그 팀 순위 변화

sam_j_s 2024. 5. 8. 18:03
728x90
반응형

시각화 주제

여태까지 KBO 선수들의 기록들을 분석해 보았다면 이번에는 메이저리그로 옮겨보았습니다. 메이저리그는 내셔널 리그, 아메리칸 리그 2개로 나눠져 있고 각각 중부, 동부, 서부로 나누어져 있습니다. 이번에는 내셔널 중부리그의 순위 변화를 확인해 보겠습니다.

 

 데이터 출처

이번 데이터는 따로 수집을 하지 않고 MLB Stats API를 사용했습니다.

MLB stats API는 MLB서버에 직접 연결하여 필요한 데이터를 편리하게 수집할 수 있는 API입니다.

 

데이터 분석

패키지 설치 및 임포트

필요한 패키지들을 가져와주도록 하겠습니다.

!pip install plotly
!pip install MLB-StatsAPI
import statsapi
import pandas as pd

 

팀 순위 정보 검색

statsapi.standings_data를 사용하면 해당 날짜의 팀 순위 정보를 가져올 수 있습니다.

  • 아메리칸 리그 103, 내셔널 리그 104
  • 내셔널 리그 서부, 동부, 중부의 딕셔너리 번호는 각각 203, 204, 205
  • 메이저리그 정규리그는 2023년 3월 30일부터 10월 2일까지
statsapi.standings_data(leagueId=104, date='03/30/2023')[205]

데이터 프레임 만들기

2023년 3월 30일부터 10월 2일까지 팀들의 순위를 알 수 있는 데이터 프레임을 만들고 매일 보여주면 데이터가 너무 많아 6일마다 나눠서 바뀌는 순위를 보여줄 수 있도록 해주었습니다.

from datetime import datetime, timedelta

#시작일, 종료일 설정
start = "03/30/2023"
last = "10/02/2023"

#시작일, 종료일 datetime으로 변환
start_date = datetime.strptime(start, "%m/%d/%Y")
last_date = datetime.strptime(last, "%m/%d/%Y")

#종료일까지 반복
date = []
cubs = []
pirates = []
reds = []
brewers = []
cardinals = []

while start_date <= last_date:
    dates = start_date.strftime("%m/%d/%Y")
    dt = start_date.strftime("%m/%d")
    date.append(dt)
    teams = statsapi.standings_data(leagueId=104,date=dates)[205]['teams']

    cc = (item for item in teams if item['name'] == "Chicago Cubs")
    dict = next(cc, False)
    cubs.append(dict['div_rank'])

    pp = (item2 for item2 in teams if item2['name'] == "Pittsburgh Pirates")
    dict2 = next(pp, False)
    pirates.append(dict2['div_rank'])

    cr =(item3 for item3 in teams if item3['name'] == "Cincinnati Reds")
    dict3 = next(cr, False)
    reds.append(dict3['div_rank'])

    mb =(item4 for item4 in teams if item4['name'] == "Milwaukee Brewers")
    dict4 = next(mb, False)
    brewers.append(dict4['div_rank'])

    sc =(item5 for item5 in teams if item5['name'] == "St. Louis Cardinals")
    dict5 = next(sc, False)
    cardinals.append(dict5['div_rank'])

    #6일 마다
    start_date += timedelta(days=6)
st = pd.DataFrame({'Chicago Cubs' : cubs, 'Pittsburgh Pirates' : pirates, 'Cincinnati Reds' : reds,
                   'Milwaukee Brewers' : brewers, 'St. Louis Cardinals' : cardinals}, index = date)
st

시각화

만들어 둔 데이터 프레임을 가지고 팀별 순위 변화 그래프를 그려보겠습니다.

import plotly.express as px

idx = st.index.to_list()
col = st.columns

fig = px.line(st,
              x = idx,
              y = col,
              title = "내셔널리그 서부 순위 변동"
             ).update_layout(
    xaxis_title = "날짜", yaxis_title = "순위")
fig.show()

 

순위가 1부터 나오는 게 아닌 5, 2, 3, 4, 1로 섞여있어서 내림차순으로 정렬해 주겠습니다.

fig.update_yaxes(categoryorder = "category descending")

1, 2, 3, 4, 5로 내림차순으로 정렬된 것을 알 수 있습니다.

반응형

'야구 분석/Python'의 다른글

  • 현재글 2023시즌 메이저리그 팀 순위 변화

관련글