Skip to main content

data-collection

Coleta estruturada de dados online: descoberta de fontes, download via API/bulk/scraping, gestão de credenciais, documentação rastreável e reproduzível. Use quando o usuário precisar baixar dados, montar pipeline de coleta, achar bases de dados sobre um tema, configurar acesso a APIs governamentais ou acadêmicas, ou organizar dados brutos de forma auditável — mesmo que não diga explicitamente 'coleta de dados'.

소스 정보

저장소
mgaldino/agents-workflow
최근 소스 활동
2026년 3월 23일 13:47
감지된 SKILL.md 언어
포르투갈어
스타
5
포크
1

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
data-collection
description
Coleta estruturada de dados online: descoberta de fontes, download via API/bulk/scraping, gestão de credenciais, documentação rastreável e reproduzível. Use quando o usuário precisar baixar dados, montar pipeline de coleta, achar bases de dados sobre um tema, configurar acesso a APIs governamentais ou acadêmicas, ou organizar dados brutos de forma auditável — mesmo que não diga explicitamente 'coleta de dados'.
argument-hint
[tema, fonte ou URL dos dados]
allowed-tools
["Read","Write","Edit","Bash","Glob","Grep","Agent","WebSearch","WebFetch","AskUserQuestion"]
# Coleta Estruturada de Dados Você conduz o processo completo de descoberta, download, validação e documentação de dados para pesquisa acadêmica. O objetivo é que qualquer pessoa consiga reproduzir a coleta meses ou anos depois, apenas seguindo os scripts e a documentação gerada. ## Princípios - **Raw é sagrado**: dados baixados nunca são modificados. Transformações geram novos arquivos em `processed/`. - **Script-first**: todo download deve ser reproduzível via script. Nunca oriente o usuário a "clicar e baixar manualmente" se existir alternativa programática. - **Documentar na hora**: a documentação é escrita junto com o script, não depois. Se você baixou, documente imediatamente em SOURCES.yaml e DATA_DICTIONARY.md. - **CSV como formato padrão**: dados processados sempre em CSV (UTF-8, vírgula como separador). Dados brutos mantêm formato original. - **Python por padrão**: use Python exceto quando um pacote R pronto resolva melhor (ex: `geobr`, `basedosdados`). Nesse caso, escreva script R. ## Fluxo de trabalho ### 1. Entender a necessidade Antes de buscar qualquer dado, esclareça: - Qual a pergunta de pesquisa ou variável necessária? - Qual a unidade de análise (país, município, indivíduo, firma)? - Qual o período temporal? - Qual a cobertura geográfica? Se o usuário não especificou, pergunte. Dados errados na granularidade certa custam menos que dados certos na granularidade errada. ### 2. Descobrir fontes Pesquise sistematicamente, nesta ordem de preferência: **Fontes primárias (preferir sempre)**: - APIs oficiais de órgãos governamentais - Portais de dados abertos (dados.gov.br, data.gov, data.europa.eu) - Bases de organismos internacionais (World Bank, IMF, OECD, UN) **Repositórios acadêmicos**: - Harvard Dataverse, ICPSR, Zenodo, figshare - Repositórios de replicação vinculados a papers específicos - Base dos Dados (basedosdados.org) — hub brasileiro com dados tratados **Bases especializadas em Ciência Política/RI**: - V-Dem, Polity V, Freedom House - Correlates of War, UCDP/PRIO - CEPII (comércio internacional), Penn World Table - QoG (Quality of Government), WVS (World Values Survey) **Web scraping** (último recurso): - Só quando não há API, download bulk, ou repositório - Verificar robots.txt e termos de uso antes - Implementar rate limiting e retry com backoff Para cada fonte encontrada, registre: nome, URL, tipo de acesso (API/download/scraping), se precisa credencial, e licença de uso. Apresente as opções ao usuário com prós/contras antes de prosseguir com o download. ### 3. Configurar o projeto Crie a estrutura de diretórios no local indicado pelo usuário (ou na pasta `data/` do projeto atual): ``` data/ ├── raw/ # Dados brutos (nunca modificar) ├── processed/ # CSVs limpos ├── scripts/ │ ├── download_<fonte>.py # Um script por fonte │ ├── process_<fonte>.py # Limpeza/transformação │ └── requirements.txt # Dependências Python ├── docs/ │ ├── SOURCES.yaml # Manifesto de fontes │ ├── DATA_DICTIONARY.md # Dicionário de variáveis │ └── COLLECTION_LOG.md # Relatório de completude e gaps ├── .env.example # Template de credenciais ├── .gitignore # Exclui .env e arquivos grandes ├── checksums.sha256 # Integridade dos arquivos └── README.md # Instruções de reprodução ``` ### 4. Gestão de credenciais Quando uma fonte exigir autenticação: 1. **Pergunte ao usuário** qual credencial é necessária (API key, token, usuário/senha) 2. **Crie `.env.example`** com os nomes das variáveis e instruções de como obter: ``` # World Bank API (obter em: https://data.worldbank.org/api) WORLDBANK_API_KEY=sua_chave_aqui # Harvard Dataverse (obter em: https://dataverse.harvard.edu/dataverseuser.xhtml?selectTab=apiTokenTab) DATAVERSE_API_TOKEN=seu_token_aqui ``` 3. **Peça ao usuário** para fornecer os valores. Armazene em `.env` (nunca no código). 4. **Verifique que `.gitignore`** contém `.env` 5. Nos scripts, carregue com `python-dotenv`: ```python from dotenv import load_dotenv import os load_dotenv() api_key = os.getenv("WORLDBANK_API_KEY") ``` Nunca escreva credenciais diretamente em scripts ou logs. ### 5. Escrever scripts de download Cada script de download deve seguir este padrão: ```python #!/usr/bin/env python3 """Download de [descrição] da fonte [nome]. Fonte: [URL da documentação da API/portal] Acesso: [API | bulk download | scraping] Credenciais: [sim/não — variável em .env] Última execução: [data] """ import logging from pathlib import Path from datetime import datetime logging.basicConfig(level=logging.INFO, format="%(asctime)s %(message)s") logger = logging.getLogger(__name__) RAW_DIR = Path(__file__).parent.parent / "raw" RAW_DIR.mkdir(parents=True, exist_ok=True) def download(): """Função principal de download.""" logger.info("Iniciando download de [fonte]...") # ... lógica de download ... output_path = RAW_DIR / f"fonte_nome_{datetime.now():%Y%m%d}.csv" # ... salvar arquivo ... logger.info(f"Salvo em {output_path}") return output_path if __name__ == "__main__": download() ``` **Padrões obrigatórios nos scripts:** - Logging com timestamps (não print) - Paths relativos via `pathlib` (portabilidade) - Retry com backoff exponencial para requisições HTTP - Salvar com data no nome do arquivo (versionamento implícito) - Docstring com metadados da fonte no topo do arquivo **Para APIs paginadas:** - Implementar paginação completa com barra de progresso (`tqdm`) - Salvar checkpoints intermediários para retomar em caso de falha **Para web scraping:** - Usar `requests` + `BeautifulSoup` para HTML simples - Usar `playwright` para páginas com JavaScript - Respeitar `robots.txt` e rate limits - Incluir User-Agent identificável ### 6. Documentar fontes (SOURCES.yaml) Cada fonte de dados ganha uma entrada no manifesto: ```yaml sources: - id: worldbank_wdi name: "World Development Indicators" provider: "World Bank" url: "https://databank.worldbank.org/source/world-development-indicators" api_docs: "https://datahelpdesk.worldbank.org/knowledgebase/articles/889392" access_method: api # api | bulk_download | scraping | manual requires_credentials: false license: "CC BY-4.0" variables_used: - "NY.GDP.PCAP.CD" # GDP per capita - "SP.POP.TOTL" # Population temporal_coverage: "1960-2023" geographic_coverage: "global" unit_of_analysis: "country-year" download_script: "scripts/download_worldbank.py" date_accessed: "2026-03-13" notes: "" ``` Campos obrigatórios: `id`, `name`, `provider`, `url`, `access_method`, `license`, `download_script`, `date_accessed`. ### 7. Documentar variáveis (DATA_DICTIONARY.md) Para cada CSV processado, documente: ```markdown ## painel_paises.csv | Variável | Tipo | Descrição | Fonte (id) | Unidade | Valores válidos | |----------|------|-----------|------------|---------|-----------------| | country_code | str | Código ISO 3166-1 alpha-3 | - | - | 3 letras | | year | int | Ano de referência | - | - | 1960-2023 | | gdp_pc | float | PIB per capita | worldbank_wdi | USD correntes | > 0 | | population | int | População total | worldbank_wdi | pessoas | > 0 | ``` A coluna "Fonte (id)" vincula ao `id` em SOURCES.yaml — isso cria a cadeia de rastreabilidade. ### 8. Validar, gerar checksums e relatório de coleta Após cada download, valide os dados e gere um relatório de coleta (`docs/COLLECTION_LOG.md`). O pesquisador precisa saber não só *o que* foi coletado, mas *o que ficou faltando* — gaps silenciosos são a maior ameaça à reprodutibilidade. **Validação:** 1. Verificar que os arquivos não estão vazios 2. Conferir dimensões esperadas (linhas, colunas) 3. Gerar checksums: ```bash cd data && sha256sum raw/* > checksums.sha256 ``` **Relatório de coleta** (`docs/COLLECTION_LOG.md`): Gere automaticamente um relatório que documente a completude da coleta. Para painéis (country-year, municipality-year), isso significa cruzar as unidades esperadas com as efetivamente obtidas. ```markdown # Relatório de Coleta Data: 2026-03-13 Fonte: World Bank WDI ## Cobertura esperada vs. obtida - Países solicitados: 20 (América Latina) - Países obtidos: 20 ✓ - Período solicitado: 2000-2023 (24 anos) - Observações esperadas: 480 (20 × 24) - Observações obtidas: 467 ## Gaps identificados | País | Variável | Anos faltantes | Motivo provável | |------|----------|---------------|-----------------| | VEN | gdp_pc | 2015-2023 | World Bank não publica PIB da Venezuela desde 2014 | | CUB | gdp_pc | 2022-2023 | Dados ainda não disponíveis | ## Cobertura completa Os seguintes 18 países têm dados completos para todas as variáveis em todos os anos: ARG, BOL, BRA, CHL, COL, CRI, DOM, ECU, GTM, HND, HTI, MEX, NIC, PAN, PER, PRY, SLV, URY ## Qualidade dos dados - Missing values total: 13 de 960 células (1.4%) - Valores atípicos identificados: nenhum - Encoding: UTF-8, separador vírgula ✓ ``` O relatório serve como registro permanente de que o pesquisador estava ciente dos gaps no momento da coleta — não como surpresa na análise. Para múltiplas fontes, inclua uma seção por fonte. Adicione o COLLECTION_LOG.md à estrutura de diretórios em `docs/`. ### 9. Gerar README.md O README do diretório `data/` deve conter: ```markdown # Dados — [Nome do Projeto] ## Como reproduzir a coleta 1. Instalar dependências: `pip install -r scripts/requirements.txt` 2. Configurar credenciais: copie `.env.example` para `.env` e preencha 3. Executar scripts na ordem: - `python scripts/download_worldbank.py` - `python scripts/download_vdem.py` - `python scripts/process_merge.py` 4. Verificar integridade: `sha256sum -c checksums.sha256` ## Fontes Ver detalhes completos em `docs/SOURCES.yaml`. | Fonte | Acesso | Credencial? | Script | |-------|--------|-------------|--------| | World Bank WDI | API | Não | download_worldbank.py | | V-Dem v14 | Bulk download | Não | download_vdem.py | ## Última coleta Data: YYYY-MM-DD Autor: [nome] ``` ### 10. Pacotes Python comuns Inclua no `requirements.txt` conforme necessário: ``` requests # HTTP python-dotenv # Credenciais pandas # Manipulação tqdm # Progresso beautifulsoup4 # Scraping HTML lxml # Parser rápido wbdata # World Bank API pydataverse # Harvard Dataverse API imfpy # IMF API ``` Para R, quando necessário: `basedosdados`, `geobr`, `sidrar`, `rbcb`, `WDI`. ## Checklist de qualidade Antes de declarar a coleta completa, verifique: - [ ] Todos os scripts executam sem erro do zero - [ ] SOURCES.yaml tem entrada para cada fonte usada - [ ] DATA_DICTIONARY.md cobre todas as variáveis dos CSVs processados - [ ] `.env.example` documenta todas as credenciais necessárias - [ ] `.gitignore` exclui `.env` e arquivos grandes em `raw/` - [ ] `checksums.sha256` está atualizado - [ ] `COLLECTION_LOG.md` documenta gaps, problemas e completude da coleta - [ ] README.md tem instruções completas de reprodução - [ ] Licenças de uso permitem o uso pretendido
GitHub에서 보기