6 Dashboards en R

Una de las principales ventajas de realizar dashboards en R es que este es de software libre, y que por tanto no se requiere licencias para su utilización. Además, con apoyo de librerías como ineapir, se puede combinar en un mismo documento el proceso que abarca desde la extracción de datos hasta la generación del dashboard, siendo a posteriori fácilmente actualizable.

En una época en la que la transparencia por parte de las instituciones se erige como pilar fundamental de sus principios, estos dashboards parecen la herramienta idónea para los constructores de estadísticas oficiales. Al ser de código abierto, se puede compartir el código fuente de los cuadros de mando, lo que conlleva ventajas significativas:

  • El proceso de elaboración es público, sirviendo como base para otros trabajos y viendo que no existen manipulaciones.
  • Se puede implementar servicios como GitHub que permiten a los usuarios hacer pull requests o abrir issues, creando una comunidad que mejore notablemente dichos recursos y que sirva como respaldo técnico.
  • Permite reusar (bajo la licencia elegida) los cuadros de mando fácilmente, aportando valor añadido y que su utlización aumente.

En el siguiente cuadro se expone la comparación de distintos servicios de creación de dashboards:

Característica R (Shiny) Tableau PowerBI
Facilidad de uso Intermedio, requiere conocimientos en R y programación Alto, interfaz intuitiva y fácil de usar Alto, interfaz intuitiva y fácil de usar
Precio Software libre Licencia pagada, versiones disponibles según características Licencia pagada, versiones disponibles según características
Proceso completo Sí, desde la extracción de datos hasta la creación del dashboard No, requiere herramientas adicionales para la extracción y procesamiento de datos No, requiere herramientas adicionales para la extracción y procesamiento de datos
Publicación web Sí, con shinyapps.io o servidores propios Sí, con Tableau Public o Tableau Server Sí, con PowerBI Service
Actualización fácil Sí, puede automatizarse con scripts de R Sí, pero puede requerir configuración adicional Sí, pero puede requerir configuración adicional
Código reutilizable Sí, scripts y funciones en R reutilizables Limitado, se pueden reutilizar algunos componentes Limitado, se pueden reutilizar algunos componentes
Código abierto y replicable Sí, código en R es abierto y puede ser revisado para transparencia No, código cerrado No, código cerrado
Capacidad de integración Alta, puede integrarse con muchas fuentes de datos y otras herramientas de R Alta, se puede conectar a muchas fuentes de datos pero con limitaciones en algunas integraciones Alta, se puede conectar a muchas fuentes de datos pero con limitaciones en algunas integraciones
Interactividad Alta, permite una interactividad compleja con shiny y plotly Alta, permite interactividad pero con menos flexibilidad que Shiny Alta, permite interactividad pero con menos flexibilidad que Shiny
Escalabilidad Alta, puede manejar grandes volúmenes de datos dependiendo de la implementación Media, puede manejar grandes volúmenes de datos pero requiere hardware adecuado Alta, diseñado para manejar grandes volúmenes de datos con infraestructura adecuada
Soporte y comunidad Amplia, fuerte comunidad de usuarios y mucha documentación Amplia, fuerte comunidad de usuarios y soporte oficial Amplia, fuerte comunidad de usuarios y soporte oficial
Curva de aprendizaje Pronunciada, requiere aprender R y conceptos de programación Baja, más fácil de aprender para usuarios sin experiencia técnica Baja, más fácil de aprender para usuarios sin experiencia técnica
Seguridad Alta, depende de la configuración del servidor Alta, con opciones robustas en Tableau Server Alta, con opciones robustas en PowerBI Service
Visualización Alta, con gran flexibilidad y personalización Alta, con una amplia gama de visualizaciones listas para usar Alta, con una amplia gama de visualizaciones listas para usar
Colaboración Media, se puede hacer a través de Git y otras herramientas de control de versiones Alta, con Tableau Server y Tableau Online para colaboración en tiempo real Alta, con PowerBI Service para colaboración en tiempo real
Mantenimiento Requiere mantenimiento manual y gestión de dependencias Requiere mantenimiento regular y gestión de licencias Requiere mantenimiento regular y gestión de licencias
Despliegue Flexible, puede desplegarse en cualquier servidor compatible Controlado, generalmente a través de Tableau Server o Tableau Public Controlado, generalmente a través de PowerBI Service

