# Dataset: Monitoramento de Motores Industriais

Documentacao do banco de dados `motor.db`, utilizado ao longo do curso para treinar o classificador de falhas em motores.

## Visao Geral

| Item | Valor |
|------|-------|
| Formato | SQLite (arquivo unico) |
| Arquivo | `data/motor.db` |
| Tabelas | `motores`, `leituras`, `tipos_falha` |
| Motores monitorados | 20 |
| Total de leituras | 30.000 |
| Frequencia de coleta | 1 leitura por minuto, por motor |
| Periodo coberto | 2026-01-01 00:00 a 2026-01-02 00:59 (25 horas) |
| Valores nulos | Nenhum |

Cada motor possui 1.500 leituras consecutivas de sensores. A variavel alvo e a coluna `falha` da tabela `leituras`, com quatro classes possiveis.

## Tabelas

### motores

Cadastro dos 20 motores monitorados. Os fabricantes sao ABB, Siemens, Toshiba e WEG (5 motores de cada), com potencia nominal entre 7,5 e 22 kW e instalacao entre 2018 e 2025.

| Coluna | Tipo | Descricao |
|--------|------|-----------|
| motor_id | INTEGER | Identificador unico do motor (chave primaria) |
| fabricante | TEXT | Fabricante do motor |
| modelo | TEXT | Modelo do motor |
| potencia_kw | REAL | Potencia nominal em kW |
| ano_instalacao | INTEGER | Ano de instalacao |

### leituras

Leituras dos sensores, uma linha por minuto por motor. Possui indice em `(motor_id, timestamp)` para acelerar consultas por motor.

| Coluna | Tipo | Descricao |
|--------|------|-----------|
| motor_id | INTEGER | Referencia ao motor (tabela `motores`) |
| timestamp | TIMESTAMP | Data e hora da leitura |
| rotacao_rpm | REAL | Rotacao em RPM |
| vibracao_mm_s | REAL | Vibracao em mm/s |
| temperatura_c | REAL | Temperatura em graus Celsius |
| corrente_a | REAL | Corrente eletrica em Amperes |
| falha | INTEGER | Classe alvo (0 a 3, ver tabela `tipos_falha`) |

### tipos_falha

Dicionario das classes da variavel alvo.

| Codigo | Nome | Descricao |
|--------|------|-----------|
| 0 | Normal | Operacao dentro dos parametros esperados |
| 1 | Desbalanceamento | Vibracao alta e rotacao instavel |
| 2 | Superaquecimento | Temperatura e corrente elevadas |
| 3 | Falha mecanica | Queda de rotacao com vibracao e corrente altas |

## Distribuicao das Classes

O dataset e fortemente desbalanceado: a classe Normal representa quase 88% das leituras. Isso deve ser considerado no treinamento (por exemplo, com `class_weight="balanced"`) e na escolha de metricas (F1 macro em vez de accuracy).

| Classe | Leituras | Percentual |
|--------|----------|------------|
| Normal | 26.291 | 87,6% |
| Desbalanceamento | 1.205 | 4,0% |
| Superaquecimento | 1.718 | 5,7% |
| Falha mecanica | 786 | 2,6% |

## Faixas dos Sensores

Valores observados no conjunto completo de leituras.

| Sensor | Minimo | Media | Maximo |
|--------|--------|-------|--------|
| rotacao_rpm | 1.358,7 | 1.769,7 | 2.018,4 |
| vibracao_mm_s | 0,65 | 3,02 | 13,50 |
| temperatura_c | 52,3 | 69,4 | 108,1 |
| corrente_a | 8,08 | 12,51 | 19,74 |

## Como Acessar

Via linha de comando:

```bash
sqlite3 data/motor.db "SELECT * FROM leituras LIMIT 5;"
```

Via Python, usando o modulo do projeto (retorna as leituras ja com o join no cadastro de motores):

```python
from src.functions.database import load_data

df = load_data()
```

## Observacoes

- Os dados sao sinteticos, gerados para fins didaticos do curso.
- Nao ha valores nulos nem duplicatas de `(motor_id, timestamp)`.
- Por se tratar de serie temporal por motor, o split treino/teste deve evitar vazamento temporal (ver `src/utils/preprocessing.py`).
