0% encontró este documento útil (0 votos)
10 vistas10 páginas

Estructura y Análisis en Shiny R

El documento describe la estructura general de aplicaciones Shiny, incluyendo las librerías principales, la interfaz de usuario y la implementación del servidor. Se abordan temas como la gestión de datos, la creación de gráficos dinámicos y el análisis estadístico. Además, se incluyen secciones sobre la generación de reportes y características técnicas relevantes para el desarrollo de aplicaciones interactivas en R.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
10 vistas10 páginas

Estructura y Análisis en Shiny R

El documento describe la estructura general de aplicaciones Shiny, incluyendo las librerías principales, la interfaz de usuario y la implementación del servidor. Se abordan temas como la gestión de datos, la creación de gráficos dinámicos y el análisis estadístico. Además, se incluyen secciones sobre la generación de reportes y características técnicas relevantes para el desarrollo de aplicaciones interactivas en R.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Estructura general Shiny

Explicacion y comentarios

18 de noviembre de 2025
Estructura Shiny Comentarios y explicacion

Índice

1. Estructura General 2

1.1. Librerı́as Principales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

1.2. Función de Clasificación de Variables . . . . . . . . . . . . . . . . . . . . . 2

1.3. Estructura de la Interfaz de Usuario . . . . . . . . . . . . . . . . . . . . . . 2

2. Implementación del Servidor 3

2.1. Gestión de Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2.2. Interfaz de Usuario Dinámica . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.3. Motor de Gráficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

3. Análisis Estadı́stico 6

3.1. Resumen Estadı́stico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

3.2. Análisis de Correlación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

3.3. Modelo de Regresión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

4. Sistema de Reportes 7

4.1. Generación de PDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

5. Caracterı́sticas Técnicas 8

5.1. Tabla de Funcionalidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

5.2. Flujo de Trabajo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

5.3. Validaciones Implementadas . . . . . . . . . . . . . . . . . . . . . . . . . . 8

6. Conclusión 9

1
Estructura Shiny Comentarios y explicacion

1 Estructura General

1.1 Librerı́as Principales

La aplicación utiliza las siguientes librerı́as de R:


1 library ( shiny ) # Framework principal
2 library ( ggplot2 ) # V i s u a l i z a c i n de datos
3 library ( dplyr ) # M a n i p u l a c i n de datos
4 library ( DT ) # Tablas interactivas
5 library ( bslib ) # Temas Bootstrap
6 library ( plotly ) # G r f i c o s interactivos

1.2 Función de Clasificación de Variables


1 obtener _ tipo _ variable <- function ( var , datos ) {
2 if ( is . null ( datos ) || is . null ( var ) || var == " " ||
3 ! var %in % names ( datos ) ) {
4 return ( " No seleccionada " )
5 }
6 col _ data <- datos [[ var ]]
7 if ( is . numeric ( col _ data ) || is . integer ( col _ data ) ) {
8 return ( " N u m r i c a s " )
9 } else if ( is . factor ( col _ data ) || is . character ( col _ data ) ||
10 is . logical ( col _ data ) ) {
11 return ( " C a t e g r i c a s " )
12 } else {
13 return ( " Otras " )
14 }
15 }

1.3 Estructura de la Interfaz de Usuario


1 ui <- fluidPage (
2 theme = bs _ theme () ,
3 titlePanel ( " Explorador D i n m i c o de Variables " ) ,
4 sidebarLayout (
5 sidebarPanel (
6 h4 ( " Carga de Datos " ) ,
7 fileInput ( " file1 " , " Cargar Archivo CSV " , accept = " . csv " ) ,
8 h4 ( " S e l e c c i n de Variables " ) ,
9 numericInput ( " num _ vars _ input " ,
10 " Cantidad de Variables a Analizar " ,
11 value = 2 , min = 1 , max = 3) ,
12 uiOutput ( " var _ selector _ ui " ) ,
13 hr () ,
14 h4 ( " Tipo de G r f i c o " ) ,
15 selectInput ( " grafico _ seleccionado " ,
16 " Seleccione el tipo de g r f i c o : " ,
17 choices = c ( " Histograma " , " G r f i c o de Barras " ,

2
Estructura Shiny Comentarios y explicacion

18 " G r f i c o de D i s p e r s i n " ,
19 " Diagrama de Cajas y Bigotes " ,
20 " G r f i c o Multivariado " ) ) ,
21 uiOutput ( " opciones _ histograma _ ui " ) ,
22 uiOutput ( " bins _ slider _ ui " )
23 ),
24 mainPanel (
25 h3 ( " G r f i c o D i n m i c o " ) ,
26 plotlyOutput ( " grafico " , height = " 400 px " ) ,
27 hr () ,
28 h4 ( " Resumen E s t a d s t i c o de Var 1 " ) ,
29 v er ba ti mT ex tO ut pu t ( " resumen _ estadistico " ) ,
30 h4 ( " A n l i s i s E s t a d s t i c o " ) ,
31 textOutput ( " coef _ correlacion " ) ,
32 v er ba ti mT ex tO ut pu t ( " modelo _ regresion " ) ,
33 hr () ,
34 h4 ( " Vista Previa de Datos " ) ,
35 dataTableOutput ( " data _ table " )
36 )
37 )
38 )

