Curso
Introducción a Shiny y sus ventajas
Quienes tengan experiencia trabajando con R probablemente hayan oído hablar del paquete Shiny, que te permite crear aplicaciones web interactivas. R Shiny se lanzó en 2012 y su adopción creció rápidamente al demostrarse que este paquete, fácil de usar, permitía a científicos y analistas crear modelos y paneles mucho más interactivos.
En 2023, Shiny para Python salió de su fase alfa y ofrece un marco reactivo similar para el lenguaje Python. Shiny es conocido por su sencillez y eficacia a la hora de crear paneles y aplicaciones web sin necesidad de tener grandes conocimientos de desarrollo web.
¿Qué es Shiny?
Shiny es un framework de aplicaciones web de código abierto para R y, gracias a los últimos avances, también para Python. Permite a los profesionales de datos convertir sus análisis en aplicaciones web interactivas. El núcleo de Shiny gira en torno al concepto de programación reactiva, donde los cambios en las entradas (como deslizadores o botones) activan actualizaciones automáticas en las salidas (como gráficos o tablas).
El framework Shiny ofrece muchas ventajas para crear aplicaciones web. Shiny aprovecha la programación reactiva, lo que te permite construir aplicaciones que responden dinámicamente a las acciones del usuario y crean una experiencia más atractiva y personalizada. La librería de Shiny es fácil de usar y cuenta con documentación completa, por lo que con conocimientos básicos de programación puedes crear aplicaciones interactivas y visualmente atractivas. Para quienes disfrutan de Python, Shiny ofrece ahora un puente entre su rico ecosistema de ciencia de datos y las capacidades de desarrollo web de Shiny.
Aquí tienes algunos ejemplos en los que el framework Shiny resulta especialmente útil:
- Paneles interactivos: Shiny es perfecto para crear paneles que permiten explorar y visualizar datos en tiempo real. Puedes aplicar estos consejos para diseñar un panel de primera.
- Exploración de datos: los analistas pueden usar Shiny para crear aplicaciones que permitan explorar conjuntos de datos de forma interactiva, ajustando parámetros y visualizaciones al vuelo.
- Sistemas de apoyo a la toma de decisiones: con Shiny puedes crear sistemas de soporte que faciliten decisiones basadas en datos ofreciendo información dinámica.
- Herramientas educativas: en el ámbito educativo, Shiny permite crear materiales docentes y demostraciones interactivas.
Nota: es importante entender que Shiny para R y Shiny para Python no son lo mismo. Aunque comparten conceptos de base, la sintaxis y la terminología no son intercambiables. Si sabes usar Shiny para R tendrás ventaja al aprender Shiny para Python, pero aun así tendrás que asimilar las diferencias introducidas para adaptarlo a Python.
Shiny frente a otros frameworks de aplicaciones web
Al plantearte el desarrollo de aplicaciones web para ciencia de datos, conviene entender cómo se compara Shiny con otros frameworks.
Shiny ofrece una combinación única de sencillez y versatilidad. Sin embargo, la versión de Python es relativamente reciente frente a otros frameworks. Shiny está pensado para que cualquiera con conocimientos de Python pueda desarrollar aplicaciones web.
Además de ser fácil, está diseñado para escalar sin fricciones, utilizando caché y reactividad selectiva para mantener eficiente su modelo reactivo. Esto le da ventaja frente a algunos otros frameworks de diseño web. Su sintaxis declarativa y su modelo de programación reactiva también lo hacen accesible para analistas de datos, que pueden crear aplicaciones interactivas sin una gran experiencia en desarrollo web.
Por contraste, otros frameworks como Dash y Streamlit aportan puntos fuertes distintos. Dash usa una sintaxis muy "pythónica" y prioriza el desarrollo rápido. Streamlit brilla en prototipado ágil con renderizado automático, pero vuelve a ejecutar todo el programa cuando cambian las entradas, lo que se vuelve ineficiente al escalar. Flask y Django son frameworks web de propósito general que ofrecen flexibilidad y control, aunque suelen requerir más experiencia en desarrollo web. Si te interesa aprenderlos, puedes consultar el tutorial de Django de DataCamp.
Más allá de las plataformas de desarrollo basadas en código, los analistas de datos también usan Tableau y Power BI con fines similares de creación de paneles. Son plataformas de visualización de datos con potentes herramientas, pero conllevan costes de licencia. Además, cuentan con funciones de análisis más limitadas que el código puro y suelen requerir que los modelos y análisis complejos se realicen en otro lugar. Puedes aprender más sobre Power BI en DataCamp.
Es fundamental tener en cuenta los requisitos del proyecto, las preferencias de lenguaje y la necesidad de funciones especializadas al elegir el framework más adecuado para una aplicación de ciencia de datos. Aunque otros frameworks tienen sus ventajas, la combinación de sencillez y flexibilidad de Shiny, junto con su integración con Python, lo convierten en una opción muy atractiva para cualquiera que quiera llevar sus proyectos de datos al siguiente nivel.
|
Framework |
Características clave |
Lenguajes compatibles |
Curva de aprendizaje |
Casos de uso |
|
Shiny |
Simplicidad y versatilidad |
R, Python |
Baja |
Aplicaciones y visualizaciones interactivas |
|
Dash |
Sintaxis "pythónica" |
Python |
Media |
Desarrollo rápido de apps web ligeras |
|
Streamlit |
Prototipado rápido con renderizado automático |
Python |
Baja |
Prototipado ágil de apps de datos |
|
Flask |
Framework web de propósito general |
Python |
Media a alta |
Aplicaciones web completas |
|
Django |
Framework web de alto nivel para Python |
Python |
Media a alta |
Aplicaciones y servicios web escalables |
|
Tableau/Power BI |
Plataformas de visualización de datos |
No aplicable |
Baja |
Visualizaciones de Business Intelligence |
Configuración del entorno de desarrollo
Una de las grandes ventajas de Shiny para Python es que dispone de un editor web con el que puedes crear tu app sin descargar ni instalar nada. Este editor web incluye varios ejemplos de apps y funcionalidades para que empieces a probar tu nueva aplicación Shiny.
Aun así, llegará un momento en tu desarrollo en el que querrás ejecutar Shiny en tu equipo local. En esta sección te guiamos por la instalación de Python, Shiny y sus dependencias, además de las configuraciones necesarias para poner en marcha tu entorno local sin problemas.
Instalación de Python
Para trabajar con Shiny sin conexión, necesitas tener Python instalado en tu ordenador. Si aún no lo has hecho, visita la web oficial en python.org y descarga la última versión para tu sistema operativo. Si ya tenías Python instalado, te recomiendo actualizar a la versión más reciente para asegurar que Shiny funcione correctamente.
Ejecuta el instalador descargado y, durante el proceso, marca la casilla "Add Python to PATH". Así te será más fácil ejecutar Python desde la línea de comandos. Abre una consola o terminal y escribe python --version para comprobar que la instalación se ha completado correctamente. Deberías ver el número de versión. También puedes instalar un entorno de desarrollo integrado (IDE) para mayor comodidad.
Instalación de Shiny
Una vez tengas Python listo, puedes instalar Shiny. Con la versión más reciente de Python, deberías poder abrir una consola o terminal y usar el siguiente comando para instalar la librería Shiny para Python con pip:
pip install shiny
Si usas conda en lugar de pip, utiliza este comando:
conda install -c conda-forge shiny
Shiny puede requerir dependencias adicionales según la configuración de tu sistema. Asegúrate de instalarlas siguiendo las instrucciones de la documentación de Shiny.
Configuración del entorno de desarrollo
Ahora que ya tienes Python y Shiny instalados, hay tres aspectos más que deberías considerar.
- IDE: si usas un IDE, como VS Code, puedes instalar una extensión para que las salidas de Shiny se muestren dentro del propio IDE.
- Control de versiones: plantéate usar sistemas como Git para hacer seguimiento de los cambios en tu código. Inicializa un repositorio Git en la carpeta de tu proyecto para gestionar y colaborar fácilmente en tus aplicaciones Shiny.
- Estructura del código: organiza la estructura del proyecto. Crea carpetas separadas para tus aplicaciones Shiny, los conjuntos de datos y los recursos adicionales. Esto te ayuda a mantener una base de código limpia y ordenada, que es una buena práctica en cualquier proyecto.
Con tu entorno de desarrollo ya configurado, estás listo para empezar a crear aplicaciones web interactivas con Shiny para Python.
Crear una app básica con Shiny
Entender la estructura de una app Shiny
Una app Shiny consta de dos componentes principales: la interfaz de usuario (UI) y la lógica del servidor.
La UI define el aspecto de la app y qué elementos hay disponibles para la interacción. Todo lo que el usuario ve o con lo que interactúa forma parte de la UI, incluidos elementos como deslizadores, botones y gráficos.
La UI se crea con funciones que empiezan por "ui.", como ui.input_numeric, ui.input_slider y ui.output_text. Estas funciones se envuelven en una función de página, normalmente ui.page_fluid, que describe la disposición básica de la página.
La lógica del servidor define cómo se comporta la app y cómo responde a las entradas del usuario. Consta de funciones que toman las entradas de la UI, las procesan y actualizan las salidas en consecuencia. La lógica del servidor se crea con la función server e incluye expresiones reactivas para gestionar entradas y salidas.
Tras definir la UI y la lógica del servidor, las conectamos en una aplicación completa, que debe llamarse "app".

