Tableau es una potente herramienta para crear visualizaciones basadas en mapas. A veces puede ser útil poder pasar de una lista de direcciones o lugares a una lista de coordenadas geográficas y luego mostrarlas en un mapa. En términos más técnicos, esto se llama geocoding. Tableau no permite hacer esto por sí mismo, pero es posible hacerlo pasando por R.
R es un lenguaje de programación muy popular para el análisis estadístico y puede ser implementado en Tableau. En este artículo veremos cómo implementarlo, cómo hacer geocoding en Tableau y Tableau Prep.
R en Tableau
Para conectar R y Tableau necesitamos utilizar el paquete Rserve, que permite que programas externos utilicen R.
Desde RStudio instalamos y habilitamos Rserve con los siguientes comandos:
install.packages(“Rserve”)
library(Rserve)
Rserve()
A continuación, vamos a Tableau > Ayuda > Configuración y rendimiento > Gestionar la conexión de la extensión de análisis; y elegimos RServe, la tercera opción. En hostname escribimos localhost y en Port 6311. Hacemos una prueba de conexión y, si todo ha funcionado, Tableau nos dirá que la conexión ha sido exitosa. Guardamos y cerramos esta ventana.
Para un análisis más detallado, te remitimos a un artículo publicado en el pasado.
Geocoding en Tableau
Para hacer la geocodificación hay que recurrir a servicios externos. Hay muchos, pero para este artículo hemos decidido utilizar Google y Open Street Map. El primero es de pago pero tiene una prueba gratuita, mientras que el segundo es totalmente gratuito. OSM puede hacer una petición de dirección por segundo, mientras que Google nos ha hecho una media de 2 con picos de 4-5.
Para la geocodificación, se necesita un rango de direcciones. Hemos optado por basarnos en 250 direcciones de Turín, elegidas completamente al azar. Cuanto más precisa sea la dirección, más precisas serán las coordenadas.
Nuestro conjunto de datos muestra la dirección de la ciudad de la siguiente manera:
Ahora crearemos el campo «Ubicación», donde también introducimos la ciudad y el estado: Turín e Italia. Si el conjunto de datos también contiene un código postal, podemos introducirlo en nuestro campo calculado.
Traemos a la vista la ubicación en lugar de la dirección.
En este punto tenemos la ubicación para usarla en la geocodificación, pero se necesitan algunos pasos más.
En la primera versión utilizamos los servicios de Google, por lo que se necesita una API. Puedes hacerlo desde aquí, registrándote e introduciendo los datos de una tarjeta de crédito. A continuación, Google ofrece un crédito mensual recurrente de 200 dólares que permite descargar los datos de miles de direcciones. A continuación, debemos activar la API de geocodificación y copiar la clave de la API (una secuencia de números y letras).
Ahora vuelve a RStudio e instala las bibliotecas necesarias. El código para hacerlo es
install.packages(“ggplot2”)
install.packages(“ggmap”)
A continuación, podemos volver a Tableau. Llevamos la ubicación a las filas y calculamos nuestro primer campo de la siguiente manera:
SCRIPT_REAL(
‘library(ggplot2); library(ggmap);
register_google(key = “##################”);
loc <- geocode(.arg1, output=”latlon”, source=”google”);
loc$lat’,
attr([Location]))
In key= “ “ tenemos que introducir la clave de la API que hemos guardado antes en Google.
SCRIPT_REAL indica que el dato que vamos a extraer es un número real; library() carga los paquetes de R que necesitamos para la función. register_google() se utiliza para decirle a ggmap qué clave de API debe utilizar. La función de geocodificación que comienza con .arg1 extrae la latitud y la longitud utilizando los servicios de Google; loc$lat extrae entonces la latitud; Tableau en arg.1 sustituirá el campo que pongamos después de la coma, en este caso Location, que ponemos como atributo porque hay que agregarlo.
En este punto replicamos todo creando otro campo calculado que llamaremos Lon_Google idéntico en todo menos en la penúltima línea donde pondremos loc$lon para obtener la longitud.
Si todo ha funcionado, deberíamos tener a la vista el siguiente resultado:
Ahora vamos a ver cómo utilizar Open Street Map (OSM) para hacer lo mismo. Como hemos dicho antes, tiene la ventaja de ser gratuito.
El script para calcular la latitud es el siguiente:
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]))
Como podemos ver, en este caso el guión es ligeramente más complejo. Muy brevemente, toma la dirección, sustituye los espacios por + para que sea compatible con el servicio que utilizamos para extraer las coordenadas, compone la consulta, consulta el sitio y obtiene un json. A partir del json se extrae la longitud y latitud y devuelve la longitud.
Lo traemos a la vista, pero el cálculo no funcionará. Tenemos que mover la computación “a la celda” y entonces hará el cálculo de la latitud.
Duplicamos el campo y creamos Lon_OSM; luego sustituimos lon por lat en la penúltima línea para obtener la longitud. Lo traemos a la vista, modificamos la computación de uso y realizará el cálculo.
Ya tenemos nuestras direcciones geolocalizadas. Ahora tenemos que especificar a Tableau que se trata de datos geográficos y mover Ubicación al detalle, latitud a la fila y longitud a la columna. Tableau generará el mapa con nuestros puntos.
¿Cuáles son las limitaciones de la geocodificación en Tableau?
La principal limitación es que sólo trabajamos con el cálculo de tablas. Cualquier cosa que hagamos en la hoja de trabajo que incluya los dos campos calculados (o Ubicación) hará que se recalculen todas las latitudes y longitudes, ya que esos cálculos sólo existen en la vista y no en la base de datos. Para evitarlo, después de que se hayan calculado, te aconsejamos que vayas a la Hoja de cálculo, luego a Actualización automática y después a Actualización automática de la hoja de cálculo.
Cuando las pongas en el mapa, tienes que activar las actualizaciones automáticas de la hoja para que las recalcule y las haga aparecer.
Por lo tanto, en general, para conjuntos de datos que no son especialmente grandes se puede utilizar esta solución, pero en un caso con miles de variables puede no ser una solución óptima.
La alternativa es, por tanto, hacer la geocodificación en Tableau Prep para que, cuando lleguemos a Tableau Desktop, los datos ya estén en la fuente. En un próximo artículo hablaremos de esto; mientras tanto, ¡recuerda seguirnos en Linkedin!