Como criar dashboard com streamlit: 4 passos sem HTML
Planilhas pesadas travam no momento da apresentação e relatórios estáticos em PDF ninguém lê. Para criar dashboard com streamlit sem frontend, você só precisa instalar a biblioteca (pip install streamlit), carregar os dados com cache (@st.cache_data), estruturar filtros na barra lateral (st.sidebar) e plotar métricas e gráficos (st.metric e st.line_chart).
Desenvolver interfaces com React ou Django exige configurar rotas, estado e CSS, o que dispersa o tempo de quem precisa apenas entregar insights analíticos. O objetivo não é construir um software comercial complexo, mas fornecer respostas visuais rápidas para os usuários. O Streamlit resolve esse gargalo eliminando barreiras de frontend.
Por que criar dashboard com streamlit em vez de usar BI tradicional?
Ferramentas tradicionais de Business Intelligence cobram licenças individuais caras e limitam cálculos complexos. Quando o modelo estatístico exige rotinas customizadas em Python, exportar dados para ferramentas visuais quebra o fluxo de trabalho. No Streamlit, toda a lógica analítica permanece unificada no mesmo script.
De acordo com a documentação do Streamlit, a biblioteca é um framework de código aberto para criar aplicações dinâmicas com poucas linhas de código. Você reaproveita scripts existentes sem reescrever rotinas analíticas. Para quem domina os fundamentos de Python para ciência de dados, a curva de aprendizado é imediata.
| Critério | Streamlit | Frontend Tradicional (React/Vue) | Software de BI Fechado |
|---|---|---|---|
| Conhecimento exigido | Apenas Python | HTML, CSS, JavaScript e APIs | Fórmulas proprietárias da ferramenta |
| Custo de licença | Código aberto e gratuito | Código aberto | Licenciamento por usuário ativo |
| Tempo de entrega | Horas de desenvolvimento | Semanas ou meses | Dias para relatórios padrão |
| Flexibilidade de dados | Total integração com Pandas | Depende de endpoints REST | Limitada a conectores nativos |
Essa estrutura reduz o atrito operacional para quem programa. Permite validar um protótipo funcional em poucas horas de código sem depender de times externos de desenvolvimento web.
Passo 1: Como preparar o ambiente e rodar o primeiro script?
O primeiro passo consiste em isolar o ambiente para evitar conflitos de versão. Crie um ambiente virtual com python -m venv .venv e instale as dependências via terminal:
python -m venv .venv
source .venv/bin/activate # No Windows: .venv\Scripts\activate
pip install streamlit pandas numpy
Depois da instalação, crie um arquivo chamado app.py. Para testar a execução, rode o comando abaixo no terminal. O Streamlit inicia um servidor local e abre a interface no navegador automaticamente:
streamlit run app.py
Passo 2: Como carregar dados sem travar a interface usando cache?
Um erro frequente é recarregar dados pesados a cada interação na tela. O Streamlit reexecuta o script inteiro sempre que um filtro é alterado. Sem cache inteligente, consultas a bancos ou arquivos volumosos tornam a navegação lenta e travam a interface do usuário.
Para evitar essa lentidão, decore a função de carga com @st.cache_data. Esse comando grava o resultado da consulta na memória RAM. Se os parâmetros da função não mudarem, o Streamlit retorna os dados de forma instantânea. Isso mantém suas rotinas de automação de dados velozes:
import streamlit as st
import pandas as pd
@st.cache_data
def carregar_dados(caminho):
return pd.read_csv(caminho)
df = carregar_dados("vendas.csv")
Passo 3: Como organizar métricas e filtros na barra lateral?
Telas analíticas exigem clareza visual e leitura imediata. Os usuários buscam indicadores consolidados antes de explorar tabelas extensas. No Streamlit, você isola seletores na barra lateral usando st.sidebar e divide a área principal em colunas com st.columns.
O componente st.metric exibe o valor numérico e aceita a variação percentual no parâmetro opcional delta. Essa estrutura atende às regras de visualização em dashboards, mantendo os filtros organizados sem poluir a área principal de leitura:
# Filtro na barra lateral
categoria = st.sidebar.selectbox("Filtrar Categoria", ["Eletrônicos", "Móveis"])
# Divisão em colunas para cartões de métricas
col1, col2 = st.columns(2)
col1.metric("Faturamento", "R$ 45.200", delta="8.5%")
col2.metric("Ticket Médio", "R$ 380", delta="-2.1%")
Passo 4: Como gerar gráficos e publicar o painel na nuvem?
Gráficos nativos transformam números brutos em tendências visíveis. Com st.line_chart, você plota séries temporais diretamente de um DataFrame do Pandas. Para gráficos customizados além das funções nativas (st.line_chart), você pode renderizar bibliotecas gráficas avançadas usando componentes específicos.
O exemplo a seguir reúne a estrutura completa do painel em um único arquivo app.py. Ele aplica cache na leitura, filtros interativos na barra lateral, cálculo de variação com delta nas métricas e exibição de gráfico e tabela:
import streamlit as st
import pandas as pd
import numpy as np
# 1. Configuração inicial da página
st.set_page_config(page_title="Painel de Desempenho", layout="wide")
# 2. Carga com cache inteligente
@st.cache_data
def carregar_metricas():
np.random.seed(42)
datas = pd.date_range(start="2026-01-01", periods=30)
vendas = np.random.randint(150, 600, size=30)
custos = vendas * 0.55
return pd.DataFrame({"Data": datas, "Vendas": vendas, "Custos": custos})
df = carregar_metricas()
# 3. Barra lateral com filtros dinâmicos
st.sidebar.header("Filtros")
corte_minimo = st.sidebar.slider("Venda mínima diária (R$)", 150, 600, 200)
df_filtrado = df[df["Vendas"] >= corte_minimo]
# 4. Métricas no topo com variação (delta)
st.title("Desempenho Comercial")
col1, col2, col3 = st.columns(3)
total_vendas = df_filtrado["Vendas"].sum()
total_custos = df_filtrado["Custos"].sum()
lucro_bruto = total_vendas - total_custos
col1.metric("Faturamento Filtrado", f"R$ {total_vendas:,.2f}", delta="5.2%")
col2.metric("Custo Operacional", f"R$ {total_custos:,.2f}", delta="-1.8%")
col3.metric("Lucro Estimado", f"R$ {lucro_bruto:,.2f}", delta="7.4%")
# 5. Visualização gráfica e tabela detalhada
st.subheader("Evolução Temporal")
st.line_chart(df_filtrado.set_index("Data")[["Vendas", "Custos"]])
st.subheader("Registros Detalhados")
st.dataframe(df_filtrado)
Para publicar o painel na nuvem, você precisa declarar as dependências do projeto. Crie um arquivo chamado requirements.txt na mesma pasta do script com os pacotes utilizados:
streamlit
pandas
numpy
Com os arquivos prontos, siga o procedimento prático de publicação:
- Envie o arquivo
app.pye orequirements.txtpara um repositório no GitHub. - Acesse o Streamlit Community Cloud e conecte sua conta do GitHub.
- Clique em 'Create app', selecione o repositório, defina o branch principal e aponte o arquivo para
app.py. - Clique em 'Deploy'.
No Streamlit Community Cloud, o aplicativo totalmente hospedado fica pronto para ser compartilhado em menos de um minuto. O processo de desenvolvimento não é alterado na plataforma, pois o código-fonte permanece hospedado no GitHub.
A plataforma permite a conexão com todas as fontes de dados utilizando protocolos seguros. Além disso, as aplicações hospedadas são atualizadas instantaneamente sempre que alterações no código são enviadas via push.
Qual é o próximo passo prático para seu projeto?
Você pode achar que precisa de uma arquitetura complexa antes de colocar um painel no ar. Na prática, iniciar com um protótipo enxuto valida regras de negócio com os usuários mais rápido do que longas discussões conceituais. Pegue uma planilha ou consulta SQL da sua rotina, isole três métricas essenciais e rode seu primeiro script local hoje mesmo.