Refactor: Mini-Projeto 2 — Análise da Tábua das Marés para Surfar - #4
Draft
luigischmitt wants to merge 9 commits into
Draft
Refactor: Mini-Projeto 2 — Análise da Tábua das Marés para Surfar#4luigischmitt wants to merge 9 commits into
luigischmitt wants to merge 9 commits into
Conversation
Defines the full refactor of mini-projeto 2 from the previous audio emotion classification (RAVDESS) to political sentiment analysis on 2026 brazilian presidential candidates. - Stage 1 (engenharia de dados): twikit-based collector script - Stage 2 (ciência de dados): EDA in notebook - Stage 3 (machine learning): pysentimiento for PT sentiment Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Clearing the slate for the termometro eleitoral 2026 refactor (see docs/superpowers/specs/2026-06-04-termometro-eleitoral-design.md). Removed: - app.py (streamlit RAVDESS demo) - requirements.txt (librosa/tensorflow stack) - README.md (audio emotion docs) - notebooks/ (eda + feature extraction + modelling) - .gitignore (will be rewritten for the new stack) Kept LICENSE. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Implements the engenharia de dados stage of the termometro eleitoral miniprojeto. - src/collect.py: async twikit-based collector. Reads config.yaml, authenticates with cookies persistence, paginates search_tweet (20/page) with rate-limit backoff using TooManyRequests.rate_limit_reset, and writes a normalized CSV at data/raw/tweets.csv. - config.yaml: 12 presidential candidates for 2026 with handles + aliases, collection params (tweets_per_candidate=200, lang=pt, product=Latest, since=2026-01-01). - .env.example: X credential template. - .gitignore: excludes data/, reports/, .env, twikit cookies. - requirements.txt: full stack for stages 1-3. - README.md: how-to-run, schema, limitations, optional Streamlit/Next challenge. Validated build_query output and config loading. The script does not hit the network without credentials; running it requires a real X account (recommended secondary). Spec: docs/superpowers/specs/2026-06-04-termometro-eleitoral-design.md Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Substitui o escopo anterior (Termômetro Eleitoral) pelo novo: análise da tábua das marés de João Pessoa para classificar as melhores condições de surf. Mantém as 3 etapas pedagógicas obrigatórias da Trilha (ETL, EDA, ML). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Limpa tudo do mini-projeto anterior (Termômetro Eleitoral) para começar o novo escopo: análise da tábua das marés para surfar. Mantém apenas LICENSE, .gitignore (atualizado) e a spec nova. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Implementa a Etapa 1 (Engenharia de Dados) do mini-projeto. O scraper coleta três conjuntos de dados de tabuademares.com/br/paraiba/joao-pessoa: - mares_2025.csv: 4 marés/dia para o ano de 2025 inteiro (~1410 linhas) - ondas.csv: altura de onda horária da janela de previsão (~6 dias) - vento.csv: velocidade do vento horária da janela de previsão (~7 dias) A página renderiza cada mês server-side via POST com fecha=YYYY-MM-01, o que nos permite cobrir o ano inteiro sem precisar de browser headless. Para ondas e vento usamos as páginas /previsao/ondas e /previsao/vento. Estrutura: - src/scrape.py com funções pequenas, dataclasses tipadas e docstrings em português para alunos de 1º período - pyproject.toml gerenciado por uv (requests, beautifulsoup4, lxml, pandas) - README com instruções de execução e schema dos CSVs Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Drop dataclasses, use plain dicts - Inline small helpers - Remove emojis and overly verbose docstrings - Drop session abstraction (just use requests directly) - Remove month-validation guard (over-engineering) Cuts the file from ~410 to ~165 lines without losing any functionality. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- src/scrape.py: ganha mares_previsao.csv (mes corrente) para juncao - notebooks/eda.ipynb: carrega os 4 CSVs, faz limpeza, monta datahora, explora cada dataset, junta ondas+vento por datahora, interpola mare hora a hora, gera features (mare_subindo, periodo_dia, dia_semana, coeficiente diario), salva data/processed/dataset.csv - visualizacoes: boxplot altura por tipo, coeficiente diario do ano, serie temporal de onda/vento, heatmap dia x hora, scatter onda x mare, rosa simplificada de direcao - README atualizado com schema dos 4 CSVs e instrucoes da Etapa 2 Notebook executa end-to-end via nbconvert, dataset processado tem 144 linhas (6 dias x 24h) e zero NaN. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- notebooks/ml.ipynb: cria label heuristica (RUIM/BOM/OTIMO) com base em altura de onda, vento e mare; treina DecisionTree, RandomForest e KNN com sklearn built-in; avalia com classification_report, matriz de confusao e cross-val 5-fold; plota a arvore e a importancia das features; aplica o melhor modelo no dataset inteiro e gera ranking de melhores dias e horarios para surfar - saida: data/processed/dataset_rotulado.csv - documenta limitacoes do escopo (janela curta de previsao, heuristica como proxy) - README atualizado com a Etapa 3 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Substitui o escopo anterior do mini-projeto 2 (Termômetro Eleitoral 2026)
pela nova proposta: análise da tábua das marés de João Pessoa para
classificar as melhores condições de surf.
Motivação
Mini-projeto da Trilha UFPB (1 semana, alunos de 1º período) cobrindo as três
etapas pedagógicas obrigatórias: ETL, EDA e ML. A história: ajudar Felipe e
Nicholas a decidir quando voltar a João Pessoa para surfar.
O que está incluído
Etapa 1 — Web Scraping + ETL (
src/scrape.py)com
requests+ BeautifulSoupfecha=)data/raw/Etapa 2 — EDA (
notebooks/eda.ipynb)datahoramare_subindo,periodo_dia,dia_semana,coeficiente)data/processed/dataset.csv(~144 linhas, zero NaN)Etapa 3 — Machine Learning (
notebooks/ml.ipynb)sklearn:DecisionTreeClassifier(com plot da árvore)RandomForestClassifier(comfeature_importances_)KNeighborsClassifier(para comparação)classification_report, matriz de confusão,cross_val_score(5-fold)data/processed/dataset_rotulado.csvStack
uvrequests,beautifulsoup4,lxml,pandasmatplotlib,seabornscikit-learn(modelos built-in apenas)jupyter+jupytext(dev)Princípios pedagógicos
heurística como proxy) — comunicar restrições é parte do aprendizado
Notas
data/ereports/ficam gitignored (gerados pelos pipelines).🤖 Generated with Claude Code