Tableau è un potente strumento per la realizzazione di visualizzazioni basate sulle mappe. A volte può essere utile poter passare da un elenco di indirizzi o posti a un elenco di coordinate geografiche per poi poterli visualizzare sulla mappa. In termini più tecnici parliamo di “geocoding”. Tableau non permette di farlo autonomamente, ma è possibile farlo passando attraverso R.
R è un popolare linguaggio di programmazione open source per l’analisi statistica ed è implementabile in Tableau. In questo articolo vedremo come implementarlo, come fare geocoding su Tableau e su Tableau Prep.
R su Tableau
Per connettere R e Tableau bisogna ricorrere al pacchetto Rserve, che permette ai programmi esterni di usare R. Avere qualche base di programmazione è necessario per poter fare il geocoding.
Da RStudio installiamo e abilitiamo Rserve con i seguenti comandi:
install.packages(“Rserve”)
library(Rserve)
Rserve()
Fatto questo si va su Tableau > Help > Setting and performance > Manage Analytics Extension Connection e si sceglie RServe, la terza opzione. In hostname si scrive localhost e in Port 6311. Si fa Test connection e, se tutto ha funzionato, Tableau ci dirà che la connessione ha avuto successo. Salviamo e chiudiamo questa finestra.
Per una trattazione più dettagliata vi rimandiamo a un articolo pubblicato in passato.
Geocoding su Tableau
Per fare il geocoding è necessario affidarsi a servizi esterni. Ne esistono molti, ma per questo articolo abbiamo deciso di utilizzare Google e Open Street Map. Il primo è a pagamento ma con una prova gratuita, mentre il secondo è completamente gratuito. OSM può fare una richiesta di indirizzo al secondo, mentre Google in media a noi ne ha fatte 2 con picchi di 4-5.
Per il geocoding è necessario avere una serie di indirizzi. Noi abbiamo scelto di affidarci a 250 indirizzi di Torino, scelti in modo completamente casuale. Più è preciso l’indirizzo e maggiore sarà la precisione delle coordinate.
Il nostro dataset mostra l’indirizzo della città nel seguente modo:
A questo punto creeremo il campo “Location”, dove inseriamo anche la città e lo Stato: Torino e Italia. Se nel dataset avessimo ad esempio anche il CAP, potremmo inserirlo nel nostro campo calcolato.
Portiamo Location in vista al posto di indirizzo.
A questo punto abbiamo la Location da utilizzare per il geocoding, ma servono ancora un po’ di passaggi.
Nella prima versione utilizziamo i servizi Google, per cui è necessario avere un API. Si può fare da qui, registrandosi e inserendo i dati di una carta di credito valida. A quel punto Google fornisce un credito mensile ricorrente da $200 dollari che permette di scaricare i dati di migliaia di indirizzi. Bisogna quindi abilitare la Geocoding API e copiare la API Key (una sequenza di numeri e lettere).
Adesso torniamo su RStudio e installiamo le librerie necessarie. Il codice per farlo è
install.packages(“ggplot2”)
install.packages(“ggmap”)
Possiamo quindi tornare su Tableau. Portiamo Location sulle righe e calcoliamo il nostro primo campo nel seguente modo:
SCRIPT_REAL(
‘library(ggplot2); library(ggmap);
register_google(key = “##################”);
loc <- geocode(.arg1, output=”latlon”, source=”google”);
loc$lat’,
attr([Location]))
In key= “ “ bisogna inserire la chiave API che abbiamo salvato prima da Google.
SCRIPT_REAL indica che il dato che andiamo ad estrarre è un numero reale. library() carica i pacchetti di R che ci servono per la funzione. register_google() serve per dire a ggmap quale chiave API deve usare. La funzione geocode partendo da .arg1 estrae latitudine e longitudine usando i servizi Google. loc$lat estrae poi la latitudine. Tableau ad arg.1 sostituirà il campo che mettiamo dopo la virgola, in questo caso Location che abbiamo messo come attributo perché deve essere aggregato.
A questo punto replichiamo il tutto creando un altro campo calcolato che chiameremo Lon_Google identico in tutto tranne che nella penultima riga dove andremo a mettere loc$lon per avere la longitudine.
Se tutto ha funzionato dovremmo avere il seguente risultato in vista:
Ora vediamo come usare Open Street Map (OSM) per fare la stessa cosa. Come abbiamo detto prima ha il vantaggio di essere gratuito.
Lo script per calcolare la latitudine è il seguente:
SCRIPT_REAL(
‘library(rvest);
library(stringi);
library(jsonlite);
library(tidyverse);
address <- as.data.frame(.arg1);
query <- str_replace_all(string = address,pattern = “\\s|,”,replacement = “+”);
src_url <- “https://nominatim.openstreetmap.org/search?q=”;
addr <- paste(address, “Torino”, “Italia”, sep = “%2C”);
requests <- paste0(src_url, query, “&format=geojson”);
response <- read_html(requests) %>% html_node(“p”) %>%html_text() %>%fromJSON();
lon <- as.numeric(response$features$geometry$coordinates[[1]][1]);
lat <- as.numeric(response$features$geometry$coordinates[[1]][2]);
lat’,
attr([Location]))
Come si vede in questo caso lo script è leggermente più complesso. Molto brevemente, prende l’indirizzo, sostituisce agli spazi il + in modo da essere compatibile con il servizio che usiamo per estrarre le coordinate, compone la query, interroga il sito ed ottiene un json. Dal json poi estrae longitudine e latitudine e ci restituisce la longitudine.
Portiamo in vista, ma il calcolo non funzionerà. Bisogna spostare il computing using su cell e a quel punto farà il calcolo della latitudine.
Duplichiamo il campo e creiamo Lon_OSM andando poi a sostituire nella penultima riga lon a lat in modo da avere la longitudine. Portiamo in vista, modifichiamo il computing using ed eseguirà il calcolo.
A questo punto ci troviamo con i nostri indirizzi geolocalizzati. Adesso bisogna specificare a Tableau che si tratta di dati geografici e spostare Location in dettaglio, latitudine in riga e longitudine in colonna. Tableau genererà la mappa con i nostri pallini.
Quali limiti ha il geocoding su Tableau?
Il principale è che si lavora solo con table calculation. Ogni cosa che facciamo sul worksheet e che comprende i due campi calcolati (o Location) porterà a ricalcolare tutte le latitudini e longitudini, in quanto quei calcoli esistono solo in vista e non nella base dati. Per impedire questo, dopo che sono state calcolate, bisogna andare su Worksheet, poi su Auto update e poi su Auto update worksheet.
Quando le si metterà in mappa bisogna comunque riabilitare gli aggiornamenti automatici del foglio in modo che le ricalcoli e le faccia apparire.
In generale, quindi, per dataset non particolarmente grandi (qualche decina o poche centinaia) si può utilizzare questa soluzione, ma in un caso con migliaia di variabili potrebbe non essere la soluzione ottimale.
L’alternativa è quindi fare il Geocoding in Tableau Prep in modo che, quando arriviamo a Tableau Desktop, i dati siano già nella source. Per questo vi rimandiamo a un prossimo articolo; nel frattempo, potete continuare a seguirci sui nostri social!