Visualização editorial de notificações de dengue (SINAN) nos 9 estados do Nordeste, com mapas coropléticos, clusters semanais (K-means) e histórico anual.
Stack: Python (FastAPI + pandas + scikit-learn) · React (Vite + Leaflet + Recharts)
| Parte | Caminho | Função |
|---|---|---|
| Dados brutos (não versionados) | data/raw/DENGBR*.csv |
CSVs nacionais do SINAN, um por ano |
| Cache de processamento | data/cache/ |
Malhas IBGE, JSONs, clusters (gerado localmente) |
| CSVs por estado | data/processed/{uf}/raw/ |
Extraídos do DENGBR por UF |
| Backend | backend/ |
API FastAPI com processamento on-demand |
| Frontend | web/ |
Dashboard React |
| Scripts | scripts/ |
Download de dados, build em lote, API |
Os arquivos DENGBR*.csv são grandes (o de 2024 passa de 1,7 GB). Não entram no Git — baixe com o script descrito abaixo.
Fonte oficial dos dados: Arboviroses — Dengue (Portal de Dados Abertos / OpenDataSUS / SINAN).
- Python 3.11+ (o projeto usa 3.12 em
.python-version) - Node.js 18+ e npm (para o frontend)
- Git
- ~15 GB de disco livre se for baixar todos os anos (2016–2026) e pré-processar o Nordeste
- Conexão estável com a internet (downloads e malhas IBGE)
Opcional, mas recomendado: uv — gerenciador rápido de ambientes Python.
git clone <URL_DO_REPOSITORIO> ia-iv
cd ia-ivEscolha uma das opções abaixo. Todos os comandos Python do projeto assumem que você está na raiz (ia-iv/).
# Instalar uv (se ainda não tiver): https://docs.astral.sh/uv/getting-started/installation/
curl -LsSf https://astral.sh/uv/install.sh | sh
# Criar venv e instalar dependências do pyproject.toml
uv sync
# Rodar qualquer script:
uv run python scripts/download_raw.py --helppython3 -m venv .venv
source .venv/bin/activate # Linux/macOS
# .venv\Scripts\activate # Windows PowerShell
pip install -U pip
pip install pandas numpy scipy scikit-learn matplotlib seaborn jupyter \
ipykernel nbconvert requests folium plotly streamlit streamlit-folium \
fastapi "uvicorn[standard]"
# Daqui em diante, com o venv ativo:
python scripts/download_raw.py --helpNota: Com
uv run, não é necessárioactivate. Compip, ative o.venvantes de cada sessão.
Os arquivos esperados ficam em data/raw/ com estes nomes:
data/raw/DENGBR16.csv
data/raw/DENGBR17.csv
...
data/raw/DENGBR26.csv
# Todos os anos usados pelo projeto (2016–2026) — demora e ocupa bastante disco
uv run python scripts/download_raw.py
# Só alguns anos (útil para testar)
uv run python scripts/download_raw.py --years 2024 2025
# Ver URLs descobertas no portal
uv run python scripts/download_raw.py --list
# Baixar de novo mesmo se o CSV já existir
uv run python scripts/download_raw.py --years 2024 --forceO script:
- Consulta a página do conjunto arboviroses-dengue
- Baixa o
.csv.zipdo bucket S3 do Ministério da Saúde - Extrai para
data/raw/DENGBR{aa}.csv - Valida se o cabeçalho contém
SG_UF_NOT,ID_MUNICIP,DT_NOTIFIC,SEM_NOT
Se o script falhar (rede, firewall, S3 indisponível):
- Acesse dados.gov.br → Arboviroses/Dengue ou dadosabertos.saude.gov.br/dataset/arboviroses-dengue
- Baixe o recurso CSV do ano desejado (ex.: “Dengue - 2024”)
- Se vier em ZIP, extraia o arquivo
- Renomeie/coloque como
data/raw/DENGBR24.csv(dois dígitos do ano)
A API consegue processar on-demand (baixa malha IBGE, extrai UF, calcula clusters na primeira requisição). Para evitar espera longa na interface, rode o build em lote:
# Um ano, todas as UFs do NE (padrão: 2024)
uv run python scripts/build_nordeste.py
# Vários anos, paralelo por estado
uv run python scripts/build_nordeste.py \
--workers 4 \
--years 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026
# Só alguns estados
uv run python scripts/build_nordeste.py --states BA CE --years 2024
# Reprocessar tudo (ignora checkpoint)
uv run python scripts/build_nordeste.py --force --years 2024- Retomável: interrompeu (
Ctrl+C)? Rode o mesmo comando de novo — usadata/cache/checkpoint.json - Saída:
data/cache/(geo, export, cluster) edata/processed/{uf}/raw/DENG{UF}{aa}.csv
Estados do Nordeste: MA, PI, CE, RN, PB, PE, AL, SE, BA.
uv run python scripts/run_api.py --reload- URL: http://127.0.0.1:8000
- Documentação interativa: http://127.0.0.1:8000/docs
- Endpoints principais:
GET /api/meta/anosGET /api/region/geo?ano=2024GET /api/{uf}/cluster/weekly?ano=2024&k=4
Deixe este terminal aberto.
Em outro terminal, na pasta web/:
cd web
npm install
npm run dev- URL: http://127.0.0.1:5173
- O Vite faz proxy de
/api→http://127.0.0.1:8000(verweb/vite.config.ts)
Build de produção:
cd web
npm run build
npm run preview# 1. Clone
git clone <URL_DO_REPOSITORIO> ia-iv && cd ia-iv
# 2. Python
uv sync
# 3. Dados (escolha: todos os anos OU só 2024 para teste rápido)
uv run python scripts/download_raw.py --years 2024
# uv run python scripts/download_raw.py # todos 2016–2026
# 4. (Opcional) Pré-build
uv run python scripts/build_nordeste.py --workers 4 --years 2024
# 5. API — terminal 1
uv run python scripts/run_api.py --reload
# 6. Web — terminal 2
cd web && npm install && npm run devAbra http://127.0.0.1:5173.
ia-iv/
├── backend/ # FastAPI, pipeline, cluster, geo
├── web/ # React + Vite
├── scripts/
│ ├── download_raw.py # ← baixa DENGBR*.csv
│ ├── build_nordeste.py # pré-processamento NE
│ └── run_api.py # sobe uvicorn
├── data/
│ ├── raw/ # DENGBR*.csv (gitignored)
│ ├── processed/ # CSVs por UF (gitignored)
│ └── cache/ # geo, export, cluster (gitignored)
├── notebooks/ # análises exploratórias
└── pyproject.toml
Rode uv run python scripts/download_raw.py ou baixe manualmente do portal (seção 3).
Normal: está extraindo UF, baixando malha IBGE e calculando clusters. Rode build_nordeste.py antes ou aguarde; depois usa cache em data/cache/.
Se você já tem outro venv ativo, use deactivate ou uv sync na raiz do projeto para o uv criar .venv local.
Confirme que a API está em http://127.0.0.1:8000 e o proxy do Vite aponta para ela. Teste: curl http://127.0.0.1:8000/api/meta/anos
- Tente de novo mais tarde (bucket S3 do MS)
- Use
--yearscom um ano só para isolar o problema - Baixe manualmente pelo portal e coloque em
data/raw/
Só 2024 + cache do NE ≈ poucos GB. Todos os anos nacionais + build completo ≈ dezenas de GB. Use --years com recorte menor.
uv run jupyter lab notebooks/Ex.: notebooks/analise_bases.ipynb inventaria os DENGBR*.csv em data/raw/.
- Código do projeto: conforme repositório.
- Dados SINAN/Dengue: Creative Commons Atribuição-SemDerivações 3.0 — Ministério da Saúde / DATASUS.
Ao publicar análises, cite a fonte: SINAN — Arboviroses/Dengue, Portal de Dados Abertos do SUS.