롤 데이터 분석 - 포지션 찾아보기
riot 에서 제공하는 매치 데이터로 어떤 포지션이 안성맞춤인지 알아보겠습니다.
나에게 맞는 포지션 찾아보기
저는 리그오브레전드를 플레이 할 때 어떤 포지션이든 마다 하지 않는 올라운더입니다.
하지만 이제는 주 포지션을 정해서 T자형 인재가 되고싶네요.
그런 의미에서 riot 에서 제공하는 저의 매치 데이터로 어떤 포지션이 안성맞춤인지 알아보겠습니다.
가설
라인전 0~15분 동안 death 횟수가 적은 lane을 잘한다.
어떤 포지션이 잘 맞는지 여러가지 기준에 의해서 정할 수 있겠지만
이번 분석에서는 초반 라인전의 죽음 횟수를 기준으로 판단하겠습니다.
📁 데이터 불러오기
riot api를 사용해서 미리 저장해 놓은 데이터를 불러오겠습니다.
1
2
# /lol/match/v5/matches/{matchId} 데이터
match_api_list = sorted(glob('match_api/*'),key=os.path.getctime)
매치 정보를 json으로 저장한 데이터 목록을 불러오고
해당 목록에서 데이터 하나하나에 접근해 데이터프레임(표)를 만들겠습니다.
✂ 데이터 전처리
매치 정보 뽑기
먼저 비어 있는 데이터 프레임을 만들어줍시다.
1
2
3
4
5
# 빈 데이터프레임 만들기
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…..)
여기서 총력전, 사용자 설정 게임을 제외한 일반, 랭크 게임만 따로 추출해서 표를 하나 더 만듭니다.
1
2
# 일반, 랭크 게임만 추출
classic_game_df = match_api_df.query('match_type=="CLASSIC"')
timeline 데이터로 죽은 시간, 좌표 뽑기
이번에도 같은 순서로 진행됩니다.
1
2
# /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) 단위입니다.
1
before_15_df = match_timeline_api_df.query('timestamp <= 900000')
🗺 미니맵에 나타내기
15분 이전에 죽은 장소를 미니맵 위에 찍어보겠습니다.
색으로 구분된 role은 라이엇이 제공한 individual_position값입니다.
얼핏 봤을 때 어디에서 죽었는지 잘 모르겠네요.
히트맵으로 나타내 보겠습니다.
죽은 위치가 미드에 많으니 저는 미드를 포기해야하는 것일까요..?
🔎 역할별 판수와 죽은 횟수 비교하기
미드를 많이 했다면 미드에서 죽은 횟수가 많을 것입니다.
그래서 어떤 역할을 많이 했고, 얼마나 죽었는지
역할별 죽은 횟수 / 역할별 게임 횟수로 비율을 알아보겠습니다.
🧑⚖️ 결론
죽은 비율을 기준으로 봤을 때 주 포지션과 부포지션
- 탑
- 미드
자세한 코드는 여기에서 볼 수 있습니다.







