league of legends 데이터를 전처리하면서 필요했던 코드들을 정리해 보려고합니다.
🔥전처리 목표 " 우리팀이 죽은 로그만 가져오기"
메인 데이터는 여러개의 매치경기가 concat 된 dataframe 형태 였는데요!
우리팀 포지션이 상대의 어떤 포지션에게 죽었는지 알기위해서는 killerId, vicitmId가 어떤 참가자인지에 대한 정보가 필요하단 말이죠!
즉, 각 matchId 별로 각 참가자들의 participantId, championName, teamPosition 을 merge 해줘야하는 전처리가 필요했습니다. 데이터를 보면 아래와 같습니다!
matchId별 kill log는 아래와 같은 형식입니다.
그리고 그 참가자에 대한 정보는 아래의 match_info 데이터에서 참가자별 정보를 따로 만들어 놓은 champion_info 데이터를 만들어놓은 상태입니다.
- kill_log는 participantId가 killerId, vicitmId 컬럼명으로 표현되어 있다.
- matchId 마다 teamId, participantId가 다르기 때문에 조건을 걸어줘야한다!
# 소환사와 같은팀 정보(vicitmId) - 죽은입장
team_info = (
champion_info.groupby(['matchId', 'teamId']).filter(lambda x: any(x['summonerName'] == summoner_name))
)[['matchId','teamId','participantId','summonerName','teamPosition','win']]
team_info.columns = ['matchId','teamId','victimId','summonerName','victimPosition','win']
# 반대팀 정보(killerId) - 죽인입장
opponent_info = (
champion_info.groupby(['matchId', 'teamId']).filter(lambda x: not any(x['summonerName'] == summoner_name))
)[['matchId','teamId','participantId','summonerName','teamPosition','win']]
opponent_info.columns = ['matchId','teamId','killerId','summonerName','killerPosition','win']
여러 방법이 있겠지만... 저는 해당 소환사가 속한 팀 정보, 그리고 적정보 테이블을 따로 나눠서 merge 했습니다! 간단하게 설명해보겠습니다.
우리팀이 당한(victim) 입장이고 상대가 (killer)인 입장의 데이터만 가져와야 했기 때문에
먼저, 해당 summoner_name(나) 와 같은팀들의 정보만 가져오고 participantId 를 vicitimId로 바꿔 준다음 kill_log를 'matchId','victimId' 별로 merge 하게 되면 자동적으로 우리팀이 데스한 로그만 남게 됩니다!
그리고 반대로 나머지 적팀들의 정보만 가져오고 participantId 를 killerId로 바꾼 다음 merge된 데이터와 다시 결합해주면 완성!
먼저, 어떤 경기는 red(teamId = 100)팀 어떤 경기는 blue(200)팀 이기 때문에, matchId, teamId 별로 groupby 해주어야합니다. 이렇게 함으로써 같은 매치 내에서 같은 팀에 속한 정보들이 함께 묶이고
fileter 와 lambda를 이용해서 "summonerName" 이 == 나(summoner_name) 에 속하는 'GROUP' 을 가져오면 끝! 반대도 마찬가지입니다!
이렇게 matchid 별로 'summonerName' == '메시아빠우왁굳'에 속한 team 데이터를 가져올 수 있습니다!
그 다음 먼저, victimId 를 기준으로 team_info와 결합 하고 killerId를 기준으로 opponent_info 와 결합 해주면 자동적으로 "우리팀이 상대의 어떤 포지션에 죽었는지" 알 수 있는 데이터프레임 완성!
# merge
team_death_log = pd.merge(kill_log, team_info, on =['matchId','victimId'], how = 'inner')
team_death_log = pd.merge(team_death_log,opponent_info, on=['matchId','killerId'], how ='inner' )