728x90
반응형
Fangraph나 MLB savant 홈페이지에서 직접 csv, DB파일을 다운로드 받는 것이 아닌
MLB서버에 연결된 API로 손쉽게 데이터를 구할 수 있는 방법을 야구공작소 글을 보며 알게되었다.
그 중 파이썬으로 API를 이용할 수 있도록 구현해놓은 패키지가 있어, 사용법을 알아보게 되었다.
제공해주는 데이터의 종류가 매우 풍부해 무궁무진한 활용이 가능하다고 생각한다.
아래는 내가 참고한 야구공작소의 [MLB Stats API’라고 혹시 들어보았나요] 글과
파이썬 패키지를 제작한 개발자의 Github이다.
MLB Stats API 소개
- MLB 서버에 직접연결하여 필요한 데이터를 편리하게 수집할 수 있는 API이다.
- 경기결과부터 일정, 선수의 스탯, 팀 정보 등 여러가지 데이터를 제공받을 수 있으며,
- 일 허용량 제한 및 인증키가 없는 것이 특징
- MLB부터 마이너리그(루키리그 및 도미니카 윈터리그)까지의 많은 데이터를 수집할 수 있다.
- 트래킹데이터는 메이저리그에만 포함됨
- 파이썬 패키지의 코드는 toddrob99의 Github (맨 위에 주소표기)에서 작동 확인할 수 있다.
- MLB Stats API에 대한 더 자세한 설명은 야구공작소의 [‘MLB Stats API’라고 혹시 들어보았나요] 참고.
MLB Stats API의 데이터 구조
MLB Stats API 파이썬 패키지 사용방법
- toddrob99 Github의 Wiki를 참고하여 작성함 (https://github.com/toddrob99/MLB-StatsAPI/wiki)
패키지 설치
pip install MLB-StatsAPI
# colab, jupyter의 경우
!pip install MLB-StatsAPI
패키지 임포트
import statsapi
# import가 제대로 되었는지 기능 중 하나 실행
sched = statsapi.schedule(start_date='07/11/2018',end_date='07/11/2018',team=143,opponent=121)
print(sched)
>>>
[{'game_id': 530796, 'game_datetime': '2018-07-11T23:10:00Z', 'game_date': '2018-07-11', 'game_type': 'R', 'status': 'Final', 'away_name': 'Philadelphia Phillies', 'home_name': 'New York Mets', 'away_id': 143, 'home_id': 121, 'doubleheader': 'N', 'game_num': 1, 'home_probable_pitcher': 'Jacob deGrom', 'away_probable_pitcher': 'Vince Velasquez', 'home_pitcher_note': 'deGrom has allowed three or fewer runs in 15 straight starts and leads the big leagues with an ERA of 1.79. He is also second in the National League in strikeouts with 142. deGrom holds a lifetime record of 6-1 in 12 games started against the Phils.', 'away_pitcher_note': 'Velasquez is expected to rejoin the rotation after landing on the 10-day disabled list July 1. He got hit on the right arm by a line drive June 30. Velasquez memorably picked up the ball and threw left-handed to record the out at first base.', 'away_score': 0, 'home_score': 3, 'current_inning': 10, 'inning_state': 'Bottom', 'venue_id': 3289, 'venue_name': 'Citi Field', 'winning_team': 'New York Mets', 'losing_team': 'Philadelphia Phillies', 'winning_pitcher': 'Robert Gsellman', 'losing_pitcher': 'Mark Leiter Jr.', 'save_pitcher': None, 'summary': '2018-07-11 - Philadelphia Phillies (0) @ New York Mets (3) (Final)'}]
로깅
- 로그를 보고싶을 때 아래와 같이 설정
import logging
logger = logging.getLogger('statsapi')
logger.setLevel(logging.DEBUG)
rootLogger = logging.getLogger()
rootLogger.setLevel(logging.DEBUG)
ch = logging.StreamHandler()
formatter = logging.Formatter("%(asctime)s - %(levelname)8s - %(name)s(%(thread)s) - %(message)s")
ch.setFormatter(formatter)
rootLogger.addHandler(ch)
구현 기능 종류
- 각 기능에 대한 자세한 사용방법 및 예시, 설명은 링크클릭 (링크 업데이트 중)
핵심 기능
statsapi.get
- MLB Stats API에 직접 데이터를 요청하여 raw json 데이터를 반환
statsapi.meta
- 다른 쿼리에 사용하기 위해 API에서 사용 가능한 값 검색하거나 API 결과에서 발견된 값에 대한 설명을 조회
statsapi.notes
- 필요한 매개 변수 목록 및 일부 엔드포인트에 대한 힌트를 포함하여 지정된 엔드포인트에 대한 노트 검색(API 모듈에서만 정보 반환, API 엔드포인트에 대한 호출 없음)
텍스트 반환 함수
statsapi.boxscore
- 요청한 경기의 박스스코어를 출력 (선수, 타격정보 등 자세한 경기결과)
statsapi.game_highlights
- 요청한 경기의 하이라이트 비디오 링크 목록을 출력
statsapi.game_pace
- 요청한 특정 시즌의 경기 속도에 대한 정보 목록 출력
statsapi.game_scoring_plays
- 요청한 경기의 득점 과정에 대한 목록을 출력
statsapi.last_game
- 해당 팀의 최근 경기에 대한 게임 ID를 출력
statsapi.league_leaders
- 현재시즌 또는 특정시즌의 지표 별 선수순위를 출력 (홈런, OPS, 실책 등)
statsapi.linescore
- 요청한 경기의 linescore (이닝 별 득점만 기록) 출력 (간단한 경기결과)
statsapi.next_game
- 해당 팀의 다음 경기에 대한 게임 ID를 출력
statsapi.player_stats
- 선수의 시즌기록 또는 통산기록을 출력
statsapi.roster
- 해당 팀의 현재 로스터 출력 (과거 로스터도 출력가능)
statsapi.standings
- 지정한 날짜 및 리그 팀 순위를 출력
statsapi.team_leaders
- 해당 팀의 특정 스탯(지표)에 대한 팀 내 순위 출력
파이썬 딕셔너리 반환 함수
statsapi.boxscore_data
- 요청한 경기의 박스스코어 데이터가 있는 dictionary 반환
statsapi.game_highlight_data
- 요청한 경기의 하이라이트 비디오 링크 목록을 list 형태로 반환
statsapi.game_pace_data
- 요청한 특정 시즌의 경기 속도에 대한 정보가 있는 dict 반환
statsapi.game_scoring_play_data
- 요청한 경기의 득점 과정에 대한 데이터가 있는 dict 반환
statsapi.league_leader_data
- 현재 또는 특정 시즌의 지표 별 선수순위를 list 형태로 반환
statsapi.lookup_player
- 이름, 성, 전체이름, 등번호, 팀 ID, 위치 등을 기준으로 선수데이터 딕셔너리를 리스트로 반환 (검색기능)
statsapi.lookup_team
- 팀 이름, 도시, 약어 또는 파일 코드를 기준으로 팀 정보 딕셔너리 반환 (검색기능)
statsapi.player_stat_data
- 선수의 시즌기록 또는 통산기록을 일부 인적정보와 함께 dict로 반환
statsapi.schedule
- 주어진 날짜/범위 및/또는 팀/경기장의 경기 목록을 검색하여 딕셔너리로 반환
statsapi.standings_data
- 주어진 날짜와 리그 팀 순위를 딕셔너리로 반환
statsapi.team_leader_data
- 해당 팀의 특정 스탯(지표)에 대한 팀 내 순위를 딕셔너리로 반환
(참고) 팀, 리그 코드
- 팀 코드 (Team Id)
지구 | 구단명 | Team_Id |
아메리칸 리그 | ||
동부 | 볼티모어 오리올스 (Baltimore Orioles) | 110 |
보스턴 레드삭스(Boston Red Sox) | 111 | |
뉴욕 양키스(Newyork Yankees) | 147 | |
템파베이 레이스 (Tampa Bay Rays) | 139 | |
토론토 블루제이스 (Toronto Blue Jays) | 141 | |
중부 | 시카고 화이트삭스 (Chicago White Sox) | 145 |
클리블랜드 가디언즈 (Cleveland Guardians) | 114 | |
디트로이트 타이거즈 (Detroit Tigers) | 116 | |
캔자스시티 로열스 (Kansas City Royals) | 118 | |
미네소타 트윈스 (Minnesota Twins) | 142 | |
서부 | 휴스턴 애스트로스 (Houston Astros) | 117 |
로스엔젤레스 에인절스 (Los Angeles Angels) | 108 | |
오클랜드 애슬레틱스 (Oakland Athletics) | 133 | |
시애틀 매리너스 (Seattle Mariners) | 136 | |
텍사스 레인저스 (Texas Rangers) | 140 | |
내셔널 리그 | ||
동부 | 애틀란타 브레이브스 (Atlanta Braves) | 144 |
마이애미 말린스 (Miami Marlins) | 146 | |
뉴욕 메츠 (New York Mets) | 121 | |
필라델피아 필리스 (Philadelphia Phillies) | 143 | |
워싱턴 내셔널스 (Washington Nationals) | 120 | |
중부 | 시카고 컵스 (Chicago Cubs) | 112 |
신시내티 레즈 (Cincinnati Reds) | 113 | |
밀워키 브루어스 (Milwaukee Brewers) | 158 | |
피츠버그 파이리츠 (Pittsburgh Pirates) | 134 | |
세인트루이스 카디널스 (St. Louis Cardinals) | 138 | |
서부 | 애리조나 다이아몬드백스 (Arizona Diamondbacks) | 109 |
로스엔젤레스 다저스 (Los Angeles Dodgers) | 119 | |
콜로라도 로키스 (Colorado Rockies) | 115 | |
샌디에이고 파드리스 (San Diego Padres) | 135 | |
샌프란시스코 자이언츠 (San Francisco Giants) | 137 |
- 리그 / 디비전(지구) 코드
리그 (리그코드) | 지구 | 코드 |
아메리칸 리그 (103) |
서부 | 200 |
동부 | 201 | |
중부 | 202 | |
내셔널 리그 (104) |
서부 | 203 |
동부 | 204 | |
중부 | 205 |
728x90