2 Implementación del Servidor

2.1 Gestión de Datos


1 server <- function ( input , output , session ) {
2
3 datos <- reactive ({
4 req ( input $ file1 )
5 df <- read . csv ( input $ file1 $ datapath ,
6 header = TRUE ,
7 stringsAsFactors = TRUE )
8 for ( col in names ( df ) ) {
9 if ( is . character ( df [[ col ]]) || is . logical ( df [[ col ]]) ) {
10 df [[ col ]] <- as . factor ( df [[ col ]])
11 }
12 }
13 df
14 })
15
16 datos _ filtrados <- reactive ({
17 df <- datos ()
18 vars _ validas <- vars _ seleccionadas _ react ()
19 df _ filtrado <- df
20 for ( var in vars _ validas ) {
21 tipo <- obtener _ tipo _ variable ( var , df )
22 if ( tipo == " N u m r i c a s " ) {
23 rango <- input [[ paste0 ( " filtro _ num _ rango _ " , var ) ]]
24 if ( ! is . null ( rango ) ) {
25 df _ filtrado <- df _ filtrado %> %
26 filter ( ! ! sym ( var ) >= rango [1] &
27 ! ! sym ( var ) <= rango [2])

3
Estructura Shiny Comentarios y explicacion

28 }
29 } else if ( tipo == " C a t e g r i c a s " ) {
30 categorias <- input [[ paste0 ( " filtro _ cat _ " , var ) ]]
31 if ( ! is . null ( categorias ) ) {
32 df _ filtrado <- df _ filtrado %> %
33 filter ( ! ! sym ( var ) %in % categorias )
34 }
35 }
36 }
37 df _ filtrado
38 })

2.2 Interfaz de Usuario Dinámica


1 output $ var _ selector _ ui <- renderUI ({
2 req ( datos () )
3 tipos _ validos <- c ( " N u m r i c a s " , " C a t e g r i c a s " , " Otras " )
4 lapply (1: input $ num _ vars _ input , function ( i ) {
5 fluidRow (
6 column (12 ,
7 h4 ( paste ( " Variable " , i ) ) ,
8 c he ck bo xG ro up In pu t (
9 paste0 ( " var _ type _ filter _ " , i ) ,
10 " Filtrar por tipo : " ,
11 choices = tipos _ validos ,
12 selected = tipos _ validos
13 ),
14 uiOutput ( paste0 ( " var _ select _ ui _ " , i ) ) ,
15 textOutput ( paste0 ( " var _ type _ " , i ) )
16 )
17 )
18 })
19 })
20

21 observe ({
22 req ( datos () )
23 lapply (1: input $ num _ vars _ input , function ( i ) {
24 output [[ paste0 ( " var _ select _ ui _ " , i ) ]] <- renderUI ({
25 tipos _ seleccionados <- input [[ paste0 ( " var _ type _ filter _ " , i ) ]]
26 if ( is . null ( tipos _ seleccionados ) ) tipos _ seleccionados <- c ()
27 nombres _ filtrados <- names ( datos () ) [
28 sapply ( names ( datos () ) , function ( var )
29 obtener _ tipo _ variable ( var , datos () ) %in % tipos _ seleccionados
30 )
31 ]
32 selectInput (
33 paste0 ( " var " , i ) ,
34 paste ( " Selecciona Variable " , i ) ,
35 choices = c ( " " , nombres _ filtrados ) ,
36 size = 6 ,
37 selectize = FALSE
38 )
39 })
40 })
41 })

4
Estructura Shiny Comentarios y explicacion

2.3 Motor de Gráficos


1 generar _ grafico _ react <- reactive ({
2 req ( input $ grafico _ seleccionado )
3 df <- datos _ filtrados ()
4 vars <- vars _ seleccionadas _ react ()
5
6 if ( length ( vars ) == 0 || vars [1] == " " ) {
7 return ( ggplot () + labs ( title = " Seleccione variables v l i d a s " ) )
8 }
9

10 vars _ ordenadas <- reorganizar _ variables ( vars , df )


11 var1 <- vars _ ordenadas [1]
12 var2 <- if ( length ( vars _ ordenadas ) >= 2) vars _ ordenadas [2]
13 var3 <- if ( length ( vars _ ordenadas ) >= 3) vars _ ordenadas [3]
14
15 # L g i c a para g r f i c o s multivariados
16 if ( length ( vars _ ordenadas ) == 3 & & all ( vars _ ordenadas ! = " " ) ) {
17 tipo1 <- obtener _ tipo _ variable ( var1 , df )
18 tipo2 <- obtener _ tipo _ variable ( var2 , df )
19 tipo3 <- obtener _ tipo _ variable ( var3 , df )
20
21 if ( tipo1 == " N u m r i c a s " & & tipo2 == " C a t e g r i c a s " & &
22 tipo3 == " C a t e g r i c a s " ) {
23 df _ summary <- df %> %
24 group _ by ( ! ! sym ( var2 ) , ! ! sym ( var3 ) ) %> %
25 summarise ( Media = mean ( ! ! sym ( var1 ) , na . rm = TRUE ) ,
26 . groups = ’ drop ’)
27 p <- ggplot ( df _ summary ,
28 aes ( x = ! ! sym ( var2 ) , y = Media , fill = ! ! sym ( var3 ) ) ) +
29 geom _ col ( position = " stack " , alpha = 0.7)
30 return ( p + labs ( title = paste ( " Media de " , var1 , " por " , var2 , " y " ,
var3 ) ,
31 x = var2 , y = paste ( " Media de " , var1 ) , fill = var3 )
+
32 theme _ minimal () +
33 theme ( axis . text . x = element _ text ( angle = 45 , hjust = 1) ) )
34 }
35 }
36
37 # L g i c a para g r f i c o s univariados y bivariados
38 p <- ggplot ()
39 if ( input $ grafico _ seleccionado == " Histograma " ) {
40 num _ bins <- if ( ! is . null ( input $ num _ bins ) ) input $ num _ bins else 30
41 p <- ggplot ( df , aes ( x = ! ! sym ( var1 ) ) ) +
42 geom _ histogram ( aes ( y = .. density ..) , bins = num _ bins ,
43 fill = color _ fill _ base , color = color _ outline ,
44 alpha = 0.7)
45 }
46 # ... m s tipos de g r f i c o s
47 p + theme _ minimal ()
48 })

5
Estructura Shiny Comentarios y explicacion

3 Análisis Estadı́stico

3.1 Resumen Estadı́stico


1 output $ resumen _ estadistico <- renderPrint ({
2 df <- datos _ filtrados ()
3 vars <- vars _ seleccionadas _ react ()
4 if ( length ( vars ) >= 1 & & vars [1] ! = " " ) {
5 tipo _ var1 <- obtener _ tipo _ variable ( vars [1] , df )
6 if ( tipo _ var1 == " N u m r i c a s " ) {
7 cat ( " Resumen e s t a d s t i c o - Variable : " , vars [1] ,
8 " \ nTipo : N u m r i c o \ n \ n " )
9 summary ( df [[ vars [1]]])
10 } else if ( tipo _ var1 == " C a t e g r i c a s " ) {
11 cat ( " Tabla de frecuencias - Variable : " , vars [1] ,
12 " \ nTipo : C a t e g r i c o \ n \ n " )
13 table ( df [[ vars [1]]])
14 } else {
15 " Tipo de variable no compatible para resumen . "
16 }
17 } else {
18 " Seleccione al menos una variable . "
19 }
20 })

3.2 Análisis de Correlación


1 output $ coef _ correlacion <- renderText ({
2 df <- datos _ filtrados ()
3 vars <- vars _ seleccionadas _ react ()
4 if ( length ( vars ) >= 2 & & vars [1] ! = " " & & vars [2] ! = " " ) {
5 tipo _ var1 <- obtener _ tipo _ variable ( vars [1] , df )
6 tipo _ var2 <- obtener _ tipo _ variable ( vars [2] , df )
7 if ( tipo _ var1 == " N u m r i c a s " & & tipo _ var2 == " N u m r i c a s " ) {
8 correlacion <- cor ( df [[ vars [1]]] , df [[ vars [2]]] ,
9 use = " complete . obs " )
10 paste ( " Coeficiente de c o r r e l a c i n : " , round ( correlacion , 4) )
11 } else {
12 " La c o r r e l a c i n requiere dos variables n u m r i c a s . "
13 }
14 } else {
15 " Seleccione dos variables para a n l i s i s de c o r r e l a c i n . "
16 }
17 })

3.3 Modelo de Regresión


1 obtener _ resumen _ modelo <- reactive ({
2 df <- datos _ filtrados ()
3 vars <- vars _ seleccionadas _ react ()

6
Estructura Shiny Comentarios y explicacion

4 if ( length ( vars ) >= 2 & & vars [1] ! = " " & & vars [2] ! = " " ) {
5 tipo _ var1 <- obtener _ tipo _ variable ( vars [1] , df )
6 tipo _ var2 <- obtener _ tipo _ variable ( vars [2] , df )
7 if ( tipo _ var1 == " N u m r i c a s " & & tipo _ var2 == " N u m r i c a s " ) {
8 modelo <- lm ( paste ( vars [2] , " ~ " , vars [1]) , data = df )
9 return ( capture . output ( summary ( modelo ) ) )
10 }
11 }
12 return ( NULL )
13 })
14
15 output $ modelo _ regresion <- renderPrint ({
16 resumen <- obtener _ resumen _ modelo ()
17 if ( ! is . null ( resumen ) ) {
18 cat ( " Modelo de r e g r e s i n lineal :\ n " )
19 cat ( " F r m u l a : " , paste ( vars _ seleccionadas _ react () [2] , " ~ " ,
20 vars _ seleccionadas _ react () [1]) , " \ n \ n " )
21 cat ( paste ( resumen , collapse = " \ n " ) )
22 } else {
23 cat ( " El modelo de r e g r e s i n requiere dos variables n u m r i c a s . " )
24 }
25 })

4 Sistema de Reportes

4.1 Generación de PDF


1 output $ report _ pdf <- downloadHandler (
2 filename = function () {
3 generar _ nombre _ pdf ()
4 },
5 content = function ( file ) {
6 pdf ( file , width = 11 , height = 8.5)
7 tryCatch ({
8 print ( generar _ grafico _ react () )
9 grid . text ( paste ( " G r f i c o : " , input $ grafico _ seleccionado ) ,
10 x = 0.5 , y = 0.95 , just = " center " ,
11 gp = gpar ( fontsize = 14 , fontface = " bold " ) )
12 # ... m s contenido del reporte
13 } , error = function ( e ) {
14 plot . new ()
15 text (0.5 , 0.5 , " Error al generar el g r f i c o " ,
16 adj = 0.5 , cex = 1.2)
17 })
18 dev . off ()
19 }
20 )
21

22 generar _ nombre _ pdf <- reactive ({


23 vars <- vars _ seleccionadas _ react ()
24 vars _ validas <- vars [ vars ! = " " ]
25 if ( length ( vars _ validas ) == 0) {
26 base _ name <- " Analisis "

7
Estructura Shiny Comentarios y explicacion

27 } else if ( length ( vars _ validas ) == 1) {


28 base _ name <- paste ( " Analisis " , vars _ validas [1] , sep = " _ " )
29 } else {
30 relacion <- paste ( vars _ validas , collapse = " _ vs _ " )
31 base _ name <- paste ( " Relacion " , relacion , sep = " _ " )
32 }
33 paste0 ( base _ name , " _ " , Sys . Date () , " . pdf " )
34 })

5 Caracterı́sticas Técnicas

5.1 Tabla de Funcionalidades

Caracterı́stica Descripción
Carga de Datos Soporte para archivos CSV con detección automática
de formato
Selección de Variables Hasta 3 variables con filtrado por tipo
Tipos de Gráficos Histograma, Barras, Dispersión, Cajas, Multivariado
Personalización Colores, temas, parámetros especı́ficos por gráfico
Análisis Estadı́stico Resumen descriptivo, correlación, regresión lineal
Filtrado Dinámico Rangos numéricos y selección categórica
Reportes Exportación PDF con análisis completo
Interactividad Gráficos Plotly con zoom y tooltips

Cuadro 1: Resumen de funcionalidades de la aplicación

5.2 Flujo de Trabajo

1. Carga de datos: Selección de archivo CSV y preprocesamiento automático

2. Selección de variables: Elección de 1-3 variables con validación de tipos

3. Configuración de análisis: Selección de tipo de gráfico y personalización

4. Exploración interactiva: Aplicación de filtros y análisis en tiempo real

5. Generación de reportes: Exportación de resultados en formato PDF

5.3 Validaciones Implementadas

Verificación de existencia de archivo cargado

Validación de tipos de variables para cada análisis

8
Estructura Shiny Comentarios y explicacion

Comprobación de parámetros de entrada

Manejo de errores y casos edge

Mensajes informativos al usuario

6 Conclusión

La aplicación Explorador Dinámico de Variables representa una solución completa


para el análisis exploratorio de datos, combinando capacidades estadı́sticas avanzadas con
una interfaz accesible. Su arquitectura modular y sistema reactivo permiten un análisis
eficiente y personalizable de conjuntos de datos diversos.

Las principales ventajas de esta implementación incluyen:

Interfaz intuitiva para usuarios no técnicos

Análisis estadı́stico completo integrado

Visualizaciones profesionales y personalizables

Sistema de reportes automatizado

Código modular y mantenible

La aplicación está diseñada para ser extensible, permitiendo la incorporación de nuevas


funcionalidades y tipos de análisis según las necesidades especı́ficas del usuario.

También podría gustarte