brunch

You can make anything
by writing

C.S.Lewis

by 채과장 Jul 15. 2020

오버워치 리그 데이터 분석 - 1

어떻게 데이터를 모을까?

Intro

난 게임을 좋아했었다.

동네 오락실에서 스트리트 파이터 2라는 게임을 꽤 잘했었고, 동네엔 아마 적수가 없었던 것으로 기억한다. 그리고 여러 시리즈가 나온 킹 오브 파이터 94라는 게임도 고등학교 1학년 봄까지 거의 이겼을 만큼 게임을 좋아하고 열심히 했었다.


하지만 고등학생 시절이 본격화되고 난 후 게임을 많이 할 기회가 없었고 대학에 입학해서 크게 게임을 열심히 하진 않았던 것 같다. 그 '스타크래프트'가 그렇게 재미있게 느껴지지는 않았으니까...


지금 생각해보니 전략 시뮬레이션이란 게임을 좋아하지 않았던 것 같다. 워낙 배워야 할 게 많아서. 그래서 온게임넷에서 해주던 스타크래프트 게임 리그도 왜 보는지 이해할 수 없었다

그러다가 결혼하고 나서 플레이스테이션을 샀었다. 어렸을 때 가정용 게임기를 못 가져본 한을 깨고자 샀는데, 엔딩 한 번 보는 게임이 거의 없었다.


게임 플레이 중간에 하다가 SJ에게 게임패드를 넘기면 오히려 SJ가 게임을 깨고는 했었다.

나이 들면 게임 불감증이라니 어쩔 수가 없다고 생각했는데

오버워치라는 게임을 만났다


처음에는 정신없이 돌아가는 게임에 적응을 못 했지만 적응한 후부터는 꾸준히 즐기고 있는 게임이다. 물론 나의 티어는 실버이다... 새 계정을 판다면 좀 더 올라갈 것 같기도 하지만 플스에서 굳이 그렇게 까지 하고 싶진 않았다.


중요한 건 League of Legend처럼 오버워치도 리그가 시작되었다는 것이다

이제 리그가 시작한 지 3년째가 되면서 여러 데이터가 쌓이기 시작했는데, 이 데이터를 가지고 아주 간단한 EDA를 해보았다.


사실 너무나도 간단해서 IT를 하시는 분들께 별 거 아닐 수 있지만 회사에서 프로그래밍을 다뤄보지 않은 나에게 데이터를 수집해서 간단하게 본다는 것 자체가 나에겐 쉬운 일이 아니어서 기념 삼아 글을 써보았다.


How to collect OverWatch League data

오버워치 리그 데이터는 API를 지원한다

문과 출신은 아니고 학부는 공대이긴 하지만 경영대학원 졸업 이후 파워포인트와 엑셀만 가지고 살아온 나로서는 API가 무엇인지 이해하는데만에도 시간이 많이 걸렸지만 온라인 강의로 수업을 들으면서 대략적으로나마 이해했다


그리고 깨달은 건 오버워치 리그가 API로 데이터를 제공해준다는 게 얼마나 고마운 일인지

일단 오버워치 리그 API 사이트에 들어가서 내가 얻고 싶은 항목이 무엇인지 알아보았다

사이트에 들어가 보면 여러 항목이 존재한다. 올스타 성적, 맵 데이터, 매치 데이터, 플레이어 데이터, 플레이어 데이터 by map 등이 있었다.


이 중 눈여겨볼만한 데이터는 플레이어 데이터와 플레이어 데이터 by map 이 두 개인데 일단 플레이어 데이터만 크롤링하기로 했다.


API 주소는 다음과 같았다

https://api.overwatchleague.com/stats/players

이 주소를 가지고 크롤링을 할 때 주피터 노트북으로 코드를 만들어서 크롤링할 수 있지만, 일단 난 온라인 강의에서 배운 scrapy라는 툴을 써보기로 결심했다



터미널을 이용해서 작업을 해야 하는 프로그램이라 사실 잘할 수 있을까 했지만 일단 해보기로 했다. 가장 최신 기법이라고도 했고, 사실 수강 내용 중 마지막에 나왔던 방식이라 기억나는 게 이 방법밖에 없었다...

스크래피를 깔고 나서 오버워치 프로젝트를 시작했다


scrapy startproject overwatchstat


그러면 scrapy라는 폴더 밑에 overwatchstat이라는 폴더가 연속으로 2개 생긴다

그리고 그 폴더 안에는 이런 파일들이 생겨난다


위의 그림에서 다시 'spider'라는 폴더 안에 들어가면 아래와 같은 파일이 생기는데 'overwatchstat'이라는 파일을 편집해서 크롤링을 시작해나가야 한다


overwatchstat이라는 코드를 VisutalStudio Code로 열고나면 사실 별 내용이 없다.

거기서 자기가 하나하나 코드를 채워나가야 한다. 일단 필요한 라이브러리를 불러와야 하는데

중요한 라이브러리는 json이라는 라이브러리이고 나머지는 초반에 어떻게 json 데이터를 정리해야 할지 몰라서 써놓은 코드들이다



위와 같이 필요한 라이브러리를 호출하고 나면 이제 정말 필요한 코드를 작성해야 한다



이 코드가 watchdata = json.loads(response.body_as_unicode())

결국 모든 걸 한다. API를 통해 흘러온 json 타입 데이터를 watchdata라는 쉽게 말해서 테이블에 넣어주는 역할을 하는 것이다

그리고 그 후 해야 할 일은 약간의 키보드 타이핑을 열심히 해야 하는 코드이다.



data라는 딕셔너리 안에 프로선수들의 이름, 팀, 역할, 10분당 처치, 10분당 대미지, 10분당 힐링, 10분당 죽음 등의 데이터가 존재하고,


그 data를 각각의 item에 있는 데이터를 doc에 넣는다는 것이다

일단 나와 같이 크롤링을 많이 접해보시지 않은 분들을 위해 잠깐 설명하면

scrapy는 하나의 파일에서 모든 결과가 나오지 않는다.


최소 overwatchstat.py라는 파일 외 다른 한 개는 더 건드려줘야 한다

바로 item.py 파일이다


위에 있는 첫 번째 그림파일을 보면 items.py라는 파일이 존재하는데

이 파일이 데이터를 담당하는 파일이라고 보면 될 것 같다

items.py 파일을 열면 처음에는 아무 내용도 존재하지 않는다.


그래서 json  타입으로 불러온 자료를 scrapy.Field()를 이용해서 필드로 만들어줘야 한다. 비유를 들자면 아까 말한 테이블에서 칼럼명을 써준다고 보면 될 듯하다. items.py 파일에서 저렇게 선언하지 않으면 자료를 사용할 수 없다고 온라인 강의에서 설명했음


여기까지 코드를 만들고 나면 1차 준비는 끝났기 때문에 여기서  터미널에서 아래와 같은 명령어를 사용해서 크롤링한 데이터를 csv 파일로 저장할 수 있다

이렇게 되면 아래와 같은 csv 파일을 얻을 수 있다

다음 시간엔 csv 파일을 가지고 아주 기초적인 EDA를 해본 경험을 써볼까 한다


사실 브런치에 있는 실력자 분들이 한 프로젝트에 비교하면 초라하지만 이 정도는 일반인이라도 해볼 수 있다는 걸 보여드리기 위해서 이 글을 작성했다

작가의 이전글 그냥 글이 쓰고 싶어서
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari