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í).
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:
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.
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).
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.
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])
)
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í:
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:
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:
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]:IFMIN([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).
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.
//YCorregido448-[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 datasetplano_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 colorVariable cuantitativa en color