Tutorial Tableau 03. Análisis espacial con Tableau

Herramientas: Tableau

Última actualización: octubre de 2019.

Aviso: Este documento es un complemento a las sesiones que imparto sobre visualización de datos y analítica visual, y en ningún caso pretende ser un manual comprehensivo sobre Tableau.

Por otra parte, cada nueva iteración de los cursos suelo aprovechar para actualizar los datos, documentar nuevas funcioanlidades, introducir nuevos ejemplos, etc, por lo que puede haber discrepancias entre distintas secciones del tutorial.

Introducción

Este ejercicio es una continuación del ejercicio de introducción a Tableau. Para profundizar en las tripas y funcionalidades de Tableau, partiremos de los conceptos analizados en las sesiones teóricas:

  • Operacionalización de preguntas en tareas
  • Técnicas para facilitar el análisis
  • Variables temporales
  • Distintos tipos de gráficas

Antes de ponernos a trabajar directamente con Tableau, hemos de tener en cuenta dos aspectos principales a la hora de trabajar con mapas:

¿Qué marcas queremos dibujar?

Tenemos tres opciones:

  • Puntos: necesitaremos una latitud y una longitud para cada punto. Podemos usar los tipos de marca Cuadrado, Círculo o Forma, dependiendo de nuestras necesidades.
  • Líneas: necesitaremos latitud/longitud para cada punto de la línea. Además, si vamos a trabajar con más de una línea, necesitaremos un campo que sirva para identificar cada una de las líneas. Y en cualquier caso, necesitaremos otro campo que indique el orden en el que se tienen que unir los puntos. Habitualmente suele ser un campo de tipo fecha/hora, pero no es necesario que sea así. Usaremos el tipo de marca Línea para crear las líneas y el canal Ruta para indicar el orden.
  • Áreas (polígonos): los datos que necesitamos son los mismos que para crear líneas, simplemente usaremos el tipo de marca Polígono para que Tableau cierre las formas.

¿Cómo están organizados nuestros datos?

  • Datasets sin datos grográficos propiamente dichos (coordenadas), pero con campos con algún tipo de segnificado geográfico: países, municipios… Tableau intentará encontrar la información geográfica necesaria para poder dibujarlas en el mapa.
  • Datasets con coordenadas incluidas. En este caso, podemos encontrarnos con dos casos generales:
    • Recorridos de A a B, con las coordenadas de cada uno de los dos puntos. Desde la versión 2019.2, esos datos pueden estar en una misma fila de la fuente de datos.
    • Recorridos con más de dos puntos. En este caso, vamos a necesitar que cada punto de coordenadas esté en una fila distinta del dataset. Además, necesitaremos un campo que permita identificar los puntos de un elemento concreto, así como otro campo para indicar el orden en el que han de unirse los puntos (habitualmente un campo de tipo fecha/hora, aunque no es necesario que sea así).
  • Datasets codificados como archivos espaciales: .shp, .kml, geojson… (lista de formatos grográficos soportados por Tableau)

Lo que vamos a aprender

  • Puntos y/o áreas sin coordenadas
  • Puntos con coordenadas
    • Directamente
    • Función MAKEPOINT()
  • Líneas A-B
    • En la misma fila: función MAKELINE()
  • Polilíneas
  • Áreas (polígonos)
  • Combinar distintos tipos de marcas (puntos y áreas, puntos y líneas)

Una vez que conozcamos los rudimentos para poder trabajar con información espacial, podremos pasar a unir dos archivos espaciales, en concreto archivos de puntos y uno de áreas. En estos casos, podremos además crear nuevos indicadores a partir de la información espacial, como por ejemplo la densidad de algo en una zona determinada.

Finalmente, veremos otras posibilidades que usan la misma lógica espacial, pero sin necesidad de tener los datos georreferenciados: podremos dibujar sobre planos, o directamente crear dibujos a partir de X e Y.

Fuente de datos

Para este ejercicio vamos a utilizar un conjunto de datos sobre el uso de Bicicletas en Los Ángeles, disponible en Kaggle.com.

La versión del archivo utilizada en este ejercicio fue descargada el 06/09/2018, y contiene los Trip IDs de 1912818 (07/07/2016) a 2379418 (31/03/2017). Si a la hora de seguir los pasos indicados en tu ordenador obtienes resultados distintos, puede deberse a que estés usando una versión distinta del dataset.

NOTA: este ejercicio parte de las acciones de ETL ya explicadas y aplicadas en el ejercicio 1. Además, y para ampliar los datos ya disponibles, usaremos estas otras fuentes de datos:

  • Lista de paises: lista_paises.csv
  • Lista de barrios de LA: LA_nehighborhoods.csv
  • Áreas de los barrios de LA: l.a. county neighborhoods (v5).shp
  • El dataset original pivotado: puntos.csv

Puntos y/o áreas sin coordenadas

Este sería el peor de los casos ante los que nos podemos encontrar, desde el punto de vista de los datos geográficos, ¡ya que carecemos de ellos!

Sin embargo, Tableau intenta detectar posibles campos con un mínimo de vinculación a la geográfia; estos campos suelen ser algún tipo de orgranización administrativa, como países, provincias, municipios, unidades territoriales NUTS de Europa… Tableau intentará realizar estas conexiones a partir de los nombres de las variables, pero en caso de que no las detecte automáticamente, podemos indicarlas nosotros manualmente.

Al cargar el fichero 00_provincias_y_capitales.xls en Tableau observamos que la variable Provincia tiene el icono del globo terráqueo, mientras que el campo Capital aparece como un campo de tipo cadena.

La variable capital no ha sido detectada correctamente como un campo con información geográfica

Si hacemos click en el icono de tipo de dato, veremos que Tableau ha asignado la función geográfica Estado/Provincia al campo Provincia, mientras que el campo Capital no tiene ninguna función geográfica.

