# Aula 06 — Python para Dados

Material completo da aula que conecta arquivos CSV, tratamento, validação, bancos, APIs, dashboards, orquestração, processamento distribuído e machine learning em exemplos reproduzíveis.

## Estrutura

```text
aula06/
├── aula-06-python-para-dados.html
├── python-3.12.7-amd64.exe
├── dados/
│   ├── clientes.csv
│   ├── produtos.csv
│   ├── vendas.csv
│   └── api.json
├── exemplos/
│   └── 01_pandas.py ... 13_projeto_final.py
├── projeto_bcb/
│   ├── pipeline.py
│   ├── dashboard.py
│   ├── dados/indicadores_bcb_amostra.csv
│   └── README.md
├── saida/
├── .env.example
└── requirements.txt
```

## 1. Instalar o Python

A pasta já inclui `python-3.12.7-amd64.exe` para instalação offline no Windows. Como alternativa, baixe uma versão estável em [python.org/downloads](https://www.python.org/downloads/).

Durante a instalação no Windows, marque **Add Python to PATH**. Confirme:

```powershell
python --version
```

Os exemplos principais foram preparados para Python 3.12. Airflow e PySpark podem impor limites adicionais conforme a versão e o sistema operacional.

## 2. Abrir a pasta no VS Code

No VS Code, escolha **Arquivo → Abrir Pasta** e selecione `aula06`. Depois use **Terminal → Novo Terminal**.

## 3. Criar e ativar o ambiente virtual

Windows PowerShell:

```powershell
python -m venv .venv

# Execute uma vez somente se o PowerShell bloquear scripts locais.
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

.venv\Scripts\Activate.ps1
```

Linux ou macOS:

```bash
python3 -m venv .venv
source .venv/bin/activate
```

A política `RemoteSigned` permite scripts locais e exige assinatura para scripts baixados da internet. A alteração vale para o usuário atual do Windows.

## 4. Instalar dependências

```powershell
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
```

O requisito fixa `pandas<3.0` porque o PySpark ainda alerta sobre suporte incompleto ao pandas 3.

## 5. Executar os exemplos

Os scripts usam `pathlib`, portanto podem ser iniciados da pasta `aula06` sem editar caminhos.

```powershell
python exemplos/01_pandas.py
python exemplos/02_polars.py
python exemplos/03_pathlib.py
python exemplos/04_dotenv.py
python exemplos/05_pydantic.py
python exemplos/06_sqlalchemy.py
python exemplos/07_requests.py
python exemplos/09_prefect.py
python exemplos/10_airflow.py
python exemplos/11_pyspark.py
python exemplos/12_sklearn.py
python exemplos/13_projeto_final.py
```

Os arquivos gerados ficam em `saida/`.

## 6. Executar o dashboard Streamlit

```powershell
streamlit run exemplos/08_streamlit.py
```

O navegador abre um painel com filtros, indicadores, gráfico e tabela baseados em `vendas.csv`.

## 7. Acompanhar o Prefect pela interface

Use dois terminais com o ambiente virtual ativo.

Terminal 1:

```powershell
prefect server start
```

Terminal 2:

```powershell
prefect config set PREFECT_API_URL="http://127.0.0.1:4200/api"
python exemplos/09_prefect.py
```

Abra [http://127.0.0.1:4200](http://127.0.0.1:4200) ou execute `prefect dashboard open`. A interface mostra estados, duração, tarefas e logs. Encerre o servidor com **Ctrl+C**.

## 8. Usar SQLite ou um banco real no SQLAlchemy

Copie o modelo local:

```powershell
Copy-Item .env.example .env
```

Com `DATABASE_URL` vazio, `06_sqlalchemy.py` cria `saida/vendas.db`. Para usar seu banco, defina uma URL SQLAlchemy no `.env` e instale o driver correspondente.

PostgreSQL:

```powershell
python -m pip install "psycopg[binary]"
# DATABASE_URL=postgresql+psycopg://usuario:senha@localhost:5432/meubanco
```

MySQL:

```powershell
python -m pip install pymysql
# DATABASE_URL=mysql+pymysql://usuario:senha@localhost:3306/meubanco
```

SQL Server:

```powershell
python -m pip install pyodbc
# Instale também o ODBC Driver 18 for SQL Server.
```

O exemplo recria somente a tabela configurada em `DATABASE_TABLE`, cujo padrão é `vendas_aula06`. Não use o nome de uma tabela importante.

## 9. API e funcionamento sem internet

`07_requests.py` tenta consultar JSONPlaceholder. Se a internet estiver indisponível, usa automaticamente `dados/api.json`.

O projeto BCB também possui uma fotografia oficial local para que a demonstração continue após as tentativas do Prefect.

## 10. Airflow no Windows

`10_airflow.py` constrói uma DAG e lista tarefas. Para executar scheduler e interface no Windows, use WSL2 ou Docker. A instalação base do `requirements.txt` exclui Airflow no Windows de propósito.

## 11. Entender os avisos do PySpark

O PySpark precisa de Java e `JAVA_HOME`. No modo local do Windows, estes avisos podem aparecer mesmo quando o resultado está correto:

- `Using incubator modules: jdk.incubator.vector`: mensagem do Java 21; informativa.
- `Did not find winutils.exe` e `Unable to load native-hadoop library`: Spark usa classes Java internas; é aceitável nesta leitura local de CSV, mas recursos específicos do Hadoop exigem configuração própria.
- aviso sobre `pandas >= 3.0`: resolvido pelo limite `pandas<3.0` do `requirements.txt`.

O script reduz os logs após iniciar a sessão e sempre chama `spark.stop()` para encerrar os processos Java. Se Java ou Spark falharem, ele demonstra a mesma agregação em Pandas.

## 12. Projeto-vitrine com dados oficiais

O diretório `projeto_bcb/` apresenta um fluxo maior:

```text
BCB SGS → Prefect → Pandas → scikit-learn → SQLAlchemy → Streamlit
```

Execute:

```powershell
python projeto_bcb/pipeline.py
streamlit run projeto_bcb/dashboard.py
```

Veja os detalhes e o roteiro de apresentação em [projeto_bcb/README.md](projeto_bcb/README.md).

## Ordem de estudo sugerida

1. Pandas e Polars para DataFrames.
2. Pathlib e dotenv para organização e configuração.
3. Pydantic para contratos de dados.
4. SQLAlchemy para persistência.
5. Requests para APIs.
6. Streamlit para interface.
7. Prefect e Airflow para orquestração.
8. PySpark para escala.
9. Scikit-learn para modelagem.
10. Projetos integrados para conectar as etapas.

## Fontes técnicas principais

- [Python](https://docs.python.org/3/)
- [Pandas](https://pandas.pydata.org/docs/)
- [Polars](https://docs.pola.rs/)
- [Pydantic](https://docs.pydantic.dev/)
- [SQLAlchemy](https://docs.sqlalchemy.org/)
- [Requests](https://requests.readthedocs.io/)
- [Streamlit](https://docs.streamlit.io/)
- [Prefect](https://docs.prefect.io/)
- [Apache Airflow](https://airflow.apache.org/docs/)
- [Apache Spark](https://spark.apache.org/docs/latest/)
- [Scikit-learn](https://scikit-learn.org/stable/)
- [Dados Abertos do Banco Central do Brasil](https://dadosabertos.bcb.gov.br/)
