A sessão começa com o Excel como ponto de entrada dos dados, explicando que na vida real os dados chegam de várias fontes e formatos, muitas vezes desorganizados.
Fazemos a ingestão de 3 ficheiros diferentes, simulando um cenário real de operação da MozChapa100 — a unidade de transporte de passageiros (chapas) do grupo MozBikes — e construímos um pipeline completo até ao dashboard.
📦 mozchapa100-pipeline
┣ 📓 Exercício_Criar_Dataset_COM_PROMPT.ipynb ← Part 0: Geração de dados com erros
┣ 📓 Exercício_of_MozDev_Cleaning.ipynb ← Part 1: Ingestão, SQL e limpeza
┗ 📁 Dataset & Cleaning/
┣ 📊 MozChapa100_Tutorial-Main.xlsx ← Dashboard analítico final (STELA)
┗ 📁 Dashboard & Insight/
┗ img1.png
| Ferramenta | Papel no pipeline |
|---|---|
| Excel | Ponto de entrada dos dados e dashboard final |
| Python (Jupyter / Colab) | Geração, manipulação e automação |
| pandas + openpyxl | Leitura de ficheiros .xlsx e criação de DataFrames |
| sqlite3 / JupySQL | Base de dados local, JOINs, limpeza com SQL |
| IA (Gemini / Claude) | Copiloto de programação — Vibe Coding |
📊 EXCEL 🐍 PYTHON 🗄️ SQL 📊 EXCEL
(3 ficheiros) ──► (pandas) ──► (SQLite) ──► (Dashboard)
Segmentos.xlsx pd.read_excel() CREATE TABLE Tabela limpa
Vendas.xlsx ──► .to_sql() ──► JOIN + GROUP ──► Gráficos
Rotas.xlsx limpeza BY agregação Insights
[ENTRADA] [INGESTÃO] [ANÁLISE] [SAÍDA]
Geração de dados simulados com erros propositados
Este notebook cria os 3 ficheiros Excel que alimentam o pipeline, injectando 3 tipos de erros para simular dados reais de sistemas POS, ERP ou formulários manuais.
| # | Tipo de Erro | Exemplo errado | Exemplo correcto |
|---|---|---|---|
| 1 | NEGATIVO | -15 bilhetes |
15 bilhetes |
| 2 | ESPAÇOS | " M-Pesa " |
"M-Pesa" |
| 3 | DATA ERRADA | 2026-03-01 07:23:00 |
2026-03-01 |
As 3 tabelas geradas seguem o seguinte esquema relacional:
┌──────────────────┐ ┌───────────────────────────┐ ┌────────────────── ┐
│ SEGMENTOS │ │ VENDAS │ │ ROTAS │
├──────────────────┤ ├───────────────────────────┤ ├────────────────── ┤
│ ID_Segmento (PK) │◄────│ ID_Segmento (FK) │ │ ID_Rota (PK) │
│ Tipo_Passageiro │ │ ID_Rota (FK) ─────────────┼────►│ Origem │
│ Genero │ │ Data │ │ Destino │
│ Faixa_Etaria │ │ Forma_Pagamento ⚠️ │ │ Distancia_KM │
│ Total_Passageiros│ │ Bilhetes_Vendidos ⚠️ │ │ Viagens_Realizadas│
│ Hora_Pico │ │ Preco_Unitario_MZN ⚠️ │ │ Passageiros_Total │
└──────────────────┘ └───────────────────────────┘ └────────────────── ┘
⚠️ = contém erros injectados
Ingestão → SQL → Detecção → Limpeza
Este notebook é o núcleo técnico do pipeline, estruturado em fases progressivas:
1. Ingestão — carregar os 3 Excel para SQLite (header=1 para ignorar título decorativo na linha 0)
2. JOIN analítico — criar MOZ_DEV_MOZCHAPPA100_STELA_NEIL_ANALYSIS com CREATE TABLE AS SELECT agregando por data, segmento, rota e forma de pagamento
3. Detecção de erros — 3 queries SQL para identificar registos problemáticos antes de corrigir:
-- Erro 1: negativos
WHERE Bilhetes_Vendidos < 0 OR Preco_Unitario_MZN < 0
-- Erro 2: espaços
WHERE Forma_Pagamento != TRIM(Forma_Pagamento)
-- Erro 3: datas com timestamp
WHERE Data != DATE(Data)4. Correcção — ABS() para negativos, TRIM() para espaços, DATE() para timestamps
5. Exportação — tabela limpa exportada para Excel para STELA
Análise final em Excel — componente STELA
O ficheiro Excel contém os dados operacionais limpos de Março 2026, com as seguintes dimensões:
- Segmentos: Estudante · Trabalhador · Turista
- Rotas: Maputo Centro–Matola · Matola–Boane · Machava–Marracuene · Maputo Centro–KaMavota · Maputo Centro–Machava
- Métricas: Bilhetes vendidos · Preço unitário (MZN) · Viagens · Passageiros · Duração (min) · Receita (MZN)
- Pagamentos: M-Pesa · e-Mola · Numerário
🎨 Convenção de cores: Azul = inputs · Preto = fórmulas · Verde = ligações entre folhas
Responsável pela construção técnica: ingestão, SQL, limpeza, automação e manipulação dos dados para gerar insights estratégicos.
Responsável pela análise de negócio: dashboard Excel, análises Month-on-Month, top/bottom performers e insights estratégicos.
No final, NEIL e STELA conduzem a fase de insights conjunta. Os estudantes devem interpretar os dados e apresentar:
- Insights de negócio — qual segmento e rota geram mais receita?
- Problemas operacionais — onde estão os atrasos e ineficiências?
- Recomendações estratégicas — acções concretas para MozChapa100 / MozBikes
-
Descarregar o projecto Faz download da pasta do projecto e carrega-a para o teu Google Drive (por exemplo em
Meu Drive/MozChapa100/) -
Abrir no Google Colab
- Vai a colab.research.google.com
- Clica em Ficheiro → Abrir notebook → Google Drive
- Navega até à pasta
MozChapa100/e abre o notebook pretendido
-
Ligar ao Drive (dentro do Colab) Corre esta célula no início do notebook:
from google.colab import drive
drive.mount('/content/drive')- Instalar dependências
pip install jupysql pandas openpyxl-
Ordem de execução
Exercício_Criar_Dataset_COM_PROMPT.ipynb→ gera os ficheiros ExcelExercício_of_MozDev_Cleaning.ipynb→ pipeline completo
-
Dashboard Excel Abre
MozChapa100_Tutorial-Main.xlsxno Excel ou Google Sheets
Thank you to Moz Devs for this fun experience, and to @StellaZimba which I had the pleasure to present the solution.
Repo owner: Neil Fabião → @neilfabiao ✌🏾