A continuación se expondrán las dos principales herramientas de creación de dashboards en R, que son FlexDashboard y Shiny.

6.1 Flexdashboard

Se trata de un paquete de R, flexdashboarad, cuyo propósito es proporcionar una forma simple de escribir aplicaciones interactivas en R basadas en lenguaje Markdown, lo que permite escribir el contenido usando bloques de código R y luego transformarlo en un documento HTML o PDF que incluye gráficos y widgets. Las principales características de flexdashboard son:

  • Facilidad de uso: Permite crear dashboards sin necesidad de escribir mucho código de interfaz. Simplemente organizando el contenido en secciones y filas se genera un diseño de panel intuitivo.

  • Layouts adaptativos: Ofrece disposiciones flexibles, como filas y columnas, para distribuir los gráficos y tablas.

  • Interactividad básica: Se pueden agregar elementos de interacción usando bibliotecas de gráficos interactivas, como plotly o highcharter, pero el nivel de interactividad es más limitado en comparación con Shiny,que aunque no es interactivo por sí mismo, se pueden integrar elementos de Shiny para mejorar la interactividad.

6.1.1 Construcción

De aquí en adelante se usará el siguiente dashboard:

knitr::include_graphics("fig/capturas/flexdashboard.png")
Flexdashboard disponible en la siguiente web shinyapps.io/r_flexdashboard y código fuente en repositorio github.com/davidperezros/r_flexdashboard.

FIGURA 6.1: Flexdashboard disponible en la siguiente web shinyapps.io/r_flexdashboard y código fuente en repositorio github.com/davidperezros/r_flexdashboard.

Este cuadro de mando contiene los siguientes elementos fundamentales:

  • Filtro: Permite seleccionar una Comunidad Autónoma y un Año, para el que se muestran los elementos visuales del dashboard.

  • Cards: Tarjetas visuales superiores que permiten resumir información de manera muy visual. Más adelante se muestra cómo se han construido.

  • TreeMap: Gráfico que muestra el la distribución del gasto medio por persona en la comunidad y año seleccionado dentro de los grupos ECOICOP. Para ver como se construye (Sección 4.3.2).

  • Leaflet Map: Mapa interactivo que muestra el ámbito geográfico seleccionado en el filtro.

6.1.2 Estructura proyecto

Para crear un flexdashboard se ha seguido la guía oficial, disponible en https://pkgs.rstudio.com/flexdashboard/. Concretamente tenemos el siguiente esquema,

r_flexdashboard_project/
├── .gitignore                # Archivo de configuración para Git
├── .Rhistory                 # Archivo de historial de R
├── _site.yml                 # Archivo de configuración del sitio
├── index.Rmd                 # Archivo principal de flexdashboard
├── r_flexdashboard.Rproj     # Archivo de proyecto de RStudio
├── README.md                 # Archivo de documentación README
└── style.css                 # Archivo CSS (este puede estar dentro de la carpeta styles/)

donde:

  • .gitignore : Contiene los archivos que se deben ignorar en git, es decir que no se desea tener un control de versiones de ellos.
  • site.yml : Archivo de configuración del sitio.
  • index.Rmd: Contiene todo el cuadro de mando. Desde la lectura de datos hasta la creación de elementos visuales y su presentación.
  • r_flexdashboard.Rproj: Ajustes globales del proyecto en R.
  • README.md: Archivo que muestra información en la página principal del repositorio en GitHub.
  • style.css: Archivo css de estilos, modificando los colores de las fuentes, tamaños, estructuras de elementos visuales…

6.2 Ventajas de cada servicio

Característica Flexdashboard Shiny
Nivel de Interactividad Básica; depende de las bibliotecas de gráficos Alta; interactividad avanzada y en tiempo real
Facilidad de Uso Fácil; requiere poco código de interfaz Moderada a compleja; más control pero más configuración
Diseño y Layout Layout basado en RMarkdown, limitado a filas/columnas Totalmente personalizable mediante código en R
Reactivo Limitado; necesita Shiny para reactividad Totalmente reactivo
Ideal para Dashboards estáticos o semiestáticos Aplicaciones web interactivas complejas

