본문 바로가기
게임 데이터 분석

[게임 데이터 분석 #2] LOL 랭크 데이터 불러오기

by DongGoo 2023. 12. 6.

이번 글에서는 데이터를 활용하여 A/B 테스트를 수행하기 위한 데이터셋 로딩 과정을 소개하려 합니다.
A/B 테스트의 핵심 주제는 특정 상황이 승리에 어떤 영향을 미치는지에 대한 분석 및 검증입니다. 이를 위해선 방대한 양의 게임 데이터가 필요하며, 이번 목표는 특정 랭크에서의 100판의 게임 데이터를 임의로 추출하는 것입니다.
라이엇 API를 활용하면 이러한 데이터를 쉽게 수집할 수 있습니다. 

 

데이터 가져오는 순서

우선 100판의 게임을 가져오기 위해서는 MatchId 정보가 필요합니다. MatchId를 통해 한판에 해당하는 게임 데이터를 Table형태로 만드는 과정은 아래의 그림과 같습니다.

Input : 필요한 매개변수 / Output : 출력된 값들중 필요한 변수

랭크 데이터 가져오기

LEAGUE-V4에서 데이터를 가져오는것 부터 시작해 보겠습니다.

LEAGUE-V4에서 제공하는 데이터는 특정 랭크에 있는 소환사들의 정보입니다.

3번째 항목인 모든 데이터를 가져오기를 클릭합니다.

조회시 나오는 데이터에 대한 간단한 설명 및 오류코드에 대한 설명이 작성되어 있습니다.

 

그런다음 필요한 매개변수를 입력하는 칸과 API를 선택하는 창이 나타납니다.

저는 자유랭크 골드 3티어의 데이터를 조회해 보겠습니다.

queue 변수(게임 모드)

  • RANKED_SOLO_5X5 : 솔로랭크
  • RANKED_FLEX_SR : 소환사 협곡 팀랭크
  • RANKED_FLEX_TT : 환영의 숲 팀랭크

RESPNSE CODE 200은 정상적으로 실행된것을 의미합니다.

RESPONSE BODY즉 결과 열 설명

  • 'leagueId' : 리그 ID
  • 'queueType' : 게임모드
  • 'tier' : 티어
  • 'rank' : 랭크
  • 'summonerId' : 소환사 ID
  • 'summonerName' : 소환사 이름
  • 'leaguePoints' : 랭크 포인트
  • 'wins' : 승리 수
  • 'losses' : 패배 수
  • 'veteran' : 소한사가 해당 리그에서 많은 게임을 플레이 했는지 여부
  • 'inactive' : 현재 비활성 상태
  • 'freshBlood' : 소환사의 최근 랭크 변동 유무
  • 'hotStreak' : 연속 승리 수
파이썬 구현

파이썬에서는 간단한 코드로 해당 API데이터를 가져올수 있습니다.

import requests
API_KEY ='your_api_key'

# 게임모드, 랭크, 티어, API키를 입력
URL = "https://kr.api.riotgames.com/lol/league/v4/entries/RANKED_FLEX_SR/GOLD/III?page=1&
	api_key=" + API_KEY
response = requests.get(URL)
data = response.json()

print(data)

# 실제로 필요한 summonerName column을 변수에 저장
summonerName_list = data['summonerName']

해당 데이터에서 필요한 데이터는 summonerName column이기 때문에 summonerName column만 추출하여 변수에 저장합니다.

소환사 정보 가져오기

그런다음 소환사명을 통해 puuId를 얻기 위해 SUMMONER-V4에 접속해줍니다.

 

소환사의 이름을통해 소환사의 정보를 얻을수 있습니다.

SUMMONER-V4에 대한 정보는 전 블로그에 설명되어 있습니다. 참고해주시기 바랍니다.

 

https://big-data97.tistory.com/78

 

[게임 데이터 분석 #1] LOL API 발급 및 데이터 불러오기

이번 프로젝트에서는 LOL의 데이터를 가져와서 여러가지 가설 설정 및 통계적 검증을 실행해 보도록 하겠습니다. 라이엇 개발자 포털 api키 발급 받기 라이엇 개발자 포털에 접속합니다. https://dev

big-data97.tistory.com

랭크데이터에서 얻은 소환사 이름 리스트를 활용해 SUMMONER-V4 데이터를 불러와 보겠습니다.

파이썬 구현
import requests
import pandas as pd

# 라이엇 API 키
API_KEY ='your_api_key'

def get_league_entries(page_number=1):
    """특정 랭크의 게임 데이터를 가져오는 함수"""
    url = f"https://kr.api.riotgames.com/lol/league/v4/entries/RANKED_FLEX_SR/GOLD/III?page={page_number}&api_key={API_KEY}"
    response = requests.get(url)
    data = response.json()
    return pd.DataFrame(data)

# 소환사 정보중 필요한 puuid column만 가져오기
def get_summoner_info(summoner_name):
    """소환사의 정보를 가져오는 함수"""
    url = f"https://kr.api.riotgames.com/lol/summoner/v4/summoners/by-name/{summoner_name}?api_key={API_KEY}"
    response = requests.get(url)
    data = response.json()['puuid']
    return data

# 특정 랭크의 게임 데이터를 가져온 후, 소환사 이름을 리스트에 저장
# 데이터양이 많기 때문에 상위 10개만 활용(임시)
league_df = get_league_entries()
summoner_names = league_df['summonerName'].head(10)

# 각 소환사의 정보를 가져와 리스트에 저장
summoner_info_list = []
for name in summoner_names:
    summoner_info = get_summoner_info(name)
    summoner_info_list.append(summoner_info)

# 소환사 정보 리스트를 데이터프레임으로 변환하여 출력
summoner_df = pd.DataFrame({'puuid':summoner_info_list})
display(summoner_df)

 

코드 설명

 

  1. 사용자 정의 함수인 get_league_entries()를 이용하여 초기 부분에서 언급된 랭크 데이터를 추출합니다. 이 함수는 매개변수를 임의로 설정하므로, 이를 호출하는 데 있어서 별도의 입력값은 필요하지 않습니다.
  2. get_league_entries() 함수를 호출하면, URL에서 게임 모드, 랭크, 티어 등의 정보를 인자로 받아, 해당하는 랭크의 각 소환사 정보를 DataFrame 형태로 반환합니다.
  3. get_league_entries() 함수를 호출한 후, 반환된 DataFrame에서 'summonerName' 열의 상위 10개 행을 summoner_name 변수에 저장합니다.
  4. 저장된 10개의 소환사 이름을 for 루프를 통해 순회하면서, 각 소환사의 정보를 가져오는 사용자 정의 함수인 get_summoner_info()에 매개변수로 전달합니다. 이 함수는 소환사 당 puuid 값을 반환합니다.
  5. 마지막으로, 이 정보를 데이터 프레임으로 구성하면, 최종 이미지에 표시된 대로 출력됩니다.

다음글 에서는 추출한 puuid정보를 통해 MATCH-V5의 정보를 가져와 DataFrame로 출력해보겠습니다.

 

이슈

자유랭크 골드 3 티어를 기록한 플레이어의 최근 20 경기에 해당하는 MatchId를 추출하였지만, 해당 데이터에는 다른 게임 모드의 정보가 혼합되어 있습니다. 이로 인해, 오직 자유랭크 모드만을 대상으로 한 데이터 분석에 어려움이 있습니다.

따라서, 자유랭크 게임 모드에 한정된 데이터만을 효과적으로 조회하고 추출하는 방법론을 개발할 필요가 있습니다.