Entender el modelo de programación reactiva
Veamos este ejemplo de la documentación de Shiny.
Este ejemplo toma una entrada del usuario desde un deslizador y la utiliza para realizar un cálculo que se muestra en el cuadro de texto bajo el deslizador. Este ejemplo muy sencillo se está ejecutando en un navegador simple en un host local en VS Code.

Como puedes ver en esta breve demostración, la magia de Shiny está en su interactividad. El motor que la hace posible es su modelo de programación reactiva. En Shiny definimos expresiones reactivas para crear una cadena de dependencias entre entradas y salidas. Cuando cambia una entrada, todas las expresiones y salidas dependientes se actualizan automáticamente. Esta reactividad es el corazón de Shiny. Puedes leer más sobre la reactividad de Shiny aquí.
Hay varios elementos clave que hacen posible esta reactividad.
Primero, el cálculo reactivo, o reactive.Calc. Es un cálculo basado en una entrada. Este cálculo almacena en caché el valor que devuelve hasta que la entrada cambia; entonces se vuelve a ejecutar con el nuevo valor. Así tu app responde con eficiencia a las acciones del usuario. Los cálculos reactivos utilizan el decorador @reactive.Calc, como en el ejemplo siguiente.
@reactive.Calc
def double_number():
return input.number() * 2
Otro elemento reactivo es el efecto reactivo, o reactive.Effect. Un efecto reactivo no devuelve un valor cuando se ejecuta. En su lugar, desencadena un efecto, como modificar una variable o guardar un archivo. También se vuelve a ejecutar cuando cambian las entradas. El reactive.Effect más común es el decorador @output, que añade una cadena con el resultado a la cola de mensajes, como en el ejemplo siguiente.
@output
@render.text
def txt():
return f"The value of x is {input.x()}"
A veces quizá no quieras que la reactividad de tu app sea tan instantánea. Por ejemplo, si tienes un modelo computacionalmente costoso, puede que prefieras esperar a que se actualicen varios parámetros antes de volver a ejecutarlo. En ese caso, reactive.event() o reactive.isolate() ofrecen opciones para limitar la reactividad de tu app.
Añadir interactividad a tu app Shiny
Cuando necesitas una app más compleja
Con esta lógica reactiva, Shiny para Python puede crear apps tan complejas o sencillas como necesites. Puedes añadir botones de opción, casillas de verificación, deslizadores, cuadros de texto, gráficos, mapas ¡y mucho más! Aquí tienes un ejemplo algo más complejo de la documentación de Shiny.

