Em posts anteriores, demonstrei como se pode geocodificar dados e marcadores de plotagem usando Geopy e Folium em Python. Também demonstrei fluxos de trabalho de mapeamento de calor em R, usando pacotes como Leaflet.
Neste post eu quero usar a biblioteca Leaflet.js para criar um mapa de calor através do módulo Folium em Python.
Eu forneço um script para fazer isso abaixo. O script lê em um arquivo csv com nomes e endereços de local. Usando o Geopy e o serviço de geocodificação Nominatim, essa lista de locais é geocodificada, retornando coordenadas por latitude e longitude. O arquivo csv contém um valor de métrica para cada local. Essa métrica define a intensidade da cor do mapa de calor.
As linhas de código abaixo são usadas para ler o arquivo csv e geocodificar suas entradas de localização em latitudes e longitudes. Um vislumbre do DataFrame final do pandas é fornecido:
import pandas
import folium
from folium.plugins import HeatMap
data = pandas.read_csv("heatmap.csv")
data["addresses"] = data["country"] + ", " + data["city"] + ", " + data["street "]
import geopy
service = geopy.Nominatim(user_agent = "myGeocoder")
from geopy.extra.rate_limiter import RateLimiter
data["coordinates"] = data["addresses"].apply(RateLimiter(service.geocode,min_delay_seconds=1))
data.head()
| país | cidade | rua | métrica | endereços | coordenadas | |
|---|---|---|---|---|---|---|
| 0 | Alemanha | Berlim | Alexanderplatz 1 | 10 | Alemanha, Berlim, Alexanderplatz 1 | (Alexanderstraße, Spandauer Vorstadt, Mitte, B… |
| 1 | Alemanha | Berlim | Dircksenstrasse 2 | 5 | Alemanha, Berlim, Dircksenstrasse 2 | (2, Dircksenstraße, Luisenstadt, Mitte, Berlim… |
| 2 | Alemanha | Berlim | Rathausstrasse 1 | 16 | Alemanha, Berlim, Rathausstrasse 1 | (1-14, Rathausstraße, Spandauer Vorstadt, Mitt… |
| 3 | Alemanha | Berlim | Rosa-Luxemburg-Strasse 2 | 11 | Alemanha, Berlim, Rosa-Luxemburg-Strasse 2 | (2, Rosa-Luxemburg-Straße, Scheunenviertel, Mi… |
| 4 | Alemanha | Berlim | Memhardstrasse 8 | 8 | Alemanha, Berlim, Memhardstrasse 8 | (8, Memhardstraße, Scheunenviertel, Mitte, Ber… |
Usando o DataFrame geocida, crio um mapa de calor de fólio:
longs = [coord.longitude for coord in data["coordinates"]]
lats = [coord.latitude for coord in data["coordinates"]]
import statistics
meanLong = statistics.mean(longs)
meanLat = statistics.mean(lats)
mapObj = folium.Map(location=[meanLat, meanLong], zoom_start = 14.5)
heatmap = HeatMap( list(zip(lats, longs, data["metric "])),
min_opacity=0.2,
max_val=data["metric "].max(),
radius=50, blur=50,
max_zoom=1)
heatmap.add_to(mapObj)
mapObj


Cientista de dados com foco em simulação, otimização e modelagem em R, SQL, VBA e Python

Leave a Reply