728x90

lol 데이터를 이용해 미니 팀 프로젝트를 진행한다고 하셔서 하기에 앞서 내가 맡은 부분이 제대로 정보를 뽑을 수 있는 내용인지 대충이나마 확인하기 위해 혼자 대충 정보를 뽑아봤다.

확인만 한 것이기 때문에 완벽하게 끝낸 것이 아니라 사전 작업만 해둔 것이다.

 

1. 사전 준비

 1-1) import

import requests
import pandas as pd
from tqdm import tqdm
  • 확인용 테스트이기 때문에 따로 함수들을 빼두진 않았다.
  • 받아오기 위한 requests
  • 데이터프레임을 만들기 위한 pandas(알리어스를 이용해 pd로 바꿈)
  • 체크용 tqdm(간략화하여 사용하기 위해 from ~ import를 사용하여 import했다.)

 

 

 1-2) 정보 받아오기

api = '(본인의 api key)'
  • lol 데이터를 받아오기 위해서는 riot api key가 필요한데, 이건 Riot Developer Portal 사이트에서 로그인(riot 계정이 없다면 회원가입해야함) 후 요청하면 1~2일 내로 되는 것 허락해주는 것 같다.
 

Riot Developer Portal

About the Riot Games API With this site we hope to provide the League of Legends developer community with access to game data in a secure and reliable way. This is just part of our ongoing effort to respond to players' and developers' requests for data and

developer.riotgames.com

  • 나의 경우에는 다음 날 확인해보니 바로 허락해주면서 api key를 받을 수 있었다.

 

tiers = ['CHALLENGER','GRANDMASTER','MASTER','DIAMOND']
page = 1
top_tiers= []
top_nick_WL = []
  • tiers에는 정보를 상위 티어로만 가지고 올 것이라 티어 이름을 저장했다.
  • page는 가지고 올 정보의 페이지 수? 같은 것이라고 생각하고 있다. (정보의 양)
  • top_tiers, top_nick_WL은 각 각 모든 정보, 혹은 몇개의 정보를 담아두기 위해 만들어 두었다. (사실 이 부분은 모든 정보만 담아두고 따로 빼면 됐는데 당시에는 정보를 뽑는 것에 급급해 생각하지 못했다.)

 

for tier in tqdm(tiers):
    for p in range(page):
        print(tier)
        url = f'https://kr.api.riotgames.com/lol/league-exp/v4/entries/RANKED_SOLO_5x5/{tier}/I?page={p+1}&api_key={api}'
        req = requests.get(url).json()
        if req == '[]':
            print('pass')
            pass
        else:
            if len(req)>4:
                for i in range(len(req)):
                    top_tiers.append(req[i])
                    top_nick_WL.append([req[i]['tier'],req[i]['summonerName'],req[i]['wins'],req[i]['losses']])
  • url은 지금 상황에선 첫번째 for문에서 선언해도 되지만, 페이지 수가 달라질 경우를 대비하여 두번째 for문에서 위치하도록 했다.
  • 첫번째 for문은 미리 만들어둔 tiers에서 하나씩 꺼내도록 했고, 두번째 for문은 페이지 수 만큼 돌도록 했다.
  • 확인용으로 print를 이용하여 tier를 출력하도록 했다.
  • requests.get()을 통해 url에 저장한 링크에서 정보를 받아와 req에 저장했다. 뒤의 .json()을 통해 json으로 받아올 수 있었다.
  • 혹시라도 빈 값을 가져올 수도 있으니, 만약 req가 '[]'라면(비어있다면) pass를 출력하고 넘어가도록 했다.
  • 빈 값이 아니라면 다시 req의 사이즈가 4를 초과하는 경우만 걸렀다. (위의 if문으로 안 걸러지는건지 아닌지 이 if문이 없으면 에러가 났다. ㅠㅠ)
  • req의 사이즈만큼 for문을 돌려 미리 만들어둔 top_tiers, top_nick_WL에 각 각 담을 정보를 꺼내어 담았다.

 

 1-3) 데이터 프레임으로 만들기

all_df = pd.DataFrame(top_tiers)
tnw_df = pd.DataFrame(top_nick_WL, columns=['tier','summonerName','win','loss'])
  • top_tiers, top_nick_WL에 담아둔 데이터를 각 각 데이터 프레임으로 만들어 준다.
더보기
혹시 몰라서 데이터 일부는 모자이크 처리를 해두었다.
혹시 몰라서 데이터 일부는 모자이크 처리를 해두었다.
  • 만든 데이터 프레임은 이런 식으로 나온다.

 

 1-4) 컬럼 추가 후 값 입력

tnw_df['suNameLen'] = tnw_df['summonerName'].str.len()
tnw_df = tnw_df[['tier','summonerName','suNameLen','win','loss']]
  • 컬럼을 추가하면서 컬럼의 값을 입력해줬다.
  • tnw_df['summonerName'].str.len()은 summonerName 컬럼 값의 문자열 길이를 나타낸다.
더보기
혹시 몰라서 데이터 일부는 모자이크 처리를 해두었다.
  • 결과는 이렇게 나온다.

 

정보들이 제대로 뽑히는 것을 확인 했으니 사전 작업은 끝났다!

 


 

728x90

'프로그래밍 > +a' 카테고리의 다른 글

미니 팀 프로젝트 중간 과정 (파이썬)  (1) 2024.01.03
slPro 3차 일지  (0) 2024.01.01
slPro 2차 일지  (0) 2023.12.28
slPro 1차 일지  (1) 2023.12.27
Java_주말 복습: 문제 다시 풀어보기  (0) 2023.10.01