¿Diseñamos un Dashboard con R?

Desde que vi en Twitter una publicación en que hacía referencia a una herramienta que permite la creación de Dashboards con R, me puse a investigar.

Los "FlexDashBoards" son una herramienta que permite la agregación de distintas visualizaciones en un mismo lienzo, creando estructuras adjuntas que hacen muy fácil al usuario la navegación a través del mismo (en el siguiente enlace podéis encontrar diversos ejemplos).



Diseñar Dashboards con R tiene dos grandes ventajas frente al resto de herramientas:

1) La primera es que son replicables, es decir, se crea el primero utilizando un Id de una cuenta de Google Analytics y se puede replicar para cualquier otra cuenta simplemente cambiando el Id, ya que las métricas y dimensiones van a ser las mismas en las consultas (a excepción de métricas y dimensiones personalizadas, claro). También se puede adaptar a cualquier otro rango de fechas.

2) La segunda es poder sacar provecho de la potencia de R en la generación de gráficos: no sólo porque pueden ser visualmente muy atractivos - aunque requiera su trabajo - sino también porque se pueden generar plots realmente potentes que de otra manera no sería posible o tan fácil: desde mapas interactivos, gráficos mosaico, series temporales con predicción, etc...



Entre las utilidades para las que podían servir se encuentra la de:
  • Muchos proyectos data science tienen su origen en el análisis exploratorio del dataset. Esta puede ser una forma bonita y sencilla de plasmar las conclusiones del ese primer proceso.
  • Generar un cuadro de mando que muestre una visión global del negocio, por ejemplo de un e-commerce.


Mi propósito con esta publicación es mostrar el primer diseño construido, además de explicar algunas de las particularidades técnicas a tener en cuenta sin pretender ser un tutorial.

En esta ocasión no veo interesante documentar paso a paso el proceso, primero porque todas las instrucciones están recogidas en una documentación pública, y segundo, porque podéis acceder al código del ejemplo de dashboard construido en mi cuenta de github.



El FlexDashboard está compuesto por tres secciones:


1) Global:



Muestra el detalle de las dos grandes métricas de una tienda online, tráfico e ingresos. Se muestra el dato total absoluto de ambas métricas, y a la par que su evolución de los últimos 6 meses del año 2016. A priori, se puede observar cómo en la evolución de las sesiones existen cinco grandes picos importantes y sin embargo en el de ingresos destaca especialmente el despunte del mes de Diciembre.

En la fila inferior se muestra un gráfico de tipo boxplot de los canales de tráfico en el que claramente se observa cómo es el canal orgánico el que ha logrado atraer un mayor número de sesiones en el día, muy por encima de los demás, al que le siguen el canal de Newsletter y Búsqueda de Pago de Marca.

Por último, se agrega un histograma que pretende identificar cuáles son los ingresos medios por transacción más habituales. Sin duda, parece que lo que el usuario más se suele gastar en cada compra se encuentra entre los 100 y 300 euros, seguido de 300 y 500 euros.



2) Comportamiento de Compra:



En la parte superior hay dibujados dos histogramas. Estos pretenden explicar cuál es el número de compras por usuario más habitual (en este caso 2) y cuál es el número de productos por compra más habitual (en este caso 1).  
A priori estos datos no están diciendo que el comportamiento habitual de los usuarios para este e-commerce es que compran un sólo producto en cada compra y que además, ¡suelen repetir! comprando en otra ocasión.

En la parte inferior quise probar a dibujar un gráfico con dos plots de manera simultánea, en el que mostrara la evolución tanto de transacciones como de productos comprados.

La idea era ver si en algún momento del tiempo existen diferencias significativas entre una ventas e items, por ejemplo momentos en los que se han hecho menos ventas pero se han vendido más items por transacción o a la inversa, con el fin de identificar factores que hayan podido llevar a ello. Sin embargo creo que esta no es la mejor representación porque no es fácil entre sacar la información que busco, quizás un plot de barras de variaciones hubiera servido mejor en esta ocasión ... 👀



3) Localizaciones
:


En esta ocasión hay dos pestañas. En esta primera se muestra un barplot que lista - top 20 - las ciudades en las que el e-commerce vende más. Sin duda son las ciudades de Madrid y Barcelona las ganadoras. 

Esta información es interesante cuando la tienda no sólo vende a nivel online sino que también dispone de tiendas físicas.




Y por último estas mismas ciudades están representadas con puntos rojos en un mapa de España. ¡Y es curioso como las ciudades del interior de la Península no compran a excepción de Madrid!.





Una vez hecho, me pareció interesante volver la vista atrás y pensar en el método que había seguido, el camino recorrido, que en resumen sería algo así:

1) Lo primero, pensar lo que quiero pintar, la estructura, qué quiero contar, qué información quiero averiguar... aunque luego sufra modificaciones, un primer borrador del que partir es imprescindible. Siempre pienso que en todo proceso de este tipo hay que empezar por el "output", definir bien lo que yo quiero o lo que el cliente necesita antes de mover ficha.

2) Una vez definida la información que necesito, me puse a extraer los datos y a generar los datasets con dicha información.

3) De forma paralela, empecé a definir la estructura del dashbaord en base a las instrucciones de la documentación disponible.

4) Una vez que tenía lo fácil hecho, me metí en lo complicado. Llega el momento de la manipulación y edición de los datasets, adaptándolos a formato y estructura necesarios para que puedan ser pintados en gráficos de tipo ggplot2.

5) Y ya por último, después de solventar bugs, efectos demo, y tirarte de los pelos un día si y otro también porque te ha dejado de funcionar algo que hace un rato lo hacía 😖 ... llega el momento en que ejecutas correctamente y de manera individual cada uno de los chunks (partes del código) de tal forma que ves la luz.

Ahí es cuando se ejecuta la totalidad del Markdown de tal forma que es posible visualizar el dashboard en su totalidad, y respirar satisfactoriamente 😀




Y para terminar, querría incluir algo de información de tipo técnico, por ejemplo, comentando las librerías utilizadas y las ventajas técnicas de esta gran herramienta:

Se trata de un paquete o librería llamada "flexdashboard", disponible desde mediados de 2016, que permite la generación de dashboards en documentos de RMarkDown, en el que se puede además añadir componentes en Shiny para que sean más interactivos.

Es una herramienta que no llega a la interactividad de un Shiny - si no se integra con este - pero tiene cosas realmente interesantes, como las que he probado en este primer ejemplo:

  • Permite una gran flexibilidad a la hora de especificar las filas y columnas. También, los componentes se adaptan para su visualización en dispositivos móviles.
  • Dispone de un amplio soporte para anotaciones de texto, para añadir narrativa de contexto o análisis en los paneles de control, como el que he usado en la parte lateral izquierda.
  • Dispone la posibilidad de esquemas de "storyboard" para presentar secuencias. Esto aún no lo he probado, y quizás sea mi próximo hito a alcanzar :)
  • Se trata de documentos de HTML que se pueden integrar en cualquier servidor e incluso adjuntar en un mensaje de correo electrónico.

Puntualizar que en esta ocasión he optado por el uso del paquete "Plotly". Se trata de una librería que permite no sólo adaptar los gráficos a los espacios dispuestos, sino que también le aporta una mayor interacción permitiendo hacer zoom en el gráfico, mostrando los datos cuando el ratón se posa, hacer un pantallazo del gráfico, etc...




¡¡Os animo a que probéis esta herramienta tan chula!!

Espero que os haya gustado, ¡un abrazo y hasta la próxima!

Comentarios

Entradas populares de este blog

Profundizando en Google Data Studio

¿Por qué me gusta ser Analista Digital?