Files
dataset/softwares/test/meteorologia_aeroportos/README.md
kolmeasi 77ec04cc43 V1.0
2026-05-31 18:57:03 -03:00

329 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Dataset IED — Meteorologia e Transporte Aéreo Brasileiro
Plataforma de coleta, processamento e visualização de dados meteorológicos e de transporte aéreo brasileiro, com foco em aeroportos operados pelo sistema DECEA/ICEA.
---
## Sumário
- [Pré-requisitos](#pré-requisitos)
- [Instalação](#instalação)
- [Estrutura do Projeto](#estrutura-do-projeto)
- [Módulos e Uso](#módulos-e-uso)
- [Scraper de Meteorologia](#1-scraper-de-meteorologia)
- [Pipeline Completo](#2-pipeline-completo)
- [Concatenação de CSVs](#3-concatenação-de-csvs)
- [Dashboard Interativo](#4-dashboard-interativo)
- [Diagnóstico de Outliers](#5-diagnóstico-de-outliers)
- [Banco de Dados](#banco-de-dados)
- [Categorias ICAO](#categorias-icao)
- [Solução de Problemas](#solução-de-problemas)
---
## Pré-requisitos
| Requisito | Versão mínima | Observação |
|-----------|--------------|------------|
| Python | 3.10+ | [python.org](https://www.python.org/downloads/) |
| Google Chrome | Qualquer versão recente | Necessário para o Selenium (scraper) |
| Git | Qualquer | Para clonar o repositório |
> O `webdriver-manager` baixa automaticamente o ChromeDriver compatível com a versão do Chrome instalada. Não é necessário instalar o ChromeDriver manualmente.
---
## Instalação
### 1. Clonar o repositório
```bash
git clone ssh://git@git.ppgao.ita.br:2222/reboucassr/dataset.git
cd dataset
```
> Caso não tenha acesso SSH configurado, solicite ao administrador a chave de acesso ou use HTTPS se disponível.
### 2. Criar e ativar o ambiente virtual
Navegue até o diretório do módulo de meteorologia:
```bash
cd softwares/test
```
**Windows (PowerShell):**
```powershell
python -m venv .venv # Instala o ambiente virtual no Windows
.\.venv\Scripts\Activate.ps1 # Ativa o ambiente virtual
```
**Linux / macOS:**
```bash
python3 -m venv .venv
source .venv/bin/activate # Para Linux e macOS
```
> No Windows, se receber erro de política de execução, execute antes:
> `Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser`
### 3. Instalar dependências
Com o ambiente virtual ativado:
```PowerShell
pip install -r requirements.txt
```
Principais pacotes instalados:
| Pacote | Finalidade |
|--------|-----------|
| `selenium` | Automação do navegador para scraping |
| `webdriver-manager` | Gerencia o ChromeDriver automaticamente |
| `beautifulsoup4` + `lxml` | Parsing de HTML |
| `pandas` | Processamento e análise de dados |
| `streamlit` | Dashboard interativo |
| `plotly` | Gráficos interativos |
---
### 4. Executar o projeto
Com o ambiente virtual ativado:
```PowerShell
cd meteorologia_aeroportos
streamlit run dashboard.py
```
> O dashboard será executado na porta 8501.
## Estrutura do Projeto
```
dataset/
├── softwares/
│ └── test/
│ └── meteorologia_aeroportos/
│ ├── dados/ # Banco SQLite + CSVs por aeródromo
│ │ ├── met.db # Banco de dados principal
│ │ ├── SBGR/ # CSVs do aeroporto de Guarulhos
│ │ └── SBAN/ # CSVs de outros aeródromos
│ ├── scraper_meteorologia.py # Coleta dados do ICEA/DECEA
│ ├── pipeline.py # Orquestrador completo
│ ├── concat_meteorologia.py # Mescla arquivos CSV
│ ├── db.py # Lógica do banco SQLite
│ ├── dashboard.py # Dashboard Streamlit
│ ├── _diag_outliers.py # Diagnóstico de qualidade
│ └── requirements.txt
├── tabelas/
│ ├── raw/ # Dados brutos ANAC
│ ├── preproc/ # Dados intermediários
│ └── proc/ # Dados processados finais
└── textos/
├── artigos/ # Artigos acadêmicos
├── livros/
└── relatorios/ # Relatórios ANAC e setor
```
---
## Módulos e Uso
> Todos os comandos abaixo devem ser executados a partir do diretório `softwares/test/meteorologia_aeroportos/`, com o ambiente virtual ativado.
### 1. Scraper de Meteorologia
Coleta dados de superfície horários do portal ICEA/DECEA para um dado aeródromo.
**Coletar todos os anos disponíveis:**
```bash
python scraper_meteorologia.py --aerodrome SBGR --all-years
```
**Coletar um intervalo de anos específico:**
```bash
python scraper_meteorologia.py --aerodrome SBGR --start-year 2020 --end-year 2025
```
**Executar com navegador visível (sem modo headless — útil para depuração):**
```bash
python scraper_meteorologia.py --aerodrome SBGR --start-year 2023 --end-year 2023 --no-headless
```
**Parâmetros disponíveis:**
| Parâmetro | Tipo | Descrição |
|-----------|------|-----------|
| `--aerodrome` | string | Código ICAO do aeródromo (ex: `SBGR`, `SBSP`, `SBAN`) |
| `--all-years` | flag | Coleta desde o início do histórico disponível |
| `--start-year` | int | Ano inicial do intervalo |
| `--end-year` | int | Ano final do intervalo |
| `--no-headless` | flag | Abre o Chrome de forma visível |
Os arquivos CSV são salvos em `dados/{CÓDIGO_ICAO}/`.
---
### 2. Pipeline Completo
Orquestra todo o fluxo: verifica cobertura existente, executa scraping incremental, valida dados com limites físicos, calcula variáveis analíticas e persiste no banco SQLite.
**Processar todos os anos para um aeródromo:**
```bash
python pipeline.py --aerodrome SBGR --all-years
```
**Processar intervalo específico:**
```bash
python pipeline.py --aerodrome SBGR --start-year 2020 --end-year 2025
```
**Manter arquivos temporários após o processamento:**
```bash
python pipeline.py --aerodrome SBGR --all-years --no-cleanup
```
**Parâmetros disponíveis:**
| Parâmetro | Tipo | Descrição |
|-----------|------|-----------|
| `--aerodrome` | string | Código ICAO do aeródromo |
| `--all-years` | flag | Processa todo o histórico disponível |
| `--start-year` | int | Ano inicial |
| `--end-year` | int | Ano final |
| `--no-cleanup` | flag | Mantém CSVs intermediários após upsert |
> **Recomendado para uso normal.** O pipeline é idempotente: pode ser executado múltiplas vezes sem duplicar dados.
---
### 3. Concatenação de CSVs
Mescla os arquivos CSV trimestrais baixados pelo scraper em uma tabela única por aeródromo.
```bash
python concat_meteorologia.py --dados-dir dados --validate --cleanup
```
**Parâmetros:**
| Parâmetro | Tipo | Descrição |
|-----------|------|-----------|
| `--dados-dir` | string | Diretório raiz dos CSVs (padrão: `dados`) |
| `--validate` | flag | Aplica validação por limites físicos |
| `--cleanup` | flag | Remove arquivos temporários após concatenação |
> Este passo é executado automaticamente pelo `pipeline.py`. Use-o de forma isolada apenas se precisar reprocessar os CSVs sem coletar novos dados.
---
### 4. Dashboard Interativo
Interface web para análise e visualização das séries temporais meteorológicas.
```bash
streamlit run dashboard.py
```
Acesse no navegador: **http://localhost:8501**
**Funcionalidades do dashboard:**
- Seleção de aeródromo e variável meteorológica
- Reamostagem temporal: Horária, Diária, Semanal, Mensal
- Gráficos de série temporal interativos (Plotly)
- Rosa dos ventos
- Análise de teto e visibilidade com classificação ICAO
- Distribuição estatística por variável
---
### 5. Diagnóstico de Outliers
Analisa a qualidade dos dados no banco, exibindo estatísticas sobre valores tratados por limites físicos.
```bash
python _diag_outliers.py
```
Exibe contagens e proporções de outliers registrados na tabela `outlier_log` por variável meteorológica.
---
## Banco de Dados
O banco SQLite (`dados/met.db`) possui três tabelas:
| Tabela | Descrição |
|--------|-----------|
| `observations` | Série temporal horária com 10 variáveis meteorológicas |
| `outlier_log` | Registro de valores anômalos tratados (auditoria) |
| `aerodromes` | Catálogo de aeródromos disponíveis |
**Variáveis na tabela `observations`:**
| Coluna | Descrição | Unidade |
|--------|-----------|---------|
| `T` | Temperatura | °C |
| `Td` | Ponto de orvalho | °C |
| `UR` | Umidade relativa | % |
| `QNH` | Pressão atmosférica | hPa |
| `WS` | Velocidade do vento | kt |
| `WG` | Rajada de vento | kt |
| `WD` | Direção do vento | graus |
| `VIS` | Visibilidade | dam |
| `TETO` | Teto de nuvens | dam |
| `PREC` | Precipitação acumulada | mm |
---
## Categorias ICAO
O dashboard classifica as condições meteorológicas segundo os critérios ICAO:
| Categoria | Teto (dam) | Visibilidade (dam) | Condição |
|-----------|------------|-------------------|----------|
| **LIFR** | < 31 | < 16 | IFR Severo |
| **IFR** | 3191 | 1648 | Voo por instrumentos |
| **MVFR** | 91300 | 48800 | VFR Marginal |
| **VMC** | > 300 | > 800 | Condições visuais |
---
## Solução de Problemas
**Erro de ChromeDriver / Selenium:**
- Verifique se o Google Chrome está instalado na máquina.
- O `webdriver-manager` tentará baixar o ChromeDriver automaticamente; verifique se há acesso à internet.
- Em ambientes corporativos com proxy, pode ser necessário configurar `HTTP_PROXY` / `HTTPS_PROXY`.
**Erro ao ativar o ambiente virtual no Windows:**
```powershell
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
```
**Dashboard não abre / porta ocupada:**
```bash
streamlit run dashboard.py --server.port 8502
```
**Banco de dados não encontrado:**
- Execute o `pipeline.py` ao menos uma vez para criar e popular o banco `dados/met.db`.
**Dados ausentes para um aeródromo:**
- Verifique se o código ICAO está correto e disponível no portal ICEA: https://pesquisa.icea.decea.mil.br/superficie_list/
- Nem todos os aeródromos possuem histórico completo desde 1947.
---
## Fonte dos Dados
- **Meteorologia:** Portal ICEA/DECEA — https://pesquisa.icea.decea.mil.br/superficie_list/
- **Transporte Aéreo:** ANAC — Relatório Anual 2024 e séries históricas de demanda e oferta
---
*Projeto de pesquisa acadêmica — IED / ITA*