저는 리그오브레전드를 플레이 할 때 어떤 포지션이든 마다 하지 않는 올라운더입니다.
하지만 이제는 주 포지션을 정해서 T자형 인재가 되고싶네요.
그런 의미에서 riot 에서 제공하는 저의 매치 데이터로 어떤 포지션이 안성맞춤인지 알아보겠습니다.
라인전 0~15분 동안 death 횟수가 적은 lane을 잘한다.
어떤 포지션이 잘 맞는지 여러가지 기준에 의해서 정할 수 있겠지만
이번 분석에서는 초반 라인전의 죽음 횟수를 기준으로 판단하겠습니다.
riot api를 사용해서 미리 저장해 놓은 데이터를 불러오겠습니다.
# /lol/match/v5/matches/{matchId} 데이터
match_api_list = sorted(glob('match_api/*'),key=os.path.getctime)
매치 정보를 json으로 저장한 데이터 목록을 불러오고
해당 목록에서 데이터 하나하나에 접근해 데이터프레임(표)를 만들겠습니다.
먼저 비어 있는 데이터 프레임을 만들어줍시다.
# 빈 데이터프레임 만들기
match_api_df = pd.DataFrame(
columns=[
'match_id','match_type','individual_position','lane','team_position','role'
])
'match_id' : 매치 아이디
'match_type' : 매치 유형 (총력전, 일반)
'individual_position' : 포지션
'lane' : 주 lane
'team_position' : 팀 포지션 (TOP, BOTTOM...)
'role' : 역할 (SOLO,DUO,CARRY.....)
여기서 총력전, 사용자 설정 게임을 제외한
일반, 랭크 게임만 따로 추출해서 표를 하나 더 만듭니다.
# 일반, 랭크 게임만 추출
classic_game_df = match_api_df.query('match_type=="CLASSIC"')
이번에도 같은 순서로 진행됩니다.
# /lol/match/v5/matches/{matchId}/timeline 데이터 목록
match_timeline_api_list = sorted(glob('match_timeline_api/*'),key=os.path.getctime)
'match_id' : 매치 아이디
'match_type' : 매치 유형 (총력전, 일반...)
'role' : 위 데이터 프레임의 individual_position 값
'timestamp' : 죽은 시간
'position_x' : 죽었을 때의 x 좌표
'position_y' : 죽었을 때의 y 좌표
저는 라인전 종료 기준은 15분으로 잡겠습니다.
timestamp는 ms(millisecond) 단위입니다.
before_15_df = match_timeline_api_df.query('timestamp <= 900000')
15분 이전에 죽은 장소를 미니맵 위에 찍어보겠습니다.
색으로 구분된 role은 라이엇이 제공한 individual_position값입니다.
얼핏 봤을 때 어디에서 죽었는지 잘 모르겠네요.
히트맵으로 나타내 보겠습니다.
죽은 위치가 미드에 많으니 저는 미드를 포기해야하는 것일까요..?
That's no no
미드 포지션 재밌습니다
미드를 많이 했다면 미드에서 죽은 횟수가 많을 것입니다.
그래서 어떤 역할을 많이 했고, 얼마나 죽었는지
역할별 죽은 횟수 / 역할별 게임 횟수로 비율을 알아보겠습니다.
죽은 비율을 기준으로 봤을 때 주 포지션과 부포지션
1. 탑
2. 미드
만족합니다
자세한 코드는 여기에서 볼 수 있습니다.
동주님 안녕하세요!
저는 아래의 서비스를 운영 중인 조양원이라고 합니다!
https://disquiet.io/@yangwon9616/makerlog/329
동주님의 Riot API 관련 글들을 봤는데요
데이터를 분석해서 까만 화면, 미니맵 위치 찍기 등을 하신 게 재미있더라고요
글을 읽으며 동주님과 관심사도 비슷한 것 같아 대화해보고 싶어졌습니다
그래서 동주님과 간단하게 커피챗이라도 해보고 싶어서 이렇게 메시지를 남깁니다!
관심이 있으시다면 아래 연락처 중 하나로 연락주시길 부탁드립니다 :)
인스타: @joyangwon9616
카카오톡: yoyangwon