Como Criar Dashboards Interativos com Python e Plotly
Neste post, vamos explorar como criar dashboards interativos com Python e Plotly, cobrindo desde conceitos básicos até funcionalidades avançadas e boas práticas.
1. Por que usar Python e Plotly para dashboards
Plotly é uma biblioteca de visualização de dados que permite criar gráficos interativos, incluindo:
Linhas, barras, dispersão, áreas e pizza
Mapas geográficos e heatmaps
Gráficos 3D e de rede
Interatividade nativa (hover, zoom, filtros)
Integração com Python, R e JavaScript
Suporte a dashboards web via Dash
Facilidade para personalização visual
Atualização dinâmica de dados em tempo real
2. Instalando Plotly e Dash
pip install plotly dash pandas
Plotly: criação de gráficos interativos
Dash: framework para dashboards web interativos
Pandas: manipulação de dados para visualização
3. Estrutura básica de um dashboard com Dash
import dash
from dash import dcc, html
import plotly.express as px
import pandas as pd
# Dados de exemplo
df = pd.DataFrame({
"Produto": ["A", "B", "C", "D"],
"Vendas": [150, 200, 300, 100]
})
# Criação do gráfico
fig = px.bar(df, x="Produto", y="Vendas", title="Vendas por Produto")
# Inicializando o app Dash
app = dash.Dash(__name__)
app.layout = html.Div([
html.H1("Dashboard de Vendas"),
dcc.Graph(figure=fig)
])
if __name__ == "__main__":
app.run_server(debug=True)
Explicação:
dcc.Graph: componente que exibe gráficos Plotlyhtml.Divehtml.H1: elementos HTML no layoutapp.run_server: inicia o servidor web local
4. Tornando o dashboard interativo
Dash permite interatividade entre componentes usando callbacks.
4.1 Filtro de seleção
from dash.dependencies import Input, Output
# Dropdown de produtos
app.layout = html.Div([
html.H1("Dashboard Interativo"),
dcc.Dropdown(
id="produto-dropdown",
options=[{"label": p, "value": p} for p in df["Produto"]],
value="A"
),
dcc.Graph(id="grafico-vendas")
])
# Callback para atualizar gráfico
@app.callback(
Output("grafico-vendas", "figure"),
Input("produto-dropdown", "value")
)
def update_graph(produto_selecionado):
df_filtrado = df[df["Produto"] == produto_selecionado]
fig = px.bar(df_filtrado, x="Produto", y="Vendas", title=f"Vendas: {produto_selecionado}")
return fig
Resultado: gráfico atualizado automaticamente ao selecionar um produto no dropdown.
4.2 Atualização automática (live updates)
from dash import dcc
import random
app.layout = html.Div([
html.H1("Dashboard em Tempo Real"),
dcc.Graph(id="grafico-live"),
dcc.Interval(id="intervalo", interval=2000) # 2 segundos
])
@app.callback(
Output("grafico-live", "figure"),
Input("intervalo", "n_intervals")
)
def update_graph_live(n):
data = pd.DataFrame({
"Tempo": list(range(10)),
"Vendas": [random.randint(50, 300) for _ in range(10)]
})
fig = px.line(data, x="Tempo", y="Vendas", title="Vendas em Tempo Real")
return fig
Resultado: gráfico atualizado a cada 2 segundos com dados simulados.
5. Tipos de gráficos avançados em Plotly
Gráfico de dispersão com múltiplas variáveis
fig = px.scatter(df, x="Produto", y="Vendas", size="Vendas", color="Produto", title="Dispersão de Vendas")
Heatmap para análise de correlação
corr = df.corr()
fig = px.imshow(corr, text_auto=True, title="Mapa de Correlação")
Gráfico de linhas múltiplas
df_multi = pd.DataFrame({
"Mês": ["Jan", "Fev", "Mar", "Abr"],
"Produto A": [100, 150, 200, 130],
"Produto B": [80, 120, 180, 90]
})
fig = px.line(df_multi, x="Mês", y=["Produto A", "Produto B"], title="Vendas por Mês")
6. Layouts e organização de dashboards
Dash permite organizar múltiplos gráficos e componentes em colunas e linhas.
app.layout = html.Div([
html.H1("Dashboard Completo"),
html.Div([
html.Div(dcc.Graph(id="grafico1", figure=fig), style={"width": "48%", "display": "inline-block"}),
html.Div(dcc.Graph(id="grafico2", figure=fig), style={"width": "48%", "display": "inline-block"})
]),
])
Dicas:
Combine
Divestylepara responsividadeUse
dcc.Tabspara separar seções do dashboardAgrupe filtros e controles no topo ou lateral
7. Integração com dados reais
Python permite integrar dashboards a bancos de dados, APIs ou streams de dados.
7.1 Exemplo com Pandas e SQL
import sqlite3
conn = sqlite3.connect("vendas.db")
df = pd.read_sql_query("SELECT * FROM vendas", conn)
fig = px.bar(df, x="Produto", y="Vendas")
7.2 Exemplo com API
import requests
resposta = requests.get("https://api.exemplo.com/vendas")
dados = pd.DataFrame(resposta.json())
fig = px.line(dados, x="Data", y="Vendas")
Benefícios:
Dashboards atualizados dinamicamente
Possibilidade de integração com sistemas corporativos
Suporte a múltiplas fontes de dados
8. Boas práticas em dashboards interativos
Clareza visual: evite gráficos poluídos ou excesso de cores
Interatividade relevante: filtros e sliders que fazem sentido para o usuário
Atualização controlada: evite sobrecarga de CPU e rede
Responsividade: layouts adaptáveis a diferentes tamanhos de tela
Segurança: proteja endpoints e dados sensíveis
Documentação: inclua títulos, legendas e tooltips claros
Separação de lógica e layout: organize callbacks e funções em módulos
9. Conclusão
Criar dashboards interativos com Python e Plotly permite:
Visualizar dados de forma dinâmica e intuitiva
Integrar múltiplas fontes de dados
Fornecer insights em tempo real para decisões estratégicas
Desenvolver aplicações web com gráficos interativos e atualizações contínuas
Próximos passos sugeridos:
Explorar Dash Bootstrap Components para layouts profissionais
Integrar dashboards com WebSockets ou APIs para dados em tempo real
Criar dashboards avançados com múltiplas páginas, filtros e drill-down de dados

Comentários
Postar um comentário