Mapa de kills no League of Legends com Datashader

Raphael Fontes
Data Hackers
Published in
4 min readJun 26, 2020
Fonte: Techtudo

League of Legends

League of Legends é um jogo de estratégia em que duas equipes de cinco poderosos Campeões se enfrentam para destruir a base uma da outra. Escolha entre mais de 140 Campeões para realizar jogadas épicas, assegurar abates e destruir torres conforme você luta até a vitória.

Passar do tempo no jogo

Os jogos do gênero MOBA, do inglês Multiplayer Online Battle Arena, onde os jogadores dividem-se em dois times e disputam partidas que podem durar, média, entre 30 minutos à 1 hora. A maioria dos jogos deste gênero possuem mecânicas semelhantes, mas o mesmo objetivo: destruir a base inimiga.

O tempo do jogo é dividido em três estações: early game, middle game e late game. Cada estação dessa possuí características que as definem bem. Em resumo:

Early Game: É momento inicial do jogo, onde os jogadores possuem itens básicos (os que podem comprar quando a partida inicia), além de poucas habilidades disponíveis do personagem. Quanto mais rápido os jogadores conseguem passar de nível e itens para seus personagens, mais rápido a estação muda do early para o middle game.

Mid Game: Neste momento do jogos, os jogadores já possuem itens para fazer uma diferença e mostrar presença de seus personagens nas mecânicas disponíveis no mapa do jogo. Os personagens já tem habilidades e itens necessários para matar o personagem e monstros inimigos.

Late Game: O momento final do jogo ocorre quando os personagens já possuem nível e itens suficientes para matar os personagens inimigos sem muito esforço. O late game também está próximo ao objetivo final da partida: destruir a base inimiga.

Não há uma definição cronológica onde começa e termina as estações, os horários das estações são estimadas. Cada partida pode ter estações com mais ou menos duração, além de acontecer em momentos diferentes.

Datashader

Datashader is a graphics pipeline system for creating meaningful representations of large datasets quickly and flexibly. Datashader breaks the creation of images into a series of explicit steps that allow computations to be done on intermediate representations. This approach allows accurate and effective visualizations to be produced automatically without trial-and-error parameter tuning, and also makes it simple for data scientists to focus on particular data and relationships of interest in a principled way.

Dataset

Os dados estão disponíveis neste dataset publicado no Kaggle, onde os registros das partidas estão entre 2015 e 2017 e contemplam apenas as partidas competitivas deste período. Caso não queria trabalhar em um kernel no Kaggle, basta efetuar o download do dataset e utilizar em outra plataforma.

O dataset que contém os registros que trabalharemos é o kills.csv.

Let's code!

Inicialmente, é necessário importar os pacotes necessários para que seja plotado o mapa com os abates dos jogadores. Neste momento devem ter instalados os pacotes pandas, datashader e numpy.

No código a cima, além de importar os pacotes necessários, criaremos um DataFrame com os registros de abates do arquivo csv e a função .head(), a qual apresentará o cabeçalho e os 5 primeiros registros.

Trabalharemos com as colunas de tempo (time) e os eixos x (x_pos) e y (y_pos). O tempo será utilizado para definir qual a estação de tempo ocorreu o abate ao personagem. Os eixos serão utilizados para definir a posição que ocorreu o abate no plano. As demais colunas serão removidas do nosso DataFrame.

Vimos que não há um tempo definido onde acontece a transição entre as estações do jogo mas, utilizando a função .describe(), é possível entender onde os abates estão distribuídos na coluna time.

Os abates estão sendo concentrados em 3 momentos, até os 16 minutos onde podemos estimar que seja o early game, até os 24 minutos onde podem estar os abates que ocorreram em middle game e a cima dos 32 minutos os abates que ocorreram no late game.

Criaremos uma função que define a estação que aconteceu o abate, onde utilizando os minutos definidos anteriormente.

A função create_phase_category retornará o DataFrame atualizado com uma nova coluna: phase. Essa coluna é do tipo category e possuí três tipos diferentes: early, mid e late.

Com o DataFrame pronto, criaremos a função visualize_with_datashader. Nessa função teremos um dicionário que define as cores dos pontos para cada estação de tempo do jogo, onde: early é lightyellow, mid é tomato e late é firebrick.

Com isso temos o resultado:

Alguns insights

  1. Na proximidade das torres das linhas de cima e baixo concentram a maior quantidade de abates;
  2. A linha do meio mostra a transição entre o early e o middle game. Já nas demais linhas, a transição ocorre no caminho para a segunda torre;
  3. O barão é uma região onde ocorre a maior quantidade de abates do middle game;
  4. Na região do dragão acontece os abates apenas das estações early e middle game.
  5. O late game concentra os abates na região da base.

O conjunto de dados utilizado está disponível no Kaggle e pode ser acesso em:

--

--

Raphael Fontes
Data Hackers

I also have over 9 years of experience in software engineering and data mining. Lead data team to support strategies and goals.