Saltar al contenido
Aplicaciones de Datos con Streamlit en Python

Uso de gráficas interactivas para visualizar datos

Introducción

Utilización de Gráficas Interactivas para Visualizar Datos en Tiempo Real

La utilización de gráficas interactivas para visualizar datos en tiempo real es una técnica clave en el análisis y presentación de información en el área de las ciencias de datos. Con Streamlit, una biblioteca de Python, podemos crear aplicaciones web sencillas que muestran gráficos de información en vivo, con una alta eficiencia computacional.

Ventajas de Usar Streamlit

Streamlit proporciona una forma fácil y rápida de crear aplicaciones interactivas de datos sin la necesidad de conocimientos avanzados de programación en front-end. El uso de gráficas interactivas permite que los usuarios puedan explorar e interactuar con los datos, permitiendo la detección de patrones y tendencias más rápidamente.

Beneficios de las Gráficas Interactivas

Además, las gráficas interactivas permiten analizar conjuntos de datos grandes y dinámicos, y permiten visualizar la evolución en tiempo real.

Conclusión

El uso de gráficas interactivas en tiempo real con Streamlit nos permite crear aplicaciones muy intuitivas, visualmente atractivas y eficientes, lo que nos permite entender mejor nuestros datos e inferir más rápidamente información valiosa.

Resumen

Creación de Gráficas Interactivas en Tiempo Real con Streamlit

Las gráficas interactivas son una excelente herramienta para visualizar datos en tiempo real. Con ellas puedes explorar y analizar datos de forma rápida e intuitiva, y además puedes interactuar con ellas para obtener más información o hacer ajustes en la visualización.

Selección de la Biblioteca de Visualización

Cuando utilizas Streamlit para crear gráficas interactivas en Python, es importante tener en cuenta algunos elementos claves. Por ejemplo, debes asegurarte de que estás utilizando una biblioteca de visualización de datos compatible con Streamlit, como Plotly o Bokeh.

Creación y Visualización de Gráficas

Una vez que tienes seleccionada la biblioteca de visualización de datos, debes crear la gráfica que deseas mostrar. Streamlit ofrece varias opciones para mostrar gráficas, como la función st.plotly_chart() o la función st.bokeh_chart(). Estas funciones te permiten mostrar gráficas interactivas de Plotly o Bokeh, respectivamente, en la aplicación web que estás construyendo.

Integración de Tiempo Real

Una vez que tienes la gráfica lista para mostrar, es hora de integrar la funcionalidad de tiempo real en la gráfica. Para ello, necesitas utilizar algún mecanismo de actualización automática, como un temporizador o un evento de cambio de datos. Cuando se produce el evento, la gráfica se actualiza con los nuevos datos.

Ejemplo Práctico

Por ejemplo, podemos utilizar la biblioteca de visualización de datos Plotly para mostrar una gráfica de barras animada en tiempo real. Primero, necesitamos importar la biblioteca:

import plotly.express as px

Luego, creamos una gráfica de barras inicial utilizando nuestros datos:

fig = px.bar(df, x='fecha', y='valor', color='categoria')

Finalmente, utilizamos la función st.plotly_chart() para mostrar la gráfica en la aplicación web y la actualizamos cada 5 segundos con el nuevo conjunto de datos:

import time
while True:
    st.plotly_chart(fig, use_container_width=True)
    time.sleep(5)
    fig = px.bar(df, x='fecha', y='valor', color='categoria')

Al utilizar un bucle while y la función time.sleep(), hemos creado una visualización de datos interactiva que se actualiza automáticamente cada 5 segundos con los nuevos datos. Esto es sólo un ejemplo, pero las posibilidades de visualización de datos en tiempo real con Streamlit son infinitas.

Aplicación teórica

Visualización de Ventas en Tiempo Real con Streamlit en Python

Supongamos que queremos visualizar las ventas de una tienda en tiempo real, por lo que decidimos llevar un registro de las ventas y presentarlas en una gráfica interactiva mediante Streamlit en Python.

Importación de Librerías Necesarias

Primero, debemos importar las librerías necesarias, como pandas, matplotlib y streamlit:

import pandas as pd
import matplotlib.pyplot as plt
import streamlit as st

Lectura de Datos

Luego, debemos tener un archivo que tenga la información de las ventas, en este ejemplo lo llamaremos "ventas.csv". Una vez importadas las librerías, podemos leer el archivo con pandas:

df = pd.read_csv('ventas.csv')

Creación de la Gráfica

Podemos crear una gráfica de barras con matplotlib que muestre las ventas de cada mes en la tienda:

plt.bar(df['Mes'], df['Ventas'])
plt.xlabel('Mes')
plt.ylabel('Ventas')
plt.title('Ventas Mensuales')

