‘MLB Stats API’라고 혹시 들어보았나요

새로운 데이터 수집방법

사람들은 여러 방법을 통해 MLB 데이터를 수집한다. 첫째는 홈페이지를 통해 데이터를 수집하는 것이다. 대표적인 홈페이지로는 MLB 자회사인 MLBAM(Major League Baseball Advanced Media)에서 운영하는 베이스볼서번트(Baseball Savant)가 있다. 또한 공식 홈페이지는 아니지만, 팬그래프(Fangraph), 라만 데이터베이스, 레트로시트 등, 여러 방면으로 MLB 데이터를 수집할 수 있다. 이처럼 사용자가 직접 홈페이지에 접속하여 데이터를 수집하는 방법도 있지만, 조금 더 세련된 방법으로, ‘MLB Stats API’라는 것을 이용한 데이터 수집도 가능하다.

MLB Stats API는 무엇인가?

MLB Stats API에 대해 설명하기 전, API에 대해 간략하게 얘기하고자 한다. API는 프로그램과 서버를 연결하는 통로 역할을 한다. 예시로, 프로그램 개발자들이 지도, 주소록 등을 따로 개발할 필요 없이 네이버나 다음 서버에 요청을 보내 데이터나 기능을 사용할 수 있도록 한다. 이처럼 서버와 통신을 주고받아 데이터(또는 기능)를 쓸 수 있도록 하는 것이 API다.

MLB Stats API는 API와 같은 맥락으로, 사용자(또는 프로그램)가 MLB 서버에 필요한 데이터를 요청하고 받기 위해 사용한다. MLB Stats API를 이용한다면, MLB 데이터를 보다 편리하게 수집할 수 있게 된다. 하지만 MLB Stats API는 잘 알려지지 않은 방법이고, 사람들에게 친숙한 방법은 아니다.

따라서 본 칼럼에서는 MLB Stats API를 이용했을 때, 접근가능한 데이터, 서버에 있는 데이터에 접근하는 방법 그리고 MLB Stats API가 가지고 있는 특징에 대해 살펴보고자 한다.

1) 사용가능한 데이터

MLB Stats API를 이용하여 접근할 수 있는 데이터의 목록은 <그림 1>와 같다.

<그림 1> MLB Stats API 구조

접근가능한 데이터는 크게 7개로 분류할 수 있다.  홈페이지에서 수집할 수 있는 경기, 경기일정, 선수 및 팀 정보 같은 기본적인 데이터에 접근이 가능한 점을 확인할 수 있었다. 하지만 MLB Stats API는 추가로 홈페이지에서 볼 수 없는 정보들을 제공하는 것뿐만 아니라, 세부적인 정보에도 접근할 수 있다.

먼저 직군과 관련된 데이터에 접근할 수 있다. API를 이용하여 접근 가능한 직군은 심판을 포함하여, 공식기록원, 데이터캐스트이며 해당 직군에 소속된 사람들의 정보에 접근이 가능하다. 또한 API를 이용하면 리그별 특징 데이터에도 접근할 수 있다. 메이저리그를 포함하여, 마이너리그, 윈터리그 등 각 리그별로 나타난 특징을 확인할 수 있다. 예를 들면, 리그 평균기록과 9이닝당 기록등을 포함하여, 시간 관련 데이터(타석 당 시간, 이닝 당 시간, 경기 평균 소요 시간 등)를 확인할 수 있다. 아래의 <그림 2>는 2021시즌 메이저리그 특징의 일부를 나타낸다.

<그림 2> 2021시즌 메이저리그 특징 데이터

또한 기존에 확인할 수 있는 데이터도 세부적으로 접근할 수 있다. 아래의 <그림 3>은 MLB Stats API를 이용하여 수집한 보스턴 레드삭스의 데이터 일부를 나타낸다. 해당 팀의 이름 및 창단 연도, 구장 등 홈페이지에서 확인할 수 있는 정보뿐만 아니라, 스프링캠프, 산하 마이너리그 팀에 대한 세부적인 정보에 접근할 수 있고, 연도별 임직원까지 확인할 수 있다.

<그림 3> 보스턴 레드삭스 팀 정보(좌측), 산하마이너리그(우측)

이처럼 API를 이용한다면, 접근 가능한 데이터가 많고, 보다 세부적인 정보에 대한 접근이 가능하다. 그렇다면, API를 이용하여 어떻게 데이터에 접근할 수 있는지 알아보고자 한다.

