Cuadros de mando interactivos con Shiny

Creación de aplicaciones web dinámicas con Shiny en R

Aprenda a crear cuadros de mando interactivos y aplicaciones web utilizando Shiny en R. Este tutorial cubre los conceptos básicos de Shiny, desde el diseño de interfaces de usuario hasta el manejo de la reactividad y el despliegue de su aplicación.

Programación
Autor/a
Afiliación
Fecha de publicación

10 de febrero de 2024

Fecha de modificación

9 de mayo de 2025

Palabras clave

Tutorial de Shiny, Cuadros de mando interactivos en R, Construir la aplicación Shiny, R aplicaciones web interactivas, Panel de control de Shiny

Introducción

Shiny es un potente paquete de R que permite crear aplicaciones web interactivas directamente desde R. Con Shiny, puede convertir sus análisis en cuadros de mando dinámicos que permitan a los usuarios explorar los datos en tiempo real. Este tutorial le guiará a través de los conceptos básicos de Shiny, desde la configuración de la interfaz de usuario hasta la gestión de la reactividad y el despliegue de su aplicación. Tanto si eres nuevo en Shiny como si quieres ampliar tus conocimientos, esta guía te ayudará a crear cuadros de mando interactivos y atractivos para tus proyectos de datos.



Primeros pasos con Shiny

Antes de empezar, asegúrese de que Shiny está instalado. Puede instalarlo desde CRAN si es necesario:

#| label: install-shiny
install.packages("shiny")
library(shiny)

Estructura básica de una aplicación Shiny

Una aplicación Shiny suele constar de dos componentes principales: - UI (Interfaz de usuario):Define el diseño y la apariencia de tu aplicación. - Servidor:Contiene la lógica que controla el comportamiento de la app y responde a las entradas del usuario.

Esta es la estructura mínima de una aplicación Shiny:

#| label: minimal-shiny-app
library(shiny)

# Definir UI para la aplicación
ui <- fluidPage(
  titlePanel("My First Shiny App"),
  sidebarLayout(
    sidebarPanel(
      sliderInput("obs", "Number of observations:", 
                  min = 10, max = 100, value = 50)
    ),
    mainPanel(
      plotOutput("distPlot")
    )
  )
)

# Definir la lógica de servidor necesaria para dibujar un histograma
server <- function(input, output) {
  output$distPlot <- renderPlot({
    hist(rnorm(input$obs))
  })
}

# Ejecutar la aplicación 
shinyApp(ui = ui, server = server)

En este ejemplo, la app genera un histograma basado en una distribución normal aleatoria, con el número de observaciones controlado por una entrada deslizante.

Ejemplo de aplicación Shiny 01

Construir un Cuadro de Mando más Interactivo

Construyamos un ejemplo ligeramente más complejo que incluya múltiples entradas y salidas, demostrando la reactividad y el contenido dinámico. En este ejemplo, crearemos un panel de control que permitirá a los usuarios filtrar y visualizar datos del conjunto de datos incorporado mtcars.

#| label: interactive-dashboard
library(shiny)
library(ggplot2)
library(dplyr)

# Definir la interfaz de usuario del cuadro de mando
ui <- fluidPage(
  titlePanel("Mtcars Data Dashboard"),
  sidebarLayout(
    sidebarPanel(
      sliderInput("cyl", "Select number of cylinders:", 
                  min = min(mtcars$cyl), max = max(mtcars$cyl), 
                  value = c(min(mtcars$cyl), max(mtcars$cyl))),
      selectInput("var", "Select variable to plot:",
                  choices = c("mpg", "hp", "wt"), selected = "mpg")
    ),
    mainPanel(
      plotOutput("dataPlot"),
      tableOutput("dataTable")
    )
  )
)

# Definir la lógica del servidor para el cuadro de mando
server <- function(input, output) {
  # Expresión reactiva para filtrar datos basados en la entrada del deslizador
  filteredData <- reactive({
    mtcars %>%
      filter(cyl >= input$cyl[1], cyl <= input$cyl[2])
  })
  
  # Renderizar un gráfico basado en los datos filtrados y la variable seleccionada
  output$dataPlot <- renderPlot({
    ggplot(filteredData(), aes_string(x = input$var)) +
      geom_histogram(binwidth = 5, fill = "steelblue", color = "white") +
      labs(title = paste("Distribution of", input$var),
           x = input$var, y = "Frequency") +
      theme_minimal()
  })
  
  # Renderizar los datos filtrados como una tabla
  output$dataTable <- renderTable({
    filteredData()
  })
}

# Ejecutar la aplicación Shiny
shinyApp(ui = ui, server = server)

En este ejemplo, los usuarios pueden seleccionar el número de cilindros y la variable que desean representar, y el cuadro de mandos se actualiza dinámicamente en función de los datos introducidos.

Ejemplo de aplicación Shiny 02

Buenas prácticas y consejos

  • Modularizar el código:
    Para aplicaciones más grandes, considere modularizar sus componentes de interfaz de usuario y servidor en archivos separados.

  • Utilizar temas Shiny:
    Personalice el aspecto de su aplicación mediante temas Shiny (por ejemplo, a través del paquete shinythemes).

  • Optimización del rendimiento:
    Utilizar expresiones reactivas de forma eficiente para minimizar los cálculos redundantes y mejorar el rendimiento de la app.

  • Pruebas y depuración:
    Prueba regularmente tu aplicación para asegurarte de que todos los componentes reactivos se actualizan como se espera, y utiliza las herramientas de depuración integradas en Shiny cuando surjan problemas.

Opciones de despliegue

Una vez que tu dashboard esté completo, puedes desplegarlo utilizando varias plataformas:

  • ShinyApps.io: Un servicio en la nube para alojar aplicaciones Shiny.
  • RStudio Connect: Para el despliegue y la colaboración a nivel empresarial.
  • Docker: Containeriza tu app Shiny para despliegues reproducibles y escalables.

Conclusión

Shiny le permite convertir sus análisis R en cuadros de mando interactivos que son a la vez atractivo y funcional. Este tutorial proporciona una guía paso a paso para crear una aplicación Shiny, desde la estructura básica de la aplicación hasta un ejemplo de panel de control más interactivo utilizando el conjunto de datos mtcars. Experimente con estos ejemplos, personalice los diseños y explore las funciones avanzadas para crear aplicaciones dinámicas basadas en datos.

Lecturas adicionales

Feliz codificación, y disfrutar de la construcción de cuadros de mando interactivos con Shiny!

Explorar más artículos

Nota

Aquí hay más artículos de la misma categoría para ayudarte a profundizar en el tema.

Volver arriba

Reutilización

Cómo citar

BibTeX
@online{kassambara2024,
  author = {Kassambara, Alboukadel},
  title = {Cuadros de mando interactivos con Shiny},
  date = {2024-02-10},
  url = {https://www.datanovia.com/es/learn/programming/r/tools/interactive-dashboards-with-shiny.html},
  langid = {es}
}
Por favor, cita este trabajo como:
Kassambara, Alboukadel. 2024. “Cuadros de mando interactivos con Shiny.” February 10, 2024. https://www.datanovia.com/es/learn/programming/r/tools/interactive-dashboards-with-shiny.html.