GitHub Octocat
found a bug/improvement?
Saltar al contenido principal
12 min desarrollo web 28/04/2026

proyecto Python medio: ¿cómo crear una app de datos usando Streamlit?

tutorial práctico para crear una aplicación web de datos completa con Python y Streamlit, desde la instalación hasta el despliegue.

Hola mundo 🤟🏻 mi nombre es Francisco, fcoterroba en Internet y hoy os traigo un post de los que suelen gustar aquí en la web. Como veis en el título, hoy vamos a crear una aplicación web de datos en Python usando la librería o framework Streamlit.

Proyecto muy interesante para añadir a tu portafolio de desarrollador de datos y web.

Antes de comenzar, cómo no podía ser de otra forma, si aún no lo has visto, te recomiendo encarecidamente que vayas a ver el último vídeo que tengo en mi canal de YouTube en el que expliqué, de manera muy sencilla y concisa, cómo realizar la instalación de una bombilla inteligente 🧠 con la cual podrás cambiar el color del mismo, controlarla mediante tu propia voz y muchísimo más! Puedes verlo aquí 👇🏻

Por último antes de comenzar, quería comunicar que llevo unas semanas subiendo vídeos a TikTok. Últimamente son de Eurovisión dado que ya queda poco para ello pero te dejo por aquí el último que hice a día de hoy sobre informática.

@fcoterroba ¿Cómo hacer un pequeño #juego en #Python ? Like para parte 2! #fyp #parati #dev #programacion ♬ LoFi(860862) - skollbeats

¿Algo que deba saber antes de empezar?

Pues sí, varias cosas realmente:

¿Qué es Streamlit?

  • Streamlit es un framework de código abierto para crear aplicaciones web de datos de forma rápida y sencilla con Python.
  • Streamlit permite que científicos de datos y desarrolladores creen aplicaciones interactivas sin necesidad de conocer HTML, CSS o JavaScript.
  • Por lo general, Streamlit funciona ejecutando tu script Python de arriba a abajo cada vez que hay un cambio.
    • Por ejemplo, esta app de demostración muestra lo rápido que se puede crear una visualización de datos.

¿Qué es Python?

  • Python es un lenguaje de programación usado en prácticamente todo lo imaginable
  • Desarrollo web, software, IA, ML, Data Science. Son algunos de los ámbitos tech en los que Python es ampliamente usados.
  • Ofrece una legibilidad bastante buena y cercana a la lectura humana.
    • En la categoría Python de la web puedes encontrar +8 proyectos con Python divididos por su dificultad. ¿A qué esperas? Tu app de Streamlit puede esperar.

¿Qué es Streamlit?

  • Streamlit es un framework para construir aplicaciones web de datos de forma sencilla y rápida con Python.
  • En los últimos tiempos se ha vuelto un framework muy popular al ser considerado como el framework estándar para crear apps de datos.
  • Algunas estadísticas han llegado a sacar a Streamlit mucho más por delante de otras soluciones: más de 2 millones de descargas mensuales y usado por empresas como Snowflake.

1️⃣ PRIMER PASO 1️⃣ Instalar lo necesario

Vamos a tener en cuenta que tenemos ya instalado Python, en mi caso tengo la versión Python 3.10.7 pero no necesariamente debes tener esta versión para seguir el tutorial. Solo es recomendable que sea una versión Python 3. python 3.x.x

Lo primero que tenemos que hacer es instalar la librería de Streamlit, para ello vamos a usar el comando

pip install streamlit

Por último, necesitaremos la librería pandas, una librería esencial para el manejo de datos en Python. Necesitaremos esta librería para trabajar con nuestros datos. Podemos instalarla con este comando:

pip install pandas

Una vez instalados, podemos empezar de verdad

2️⃣ SEGUNDO PASO 2️⃣ Hola mundo

Lo primero y como ya te estarás imaginando, es importar la librería de Streamlit, para ello lo importamos como cualquier otro:

import streamlit as st

Luego, tendremos que crear un texto simple usando los comandos de Streamlit

st.title("Mi primera app con Streamlit")
st.write("¡Hola mundo! Esta es mi primera aplicación web.")

Streamlit funciona con comandos simples, por lo que tendremos que coger, para empezar, un texto simple y justo debajo declarar el mensaje:

import streamlit as st

st.title("Demo de fcoterroba")
st.write("¡Hola mundo! Esta es mi primera app con Streamlit.")

if __name__ == "__main__":
    # Streamlit no necesita esto, pero es buena práctica
    pass

Con esto, si ejecutamos nuestro script con streamlit run nombre_del_archivo.py, tendremos una aplicación web funcionando que muestra un texto.

3️⃣ TERCER PASO 3️⃣ Más widgets y datos

Con el paso anterior hemos hecho un gran avance, tenemos ya nuestra aplicación web funcionando, pero está bien, pero falta más chicha, no?

En este caso voy a hacer la prueba como si fuera a crear una aplicación web para analizar datos de ventas.

Lo primero que tendremos que hacer es, de alguna forma, crear algunos datos de ejemplo. Yo voy a crear datos de ventas con pandas. Tal que así:

import pandas as pd
import numpy as np

# Crear datos de ejemplo
np.random.seed(42)
dates = pd.date_range('2023-01-01', periods=100)
sales_data = pd.DataFrame({
    'fecha': dates,
    'producto': np.random.choice(['Producto A', 'Producto B', 'Producto C'], 100),
    'ventas': np.random.randint(10, 100, 100),
    'region': np.random.choice(['Norte', 'Sur', 'Este', 'Oeste'], 100)
})