Tableau tiene dos funciones geográficas que podrían concordar con nuestro campo Capital, Provincias/Municipio y Ciudad. Como la segunda opción parece más concreta, vamos a asignarla al campo Capital (si más adelante observamos que Tableau no devuelve ningún dato geográfico a partir de esta función, podremos volver a cambiarla a Provincias/Municipios y comprobar si esa asignación ofrece mejores resultados).

Una vez que tenemos los dos campos georreferenciados, vamos a crear los mapas.

1 Creamos una nueva hoja de trabajo y la nombramos PuntosSinCoordenadas. 2 Dado que existe una jerarquía entre los dos campos, vamos a reflejarla en Tableau creando una jerarquía. Para ello, basta con arrastrar el campo Capital al campo Provincia.

3 Si seleccionamos cualquiera de los dos campos, la pestaña Muéstrame activará las opciones Mapa de símbolos y Mapa. Empezando por la opción de Mapa de símbolos, encontramos fallos para los dos campos:

  • Si usamos el campo Provincia, Tableau nos muestra un plano con todos los países del mundo, cuando solo tenemos información de las tres provincias de la CAPV.
  • Si usamos el campo Capital, solo aparecen dos de las tres ciudades que tenemos en el dataset.

En este caso nos encontramos ante dos problemas:

  • El campo Provincia no está mapeado a la función geográfica correcta. Si intentamos indicar los nombres a mano (porque tenemos la sospecha de que al estar los nombres en euskera no los encontrará en su base de datos), observamos que al empezar a escribir Vizcaya no nos aparece como opción, pero sí País Vasco. Esto nos lleva a pensar que efectivamente, la función geográfica que tenemos que asignar al campo es Provincias/Municipio. Al cambiar la función, Tableau muestra las tres provincias correctamente (sin necesidad de usar los nombres en castellano).
  • El campo Capital sólo muestra dos de las tres ciudades que tenemos en nuestro dataset. En este caso, las dos ciudades que sí aparecen están correctamente geolocalizadas, por lo que la función geográfica parece correcta. Si usamos la funcionalidad para corregir los datos desconocidos, en este caso sí que parece haber un problema con la cadena utilizada. Si la cambiamos por Vitoria/Gasteiz, aparecerá correctamente en el mapa.

¿Por qué no vemos las ciudades como áreas?

Recordemos que nosotros no hemos aportado ningún dato espacial, por lo que Tableau ha tenido que recurrir a sus propias bases de datos. Y esas bases de datos pueden no contener todos los datos que nosotros necesitamos, como es el caso.

Dependiendo del país y de la función geográfica, es posible que para algunos niveles tengamos áreas (provincia) y para otros no (municipios), pero sí al menos unas coordenadas. Si necesitamos el mapa de las ciudades, tendremos que buscar alguna fuente que nos los sirva como archivo espacial (ver punto bla).

Combinar mapas de puntos y de áreas

En nuestro ejemplo podemos crear mapas de área para las provincias, y de puntos para ambos campos. Lo que vamos a hacer a continuación es crear un mapa que muestra los dos niveles, las provincias como áreas, y las ciudades como puntos.

Sin embargo, para hacer este tipo de mapa no podemos desagregar la variable Provincia sin más.

  • Primero, tenemos que duplicar la latitud o longitud del mapa de origen.
  • Segundo, configuramos el nuevo mapa para mostrar los datos que nos interese. Eliminamos todos las variables mapeadas a canales y llevamos las que nos interesan; en este caso, llevamos Capital a Detalle o Color.
  • Finalmente, combinamos los dos mapas con la opcioón Eje doble.

NOTA: si seguimos los pasos mencionados arriba, no podremos crear círculos de tamaño distinto, ya que el tipo de marca automático se habrá puesto en Mapa. Para poder tener círculos de tamaños distintos, primero tenemos que cambiar el tipo de marca a Círculo, y luego mapear alguna variable numérica al canal tamaño (en el ejemplo, y a falta de una variable numérica, se mapea una categórica, cosa que aunque no tenga sentido sirve para mostrar la diferencia entre tener la marca Mapa o la marca Círculo).

Agrupaciones y jerarquías de dimensiones Lista de paises

Para este ejemplo vamos a trabajar otra vez con un dataset muy simple, que únicamente cuenta con un campo de texto con el nombre de cada país (Fuente), pero que cuenta con más registros.

Al cargar los datos, Tableau detecta automáticamente que el campo Countries puede tener una rol geográfico, y se lo asigna (si la asignación fuera incorrecta, o no se hiciera automáticamente, siempre podríamos indicarla manualmente).

En una nueva vista, creamos un mapa de coropleta usando la opción de la pestaña Show me.

Mapa de países creado automáticamente por Tableau

Como se puede observar, Tableau ha reconocido prácticamente todos los países, pero tiene problemas para identificar algunos de ellos en su base de datos. Estos problemas pueden deberse a varios motivos:

  • La cadena de texto en la que se basa el reconocimiento. En este caso, los nombres de los países están en inglés, que suele ser el idioma menos problemático a la hora de reconocer valores en la BD de Tableau.
  • Limitaciones en la base de datos de Tableau: Tableau no dispone del mismo nivel de detalle de información geográfica para las distintas administraciones del mundo. En el caso de España, por ejemplo, es capaz de dibujar puntos de latitud y longitud para provincias, pero no puede dibujar el área de esas mismas provincias (si queremos crear un mapa que dibuje el área de las provincias españolas, tendremos que obtener esos datos de otra fuente.) (Lo que Tableau reconoce automáticamente)

En cualquier caso, Tableau nos ofrece algunas herramientas para tratar de paliar el problema. Si hacemos click en el la nota que dice 14 desconocidos, accederemos a un cuadro de diálogo con estas tres opciones:

  • Editar ubicaciones
  • Filtrar resultados
  • Mostrar datos en posición predeterminada (lat:0;long:0)
Diálogo Valores especiales para

Al hacer click en Editar ubicaciones Tableau despliega una lista con todos los valores, tanto los que se han mapeado correctamente con su BD, como los que no. En el caso de estos últimos, podemos intentar mapearlos manualmente (aún y así puede que no siempre sea posible).

Editar valores desconocidos

Funcionalidad grupos de Tableau