Integración con Streamlit

Con Streamlit podemos crear una interfaz de usuario en la que se muestre la gráfica generada y actualizarla cada vez que se realice una venta en la tienda. Por ejemplo, podemos crear un botón que simule una venta y cada vez que se presione, se actualice la gráfica en tiempo real:

if st.button('Registrar Venta'):
    nueva_venta = {'Mes': 'Octubre', 'Ventas': 120}
    df = df.append(nueva_venta, ignore_index=True)
    st.pyplot(plt)

Características Interactivas

Además, podemos agregar características interactivas a la gráfica, como resaltado de las barras al pasar el cursor sobre ellas o mostrar información detallada al hacer click en alguna barra en particular.

Conclusión

Este ejemplo práctico es solo una pequeña muestra de cómo se pueden utilizar gráficas interactivas para visualizar datos en tiempo real utilizando Streamlit en Python. Con estas herramientas, se pueden crear aplicaciones poderosas y fáciles de usar que ayuden a tomar decisiones de manera más informada y efectiva.

Aplicación práctica

Importar las librerías necesarias


import streamlit as st
import pandas as pd
import plotly.express as px
from faker import Faker
import random
from datetime import datetime, timedelta
    

Generar datos dummy

Se utilizan Faker y random para generar datos ficticios para las tablas clientes y compras.

Los datos se devuelven como dataframes de pandas.


def generate_dummy_data():
    fake = Faker()

    # Datos para clientes
    clientes = []
    for _ in range(100):
        clientes.append({
            'id_cliente': _ + 1,
            'nombre_cliente': fake.name(),
            'fecha_creacion': fake.date_between(start_date='-5y', end_date='today').strftime('%Y-%m-%d'),
            'tipo_cliente': random.choice(['Regular', 'Premium', 'VIP'])
        })

    # Datos para compras
    compras = []
    for _ in range(1000):
        compras.append({
            'id_compra': _ + 1,
            'id_cliente': random.choice(range(1, 101)),
            'nombre_item': fake.word(),
            'fecha_compra': fake.date_between(start_date='-5y', end_date='today').strftime('%Y-%m-%d'),
            'precio_venta': round(random.uniform(5.0, 500.0), 2),
            'descuento': round(random.uniform(0.0, 50.0), 2)
        })

    return pd.DataFrame(clientes), pd.DataFrame(compras)
    

Crear los datos


clientes_df, compras_df = generate_dummy_data()
    

Iniciar la aplicación de Streamlit

Se define el título y la descripción de la aplicación.


st.title("Aplicación Interactiva con Streamlit y Plotly")
st.write("Esta aplicación muestra datos ficticios de clientes y compras.")
    

Mostrar los datos en tablas

Se muestran las tablas de clientes y compras utilizando st.dataframe.


st.header("Datos de Clientes")
st.dataframe(clientes_df)

st.header("Datos de Compras")
st.dataframe(compras_df)
    

Seleccionar tipo de gráfico

Se proporciona un menú desplegable para seleccionar el tipo de gráfico: barras, líneas o dispersión.


st.header("Visualización de Datos")
chart_type = st.selectbox("Seleccione el tipo de gráfico", ["Barras", "Líneas", "Dispersión"])
    

Filtrar datos por tipo de cliente

Se proporciona un menú desplegable para seleccionar el tipo de cliente.

Los datos de compras se filtran en función del tipo de cliente seleccionado.


tipo_cliente = st.selectbox("Seleccione el tipo de cliente", clientes_df['tipo_cliente'].unique())

# Filtrar las compras según el tipo de cliente seleccionado
filtered_data = compras_df[compras_df['id_cliente'].isin(clientes_df[clientes_df['tipo_cliente'] == tipo_cliente]['id_cliente'])]
    

Crear gráfico interactivo con Plotly

Se crea un gráfico interactivo utilizando plotly.express basado en el tipo de gráfico seleccionado y los datos filtrados.

El gráfico se muestra en la aplicación utilizando st.plotly_chart.


if chart_type == "Barras":
    fig = px.bar(filtered_data, x='fecha_compra', y='precio_venta', title=f'Compras de Clientes {tipo_cliente}')
elif chart_type == "Líneas":
    fig = px.line(filtered_data.groupby('fecha_compra').sum().reset_index(), x='fecha_compra', y='precio_venta', title=f'Compras de Clientes {tipo_cliente}')
elif chart_type == "Dispersión":
    fig = px.scatter(filtered_data, x='fecha_compra', y='precio_venta', title=f'Compras de Clientes {tipo_cliente}')

st.plotly_chart(fig)