En este ejemplo, creamos un mapa de calor con datos aleatorios. Hay un selector de tipo radio para elegir el estilo del mapa de calor, y el deslizador modifica el rango de colores. Posit (la empresa que creó Shiny) ofrece más ejemplos en su web, incluido este divertido clon de Wordle.
Aunque este tipo de interactividad es entretenida, también tiene aplicaciones muy útiles. Podrías diseñar un modelo que tome factores ambientales como salinidad y temperatura para predecir floraciones de algas. Una persona investigadora en campo podría introducir los valores actuales en tu app Shiny y obtendría una predicción en tiempo real.
También podrías crear un modelo con proyecciones de ingresos anuales en función de ciertas condiciones. Así, los responsables podrían usar tu app para probar distintos escenarios introduciendo diferentes cifras de ventas o marcando qué productos ofrecen, y verían la previsión actualizarse al instante.
Los casos de uso son innumerables y abarcan múltiples sectores.
Tipos de entradas y salidas
Shiny ofrece una amplia variedad de opciones de entrada y salida para cubrir distintas necesidades de visualización e interacción. Aquí tienes una tabla sencilla con las entradas y salidas más comunes en Shiny para Python.
|
Entradas |
¿Qué hacen? |
|
Action Button Input |
Proporciona un botón para que el usuario lo seleccione. |
|
Action Link Input |
Permite que el usuario haga clic en un enlace. |
|
Text input |
Ofrece un cuadro para una línea de texto simple. |
|
Numeric input |
Ofrece un campo numérico con flechas arriba/abajo. |
|
Slider input |
Crea un deslizador numérico. |
|
Checkbox input |
Genera una casilla única para aplicaciones Verdadero/Falso. |
|
Switch input |
Genera un interruptor de encendido/apagado. |
|
Checkbox group input |
Crea varias casillas para elecciones múltiples. |
|
Select input |
Despliega un menú con opciones. |
|
Radio buttons input |
Crea opciones de tipo radio, forzando una única elección. |
|
Text area input |
Ofrece un cuadro de texto ampliable para entradas más largas. |
|
Date input |
Crea un campo de fecha con calendario para elegirla. |
|
Date range input |
Básicamente, dos campos de fecha emparejados para introducir un rango. |
|
Password input |
Crea un cuadro de texto que oculta lo introducido. |
———————————————————————————————————————
|
Salidas |
¿Qué hacen? |
|
Text output |
Escribe texto en HTML plano. |
|
Verbatim text output |
Escribe texto dentro de un bloque monoespaciado. |
|
UI output |
Permite una UI más dinámica según las entradas del usuario. |
|
Plot output |
Genera un gráfico con librerías comunes de Python, como matplotlib. |
|
Table output |
Crea una tabla sencilla con cabeceras de columna. |
|
Data Frame / Grid output |
Crea una tabla personalizable con filtros, cuadrícula y límite de filas. |
Para ver la lista completa de componentes de Shiny, echa un vistazo a esta página.
Personalizar la interfaz de usuario en Shiny para Python
Diseños y temas
Shiny ofrece flexibilidad para personalizar la interfaz mediante distintos diseños usando una función de página. La más utilizada es page_fluid(), que proporciona un diseño responsive que se adapta a diferentes tamaños de pantalla. Si tu aplicación requiere un ancho fijo, puedes usar la función page_fixed().
Shiny se apoya en HTML para crear sus apps web. Esto significa que puedes aplicar temas CSS para dar estilo a tu app. Añadir estilos CSS personalizados te permite ajustar el aspecto de tu app Shiny a tus preferencias estéticas o a la identidad visual de tu organización.
Implementación de widgets y extensiones personalizadas
Shiny es compatible con ipywidgets para multitud de gráficos interactivos, mapas, visualizaciones 3D y reproducción de medios. También ofrece cierta compatibilidad con otros widgets de Python que puedan guardarse como un archivo HTML. Al incorporar widgets personalizados, puedes adaptar tu app Shiny a casos de uso específicos y crear una experiencia de usuario más a medida.
Publicar tu app de Shiny para Python
Descripción de las distintas opciones de despliegue
Cuando hayas creado una app Shiny atractiva, seguramente quieras compartirla con un público más amplio, ya sea para tu porfolio o para un cliente, publicándola en la web. Shiny ofrece varias opciones de despliegue para adaptarse a distintas necesidades.
Despliegue local: puedes publicar tu app Shiny en un servidor local, haciéndola accesible dentro de tu organización o para un grupo concreto de usuarios.
Plataformas en la nube: las plataformas cloud ofrecen soluciones escalables y accesibles para desplegar apps Shiny. Algunas opciones populares son:
- Shinyapps.io: la plataforma de Posit, diseñada específicamente para alojar aplicaciones Shiny.
- Heroku: una plataforma en la nube que permite desplegar apps Shiny.
- AWS, Azure y Google Cloud: los principales proveedores cloud permiten desplegar apps Shiny en máquinas virtuales o contenedores.
ShinyLive: Shiny ofrece una forma nueva de ejecutar aplicaciones Shiny en el navegador sin un servidor aparte con Python en ejecución. Combina WebAssembly y Pyodide para que las aplicaciones Shiny funcionen sin instalar Python ni Shiny en tu ordenador. Esta plataforma limita los paquetes de Python disponibles y puede no ser tan segura como otras, pero es una buena opción para compartir código no sensible rápidamente.
Conclusión
Shiny para Python es una propuesta muy interesante en el mundo del desarrollo de apps web. Puede dar un gran impulso a tu proyecto de datos sin invertir demasiado tiempo en aprender desarrollo web. Si te apetece probar Shiny para R, echa un vistazo a este curso de fundamentos de Shiny de DataCamp y a este curso sobre la creación de paneles con R Shiny. Cuando domines lo básico, pon en práctica tus nuevas habilidades con un caso práctico de Shiny.
Soy doctor con 13 años de experiencia trabajando con datos en un entorno de investigación biológica. Creo software en varios lenguajes de programación, como Python, MATLAB y R. Me apasiona compartir mi amor por el aprendizaje con el mundo.