En el ejemplo de los países tenemos una única variable country, que funciona como dimensión. Con la funcionalidad grupos podemos reducir la dimensionalidad de esta variable agrupando los paises en entidades supranacionales (continente, OTAN / Pacto de Varsovia…).

La forma más directa de crear un grupo consiste en seleccionar una o más marcas de la vista y hacer click en el icono de grupo de la ventana contextual (si dicha ventana nos desaparece de la vista, basta con dejar el ratón encima de la marca sin mover unos pocos segundos para que vuelva a aparecer).

Opción ‘Agrupar miembros’

En la pestaña datos nos aparecerá una nueva dimensión, que tiene el icono del clip asociado al icono de la dimensión original (en este ejemplo, el del globo terráqueo, al tratarse de una variable con rol geográfico.)

Icono de grupo

Si editamos el grupo, podemos cambiar los nombres de los grupos, reordenar los elementos de cada grupo, etc.

Dialogo para editar un grupo

Podemos utilizar los grupos como cualquier otra dimensión para crear nuevos cálculos a un nivel de agregación superior al que teníamos hasta el momento. Por ejemplo, una vez creado un grupo con los contienentes, podemos contar el número de paises de cada continente:

Usamos la función countd para contar el número de distintos paises por continente

Jerarquía de dimensiones

Tableau nos permite indicar si entre dos (o más) dimensiones existe algún tipo de jerarquía, como puede ser el caso de categoría / subcategoría, o el ejemplo que acabamos de crear de continente / país.

Para crear una jerarquía de dimensiones basta con arrastar una dimensión encima de la otra en el panel datos.

Las dimensiones jerarquizadas funcionan como las fechas; es decir, si usamos en la vista la dimensión superior, aparecerá un + a su izquierda, indicando que podemos desagregar ese nivel de detalle. Por ejemplo, en el caso del mapa, si la dimensión country (grupo) para colorear el mapa y hacemos click en el +, obtendremos además el perfil de cada pais.

El mapa pintado a nivel de continentes
El mapa pintado a nivel de continentes pero con country en nivel de detalle

Mapa de símbolos teniendo las coordenadas

Usando latitud y longitud

Para este ejemplo vamos a usar el dataset de L.A. Metro Bike Share, que tiene dos pares de coordenadas en cada registro, uno para la estación de salida y otro para la estación de llegada. En los ejemplos vamos a trabajar con las coordenadas de las estaciones de llegada.

Pero antes de nada, vamos a recapitular:

  • El dataset tiene miles de registros, cada uno con sus coordenadas

  • En total hay algo más de 200 estaciones distintas

  • Tableau agrega al mácimo cualquier medida que llevemos a la Vista

  • Llevamos End Lon a columnas. Vemos que la función de agregación no es SUM(), sino PROM(). Esto se debe a que el sistema de coordenadas es un sistema acotado. En el caso de la longitud, entre [-180,180].

  • Llevamos End Lata filas.

Como ya hemos dicho, Tableau agrega las medidas al máximo nivel. Como todavía no hemos añadido una dimensión a la vista, Tableau resume los casi 800.000 puntos a uno solo.

Lo lógico sería añadir la dimensión End Station a la vista, ya que las coordenadas corresponden a las distintas estaciones. De esta forma, obtendremos un punto para cada estación (podemos filtrar la estación con ID 4108, ya que se trata de una estación virtual).

Puntos

NOTA: realmente no es imprescindible llevar End Station a la vista; en principio podemos llevar cualquier combinación de dimensiones, tal y como veremos en el punto ### (siempre que nos ayude en las tareas analíticas).

Una vez que tenemos la base de nuestro mapa de símbolos, podemos añadir otras variables a las marcas, como por ejemplo el número de registros al tamaño de las marcas. Asimismo, podemos configurar las marcas para aclarar el mapa.

Creando un campo de tipo objeto espacial a partir de latitud y longitud

Desde la versión 2019.2, podemos usar la función MAKEPOINT() para crear un objeto espacial. Si bien seguimos necesitando los valores de latitud y longitud, al dibujar los puntos sobre el mapa con este tipo de campo espacial los puntos se comportan de forma distinta a como hemos visto en el punto “Usando latitud y longitud”.

  • Creamos un nuevo campo calculado con esta configuración:
// CoordFin

MAKEPOINT([End Lat], [End Lon])
  • Llevamos el nuevo campo a Detalle. Al llevar un campo con información espacial Tableau hace los siguiente:
    • Dibuja cada objeto como corresponda (en este caso, puntos, pero pueden ser líneas o polígonos).
    • Las marcas siguen estando agregadas al máximo nivel, ya que no hemos añadido ninguna dimensión.

Para desagregar los puntos, tenemos que llevar alguna dimensión a la vista. Por ejemplo, si llevamos End Station a Detalle, cada punto pasará a ser una marca individual. Al pasar el ratón por uno de los puntos ya no se comporta como una única marca, y si nos fijamos en el tooltip, veremos que cada punto tiene su propio ID.

Por otra parte, al usar este tipo de campo Tableau ha aplicado automáticamente el tipo de marca Mapa. Sin embargo, este tipo de marca no permite cambiar el tamaño de las marcas (por ejemplo, para reflejar el número de viajes). Si queremos mapear una variable continua a las marcas, primero tenemos que cambiar el tipo de marca a Círculo, Cuadrado o Forma.

Mapas de líneas entre dos puntos

En el caso de que queramos ver líneas que unan trayectos entre dos puntos, A y B, y tengamos todos los datos recogidos en el mismo registro, podemos usar la función MAKELINE() disponible desde la versión 2019.2. A esta función hay que pasarle dos puntos en forma de objeto espacial, por lo que en este caso podemos crearlos con la función MAKEPOINT() que ya hemos visto en el punto anterior.

// Recorridos

MAKELINE(
    MAKEPOINT([Start Lat],[Start Lon]),
    MAKEPOINT([End Lat], [End Lon])
)

