Notice
Recent Posts
Recent Comments
Link
250x250
develope_kkyu
[Python] plotly를 이용해 MLB 내셔널리그 서부 순위 변동 그래프 만들기 본문
728x90
패키지 설치 및 임포트
pip install plotly
pip install MLB-StatsAPI
import statsapi
import pandas as pd
팀 순위 정보 검색
statsapi.standings_data를 활용하면 해당날짜의 팀 순위 정보를 가져올 수 있다.
- 리그 아이디 103은 아메리칸 리그, 104는 내셔널 리그
- 내셔널리그 서부, 동부, 중부의 딕셔너리 번호는 각각 203, 204, 205
- 메이저리그 정규리그는 2022년 4월 7일부터 10월 5일까지
statsapi.standings_data(leagueId=104,date='04/07/2022')[203]
# statsapi.standings_data(leagueId=104,date='10/05/2022')[203]
{'div_name': 'National League West',
'teams': [{'name': 'Arizona Diamondbacks',
'div_rank': '1',
'w': 1,
'l': 0,
'gb': '-',
'wc_rank': '-',
'wc_gb': '-',
'wc_elim_num': '-',
'elim_num': '-',
'team_id': 109,
'league_rank': '1',
'sport_rank': '1'},
{'name': 'Colorado Rockies',
'div_rank': '2',
'w': 0,
'l': 0,
'gb': '0.5',
'wc_rank': '4',
'wc_gb': '-',
'wc_elim_num': '-',
'elim_num': '162',
'team_id': 115,
'league_rank': '6',
'sport_rank': '6'},
{'name': 'Los Angeles Dodgers',
'div_rank': '3',
'w': 0,
'l': 0,
'gb': '0.5',
'wc_rank': '5',
'wc_gb': '-',
'wc_elim_num': '-',
'elim_num': '162',
'team_id': 119,
'league_rank': '7',
'sport_rank': '7'},
{'name': 'San Francisco Giants',
'div_rank': '4',
'w': 0,
'l': 0,
'gb': '0.5',
'wc_rank': '8',
'wc_gb': '-',
'wc_elim_num': '-',
'elim_num': '162',
'team_id': 137,
'league_rank': '10',
'sport_rank': '10'},
{'name': 'San Diego Padres',
'div_rank': '5',
'w': 0,
'l': 1,
'gb': '1.0',
'wc_rank': '12',
'wc_gb': '0.5',
'wc_elim_num': '162',
'elim_num': '161',
'team_id': 135,
'league_rank': '14',
'sport_rank': '14'}]}
데이터 프레임 만들기
4월 7일부터 10월 5일까지 팀들의 순위를 알 수 있는 데이터프레임 만들기
- 6일마다 바뀌는 순위를 보여준다
from datetime import datetime, timedelta
# 시작일,종료일 설정
start = "04/07/2022"
last = "10/05/2022"
# 시작일, 종료일 datetime 으로 변환
start_date = datetime.strptime(start, "%m/%d/%Y")
last_date = datetime.strptime(last, "%m/%d/%Y")
# 종료일 까지 반복
date = []
dodgers = []
padres = []
giants = []
rockies = []
diamondbacks = []
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)[203]['teams']
lad = (item for item in teams if item['name'] == "Los Angeles Dodgers")
dict = next(lad, False)
dodgers.append(dict['div_rank'])
sd = (item2 for item2 in teams if item2['name'] == "San Diego Padres")
dict2 = next(sd, False)
padres.append(dict2['div_rank'])
sf = (item3 for item3 in teams if item3['name'] == "San Francisco Giants")
dict3 = next(sf, False)
giants.append(dict3['div_rank'])
cr = (item4 for item4 in teams if item4['name'] == "Colorado Rockies")
dict4 = next(cr, False)
rockies.append(dict4['div_rank'])
ad = (item5 for item5 in teams if item5['name'] == "Arizona Diamondbacks")
dict5 = next(ad, False)
diamondbacks.append(dict5['div_rank'])
# 6일 마다
start_date += timedelta(days=6)
st = pd.DataFrame({'Los Angeles Dodgers' : dodgers, 'San Diego Padres' : padres, "San Francisco Giants" : giants, "Colorado Rockies" : rockies, "Arizona Diamondbacks" : diamondbacks}, index = date)
st
시각화
plotly를 이용해 꺾은선 그래프로 표현
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()
y값인 순위가 정렬이 안되는 문제 발생
fig.update_yaxes(categoryorder="category descending")
y값을 내림차순으로 정렬해주는 코드
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.update_yaxes(categoryorder="category descending")
fig.show()
같은 방식으로 아메리칸리그 동부 순위 변동 그래프도 만들 수 있다.
728x90
'Python' 카테고리의 다른 글
[Python] MLB-StatsAPI를 이용한 mlb 기록 사이트 만들기 - 2 (0) | 2023.02.11 |
---|---|
[Python] MLB-StatsAPI를 이용한 mlb 기록 사이트 만들기(배포) - 1 (0) | 2023.02.09 |
[Python] ploty를 이용해 내셔널리그 골든글러브 최종 후보 3인 수비 지표 그래프 만들기 (0) | 2023.01.19 |
[Python] MLB Stats API를 이용해 내셔널리그 골든글러브 후보 3인 수비 지표 비교(김하성 포함) (0) | 2023.01.19 |
[Python] plotly를 이용해 오타니, 저지 2022시즌 타격 성적 비교 그래프 (0) | 2023.01.19 |