2) 접근방법

MLB Stats API에 대한 접근은 URL(인터넷주소)을 이용하며, 아래의 <표 1>은 일부 데이터 항목별 URL을 나타낸다.

<표 1> MLB Stats API 데이터 항목별 URL목록

MLB Stats API는 수집하고자 하는 데이터에 따라 URL이 다르기 때문에, 이를 알고 있어야한다. 박스스코어나 Play By Play같이, 사용자가 명확하게 알아볼 수 있는 항목이 있기도 하지만, gamePace처럼 의미를 명확하게 알 수 없는 항목들이 존재하기도 한다. 또한 API는 접근하는 데이터에 따라 규칙성이 달라진다. 같은 경기 데이터라도 박스스코어와 문자중계에 대한 URL이 달라진다. 또한 로스터를 확인하더라도 팀의 ID가 다르다. 만일 잘못된 변수를 입력하게 된다면, 접근이 안 될 수도 있고, 접근이 되더라도 데이터가 없는 경우가 존재할 수 있다. 따라서 API를 이용하기 전에 데이터 항목에 대한 이해가 필요하다.

또한 MLB Stats API의 URL은 데이터 항목에 따라 필수적으로 포함해야 하는 필수요소와 특정 데이터만을 볼 수 있게 필터의 역할을 하는 선택요소가 존재한다. 예를 들면, Play By Play나 박스스코어는 경기별로 다르기 때문에, 반드시 게임ID를 URL에 포함해야 한다. 반면에 리그별 특징이나 경기일정의 경우, 필수요소 없이 접근 가능하며, 선택요소를 이용하여 필요한 데이터만을 수집할 수 있다.

본 칼럼에서는 예시를 설명하고자, 몇 가지 경우들만 설명했다. MLB Stats API의 자세한 접근방법은 해당 홈페이지를 참고하기 바란다.

3) MLB Stats API의 장점

가) 관대한 API정책

다른 API들과 다르게, 일 허용량 제한과 인증키가 없다. API는 일 허용량이 존재하기 때문에 허용량보다 많은 양을 사용할 경우 사용량에 따른 추가금액이 발생한다. 하지만 MLB Stats API는 일 허용량이 존재하지 않아 과금에 대한 부담이 없다.

또한 일부 API의 경우 허가된 관리자만 접근할 수 있도록 인증키를 부여하고 있다. 만일 인증키가 없다면, API 사용 자체가 불가능하다. 하지만 MLB Stats API는 데이터 접근에 대한 인증키가 따로 존재하지 않는다. 대신 데이터에 대한 저작권이 존재한다. 저작권을 요약하면 ‘개인적으로 사용이 가능하고 데이터를 이용한 상업적인 행위가 없다면, 어느 누구든 사용에 제한이 없다’이다. 이처럼 MLB Stats API는 저작권이 허용하는 범위내에서 누구나 상관없이 접근할 수 있다.

나) 다양하고 많은 데이터에 접근이 가능

MLB Stats API를 이용한다면, 메이저리그를 포함하여, 마이너리그의 데이터도 사용할 수 있다. 마이너리그의 범위는 가장 높은 단계인 트리플A부터 가장 하위인 루키리그 또한 도미니카 윈터리그까지 가능하다. 물론 리그가 많아, 많은 데이터를 얻을 수 있지만, 제공하지 않는 데이터도 존재한다. 트래킹데이터는 메이저리그의 Play By Play에 포함돼있지만, 마이너리그나 윈터리그 데이터에는 없다. 대신, 대략적인 투구의 위치, 타구의 위치, 타구의 질(땅볼/라인드라이브 등) 등 간략한 위치들을 확인할 수 있다.

또한 메이저리그는 오랜 역사를 지닌 리그이기 때문에 많은 데이터를 가지고 있다. MLB Stats API를 통해 접근 가능한 Play by Play 데이터는 최소 1980시즌까지 수집이 가능하며, 박스스코어 데이터는 1980시즌 이전까지 가능하다. 이처럼 접근할 수 있는 데이터의 양이 많아, 연도별로 나타난 리그의 특징을 확인할 수 있다.

다) 다양한 활용