Cuando llevamos el nuevo campo a Detalle volvemos a obtener una línea agregada al máximo detalle. Como el dataset contiene algunos registros con valores nulos o mal codificados para latitud y longitud, varios de los recorridos acaban en el mar (concretamente, en las coordenadas 0,0). Filtramos los viajes que tengan alguno de estos campos con valor nulo.

A diferencia de los puntos obtenidos con MAKEPOINT(), si cambiamos el tipo de marca a Línea, no vamos a poder utilizarla correctamente, ya que no tenemos un campo que poder usar para ordenar los puntos (ya que el orden se establece a partir de datos que están repartidos en varios registros del dataset, no de uno solo). Lo que hace Tableau es lo que haría con un gráfico de línea normal, es decir, ir uniendo los puntos de izquierda a derecha.

Versiones anteriores a 2019.2

ETL

Nuestro dataset no tiene la estructura de datos adecuada para dibujar este tipo de mapa, ya que cada línea del dataset no contiene información de un solo punto, sino de dos (estación de inicio y de final). Antes de poder dibujar el mapa, vamos a tener que reestructurar los datos.

NOTA: el documento ej_tableau_bicis_LA_05_ETL.html recoge las transformaciones realizadas al archivo de datos original con Tableau Prep.

Dibujar el mapa

  • Cargamos el archivo puntos.csv en Tableau y asignamos los roles geográficos pertinentes a los campos Latitud y Longitud.
  • Llevamos el campo Longitud a Columnas y el campo Latitud a Filas.
  • El nivel de detalle que necesitamos es el de cada uno de los trayectos, así que llevamos Trip ID a la marca Detalle; de esta forma obtenemos todos los puntos, tanto los de salida como los de llegada. Filtramos los puntos que están mal geolocalizados.
  • Cambiamos el tipo de marca de Automático a Línea. Lo que hace Tableau (hasta que lo corrijamos) es unir todos los puntos con una línea tal y como aparecen de izquierda a derecha (como si fuera una gráfica de timeline). Tenemos que indicarle qué variable es la que rige la partición de las líneas.
    Gráfica sin terminar
    .
  • Para poder pasar de esta línea contínua a los puntos que corresponden a las estaciones (y las líneas que dibujarán los trayectos) tenemos que eliminar la agregación de las píldoras de latitud y longitud, para lo que indicamos en el menú desplegable que tienen que ser tratadas como dimensiones.
    Las líneas ya se dibujan correctamente

El mapa de trayectos ya está correctamente creado, pero nos encontramos ante un claro caso de overplotting, por lo que no resulta nada fácil detectar posibles patrones.

Mejoras gráficas

A fin de facilitar el análisis, vamos a realizar ciertas modificaciones que aligerarán la gráfica y añadirán contexto.

  • Llevamos la variable categórica Passholder type al canal Color.
  • Llevamos la variable Duracion real a la marca Tamaño. Al tratarse de una gráfica de líneas, el tamaño se refleja como el grosor de la línea (a fin de cuentas, la longitud de la línea viene dada por la distancia entre los puntos que la conforman).
  • Accedemos desde el menú principal a Mapa > Capas de mapas... y activamos la capa de Calles y carreteras (sólo se motrastrán dependiendo del grado de zoom que estemos aplicando al mapa).

Vista de eje doble

Una técnica muy útil para añadir contexto a una vista consiste en crear una vista de eje doble (que, en el caso de los mapas, permite suporponer una capa de datos sobre otra). Como la red de trayectos es muy tupida, hemos perdido de vista muchas estaciones, particularmente las que están en la zona central. Vamos a dibujar las estaciones sobre la red.

  • Llevar la píldora Longitude de nuevo a Columnas para que esté duplicada. Al hacer esto, conseguimos que aparezcan unos nuevos subestantes en el estante Marcas. Uno cómun (Todo) en el que cualquier configuración se aplicará a todas las marcas; y un subestante para cada píldora Longitude, para poder configurar las marcas de forma distinta (las líneas de los trayectos de una forma y los puntos de las estaciones por otra).
  • En el segundo subestante Longitude, eliminar cualquier píldora que pueda haber.
  • En el segundo subestante Longitude llevamos Número de registros a Tamaño. De esta forma, el tamaño del punto de cada estación refleja el número de trayectos.
  • En la segunda píldora Longitude que tenemos en Filas, seleccionamos la opción Eje doble del menú secundario.

De esta forma, obtenemos el mapa con las dos capas de datos.

El mapa con las dos capas de datos sincronizadas

Animación basada en el tiempo

Ejemplo paso a paso

Otra técnica que nos permite aligerar el mapa y facilitar el análisis consiste en crear las llamadas small multiples; la gráfica principal se faceta o subdivide a partir de una variable discreta.

Por ejemplo, podemos crear un mapa para cada mes añadiendo la dimensión Start Time a nivelde mes (discreto) a columnas o a filas.

Small multiples con un mapa por cada mes

Sin embargo, una mejor opción consiste en animar esta partición y cargar un mapa cada ciertos segundos. En Tableau podemos usar el estante Páginas para crear este tipo de animaciones.

  • Movemos la píldora Start Time de filas o columnas al estante Páginas y la cambiamos de tipo discreto a contínuo; la píldora no cambia de color como debería, pero los meses se ordenan correctamente a la hora de crear la animación.

En la parte derecha aparece un nuevo estante que nos permite configurar la animación. Podemos cambiar la velocidad de la reproducción, cambiar paso a paso…

Opciones de configuración de las paginaciones o animaciones

Gracias a la animación mes a mes detectamos algunos patrones que hasta ahora eran más difíciles de asimilar.

Vídeo TC18

Colofón: vídeo con todos los pasos.

NOTA: el ejemplo del vídeo está realizado con un dataset distinto, con trayectos entre junio de 2016 y abril de 2017.

Calcular distancia entre dos puntos

Desde la versión 2019.2, podemos usar la función DISTANCE() para calcular la distancia entre dos puntos (que tenemos almacenados en un mismo registro.)

// Distancia entre Inicio y Final

