Como Criar Dashboards Interativos com Python e Plotly

Dashboards são ferramentas poderosas para monitoramento e análise de dados, permitindo que equipes tomem decisões rápidas baseadas em informações visuais. Com Python e Plotly, é possível criar dashboards interativos e profissionais, que podem ser integrados a aplicações web ou executados localmente.

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

Vantagens de usar Plotly:

  • 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 Plotly

  • html.Div e html.H1: elementos HTML no layout

  • app.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 Div e style para responsividade

  • Use dcc.Tabs para separar seções do dashboard

  • Agrupe 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

  1. Clareza visual: evite gráficos poluídos ou excesso de cores

  2. Interatividade relevante: filtros e sliders que fazem sentido para o usuário

  3. Atualização controlada: evite sobrecarga de CPU e rede

  4. Responsividade: layouts adaptáveis a diferentes tamanhos de tela

  5. Segurança: proteja endpoints e dados sensíveis

  6. Documentação: inclua títulos, legendas e tooltips claros

  7. 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

Postagens mais visitadas deste blog

Gerando Relatórios em PDF com Python (ReportLab e FPDF)

Python para Computação Quântica: Introdução com Qiskit

Estrutura Básica de um Programa C# com exemplos