Ahora, supongamos que queremos mostrar esos datos en nuestra aplicación.

Para ello simplemente tendremos que usar los comandos de Streamlit para mostrar datos.

st.subheader("Datos de Ventas")
st.dataframe(sales_data)

st.subheader("Estadísticas Básicas")
st.write(sales_data.describe())

Si llamamos a st.dataframe nos mostrará la tabla de datos, st.write nos mostrará las estadísticas.

Ahora, todo esto que hemos hecho ha sido básico, supongamos que queremos que nuestra aplicación pueda filtrar datos y mostrar gráficos.

Para ello, tendremos que añadir más widgets y comandos por cada acción que queramos.

Por ejemplo, digamos que quiero un selector para filtrar por producto.

st.sidebar.header("Filtros")

# Selector de producto
producto_seleccionado = st.sidebar.selectbox(
    "Selecciona un producto:",
    options=['Todos'] + list(sales_data['producto'].unique())
)

# Filtrar datos
if producto_seleccionado != 'Todos':
    datos_filtrados = sales_data[sales_data['producto'] == producto_seleccionado]
else:
    datos_filtrados = sales_data

st.subheader(f"Ventas de {producto_seleccionado}")
st.dataframe(datos_filtrados)

Otro ejemplo, supongamos que queremos añadir un gráfico de líneas, para ello podemos usar los comandos de gráficos de Streamlit.

import matplotlib.pyplot as plt

# Gráfico de líneas
st.subheader("Evolución de Ventas")
fig, ax = plt.subplots()
for producto in datos_filtrados['producto'].unique():
    datos_producto = datos_filtrados[datos_filtrados['producto'] == producto]
    ax.plot(datos_producto['fecha'], datos_producto['ventas'], label=producto)

ax.set_xlabel('Fecha')
ax.set_ylabel('Ventas')
ax.set_title('Evolución de Ventas por Producto')
ax.legend()
st.pyplot(fig)

4️⃣ CUARTO PASO 4️⃣ Añadir interactividad

Ya estamos casi casi acabando, tenemos ya nuestra aplicación web básica, nuestros widgets, nuestros gráficos, todo.

Pero claro, nuestra aplicación solo muestra datos, ni es completa ni tiene todas las funcionalidades de Streamlit. Lo correcto será que añadamos también más interactividad, que son como botones, sliders y otros elementos interactivos.

Yo voy a crear un slider para filtrar por rango de ventas.

st.sidebar.header("Controles Interactivos")

# Slider para rango de ventas
rango_ventas = st.sidebar.slider(
    "Rango de ventas:",
    min_value=int(sales_data['ventas'].min()),
    max_value=int(sales_data['ventas'].max()),
    value=(int(sales_data['ventas'].min()), int(sales_data['ventas'].max()))
)

# Filtrar por rango de ventas
datos_filtrados_final = datos_filtrados[
    (datos_filtrados['ventas'] >= rango_ventas[0]) & 
    (datos_filtrados['ventas'] <= rango_ventas[1])
]

st.subheader(f"Datos filtrados ({len(datos_filtrados_final)} registros)")
st.dataframe(datos_filtrados_final)

Una vez que tenemos el slider, podemos acceder a él desde cualquier parte de nuestra aplicación.

También podemos añadir botones y checkboxes, que son elementos para controlar la visibilidad de componentes.

# Checkbox para mostrar/ocultar gráficos
mostrar_graficos = st.sidebar.checkbox("Mostrar gráficos")

if mostrar_graficos:
    st.subheader("Análisis Visual")
    
    # Gráfico de barras
    st.bar_chart(datos_filtrados_final.groupby('producto')['ventas'].sum())
    
    # Gráfico de dispersión
    st.scatter_chart(datos_filtrados_final, x='fecha', y='ventas', color='producto')

5️⃣ QUINTO PASO 5️⃣ Probar nuestra aplicación

Toda aplicación web que se precie requiere una prueba para asegurarse de que funciona correctamente y en eso Streamlit también se lleva un muy buen punto a favor.

Por defecto, esta librería facilita mucho la prueba de nuestra aplicación web.

Podemos ejecutar nuestra aplicación con:

streamlit run nombre_del_archivo.py

Y para probarlo, Streamlit abrirá automáticamente una pestaña en tu navegador con la aplicación corriendo. Además, cada vez que guardes cambios en el archivo, la aplicación se recargará automáticamente.

Esto nos da un ciclo de desarrollo muy rápido: escribes código, guardas, ves los resultados, modificas, guardas, ves los resultados, y así sucesivamente.

🏁 FIN DEL POST 🏁

Y esto ha sido todo por hoy. Gracias por llegar hasta el final, espero que os haya servido y gustado. Nos vemos pronto!

Podéis contribuir económicamente mediante Paypal. Toda cantidad es bien recibida! 🙂

Espero también que tengáis una genial semana y nos vemos por aquí dentro de poquito! Un saludo y recuerda seguirme en las redes como Twitter, Facebook, Instagram, GitHub, LinkedIn y ahora también en TikTok. 🤟🏻

Fuentes: Streamlit Documentation, Streamlit Official, Pandas Documentation, Matplotlib Documentation