DISTANCE(
    MAKEPOINT([Start Lat],[Start Lon]),
    MAKEPOINT([End Lat], [End Lon])
)

Para versiones anteriores de Tableau que no tengan la función DISTANCE() implementada, podemos crear un campo calculado con esta fórmula (fuente del cálculo —NOTA: en el artículo se da por supuesto que en el dataset hay una línea por cada par latitud/longitud, no dos como en nuestro caso, por lo que en este caso concreto no es necesario realizar las consultas Custom SQL que se mencionan.—):

// Distancia (KM)

6371 * ACOS
(
SIN(RADIANS([Starting Station Latitude])) * SIN(RADIANS([Ending Station Latitude])) +
COS(RADIANS([Starting Station Latitude])) * COS(RADIANS([Ending Station Latitude])) * COS(RADIANS([Ending Station Longitude]) -
RADIANS([Starting Station Longitude]))
)

Mapas de líneas entre dos o más puntos (en registros distintos)

Para poder hacer mapas de líneas de dos o más puntos, tenemos que tener una estructura de datos con la siguiente estructura:

  • Campo para identificar cada una de las Líneas
  • Campo para ordenar los puntos dentro de la líneas
  • Latitud del punto de inicio/paso/final
  • Longitud del punto de inicio/paso/final

Para este ejemplo, vamos a utilizar el dataset de tifones que podemos descargar de la web de Tableau, Storm_Map_Sheet_data.csv. Dado que el archivo está codificado como un CSV en inglés, para poder cargar los datos correctamente tenemos que indicar que el separador es la coma, y la configuración regional a inglés.

Una vez que tenemos el conjunto de datos correctamente configurado, podemos proceder a crear el gráfico.

  • Llevamos Latitude a Filas y Longitude a columnas. Como es habitual, obtenemos un único punto sobre el mapa.
  • Llevamos Storm Date a Detalle o Color. Ahora, tenemos un punto por cada tifón.
  • Cuando cambiamos el tipo de marca a Línea, obtenemos una única línea que une los puntos de izquierda a derecha.
  • Para poder crear las líneas correctamente, tenemos que llevar algún campo que sirva para a) desagregar los datos y b) ordenarlos dentro de cada tifón. En este caso, usaremos el campo Date. Sin embargo, Tableau vuelve a agregar el campo al máximo nivel (al tratarse de un campo de tipo fecha y hora, a nivel de año). Para ver las líneas correctamente, tenemos que marcar la opción Fecha exacta.

NOTA: en las versiones anteriores a la 2019.2, si queremos obtener un mapa de líneas a partir del dataset de ejemplo, primero tendremos que reestructurar los datos para que cada punto de coordenadas esté en un único registro (lo que duplicará el tamaño del dataset). Ver Ejemplo.

Calcular distancia de cada tramo

En el punto ### hemos visto una fórmula para calcular la distancia entre dos puntos. Para calcular la distancia de cada tramo, vamos a usar la misma fórmula básica, pero con algunos matices:

  • Los dos puntos no están en una sola fila, sino repartidos en dos filas. Por eso, vamos a tener que usar fórmulas de cálculo de tablas para poder comparar el valor de una fila con el de otra fila distinta (con la función LOOKUP()).
  • Los cálculos de tabla requieren que los campos estén agregados, de lo contrario obtendremos un mensaje de error.

Dado que el primer tramo se delimita cuando obtenemos el segundo punto, vamos a tomar como coordenada final la del segundo punto, y como coordenada inicial la del primer punto. Es decir, la primera parte de la fórmula quedaría así: SIN(RADIANS(LOOKUP(AVG([Latitude]), -1))) * SIN(RADIANS(AVG([Latitude]))).

La fórmula completa para el campo calculado quedaría así:

// Distancia de tramo

6371 * ACOS
(
SIN(RADIANS(LOOKUP(AVG([Latitude]), -1))) * SIN(RADIANS(AVG([Latitude])))
+ COS(RADIANS(LOOKUP(AVG([Latitude]), -1))) * COS(RADIANS(AVG([Latitude])))
* COS(RADIANS(AVG([Longitude])) - RADIANS(LOOKUP(AVG([Longitude]), -1)))
)

Además, y dado que se trata de un cálculo de tabla, tenemos que indicar a Tableau el particionamiento y direccionamiento de la tabla. Para ello:

  • Hacemos click en el enlace Cálculo de tablas predeterminadas.
  • En la opción Calcular usando seleccionamos Avanzado.
  • En la nueva ventana, usamos el campo Storm Name para particionar los cálculos, y el campo Date para direccionarlas (dado que vamos a usar la función LOOKUP(), es realmente importante que indiquemos correctamente el orden de los cálculos).

Una vez que tenemos el campo calculado, podemos añadirlo a la vista. Hemos de tener en cuenta que el cálculo no afecta a los tramos propiamente dichos (las líneas del gráfico), sino a los puntos de tramo (salvo el primero, que no se puede calcular por carecer de un valor anterior).

Calcular distancia total de cada línea

Una vez que hemos calculado la distancia de cada tramo podemos calcular la distancia total recorrida por cada tifón. Sin embargo, no podemos usar una función de agregación normal sobre nuestro campo calculado (por ejemplo, SUMA([Distancia de tramo])), ya que Tableau nos mostrará el siguiente error: El argumento para SUM() (una función de agregación) ya es una agregación, y no puede volver a añadirse.

Para poder realizar una agregación sobre datos ya agregados, debemos usar una función de ventana. Habitualmente, este tipo de funciones se utilizan para calcular totales acumulados, medias móviles, etc.

En vez de usar referencias relativas, usaremos las funciones FIRST() y LAST() para hacer todos los cálculos sobre el mismo rango de celdas. Y nuevamente, vamos a editar el particionamiento y el direccionamiento del campo de cálculo para que la suma de tramos se reinicie con cada tifón.

// Distancia total

WINDOW_SUM([Distancia de tramo], FIRST(), LAST())

NOTA: si usamos esta técnica para calcular la distancia total acumulada por cada línea, necesitaremos que los el campo que hemos usado para direccionar los cálculos ([Date]) esté particionando la vista, por lo que no podremos crear un gráfico agregado.

