Como criar um mapa de calor usando o Python

Como criar um mapa de calor usando o Python

Você sabe como criar um mapa de calor usando Python? Nesse artigo vou te mostrar como fazer uma representação visual para a frequência de acontecimentos em determinado lugar. Esse mapa de calor é bastante utilizado quando precisamos nos basear apenas em uma lista de coordenadas geográficas demarcando a ocorrência de um evento.

Vale lembrar que existem mapas de calor aplicados à outras finalidades, por exemplo, em websites ou até mesmo tabelas. No nosso caso vamos nos focar em criar um mapa de calor geográfico.

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 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 criar um mapa de calor usando python

A construção desse tipo de mapa usa coordenadas geográficas e é 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:

Mapa de calor usando python e a biblioteca folium

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

Podemos coletar coordenadas automaticamente usando Python?

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'))

Vinicius dos Santos

Apenas um apaixonado por Ciência da Computação e forma com que ela pode transformar vidas!

Este post tem um comentário

  1. Unknown

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

Deixe uma resposta