Pipeline — Scripts e Notebooks
Mapa completo dos scripts standalone, seus artefatos, e a relação com os notebooks Quarto. Todos os scripts requerem o pacote instalado (pip install -e .).
Visão geral
scripts/
├── Transcrição
│ └── transcribe_media.py → chamado pelo CLI (prepare transcribe)
│
├── Sentiment Analysis
│ ├── sentiment_twitter_roberta.py → chamado pelo CLI (process sentiment --model roberta)
│ ├── sentiment_distilbert.py → chamado pelo CLI (process sentiment --model distilbert)
│ ├── sentiment_deberta.py → chamado pelo CLI (process sentiment --model deberta)
│ └── sentiment_ensemble.py → chamado pelo CLI (process sentiment --model ensemble)
│
├── Embeddings
│ ├── generate_embeddings.py → chamado pelo CLI (process embeddings --model mpnet)
│ ├── generate_embeddings_minilm.py → chamado pelo CLI (process embeddings --model minilm)
│ └── generate_embeddings_distiluse.py → chamado pelo CLI (process embeddings --model distiluse)
│
├── Comparação de Modelos
│ ├── compare_embeddings_models.py → gera JSON consumido por 04i-embeddings-comparison.qmd
│ └── compare_embedding_dimensions.py → análise de redução de dimensionalidade
│
├── Visualização
│ └── generate_timeline_chart.py → gera assets/images/timeline-ultimate.png
│
└── Dados
└── generate_sample_data.py → gera dataset sintético em data/raw/sample/
Relação scripts → notebooks
| Script | Notebook que consome | O que produz |
|---|---|---|
sentiment_twitter_roberta.py |
04a-sentiment-roberta.qmd |
Colunas sentimento_roberta_* no parquet |
sentiment_distilbert.py |
04b-sentiment-distilbert.qmd |
Colunas sentimento_distilbert_* no parquet |
sentiment_deberta.py |
04c-sentiment-deberta.qmd |
Colunas sentimento_deberta_* no parquet |
sentiment_ensemble.py |
04e-sentiment-ensemble.qmd |
Colunas sentimento_ensemble_* no parquet |
generate_embeddings.py |
04f-embeddings-mpnet.qmd |
message_embeddings_mpnet.npy |
generate_embeddings_minilm.py |
04g-embeddings-minilm.qmd |
message_embeddings_minilm.npy |
generate_embeddings_distiluse.py |
04h-embeddings-distiluse.qmd |
message_embeddings_distiluse.npy |
compare_embeddings_models.py |
04i-embeddings-comparison.qmd |
embeddings_comparison.json |
transcribe_media.py |
02-data-wrangling.qmd |
transcriptions.csv |
generate_timeline_chart.py |
index.qmd (imagem estática) |
assets/images/timeline-ultimate.png |
Nota: Em abril/2026, 3 pares de notebooks foram consolidados:
03-contexto-externo(ex 02.2 + 03),04-feature-engineering(ex 03-FE + 05-FE),05-eda-overview(ex 04-eda + 05-eda). Os EDAs dimensionais foram renumerados de 04.x para 05.x. Originais emnotebooks/archive/.
Os scripts de comparação (compare_*) são executados manualmente — não fazem parte do CLI. Os notebooks leem os artefatos que eles geram.
Detalhes por script
transcribe_media.py
Transcreve arquivos de áudio e vídeo do WhatsApp usando a API Groq Whisper.
python scripts/transcribe_media.py
# ou via CLI:
whatsapp-interaction prepare transcribeRequisitos: pip install groq
Configuração no .env:
GROQ_API_KEY=sua_chave_aqui
Comportamento: 1. Primeira execução: processa todos os arquivos (~40 min para ~700 arquivos) 2. Interrupção: salva progresso a cada 10 arquivos em transcriptions_progress.csv 3. Retomada: continua de onde parou automaticamente 4. Completo: gera transcriptions.csv e deleta arquivo de progresso
Scripts de Sentiment
Cada script aplica um modelo de sentiment analysis ao messages_with_models.parquet:
| Script | Modelo | Característica |
|---|---|---|
sentiment_twitter_roberta.py |
Twitter-XLM-RoBERTa | Equilibrado |
sentiment_distilbert.py |
DistilBERT | Polarizador |
sentiment_deberta.py |
RoBERTa Latest | Ultra conservador |
sentiment_ensemble.py |
Combinação dos 3 | Majority voting + weighted tiebreak |
Requisitos: pip install torch transformers
O ensemble deve ser executado após os 3 modelos individuais.
Scripts de Embeddings
Cada script gera embeddings semânticos das mensagens:
| Script | Modelo | Dimensões |
|---|---|---|
generate_embeddings.py |
all-mpnet-base-v2 | 768 |
generate_embeddings_minilm.py |
all-MiniLM-L6-v2 | 384 |
generate_embeddings_distiluse.py |
distiluse-base-multilingual-cased-v2 | 512 |
Requisitos: pip install sentence-transformers torch
Scripts de Comparação
| Script | O que faz | Output |
|---|---|---|
compare_embeddings_models.py |
Compara qualidade dos 3 modelos (similaridade, clustering, correlação) | embeddings_comparison.json |
compare_embedding_dimensions.py |
Testa redução de dimensionalidade via PCA (768 → 384/256/128) | embeddings_dimensionality_comparison.json |
Executados manualmente após gerar os embeddings. O notebook 04i-embeddings-comparison.qmd lê os JSONs de saída.
generate_sample_data.py
Gera dataset sintético de 200 mensagens para demo e testes.
python scripts/generate_sample_data.pyOutput: data/raw/sample/raw-data.txt (seed=42, determinístico)
Camada de findings (07-11)
Os notebooks 07-11 na seção Descobertas do site consolidam os achados em prose interpretativa. Eles não dependem de novos scripts — carregam os artefatos já produzidos pelos scripts acima:
| Notebook | Fontes de dados consumidas |
|---|---|
07-findings-overview.qmd |
messages_with_models.parquet, messages_with_context.parquet |
08-findings-dinamica.qmd |
messages_enriched.parquet, messages_with_context.parquet |
09-findings-sentimento.qmd |
messages_with_models.parquet (colunas sentimento_*) |
10-findings-temas.qmd |
message_embeddings_mpnet.npy + K-Means (computado no notebook), UMAP 2D |
11-findings-estilos.qmd |
messages_enriched.parquet (features de emoji/pontuação/tamanho) |
O 10-findings-temas.qmd roda clustering semântico (K-Means k=10) e UMAP 2D diretamente — os artefatos auxiliares (cluster_labels_mpnet_k10.npy, umap_coords_sample.npy) ficam em data/processed/{export}/ para reaproveitamento.