- Streamlit: Un framework open-source de Python que te permite crear aplicaciones web interactivas sin necesidad de saber HTML, CSS o JavaScript. Ideal para data science, machine learning y prototipado rápido.
- Dataflow (Flujo de datos): Streamlit se basa en un modelo de flujo de datos. Cada vez que el usuario interactúa con un widget (botón, input, etc.), todo el script se vuelve a ejecutar desde arriba hacia abajo. Streamlit gestiona automáticamente el re-renderizado de la UI.
- Widgets: Elementos interactivos (botones, inputs de texto, sliders, gráficos, etc.) que permiten al usuario interactuar con la aplicación.
- Caching: Streamlit tiene un sistema de caching muy potente que permite optimizar el rendimiento de la aplicación, evitando recalcular funciones costosas innecesariamente.
- Layout (Diseño): Streamlit proporciona opciones para organizar los widgets en columnas, pestañas, expanders, etc.
- Magic commands: Streamlit interpreta automáticamente variables y expresiones, mostrándolas en la app sin necesidad de usar
st.write().
pip install streamlitstreamlit run mi_app.py-
st.write(): La función más básica. Muestra texto, datos (dataframes, arrays, etc.), gráficos y más. -
Magic commands: Simplemente escribe el nombre de una variable o una expresión, y Streamlit la mostrará.
import streamlit as st import pandas as pd st.write("Hola, mundo!") # Texto df = pd.DataFrame({"col1": [1, 2, 3], "col2": [4, 5, 6]}) st.write(df) # DataFrame "Esto también se mostrará" # Magic command x = 10 x # Magic command df #Magic command
-
st.title(): Título de la aplicación. -
st.header(): Encabezado. -
st.subheader(): Subencabezado. -
st.text(): Texto plano (sin formato). -
st.markdown(): Texto en formato Markdown. -
st.latex(): Ecuaciones LaTeX. -
st.caption(): Texto pequeño, para aclaraciones o notas al pie. -
st.code(): Bloque de código. -
st.divider(): Línea horizontal de separación.
-
st.button(): Botón.- Devuelve
Truecuando se hace clic,Falseen caso contrario.
if st.button("Haz clic"): st.write("¡Botón clickeado!")
- Devuelve
-
st.checkbox(): Casilla de verificación.- Devuelve
Truesi está marcada,Falsesi no.
if st.checkbox("Mostrar detalles"): st.write("Detalles...")
- Devuelve
-
st.radio(): Botones de opción (solo se puede seleccionar uno).- Devuelve la opción seleccionada.
opcion = st.radio("Selecciona una opción:", ["A", "B", "C"]) st.write(f"Opción seleccionada: {opcion}")
-
st.selectbox(): Menú desplegable.- Devuelve la opción seleccionada.
seleccion = st.selectbox("Elige un color:", ["Rojo", "Verde", "Azul"])
-
st.multiselect(): Menú desplegable con selección múltiple.- Devuelve una lista con las opciones seleccionadas.
opciones = st.multiselect("Elige tus frutas favoritas:", ["Manzana", "Plátano", "Naranja", "Uva"])
-
st.slider(): Control deslizante (slider).- Devuelve el valor seleccionado.
valor = st.slider("Elige un valor:", 0, 100, 50) # (min, max, valor_inicial)
-
st.select_slider(): Slider con opciones discretas. -
st.text_input(): Campo de entrada de texto (una línea).- Devuelve el texto ingresado.
nombre = st.text_input("Ingresa tu nombre:")
-
st.text_area(): Área de texto (multilínea).- Devuelve el texto ingresado.
-
st.number_input(): Campo de entrada numérica. -
st.date_input(): Selector de fecha. -
st.time_input(): Selector de hora. -
st.file_uploader(): Permite al usuario subir archivos.- Devuelve un objeto
UploadedFile(que se comporta como un archivo).
- Devuelve un objeto
-
st.color_picker(): Selector de color.
st.dataframe(): Muestra un dataframe de pandas de forma interactiva (con paginación, ordenamiento, etc.).st.table(): Muestra un dataframe como una tabla estática.st.metric(): Muestra una métrica con un valor destacado.st.json(): Muestra un objeto JSON.- Gráficos (Streamlit tiene integración con varias bibliotecas de gráficos):
st.line_chart(): Gráfico de líneas.st.area_chart(): Gráfico de área.st.bar_chart(): Gráfico de barras.st.pyplot(): Muestra un gráfico de Matplotlib.st.plotly_chart(): Muestra un gráfico de Plotly.st.altair_chart(): Muestra un gráfico de Altair.st.vega_lite_chart(): Muestra un gráfico de Vega-Lite.st.bokeh_chart(): Muestra un gráfico de Bokeh.st.pydeck_chart(): Muestra un mapa con PyDeck (para visualizaciones geoespaciales).st.map(): Muestra un mapa simple (con puntos).st.graphviz_chart: Muestra gráficos de Graphviz.
st.image(): Muestra una imagen.- Puede recibir una URL, una ruta a un archivo local, un objeto
PIL.Image, un array NumPy, etc.
- Puede recibir una URL, una ruta a un archivo local, un objeto
st.audio(): Reproduce audio.st.video(): Reproduce video.
-
st.sidebar: Crea una barra lateral. Los widgets que coloques dentro dest.sidebaraparecerán en la barra lateral.with st.sidebar: st.header("Configuración") opcion = st.radio("Elige una opción:", ["A", "B"])
-
st.columns(): Crea columnas. Devuelve una lista de objetosDeltaGenerator(que se comportan como contenedores).col1, col2, col3 = st.columns(3) # Crea tres columnas with col1: st.header("Columna 1") st.write("Contenido...") with col2: st.header("Columna 2") with col3: st.write("Otra columna")
-
st.tabs(): Crea pestañas.tab1, tab2, tab3 = st.tabs(["Pestaña 1", "Pestaña 2", "Pestaña 3"]) with tab1: st.header("Contenido de la pestaña 1") with tab2: st.write("Contenido de la pestaña 2")
-
st.expander(): Crea un contenedor expandible/colapsable.with st.expander("Ver detalles"): st.write("Aquí van los detalles...")
-
st.container(): Crea un contenedor genérico (útil para agrupar elementos).
-
st.session_state: Un diccionario que almacena el estado de la sesión. Permite que los widgets conserven sus valores entre ejecuciones del script.import streamlit as st if "contador" not in st.session_state: # Inicialización st.session_state.contador = 0 if st.button("Incrementar"): st.session_state.contador += 1 st.write(f"Contador: {st.session_state.contador}")
- Puedes acceder a los valores del
session_statecomo si fuera un diccionario:st.session_state["clave"]ost.session_state.clave. - Es fundamental para crear aplicaciones más complejas.
- Puedes acceder a los valores del
@st.cache_data: Decora una función para cachear sus resultados. Si la función se llama con los mismos argumentos, Streamlit recupera el resultado de la caché en lugar de volver a ejecutar la función. Ideal para funciones que cargan datos, realizan cálculos costosos, etc.@st.cache_resource: Cachea recursos globales (conexiones a bases de datos, modelos de machine learning, etc.).
@st.cache_data # ¡Muy importante!
def cargar_datos(ruta):
df = pd.read_csv(ruta)
return df
datos = cargar_datos("mi_archivo.csv") # La primera vez se ejecuta, las siguientes se recupera de la caché.clear_cache(): Borra la caché.
st.success(): Muestra un mensaje de éxito (en verde).st.info(): Muestra un mensaje informativo (en azul).st.warning(): Muestra un mensaje de advertencia (en amarillo).st.error(): Muestra un mensaje de error (en rojo).st.exception(): Muestra una excepción.
-
st.spinner(): Muestra un spinner (indicador de carga) mientras se ejecuta un bloque de código.with st.spinner("Cargando datos..."): # Código que tarda un tiempo... time.sleep(5)
-
st.progress(): Muestra una barra de progreso. -
st.stop(): Detiene la ejecución del script. -
st.rerun(): Vuelve a ejecutar el script desde el principio. -
st.empty(): Crea un placeholder que se puede actualizar más tarde. -
st.toast(): Muestra un mensaje emergente (toast). -
st.balloons()/st.snow(): Efectos visuales (globos o nieve).
-
st.set_page_config(): Configura la página (título, icono, layout, etc.). Debe ser la primera llamada a Streamlit en el script.import streamlit as st st.set_page_config( page_title="Mi Aplicación", page_icon=":rocket:", layout="wide", # "centered" (por defecto) o "wide" initial_sidebar_state="expanded", # "expanded" (por defecto), "collapsed" o "auto" )
-
Archivo
config.toml: Puedes configurar Streamlit de forma global (para todas las aplicaciones) o a nivel de proyecto creando un archivoconfig.tomlen la carpeta.streamlit(en la raíz del proyecto o en el home del usuario).
- Componentes personalizados: Puedes crear tus propios componentes de Streamlit usando HTML, CSS y JavaScript (o cualquier framework web que compile a JavaScript).
- Integración con otras bibliotecas: Streamlit se integra bien con muchas bibliotecas de Python (pandas, NumPy, Matplotlib, Plotly, scikit-learn, TensorFlow, PyTorch, etc.).
- Despliegue (Deployment):
- Streamlit Community Cloud (gratuito para apps públicas).
- Heroku, AWS, Google Cloud, Azure, etc.
- Docker.
- Formularios: Agrupa widgets y envíalos con un botón.
- Callbacks: Ejecuta funciones cuando cambia el valor de un widget.