Un problema común con las aplicaciones Python es cómo compartirlas con otras personas. Los desarrolladores suelen utilizar una interfaz web para resolver este problema, presentando la funcionalidad de la aplicación a través de una interfaz de usuario. Pero esa solución funciona mejor cuando la interfaz de usuario de la aplicación se adapta naturalmente a los componentes web. Las aplicaciones de exploración de datos pueden funcionar así, por ejemplo, pero también requieren componentes de front-end escritos en javascript para una interactividad ideal.
Streamlit es un Pitón biblioteca que pretende resolver muchos de estos problemas a la vez. Con Streamlit, los desarrolladores pueden crear aplicaciones Python con interfaces basadas en web, creadas a partir de una rica biblioteca de componentes interactivos.
La aplicación resultante se puede alojar en cualquier lugar donde se encuentre una aplicación web Python. Lo mejor de todo es que el desarrollador no necesita saber HTML, JavaScript o CSS para obtener buenos resultados; sólo necesitan escribir código en Python que utilice los métodos y clases de Streamlit.
Un ejemplo sencillo de Streamlit
Los programas Streamlit están escritos en un declarativo estilo. Los objetos aparecen en la página web en el orden en que los declara en su código. Cualquier interacción con los componentes hace que el programa se vuelva a ejecutar de arriba hacia abajo, recargando la página web para reflejar los cambios realizados.
Aquí hay un ejemplo simple de una aplicación Streamlit:
import streamlit as st
st.title("Take input from the user")
user_input = st.text_input("Say something:")
if user_input:
st.write("You said:", user_input)
Esto es lo que sucede si ejecuta este código con Streamlit (usando el streamlit run
dominio):
- Aparece una página web con el título.
Take input from the user
. - Un cuadro de texto con la etiqueta.
Say something:
aparece debajo de eso. - Si el usuario escribe algo en el cuadro de texto y presiona Enter, la entrada del usuario aparece debajo del cuadro de texto con la etiqueta
You said:
.
Estos widgets HTML y todos sus comportamientos son generados y administrados automáticamente por Streamlit. Esto incluye el estado de la aplicación (en el user_input
cuadro, por ejemplo, el if
La declaración solo se activa cuando el usuario ingresa algo.
Muchos más componentes HTML están disponibles en Streamlit que en los ejemplos que se muestran aquí. Componentes como Texto con formato LaTeX, Gráficos de bokeh, entrada de cámaray muchos más están disponibles de forma nativa.
Un ejemplo de Streamlit más complejo
Para una aplicación Streamlit más compleja, eche un vistazo a este ejemplo en la documentación de Streamlit. Esta aplicación carga un conjunto de datos común de recogidas y devoluciones de Uber en Manhattan, agrupados por hora. Luego traza los tiempos en un gráfico de barras y las ubicaciones en un mapa interactivo.
El programa completo tiene sólo unas 30 líneas; es lo suficientemente breve como para que puedas copiarlo y pegarlo en un archivo y ejecutarlo tú mismo. También es útil como escaparate de la forma en que Streamlit hace muchas cosas.
Datos en aplicaciones Streamlit
Streamlit ofrece muchos comportamientos nativos para facilitar el manejo de fuentes de datos. Utiliza marcos de datos como formato principal para cargar y trabajar con datos.
También puede cargar datos desde cualquier fuente que usaría en cualquier otra aplicación Python, y Streamlit brinda comodidades para ayudar en el proceso. Como ejemplo, la aplicación de visualización de datos de la sección anterior utiliza Pandas para cargar un archivo CSV desde una URL remota y traducirlo a un marco de datos. Si bien es conveniente, cargar y formatear los datos puede ser lento y consumir mucho tiempo, especialmente si los carga a través de una conexión de red. El programa también se recarga después de cada acción realizada por el usuario.
Para sufragar esto, Streamlit proporciona la @st.cache_data
decorador, utilizado para envolver el load_data()
función. Además, @st.cache_data
almacena en caché los datos en múltiples recargas de la aplicación, por lo que solo se carga en el primer inicio.
Gestión de estados en aplicaciones Streamlit
Debido a que el diseño de Streamlit obliga a recargar la aplicación con cada interacción del usuario, mantener el estado persistente en una aplicación Streamlit no siempre es obvio. Hemos visto cómo los datos en un cuadro de texto manejan el estado entre ejecuciones. Pero si queremos crear y gestionar un estado aparte del estado de los controles individuales, debemos utilizar Objeto session_state integrado de Streamlit.
streamlit.session_state
es un almacén de valores-clave, esencialmente un diccionario, que persiste en todas las ejecuciones. Cuando un programa Streamlit se inicia por primera vez, esa tienda está vacía, por lo que debes probar la presencia de claves antes de intentar acceder a ellas.
import streamlit as st
# create the key "sayings" if it doesn't exist
if 'sayings' not in st.session_state:
st.session_state['sayings'] = []
# for convenience, make a reference
sayings = st.session_state['sayings']
st.title("Take input from the user")
user_input = st.text_input("Say something:")
if sayings:
# display "sayings" if it has inputs from previous runs
st.write("You previously said:", sayings)
if user_input:
# add to "sayings" if we get an input
sayings.append(user_input)
st.write("You said:", user_input)
Tenga en cuenta que cualquier dato almacenado en session_state
solo persiste durante la vida útil del servidor Streamlit que ejecuta la aplicación. Si el servidor se detiene, los datos se pierden. Si necesita datos que persistan de manera más agresiva, es posible que necesite una solución como una base de datos o un caché en memoria como Redis.
Widgets de datos para aplicaciones Streamlit
Hemos visto cómo los elementos en las páginas Streamlit pueden variar desde simples etiquetas de texto o controles HTML hasta elementos más elaborados como mapas, gráficos, reproducción de audio/vídeo o interacciones avanzadas como cuadros de chat (por ejemplo, para interactuando con LLM).
Los controles Streamlit para mostrar o interactuar con datos ya están precableados para manejar la representación de datos para los casos de uso más comunes. Por ejemplo, los widgets web Streamlit pueden usar marcos de datos como fuente y presentar automáticamente los marcos de datos con el etiquetado de columnas adecuado para que no tenga que agregarlos manualmente.
Una amplia biblioteca de widgets de datos comunes se incluye con Streamlit de forma predeterminada. Más componentes de este tipo, creado y compartido por la comunidad de usuariosestán disponibles mediante un sencillo pip install
.
Implementación de aplicaciones Streamlit
Debido a que las aplicaciones Streamlit son, en esencia, aplicaciones web Python, se pueden implementar de manera muy similar a cualquier aplicación Python en red. La forma rápida y sucia es simplemente ejecutar la aplicación en una máquina determinada y proporcionar acceso a ella a través del puerto asignado.
Las implementaciones más avanzadas también siguen el mismo patrón que otras aplicaciones web de Python:usando Docker, Kubernetes o varios servicios comunes en la nube. Los usuarios de Snowflake en AWS y Microsoft Azure también pueden implementar aplicaciones Streamlit respaldadas por el almacén de datos de Snowflake. Finalmente, Streamlit ofrece su propio Servicio de alojamiento en la nube comunitariaaunque eso es conveniente y no obligatorio para las aplicaciones Streamlit.
Copyright © 2024 IDG Communications, Inc.