Calcular distancia entre puntos (otra variante)

En este ejemplo, basado en el vídeo de Lorna Eden “#TableauTipTuesday Week 43 – How to use the Distance calculation”, vamos a ver otra técnica para calcular la distancia entre dos puntos. El método mostrado en el vídeo crea un punto de referencia con respecto al que se calculan las distancias del resto de los puntos. Además, el usuario puede cambiar el punto de referencia simplemente haciendo click sobre un punto de interés. Para ello, utiliza una funcionalidad disponible desde la versión 2019.2, las acciones de parámetro.

Para agilizar los cálculos, en lugar de trabajar con todo el dataset de los recorridos de las bicis, vamos a exportar los códigos de las estaciones de fin de recorrido, y sus coordenadas. Para ello, llevamos End Station a filas, y End lat y End long a texto.

Seleccionamos todas las filas y hacemos click en el icono de Ver datos.

Exportamos la pestaña Resumen a .csv.

Cargamos el fichero generado en el paso anterior como una nueva fuente de datos.

Hasta ahora, para modificar el valor de un parámetro, el usuario tenía que acceder al control de parámetro y hacer su selección. Gracias a las acciones de parámetro, la modificación se puede realizar directamente desde la vista: el usuario selecciona una marca, y el valor del parámetro se actualiza acorde con la marca seleccionada.

  • Creamos un parámetro de texto con nombre Seleccionar una estación, y lo dejamos sin configurar.
  • Creamos una acción de parámetro con la siguiente configuración.
    • Nombre: Estación seleccionada
    • Hojas de origen: Seleccionamos la hoja con la que estamos trabajando
    • Ejecutar acción con: Seleccionar
    • Parámetro de destino: Seleccionar una estación
    • Valor > Campo: End Station (estaciones)

  • Creamos un campo calculado con esta fórmula. Para cada estación, Tableau revisará si es la que aparece en el parámetro Seleccionar una estación y devolverá los valores TRUE/FALSE según corresponda.
// Estacion seleccionada TF

[End Station] = [Seleccionar una estacion]

Usaremos las coordenadas de la estación seleccionada como punto de origen para el cálculo de la función DISTANCE(). Para ello, necesitamos crear tres campos calculados más:

// LatSeleccionada

{ MIN(IF [Estacion seleccionada TF] THEN [End Lat] END) }

Esta expresión de nivel de detalle comprueba para cada fila si es la estación seleccionada, y si lo es devuelve la latitud. Dado que es de tipo FIXED y no hay ningún particionamiento (ya que no hay ninguna dimensión en juego), propaga ese valor a todas las filas. Duplicamos el campo calculado y lo editamos para obtener la longitud de la estación seleccionada.

Una vez que hemos calculado estos dos datos, podemos pasar a calcular la distancia:

// Distancia estaciones

DISTANCE(
    MAKEPOINT([LatSeleccionada], [LongSeleccionada]),
    MAKEPOINT([End Lat], [End Lon]),
    'km'
)

Gracias a la acción de parámetro, cada vez que seleccionemos una estación distinta, ésta pasará a ser la estación de referencia, y todas las distancias serán recalculadas.

Con los nuevos campos calculados a nuestra disposición, vamos a crear un mapa de símbolos en el que las marcas se adaptarán de alguna forma a la selección del usuario.

Dado que la distancia calculada es una medida continua, para facilitar su interpretación vamos a crear primero unas agrupaciones (bins) a partir de esta variable. Para el ejemplo, podemos usar un tamaño de agrupaciones de 4.

Configuramos la vista de esta forma:

  • Columnas: End Lon
  • Filas: End Lat
  • Detalle: End station
  • Forma: Estacion seleccionada TF
  • Color: Distancia estaciones (agrupación)

Mapas de áreas

Para este ejemplo vamos a usar de nuevo el archivo, al que le hemos añadido nuevas variables.

  • Latitud y Longitud
  • Comunidad
  • Orden

También hemos añadido cuatro nuevos registros con datos de municipios navarros, para entender mejor cómo particiona Tableau los datos.

Configuramos la vista de esta forma:

  • Filas: Latitud
  • Columnas: Longitud
  • Color: Comunidad
  • Tipo de marca: Polígono
  • Ruta: Orden (si tenemos problemas a la hora de dibujar los polígonos, podemos convertir Orden el campo a discreto).

Uniones espaciales: Spatial join

Desde su versión 2018.2, Tableau permite unir archivos espaciales, de tal forma que podemos realizar este tipo de análisis:

Pregunta ¿Cuántas estaciones hay en cada condado de L.A.?

  • Objeto: estaciones de bicicletas
  • Acción:identificar
  • Medida: frecuencia de estaciones
  • Agrupación: condados de L.A.

Para poder hacer este tipo de análisis necesitamos un archivo espacial que define los puntos (en nuestro ejemplo, las estaciones de bicicletas), y otro que define las áreas (en nuestro caso, los barrios de L.A.).

NOTA: a partir de la versión 2019.2, no es necesario que el archivo con la información de los puntos sea de tipo espacial, ya que la nueva función makepoint() permite crear la información espacial necesaria a partir de latitud y longitud.

Cargar y combinar fuentes de datos en la versión 2019.2

Para el archivo de puntos (en este caso, nuestro archivo original), podemos crear la información espacial necesaria haciendo click en Editar cálculo de unión.

Editar cálculo de unión

Ahora solo queda usar la función makepoint(); en este caso nos fijaremos en los puntos de llegada.

Spatial join usando la función makepoint()

El resto de la configuración es igual que en el caso de las uniones espaciales con dos archivos espaciales:

  • Seleccionar el campo geometría de la segunda fuente de datos
  • Seleccionar el operador intersects

Cargar y combinar las fuentes de datos en versiones anteriores a 2019.2

A diferencia de otras técnicas para combinar fuentes de datos, en las que establecemos una clave común en las dos fuentes, en las uniones espaciales no hace falta que haya una variables que podamos equiparar.

