0%

KBO-data 패키지

이 글은 한국프로야구(Korea Baseball Organization) 웹사이트에서 데이터를 스크래핑하는 패키지 만드는 과정을 정리합니다.

시작하며

이 프로젝트의 목표는 크게 2가지아다.

  • KBO 데이터를 가져오는 패키지 생성
  • 파이썬 패키지를 생성하는 방법 공부

해당 시리즈는 작업 중에 필요한 정보들을 정리할 예정이다.

KBO-data

KBO-data는 KBO 공식 사이트에서 경기 정보들을 스크래핑하는 패키지이다. 해당 패키지는 KBO 공식 사이트에 있는 데이터들을 가져와 사용하기 편한 구조로 변형해준다. 패키지에 대한 자세한 설명은 깃허브의 README에서 확인할 수 있다.

먼저 패키지를 사용하기 위해서는 설치를 해주어야 한다. 아래의 코드로 설치를 진행하자.

1
pip install kbodata

설치 후 파이썬 환경에서 임포트 하면 바로 사용할 수 있다.

1
import kbodata

패키지는 크게 3가지로 나누어진다.

1. 경기 스케쥴 가져오기

먼저 요청한 날짜에 맞춰서 스케쥴을 가져와야 한다. 스케쥴은 특정 날짜, 특정 월, 특정 년도를 선택하여 받을 수 있디. 스케쥴을 가져오는 함수는 아래와 같다.

1
2
3
4
5
6
7
8
# 2021년 4월 20일의 KBO 경기 스케쥴을 가져온다.
>>> day = kbodata.get_daily_schedule(2021,4,20,'chromedriver_path')

# 2021년 4월 KBO 경기 스케쥴을 가져온다.
>>> month = kbodata.get_monthly_schedule(2021,4,'chromedriver_path')

# 2021년 KBO 경기 스케쥴을 가져온다.
>>> year = kbodata.get_yearly_schedule(2021,'chromedriver_path')

이렇게 스케쥴을 받으면 Pandas의 DataFrame 형태로 결과가 반환된다. 결과는 아래와 같다.

KBO

2. 경기 자료 가져오기

경기 결과를 받는 함수는 스케쥴 데이터에 있는 날짜와 게임 ID를 바탕으로 경기 결과들을 가져오기 때문에 스케쥴 데이터가 필요하다. 따라서 원하는 기간의 스케쥴들을 먼저 가져와야 한다. 그다음 아래의 함수를 사용하여 경기 데이터를 가져온다. 경기 데이터는 크게 스코어보드, 경기 정보, 타자 정보, 투수 정보를 가져온다.

1
2
3
4
5
6
7
8
# 2021년 4월 20일의 KBO 경기 정보를 가져온다.
day_data = kbodata.get_game_data(day,'chromedriver_path')

# 2021년 4월 KBO 경기 정보를 가져온다.
month_data = kbodata.get_game_data(month,'chromedriver_path')

# 2021년 KBO 경기 정보를 가져온다.
year_data = kbodata.get_game_data(year,'chromedriver_path')

경기 정보를 가져오면 아래 구조의 JSON 형태로 반환된다.

1
2
3
4
5
6
7
8
9
10
{ id: date_gameid,
contents: {
'scoreboard': []
'ETC_info': {}
'away_batter': []
'home_batter': []
'away_pitcher': []
'home_pitcher': []
}
}

3. 경기 데이터 타입 변형하기

가져온 경기 자료는 복잡한 구조로 구성되어 있다. 따라서 좀 더 사용하기 편한 형태로 변환하는 함수를 구현했다. 변환하는 함수는 스코어보드, 타자, 투수 자료 총 3개로 정리하며, 변환하는 파일 포맷은 아래와 같다.

  • DataFrame
  • Dict

또한 각각 함수의 사용법은 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
# 팀 경기 정보만을 정리하여 DataFrame으로 변환한다.
scoreboard = kbodata.scoreboard_to_DataFrame(day_data)
# 타자 정보만을 정리하여 DataFrame으로 변환한다.
batter = kbodata.batter_to_DataFrame(day_data)
# 투수 정보만을 정리하여 DataFrame으로 변환한다.
pitcher = kbodata.pitcher_to_DataFrame(day_data)

# 팀 경기 정보만을 정리하여 Dict으로 변환한다.
scoreboard = kbodata.scoreboard_to_Dict(day_data)
# 타자 정보만을 정리하여 Dict으로 변환한다.
batter = kbodata.batter_to_Dict(day_data)
# 투수 정보만을 정리하여 Dict으로 변환한다.
pitcher = kbodata.pitcher_to_Dict(day_data)

패키지 작업

이 프로젝트에서는 KBO 데이터를 스크래핑하는 패키지를 만들어 파이썬 패키지 사이트인 PyPI에 업로드할 예정이다. PyPI에 업로드된 패키지는 python 패키지 관리 시스템인 Pip로 바로 다운받을 수 있다. 좀 더 편리한 패키지 작업을 위해서 Poetry를 사용하여 진행할 예정이다. Poetry에 대한 자세한 내용은 이 사이트에서 확인할 수 있다. 가능하다면 Poetry에 대한 글도 작성할 예정이다.