Dashboards (Streamlit / Dash / Gradio)
Convierte notebooks en aplicaciones compartibles: Streamlit para dashboards de datos rápidos, Dash para productos centrados en Plotly, Gradio para demostraciones de modelos.
Busca en todas las páginas de la documentación
Convierte notebooks en aplicaciones compartibles: Streamlit para dashboards de datos rápidos, Dash para productos centrados en Plotly, Gradio para demostraciones de modelos.
Tarjeta de receta de referencia rápida, lista para copiar y pegar.
# streamlit_app.py
import streamlit as st
import pandas as pd
@st.cache_data
def load():
return pd.read_parquet("sales.parquet")
df = load()
region = st.selectbox("Región", sorted(df["region"].unique()))
filtered = df[df["region"] == region]
st.line_chart(filtered.set_index("ordered_at")["revenue"])Cuándo usar esto:
# Patrón mínimo de Streamlit + Plotly
import streamlit as st
import pandas as pd
import plotly.express as px
st.set_page_config(page_title="Explorador de Ingresos", layout="wide")
@st.cache_data(show_spinner="Cargando ventas...")
def load_sales() -> pd.DataFrame:
# Reemplazar con read_parquet en producción
return pd.DataFrame(
{
"ordered_at": pd.date_range("2025-01-01", periods=30, freq="D", tz="UTC"),
"region": ["East", "West"] * 15,
"revenue": range(30),
}
)
df = load_sales()
col1, col2 = st.columns(2)
with col1:
regions = st.multiselect("Regiones", sorted(df["region"].unique()), default=["East"])
with col2:
min_rev = st.slider("Ingresos mínimos", 0, int(df["revenue"].max()), 0)
filtered = df[df["region"].isin(regions) & (df["revenue"] >= min_rev)]
fig = px.line(filtered, x="ordered_at", y="revenue", color="region")
st.plotly_chart(fig, use_container_width=True)
st.dataframe(filtered, use_container_width=True)Lo que esto demuestra:
cache_data evita recargar Parquet en cada cambio de widgetpredict(image) -> label.uvicorn/servidor integrado; pon autenticación de proxy inverso en producción.| Framework | Punto óptimo |
|---|---|
| Streamlit | pandas/gráficos + filtros en horas |
| Dash | Aplicaciones Plotly multipágina, empresariales |
| Gradio | Demostraciones de modelos de Hugging Face |
# Esqueleto de Dash (app.py separada)
from dash import Dash, html, dcc, Input, Output
import plotly.express as px
app = Dash(__name__)
app.layout = html.Div([dcc.Graph(id="chart"), dcc.Dropdown(id="region")])
# @app.callback(Output("chart", "figure"), Input("region", "value")) ...@st.cache_data / dcc.Store de Dash.st.secrets o variables de entorno. Solución: nunca cometas credenciales.| Alternativa | Usar cuando | No usar cuando |
|---|---|---|
| Panel/HoloViz | Integración con el stack PyData | El equipo quiere la ruta más simple (Streamlit) |
| FastAPI + React | UX y autenticación personalizadas | Necesitas una aplicación en una tarde |
| Superset/Metabase | BI de almacén sobre SQL | Transformaciones pesadas de Python en la UI |
| Observable / Hex | Productos de notebook alojados | Requisito de Python autoalojado |
streamlit run app.py --server.port=8501.import gradio as gr
demo = gr.Interface(fn=predict, inputs="image", outputs="label")
demo.launch()share=True solo para demostraciones, no para datos de producción.st.line_chart o usa Plotly/Altair directamente.dash.testing.DATA_DT=2025-01-15).Versiones de Stack: Esta página fue escrita para Python 3.14.0 (estable 3.14, mantenimiento 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, y uv 0.6+.
Revisado por Chris St. John·Última actualización: 19 jul 2026