지난 포스팅에서 매치아이디를 가지고 유저들의 게임정보를 수집하였다.
이 정보를 가지고 어떤 것을 할 지에 대해 고민을 해야하는데...챔피언 조합 추천이 어떨까 생각을 해보았다.
그래서 각 게임마다 블루팀과 레드팀의 조합을 추출하고 각 챔피언이 어떤 라인에 섰는 지까지 뽑아보는 코드를 작성해보았다.
import pandas as pd
df = pd.read_csv("C:/RiotProject/aaa.csv", encoding='CP949')
# df2 = pd.read_csv("C:/RiotProject/practice/Champtag_All.csv")
df3 = pd.DataFrame({'Win':[],
'Lose':[],
'Win_Position':[],
'Lose_Position':[]})
먼저 인게임데이터를 불러오고 새로운 데이터 프레임을 만들어주었다.
Win에는 승리팀 조합이 Lose에는 패배팀 조합, 그리고 각 팀별 포지션이 순차적으로 들어갈 수 있도록 구성하였다.
데이터프레임으로 csv파일을 읽어왔기 때문에 무작정 넣어버리면 한줄한줄 읽는 것이 아니게 된다. 그래서 enumerate를 통해 한 행마다의 정보를 읽어올 수 있도록 하였다.
import pandas as pd
df = pd.read_csv("C:/RiotProject/aaa.csv", encoding='CP949')
df2 = pd.read_csv("C:/RiotProject/practice/Champtag_All.csv")
df3 = pd.DataFrame({'Win':[],
'Lose':[],
'Win_Position':[],
'Lose_Position':[]})
for i, j in enumerate(df["win_team"]):
print(i)
if j == 100:
win_temp = []
lose_temp = []
result = []
position = []
win_position = []
lose_position = []
for k in range(5):
win_temp.append(df.loc[i][f"player_{k}.championId"])
if df.loc[i][f'player_{k}.individualPosition'] == 'TOP':
win_position.append(1)
elif df.loc[i][f'player_{k}.individualPosition'] == 'JUNGLE':
win_position.append(2)
elif df.loc[i][f'player_{k}.individualPosition'] == 'MIDDLE':
win_position.append(3)
elif df.loc[i][f'player_{k}.individualPosition'] == 'BOTTOM':
win_position.append(4)
elif df.loc[i][f'player_{k}.individualPosition'] == 'UTILITY':
win_position.append(5)
else:
win_position.append(0)
for k in range(5,10):
lose_temp.append(df.loc[i][f"player_{k}.championId"])
if df.loc[i][f'player_{k}.individualPosition'] == 'TOP':
lose_position.append(1)
elif df.loc[i][f'player_{k}.individualPosition'] == 'JUNGLE':
lose_position.append(2)
elif df.loc[i][f'player_{k}.individualPosition'] == 'MIDDLE':
lose_position.append(3)
elif df.loc[i][f'player_{k}.individualPosition'] == 'BOTTOM':
lose_position.append(4)
elif df.loc[i][f'player_{k}.individualPosition'] == 'UTILITY':
lose_position.append(5)
else:
lose_position.append(0)
result.append(win_temp)
result.append(lose_temp)
result.append(win_position)
result.append(lose_position)
df3 = df3.append(pd.Series(result, index=df3.columns), ignore_index=True)
else:
win_temp = []
lose_temp = []
result = []
position = []
win_position = []
lose_position = []
for k in range(5, 10):
win_temp.append(df.loc[i][f"player_{k}.championId"])
if df.loc[i][f'player_{k}.individualPosition'] == 'TOP':
win_position.append(1)
elif df.loc[i][f'player_{k}.individualPosition'] == 'JUNGLE':
win_position.append(2)
elif df.loc[i][f'player_{k}.individualPosition'] == 'MIDDLE':
win_position.append(3)
elif df.loc[i][f'player_{k}.individualPosition'] == 'BOTTOM':
win_position.append(4)
elif df.loc[i][f'player_{k}.individualPosition'] == 'UTILITY':
win_position.append(5)
else:
win_position.append(0)
for k in range(5):
lose_temp.append(df.loc[i][f"player_{k}.championId"])
if df.loc[i][f'player_{k}.individualPosition'] == 'TOP':
lose_position.append(1)
elif df.loc[i][f'player_{k}.individualPosition'] == 'JUNGLE':
lose_position.append(2)
elif df.loc[i][f'player_{k}.individualPosition'] == 'MIDDLE':
lose_position.append(3)
elif df.loc[i][f'player_{k}.individualPosition'] == 'BOTTOM':
lose_position.append(4)
elif df.loc[i][f'player_{k}.individualPosition'] == 'UTILITY':
lose_position.append(5)
else:
lose_position.append(0)
result.append(win_temp)
result.append(lose_temp)
result.append(win_position)
result.append(lose_position)
df3 = df3.append(pd.Series(result, index=df3.columns), ignore_index=True)
df3.to_csv("C:/RiotProject/TeamCombination_position.csv")
win_temp는 [1,2,3,4,5]식으로 적혀있을 것이다. 이걸 그대로 데이터프레임이 append한다면 열의 길이도 맞지 않고 열의 길이가 맞다하더라도 하나씩 들어가기 때문에 리스트 속의 리스트를 만들어서 넣게 되면 이쁘게 들어가게 되었다.
df3에 Win, Lose, Win_position, Lose_position이 있기 때문에
result = [[win정보],[Lose정보],][Win_position정보],[Lose_position]]의 형태로 넣어주고 df3에 append하면
각 컬럼에 알맞게 들어가게 된다.
실제로 실행해보면
이런 식으로 완성된다!!!
챔피언넘버를 추출하는 방법은 다음과 같다.
import requests
import pandas as pd
r = requests.get('https://ddragon.leagueoflegends.com/api/versions.json')
current_version = r.json()[0] #최신 버전
print('버전확인',current_version)
r = requests.get('http://d dragon.leagueoflegends.com/cdn/{}/data/ko_KR/champion.json'.format(current_version))
parsed_data = r.json()
info_df = pd.DataFrame(parsed_data)
champ_dic = {}
for i, champ in enumerate(info_df.data):
champ_dic[i] = pd.Series(champ)
champ_df = pd.DataFrame(champ_dic).T
champ_df = champ_df.drop(['version', 'image', 'info', 'stats','title','blurb','tags','partype'], axis=1)
champ_df.to_csv('Champion_list.csv', encoding='utf-8-sig')
라이엇에서 제공하는 Json데이터를 가지고 확인할 수 있다.
다음은 챔피언을 직접 분류하고 이 데이터를 어떻게 활용할 것인지에 대해서 생각해보아야할 것 같다.
'프로젝트 > Riot LoL' 카테고리의 다른 글
Modeling을 위한 전처리를 해보자 (0) | 2021.09.15 |
---|---|
Position 순서를 맞춰보자 (0) | 2021.09.06 |
RiotAPI를 사용해서 인게임 정보를 모아보자 (0) | 2021.08.18 |
소환사이름으로 MatchId 저장하기 (0) | 2021.08.04 |
어떤 티어의 유저들을 가져올까? (0) | 2021.07.30 |