Advertisement

[Exemplo] Como criar um mapa de calor usando o Python

Nesse post, vamos criar uma representação visual para a frequência de acontecimentos em determinado lugar. Essa representação é chamada de mapa de calor e pode ser construído baseando-se apenas em uma lista de coordenadas geográficas. 




O que é um mapa de calor?

O heatmap, ou mapa de calor (tradução livre), é uma representação gráfica que mostra em quais pontos possuem maior atividade. Isso pode auxiliar pessoas que querem saber em um site, ou blog, houve maior atividade por parte do usuário. Essa presença é resultado de maiores interações com o mouse, considerando também cliques e rolagem da página.

A tecnologia de calor pode ser vista em diversas ocasiões, até mesmo no esporte, mostrando como um atleta se desloca em um campo de futebol, por exemplo. Na prática, considerando um site, o conceito é basicamente o mesmo: o heatmap mostra por quais partes das páginas o visitante costuma dedicar mais atenção e tempo.

Nesse caso, o mapa de calor relacionado aos sites vai mostrar que usuários, por exemplo, clicaram em determinadas seções, links e banners. Essa tecnologia também mostrará, em um texto, em quais partes dele o visitante passou mais tempo, o que é interessante avaliar, por exemplo, se há algum vídeo no conteúdo.


Como construir um heatmap usando o python?


A construção do mapa de calor considerando coordenadas geográficas é bastante simples. O primeiro passo é definir um arquivo contendo coordenadas geograficas (CSV, XLSX). Em seguida vamos usar a biblioteca folium para gerar esses mapas. 

Antes de qualquer coisa, certifique-se que a ferramenta está instalada:

$ pip install folium

or

$ conda install -c conda-forge folium


A seguir, vamos importar o folium para um script no python:


import os
import folium

print(folium.__version__)


Logo após importamos o dataset usando o Pandas.



import pandas as pd

df = pd.read_csv("sul.csv", delimiter=";")


Por fim, geramos o mapa de calor:

from folium.plugins import HeatMap

m = folium.Map([48., 5.], tiles='stamentoner', zoom_start=6)

HeatMap(df).add_to(m)

m.save(os.path.join('results', 'Heatmap.html')) ## "results" é uma pasta e 
                                                ## "heatmap.html" é o arquivo que será gerado


Isso gerará um mapa de calor semelhante ao mostrado na imagem:




O projeto contendo o código completo e também alguns datasets de coordenadas estão disponíveis no nosso github.


UPDATE

Observando o projeto, percebi que seria bastante útil que o usuário pudesse definir apenas uma lista de endereços e o python fizesse as conversões para coordenadas automaticamente. Sendo assim, criei um vídeo no YouTube mostrando passo a passo como desenvolvi essa solução.


                       




## faz a leitura do CSV contendo os endereços
import pandas as pd
df = pd.read_csv("enderecos.csv", delimiter=",")

## chama a API GeoPy
from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent="HeatMapAuto")

## consulta cada endereço e converte em uma lista de coordenadas
geocodes = []
for i in range (0,len(df.index)):    
    #texto = df['rua'][i] + "," + df['cidade'][i] + "," + df['estado'][i] + "," + df['pais'][i]
    
    location = geolocator.geocode(df['ceps'])
    geocodes.append([location.latitude,location.longitude])

## transforma a lista em um dataframe
import numpy as np

a = np.matrix(geocodes)
dfa = pd.DataFrame(a)

### Cria o mapa de calor 

import os
import folium

print(folium.__version__)

from folium.plugins import HeatMap

m = folium.Map([48., 5.], tiles='stamentoner', zoom_start=6)

HeatMap(dfa).add_to(m)

m.save(os.path.join('results', 'Heatmap.html'))

Um comentário

  1. Bom.
    Queria saber como coloco um título para o mapa, bem como autoria e similares (ou seja, como escrevo algo).
    Obrigado.

    ResponderExcluir

Conta pra mim sua opinião!

Fale comigo