Por otra parte, esta técnica requiere que los dos archivos sean de tipo espacial, por lo que el CSV con el que hemos venido trabajando hasta ahora no permite hacer una unión espacial. Para solucionar este problema, hemos importado el archivo CSV a un programa SIG (Sistema de información geográfica; o GIS por sus iniciales en inglés) y desde ahí lo hemos exportado como archivo .shp (Shape de ESRI). Para ello hemos usado la aplicación SIG QGIS (vídeo que enseña el proceso).

Una vez que tenemos los dos archivos espaciales, podemos proceder a realizar la unión espacial, en la pestaña de fuentes de datos.

  • Importamos uno de los dos archivos (da igual el orden).
  • Añadimos la segunda fuente (enlace Añadir a la derecha del Conexiones.)
    Añadir fuente de datos
  • Llevamos la segunda fuente de datos al área de trabajo y editamos la conexión. Para ello, tenemos que seleccionar los campos espaciales (Tableau les asigna el nombre Geometría y seleccionar el tipo de unión -dependerá de los datos y la información que queramos mostrar- y marcar la opción intersects).
    Configurar la unión espacial

Como observamos en la zona de previsualización de datos, tenemos variables procedentes de dos fuentes.

Elaborar un mapa

Para combinar puntos y áreas en un solo mapa tenemos que seguir este procedimiento:

  • Crear un mapa de áreas a partir del campo Geometría (l.a. county neighborhood (v5).shp) (dependiendo del tipo de unión que hayamos usado nos aparecerán todos los barrios o solo los que intersectan con la otra fuente de datos, es decir, los que tienen al menos una estación de bicicletas).
Efecto de selecciona distintos tipos de uniones
  • Duplicar la píldora Longitud (generado) en Columnas (seleccionar y arrastrar con la tecla Ctrl). Obtenemos el mismo mapa duplicado. Por otra parte, en el estante marcas tenemos ahora tres subestantes: uno para aplicar cambios a todos los datos, uno para aplicar modificaciones a la primera gráfica (la de la izquierda) y otro para la segunda gráfica (la de la derecha).
Mapa duplicado
  • Eliminar todas las pildoras que pueda haber en el último subestante (el correspondiente a la segunda gráfica). Como resultado, obtenemos un mapa mudo.
    Eliminar las píldoras del último subestante
  • Llevar la pastilla con datos geográficos de la segunda fuente (latitud y longitud de las estaciones) a la marca Detalle del último subestante. En el mapa de la derecha aparecerán los puntos de las estaciones.
    Resultado de agregar los datos grográficos de las estaciones de bicicletas
  • Finalmente, crear una gráfica de eje doble marcando esa opción en la segunda pastilla Longitud (generado) de Columnas.
Crear gráfica de eje doble

A partir de aquí deberíamos poder usar las técnicas mencionadas anteriormente para crear una visualización más informativa, aunque parece ser que a día de hoy ciertas técnicas no funcionan (por ejemplo, asignar Número de registros al canal Tamaño de los puntos).

Resultado final

Cálculos posibles

Ahora que hemos intersectado las dos fuentes espaciales, podemos crear nuevos cálculos para obtener indicadores que nos puedan resultar de interés.

Para poder aprovechar todo el potencial, vamos a usar la versión del archivo original transformada para que cada línea contenga un solo punto de latitud y longitud (convertido al formato .shp).

Combinar variables de las dos fuentes.

Podemos combinar variables de las dos fuentes para crear todo tipo de visualizaciones. Por ejemplo, podemos obtener el número de trayectos por barrio, combinando las variables Name del dataset con las áreas de los barrios, con el Número de registros de la fuente original.

NOTA: como estamos utilizando una fuente en la que el número de trayectos está duplicado, a la hora de contar el número de trayectos tendremos que dividir el resultado por dos: SUM([Número de registros])/2.
Tabla con la cuenta de trayectos por barrio

Calcular si un trayecto a cruzado de barrio o no

Para calcular si un trayecto a salido de un barrio o no tenemos que fijarnos en si el barrio de la estación de salida es el mismo (o no) del de la estación de llegada. En esta versión del archivo original esa información está separada en dos filas (para cada trayecto). Y el campo común que usaremos para hacer el cálculo es el identificador del trayecto.

Para poder hacer el cálculo usaremos una expresión de nivel de detalle para fijar la dimensión Trip ID; en la parte del cálculo comparamos los valores máximo y mínimo para el campo Name (solo hay dos valores, uno por cada fila), de tal forma que si coinciden podemos suponer que el trayecto no ha salido del barrio (nunca tendremos la certeza total, ya que no disponemos más que de dos puntos de control).

// Interbarrio

{FIXED [Trip.ID] :
    IF  MIN([Name]) = MAX([Name]) THEN "Dentro del barrio"
    ELSE "Entre barrios"
    END
}

Ahora podemos usar esta nueva dimensión en cualquier vista:

Hemos aplicado el nuevo campo calculado Interbarrio al color de los trayectos
Descripción de la vista

Densidad de estaciones por milla cuadrada (por condado)

Gracias a la unión espacial, podemos crear nuevos indicadores espaciales para nuestro análisis. Por ejemplo, podemos calcular la densidad de estaciones por distintos condados creando el siguiente campo calculado:

// Densidad de estaciones por milla cuadrada (por condado)

{ FIXED [Name] : COUNTD([End Station]) / MIN([Sqmi]) }

Debido a la unión a la izquierda que hemos utilizado para unir las dos fuentes espaciales, el valor del campo [Sqmi] está replicado en todos aquellos trayectos en los que una estación de final coincida con un determinado condado; por eso tenemos que usar la función MIN().

Opciones de personalización de los mapas

Tableau ofrece varias vías para personalizar la apariencia de los mapas o de datos que podemos dibujar sobre otro tipo de planos.

Mapas en segundo plano

Ejemplo paso a paso

Cuando creamos un mapa con Tableau se cargan los mapas por defecto, que a su vez tienen tres estilos (Claro, Normaly Oscuro). Sin embargo, podemos cargar mapas de otros servidores WMS o Mapbox.