API는 어플리케이션이나 웹을 활용한 서비스에 활용되기도 하고 최근에는 빅데이터 분석이 활발하게 이루어지면서 프로그램 개발자나 데이터 분석가들이 쓸 수 있도록 프로그래밍 패키지(라이브러리)를 만드는 데 사용한다. MLB Stats API를 이용하여 만든 대표적인 서비스로는 문자중계가 있다. 프로그래밍 패키지에 활용된 예시는 파이썬의 MLB-StatsAPI, R은 baseballr이 존재한다. 이처럼 MLB Stats API는 목적에 맞게 여러 방면으로 활용할 수 있는 장점이 있다.

4) MLB Stats API의 진입장벽

MLB Stats API는 이처럼 기존의 방법과 다르게 장점이 존재하지만, 일반적인 방법은 아니기 때문에, MLB Stats API를 이용하기 위해서는 필요한 사항이 있다.

가) 코딩을 활용할 줄 알아야한다.

API는 프로그래밍 개발을 위해 제작되었기 때문에, 가급적 프로그래밍언어를 통해 API에 접근해야 한다. 코딩을 활용할 줄 안다면, 프로그래밍언어의 패키지를 이용해서 데이터를 수집할 수 있다. 물론 이전에 설명했듯이, URL을 통해 접근하는 방법도 존재한다. 하지만 일일이 손수 파일들을 처리해야 하기에 가급적 코딩을 활용하는 것을 추천한다.

나) 데이터 구조에 대한 이해

아래 <그림 4>와 <그림 5>는 API를 이용하여 접근한 박스스코어 데이터 일부를 나타낸다. <그림 4>는 박스스코어 데이터에 속한 대분류, <그림 5>는 대분류 중 ‘teams’에 속한 분류들을 나타낸다.

<그림 4> MLB Stats API를 이용하여 접근한 박스스코어 데이터의 분류
<그림 5> MLB Stats API를 이용하여 접근한 박스스코어 데이터 일부

<그림 5>를 보면, 각각 어웨이 팀과 홈팀에 대한 정보 외에도 다양한 분류들을 포함한다. 대표적으로 팀의 기록, 선수별 기록, 로스터에 등록된 선수, 기타 정보 등이 있다. 이처럼 박스스코어 데이터라도 수많은 분류들을 포함하고 있으며, 그 외에도 그림 상으로 나타나지 않은 다양한 내용들이 있다. 프로그래밍언어의 패키지를 사용한다면, 필요한 데이터들이 이미 전처리 되어 나오기에 따로 작업할 필요가 없다. 하지만 패키지를 사용하지 않고 URL을 통해 접근한다면, 데이터가 수많은 분류들로 나뉘어져 있기 때문에, 반드시 구조에 대한 이해가 필요하다.

결론

MLBAM의 CEO 밥 바우먼은 “미가공 상태의 데이터는 누구에게나 접근을 허용할 것”이라고 밝혔다. 그리고 그중 하나가 MLB Stats API다. MLB Stats API를 통해 메이저리그의 데이터뿐만 아니라, 마이너리그, 독립리그의 데이터도 수집할 수 있고, 선수 또는 팀에 대한 세부적인 정보도 얻을 수 있다. 이후, 사람들은 수집한 데이터를 이용하여 분석하고 결과를 만들어 여러 사람과 공유하고 있고 새로운 아이디어들을 위한 바탕으로 사용하고 있다. 물론 KBO리그도 최근 데이터 분석 열풍이 불면서, 야구 데이터분석에 관심이 많은 사람들이 직접 분석하여 블로그나 커뮤니티 등을 통해 자신의 결과물들을 나타내고 있다.

하지만 MLB와 달리 KBO는 공개된 API가 존재하지 않아서, 데이터 수집에 오랜 시간을 쏟아내고 있다. 만일 KBO도 MLB처럼 사람들이 접근할 수 있는 API가 있다면, 더욱더 활발한 분석이 이뤄지고, 지금보다 더 빠르게 데이터 분석 영역이 발전할 수 있다고 생각된다.

야구공작소 우정호 칼럼니스트

에디터 = 야구공작소 장원영, 송인호

참조

– MLB Stats API의 저작권, http://gdx.mlb.com/components/copyright.txt

– MLB-StatsAPI, https://github.com/toddrob99/MLB-StatsAPI

– baseballr, https://billpetti.github.io/baseballr/

– 베이스볼 서번트, https://baseballsavant.mlb.com/

– 팬그래프, https://www.fangraphs.com/

ⓒ야구공작소. 출처 표기 없는 무단 전재 및 재배포를 금합니다. 상업적 사용은 별도 문의 바랍니다.

Be the first to comment

댓글 남기기