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