En general, flexdashboard es una excelente opción cuando se necesita construir dashboards rápidos y fáciles de usar sin necesidad de interactividad avanzada, mientras que Shiny es la mejor elección para aplicaciones complejas donde el usuario necesita manipular datos en tiempo real o realizar análisis detallados. Ambas herramientas pueden complementarse: un flexdashboard puede integrar componentes de Shiny para mejorar su interactividad, combinando la simplicidad de un panel con la potencia de una aplicación reactiva.

6.3 Shiny

Se trata de un paquete de R, shiny, cuyo propósito es proporcionar una forma simple de realizar aplicaciones interactivas en R. Las principales características de flexdashboard son:

  • Separación de componentes: Una aplicación Shiny típica se divide en dos partes principales: ui (interfaz de usuario) y server (servidor).

    • ui: Define el diseño y la apariencia de la aplicación. Incluye los elementos de la interfaz de usuario como botones, gráficos, tablas, etc.

    • server: Contiene la lógica de la aplicación, es decir, el código R que procesa los datos y genera la salida que se mostrará en la interfaz de usuario.

  • Flexibilidad: Aunque la curva de aprendizaje de la herramienta puede ser un poco lenta, ofrece una alta flexibilidad a la hora de mostrar los elementos interactivos y manejar los datos.

  • Alta reactividad: alta capacidad para actualizar de manera automática y eficiente la interfaz de usuario en respuesta a cambios en los datos de entrada o en la interacción del usuario.

  • Comunidad web: Shiny cuneta con una amplia comunidad web (mayoritariamente en inglés), donde se puede encontrar ejemplos y respuesta a muchos de los problemas que puedan surgir durante su creación

  • Shiny para Pyhton: La librería de shiny también está disponible en Python, por lo que una vez se aprenda a manejar se puede usar en ambos lenguajes de programación. Aunque tienen elementos diferentes propios de cada lenguaje de programación, la base es la misma y por tanto shiny se usa de manera similar en ambos lenguajes.

6.3.1 Construcción y herramientas útiles

A la hora de empezar a crear una Shiny App (tanto en R como en Python), se recomienda seguir la guía https://shiny.posit.co, donde se explica los pasos básicos para crear una aplicación interactiva. Además existen otras webs muy útiles como pueden ser:

Además hay infinidad de documentación web en internet sobre como realizar un shiny, mucha de ella en libros en formato bookdown.

6.4 Publicación web

PExisten varias opciones para publicar tanto un shiny como un flexdahsboard y que un espectro amplio de potenciales consumidores tengan acceso a el. Las más comunes son:

  • PositCloud: La cuenta básica es gratuita pero tiene un límite de apps publicadas y horas de consulta mensuales.
  • ShinyApps.io: Es un producto de software como servicio (SaaS) alojado en la nube por Posit. Tiene planes gratuitos y de pago.

Para más información y ventajas de cada una, consultar las respectivas páginas principales de estos servicios. El flexdashboard y el shiny de estos ejemplos se han publicado con ShinyApps.io.

6.5 Shinylive

Existe una librería en R llamada shinylive que permite ejecutar una aplicación shiny en la web sin necesidad de un servidor, como en sitios web estáticos, presentaciones o cursos en línea. Por lo tanto, puede ser interesante para subirlo a github y permitir crear una github pages.

Internamente, shinylive utiliza WebAssembly para permitir la ejecución de aplicaciones Shiny directamente en el navegador sin la necesidad de un servidor backend. Esto se logra al compilar el entorno R y las dependencias necesarias en WebAssembly, permitiendo que las aplicaciones Shiny sean completamente autónomas y puedan ser distribuidas como archivos HTML estáticos.

CUIDADO:

Shinylive explora que librerías se están usando en la aplicación shiny, para cargarlas vía precompilados de WebAssembly. En esta web se pueden consultar los paquetes qué se pueden encontrar precompilados, y por tanto usar. https://repo.r-wasm.org/

Por lo tanto, NO es posible usar paquetes que no aparezcan en esa lista.