V.1.0
This commit is contained in:
@@ -1,328 +1,143 @@
|
||||
# Dataset IED — Meteorologia e Transporte Aéreo Brasileiro
|
||||
# Meteorologia de Superfície — Aeródromos Brasileiros
|
||||
|
||||
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.
|
||||
Coleta, processa e visualiza dados meteorológicos horários de aeródromos brasileiros a partir do portal de dados de superfície do ICEA/DECEA.
|
||||
|
||||
---
|
||||
|
||||
## Sumário
|
||||
## Início rápido
|
||||
|
||||
- [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)
|
||||
Clone o repositório, entre na pasta do módulo e execute:
|
||||
|
||||
---
|
||||
|
||||
## 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
|
||||
**Windows**
|
||||
```
|
||||
run\run.bat
|
||||
```
|
||||
|
||||
**Linux / macOS**
|
||||
```bash
|
||||
git clone ssh://git@git.ppgao.ita.br:2222/reboucassr/dataset.git
|
||||
cd dataset
|
||||
chmod +x run/run.sh && ./run/run.sh
|
||||
```
|
||||
|
||||
> Caso não tenha acesso SSH configurado, solicite ao administrador a chave de acesso ou use HTTPS se disponível.
|
||||
O script cria o ambiente virtual, instala as dependências e abre o dashboard em **http://localhost:8501**.
|
||||
|
||||
### 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 |
|
||||
> **Pré-requisito:** Python 3.10+ e Google Chrome instalados.
|
||||
|
||||
---
|
||||
### 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
|
||||
## Estrutura
|
||||
|
||||
```
|
||||
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
|
||||
meteorologia_aeroportos/
|
||||
├── README.md este arquivo
|
||||
├── LICENSE MIT License
|
||||
├── docs/ documentação técnica e autoria
|
||||
├── _apps/ módulos Python
|
||||
│ ├── dashboard.py dashboard interativo (Streamlit)
|
||||
│ ├── pipeline.py orquestrador completo
|
||||
│ ├── scraper_meteorologia.py coleta de dados via web
|
||||
│ ├── concat_meteorologia.py concatenação de CSVs
|
||||
│ ├── db.py camada SQLite
|
||||
│ └── _diag_outliers.py diagnóstico de qualidade
|
||||
├── run/
|
||||
│ ├── run.bat inicialização Windows
|
||||
│ └── run.sh inicialização Linux/macOS
|
||||
├── env/
|
||||
│ └── requirements.txt
|
||||
└── db/
|
||||
├── met.db banco SQLite principal
|
||||
└── dados/ CSVs temporários (removidos após coleta)
|
||||
```
|
||||
|
||||
CSVs analíticos permanentes ficam fora da pasta do módulo:
|
||||
```
|
||||
dataset/tabelas/preproc/meteorologia_aeroportos/<ICAO>/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Módulos e Uso
|
||||
## Uso via linha de comando
|
||||
|
||||
> Todos os comandos abaixo devem ser executados a partir do diretório `softwares/test/meteorologia_aeroportos/`, com o ambiente virtual ativado.
|
||||
Todos os comandos são executados a partir da pasta `meteorologia_aeroportos/`.
|
||||
|
||||
### 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:**
|
||||
**Coletar histórico completo de um aeródromo:**
|
||||
```bash
|
||||
python scraper_meteorologia.py --aerodrome SBGR --all-years
|
||||
python _apps/pipeline.py --aerodrome SBGR --all-years
|
||||
```
|
||||
|
||||
**Coletar um intervalo de anos específico:**
|
||||
**Coletar um intervalo de anos:**
|
||||
```bash
|
||||
python scraper_meteorologia.py --aerodrome SBGR --start-year 2020 --end-year 2025
|
||||
python _apps/pipeline.py --aerodrome SBGR --start-year 2020 --end-year 2025
|
||||
```
|
||||
|
||||
**Executar com navegador visível (sem modo headless — útil para depuração):**
|
||||
**Abrir o dashboard:**
|
||||
```bash
|
||||
python scraper_meteorologia.py --aerodrome SBGR --start-year 2023 --end-year 2023 --no-headless
|
||||
streamlit run _apps/dashboard.py
|
||||
```
|
||||
|
||||
**Parâmetros disponíveis:**
|
||||
**Diagnóstico de qualidade do banco:**
|
||||
```bash
|
||||
python _apps/_diag_outliers.py
|
||||
```
|
||||
|
||||
| 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}/`.
|
||||
| Parâmetro | Descrição |
|
||||
|-----------|-----------|
|
||||
| `--aerodrome` | Código ICAO (ex: `SBGR`, `SBSP`) |
|
||||
| `--all-years` | Coleta todo o histórico disponível |
|
||||
| `--start-year` / `--end-year` | Intervalo de anos |
|
||||
| `--no-headless` | Abre o Chrome de forma visível (debug) |
|
||||
| `--no-cleanup` | Mantém CSVs trimestrais intermediários |
|
||||
|
||||
---
|
||||
|
||||
### 2. Pipeline Completo
|
||||
## Banco de dados
|
||||
|
||||
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.
|
||||
`db/met.db` — SQLite com três tabelas:
|
||||
|
||||
**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 |
|
||||
| Tabela | Conteúdo |
|
||||
|--------|----------|
|
||||
| `observations` | Série temporal horária (10 variáveis por observação) |
|
||||
| `outlier_log` | Auditoria de valores tratados por limites físicos |
|
||||
| `aerodromes` | Catálogo de aeródromos disponíveis no portal ICEA |
|
||||
|
||||
**Variáveis na tabela `observations`:**
|
||||
|
||||
| Coluna | Descrição | Unidade |
|
||||
|--------|-----------|---------|
|
||||
| `T` | Temperatura | °C |
|
||||
| `T` | Temperatura do bulbo seco | °C |
|
||||
| `Td` | Ponto de orvalho | °C |
|
||||
| `UR` | Umidade relativa | % |
|
||||
| `QNH` | Pressão atmosférica | hPa |
|
||||
| `QNH` | Pressão atmosférica ao nível do mar | hPa |
|
||||
| `WS` | Velocidade do vento | kt |
|
||||
| `WG` | Rajada de vento | kt |
|
||||
| `WD` | Direção do vento | graus |
|
||||
| `VIS` | Visibilidade | dam |
|
||||
| `WG` | Rajada máxima de vento | kt |
|
||||
| `WD` | Direção do vento | ° |
|
||||
| `VIS` | Visibilidade predominante | 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:
|
||||
## Categorias ICAO de condições de voo
|
||||
|
||||
| Categoria | Teto (dam) | Visibilidade (dam) | Condição |
|
||||
|-----------|------------|-------------------|----------|
|
||||
| **LIFR** | < 31 | < 16 | IFR Severo |
|
||||
| **IFR** | 31–91 | 16–48 | Voo por instrumentos |
|
||||
| **MVFR** | 91–300 | 48–800 | VFR Marginal |
|
||||
| **VMC** | > 300 | > 800 | Condições visuais |
|
||||
| **LIFR** | < 15 | < 50 | IFR Severo |
|
||||
| **IFR** | 15–30 | 50–100 | Voo por instrumentos |
|
||||
| **MVFR** | 30–100 | 100–300 | VFR Marginal |
|
||||
| **VMC** | > 100 | > 300 | Condições visuais |
|
||||
|
||||
---
|
||||
|
||||
## Solução de Problemas
|
||||
## Documentação e autoria
|
||||
|
||||
**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.
|
||||
- [`docs/about.md`](docs/about.md) — descrição técnica detalhada, limitações e oportunidades de melhoria
|
||||
- [`docs/authors.md`](docs/authors.md) — autoria, licença e guia para contribuições futuras
|
||||
- [`docs/changelog.md`](docs/changelog.md) — histórico de versões por autor
|
||||
|
||||
---
|
||||
|
||||
## Fonte dos Dados
|
||||
## 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
|
||||
Portal ICEA/DECEA — Dados de Superfície:
|
||||
**https://pesquisa.icea.decea.mil.br/superficie_list/**
|
||||
|
||||
---
|
||||
|
||||
*Projeto de pesquisa acadêmica — IED / ITA*
|
||||
*IED — Instituto de Estudos para o Desenvolvimento · ITA — Instituto Tecnológico de Aeronáutica*
|
||||
|
||||
Reference in New Issue
Block a user