Servidores WMS / Mapbox

Existen multitud de servidores WMS (Web Map Service) que nos permiten cambiar las imágenes que crean los mapas de fondo. Algunos de estos servidores cuentan con información para todo el mundo (OpenStreetMap), mientras que otros ofrecen información más específica de ciertas zonas (por ejemplo, ortofotos para la CAPV).

Spatineo tiene un amplísimo directorio de servidores WMS

Por ejemplo:

Para añadir un servidor WMS a Tableau tenemos que ir a la opción Mapa > Mapas en segundo plano > Servicios de mapa. En la ventana de configuración aparecen los servidores que ya hemos configurado con anterioridad (si es que lo hemos hecho), así como un botón para añadir nuevos servidores.

Ventana de configuración de servidores WMS

Para configurar un nuevo servidor, tenemos que indicar la URL (normalmente el nombre se carga desde el servidor, aunque podemos darle el nombre que más nos convenga).

NOTA: es probable que los servidores que encontremos en internet no estén activos actualmente, en cuyo caso recibiremos un mensaje de error. En caso de duda, podemos intentar acceder directamente a la URL del servidor desde un navegador.

Por su parte, podemos usar Mapbox para cargar un mapa de fondo.

Mapbox is the location data platform for mobile and web applications. We provide building blocks to add location features like maps, search, and navigation into any experience you create.

Para poder usar Mapbox tenemos que crear una cuenta gratuita (o de pago, por supuesto) y obtener un token de acceso a la API en introducirla en Añadir mapa de Mapbox > Clásico.

Ventana de configuración de Mapbox Clásico
Mapbox Comic!

Capas

Dependiendo del mapa en segundo plano que hayamos seleccionado, tendremos a nuestra disposición una o más capas con distinta información espacial, que podemos activar o desactivar. Además, ciertos detalles espaciales aparecerán o desaparecerán dependiendo del nivel de zoom con el que estemos visualizando el mapa (por ejemplo, si marcamos la capa Calles y carreteras del mapa por defecto de Tableau, las carreteras secundarias aparecerán dependiendo del nivel de zoom).

La información de las carreteras varía con el nivel de zoom
La información de las carreteras varía con el nivel de zoom

Vídeo de la TC18

Imágenes en segundo plano

Una opción que permite Tableau consiste en usar una imagen personalizada de fondo a modo de plano y utilizar los ejes X e Y para situar elementos (sin coordenadas geográficas propiamente dichas).

En el ejemplo, usamos el plano de una residencia, sobre el que añadimos una capa de datos (archivo datos_plano.xls, Hoja1). El mapa es una imagen, con unas dimensiones X e Y, que son los píxeles de la imagen sobre los que queremos añadir nuestros datos.

Una vez que añadimos medidas a filas y columnas, podemos indicar una imagen de fondo: Mapas > Imágenes en segundo plano > (Fuente de datos en la que queremos usar la imagen de fondo). Al añadir la imagen, tenemos que indicar qué medidas servirán para localizar los datos, así como la anchura y la altura de la imagen (si no conocemos el tamaño de la imagen, podemos utilizar cualquier programa que nos indique la altura y la anchura de la imagen).

Dialogo de configuración de la imagen de fondo
Los puntos no están bien posicionados

Un problema muy habitual al calcular la posición correcta de los puntos usando un software de edición consiste en que estos programas suelen situar el punto 0 del eje Y arriba, mientras que Tableau lo situa abajo. Por eso, creamos un campo calculado que corrige este dato, y actualizamos la configuración de la imagen de fondo.

// Y Corregido

448 - [Y]

Para que la corrección se aplique correctamente tenemos que dar dos pasos:

  • Sustituir la variable Y por Y corregido en la gráfica.
  • Actualizar la configuración de la imagen en segundo plano para mapear Y a Y corregido.

Finalmente, podemos ocultar la información de los ejes para que el plano se muestre solo.

Este tipo de gráficas no son más que gráficas de dispersión, por lo que podemos utilizar otros campos para aportar más contexto al plano; por ejemplo, podemos llevar la variable Numérico a la marca Tamaño.

Paso a paso

EJEMPLO 3: Polígonos personalizados

De la misma forma que podemos utilizar archivos .shp de área para crear mapas más allá de las bases de datos de Tableau (por ejemplo, para obtener coropletas de municipios de España), también podemos crear nuestros propios datasets con los datos para crear nuestros propios polígonos, sin necesidad de que sea información geocodificada.

La estructura de un dataset para generar polígonos es muy similar a la necesaria para generar líneas, aunque puede ser un poco más compleja si tenemos que crear “agujeros” de un polígono (sustraerle un polígono interior) o contabilizar varios polígonos como uno solo (por ejemplo, todas las islas de Grecia como un únic conjunto).

Una vez cargado el dataset en Tableau (archivo plano_vectorial.csv) la única diferencia consiste en seleccionar el tipo de marca polígono en lugar de línea, lo que obliga a Tableau a crear una línea entre el primer y el último punto para cerrar el polígono.

Para este ejemplo hemos creado un dataset basado en el plano de la casa que ya hemos utilizado anteriormente para ejemplifcar el uso de imágenes personalizadas en segundo plano.

Hemos generado el dataset manualmente usando una hoja de cálculo y un porgrama de edición de vídeo con nos diera la información de las coordenadas X/Y de los puntos que nos interesan.

  • Filas: Corrección Y vectorial (campo calculado para sustraerle Y a 448, la altura de la imagen)
  • Columnas: X(del dataset plano_vectorial.csv)
  • Marcas: polígono
  • Detalle: estancia
  • Detalle: punto
  • Ruta: posicion (campo que indica el orden de cada punto dentro de cada polígono, identificado en estancia).

Una vez tenemos la configuración básica, podemos pasar una variable categórica o una cuantitativa a la marca color realizar el análisis que nos interese:

Variable categórica en color
Variable cuantitativa en color

Más ejemplos de la TC18


Más posts