Web Apps com Streamlit
Streamlit transforma códigos de dados em web apps compartilháveis em poucos minutos. Tudo isso escrito em Python puro. Não é necessário ter experiência com frontend e nem com backend 😀😃🤪.
A arquitetura do Streamlit permite que você escreva aplicativos da mesma forma que escreve scripts Python. Para desbloquear isso, os aplicativos Streamlit têm um fluxo de dados exclusivo: sempre que alguma coisa precisa ser atualizada na tela, o Streamlit reexecuta todo o seu código Python de cima para baixo.
Mas como usar essa maravilha? Este é o tema que começamos a explorar passo a passo neste post. Na postagem de hoje, nos concentraremos especificamente em como usar o Streamlit para exibir dados (textos, imagens, planilhas, graficos, etc) em web apps com comandos mágicos.
Comandos Mágicos (Magic Commands)
Os comandos mágicos Streamlit são um atalho para escrever elementos comuns em uma aplicação web. Eles permitem a exibição de praticamente qualquer coisa (markdown, dados, gráficos) num app sem ter que digitar nenhum comando específico. Basta escrever o que você deseja mostrar em seu código e o elemento aparecerá em seu app. Veja como isso funciona com exemplos.
Para exibir textos formatados com markdown, você só precisa adicionar a notação do Python para strings, como mostrado abaixo.
import streamlit as st
'''
# :red[Streamlit] :orange[pode] :green[escrever] :blue[textos] :violet[em]
# :gray[várias] :rainbow[cores] e :blue-background[também] :blue-background[pode]
# :blue-background[destacar] :rainbow[texto].
'''
Quando esse código é executado, você obtém esse resultado no navegador:
Comandos mágicos para exibir dados numéricos
A mesma lógica mostrada acima serve para mostrar dados numéricos como DataFrames do pandas. Nesse caso, basta definir um DataFrame e chamá-lo. Dando sequência ao código anterior, o DataFrame foi incluído assim:
import pandas as pd
'''
## Meu DataFrame Pandas
'''
df = pd.DataFrame({
'Primeira Coluna': [1, 2, 3, 4],
'Segunda Coluna': [4, 5, 6, 7]
})
df
No navegador, ele aparece assim:
O mesmo procedimento pode ser usado para exibir NumPy arrays. Veja um exemplo prático (escrito como continuidade do código acima):
import numpy as np
'''
## Meu Array Aleatório Feito Com NumPy
'''
array_np = np.random.rand(5,5)
array_np
'''
Comandos mágicos e gráficos
Melhor ainda, os comandos mágicos do Streamlit exibem gráficos completos em web apps sem precisar de nenhum comando específico para isso. Os gráficos podem ser do Matplotlib ou de outras bibliotecas Python como Altair e Seaborn. Veja um exemplo abaixo (o plot veio direto daqui, o comando mágico do Streamlit aparece apenas no final).
import matplotlib.pyplot as plt
import matplotlib as mpl
X, Y = np.meshgrid(np.linspace(-3, 3, 128), np.linspace(-3, 3, 128))
Z = (1 - X/2 + X**5 + Y**3) * np.exp(-X**2 - Y**2)
data1, data2, data3, data4 = np.random.randn(4, 100)
x = np.arange(len(data1))
fig, axs = plt.subplots(2, 2, layout='constrained')
pc = axs[0, 0].pcolormesh(X, Y, Z, vmin=-1, vmax=1, cmap='RdBu_r')
fig.colorbar(pc, ax=axs[0, 0])
axs[0, 0].set_title('pcolormesh()')
co = axs[0, 1].contourf(X, Y, Z, levels=np.linspace(-1.25, 1.25, 11))
fig.colorbar(co, ax=axs[0, 1])
axs[0, 1].set_title('contourf()')
pc = axs[1, 0].imshow(Z**2 * 100, cmap='plasma',
norm=mpl.colors.LogNorm(vmin=0.01, vmax=100))
fig.colorbar(pc, ax=axs[1, 0], extend='both')
axs[1, 0].set_title('imshow() with LogNorm()')
pc = axs[1, 1].scatter(data1, data2, c=data3, cmap='RdBu_r')
fig.colorbar(pc, ax=axs[1, 1], extend='both')
axs[1, 1].set_title('scatter()')
fig
Esse é o gráfico no nosso web app.
Por causa dessa facilidade para exibir gráficos e dados numéricos, o Streamlit é extremamente popular para a criação de dashboards e aplicativos com técnicas de ciências de dados e IA.