Pular para o conteúdo

Metodologia

Fontes, ETL, cálculo salarial e ressalvas

⚠️ SITE EXPERIMENTAL — em construção. Metodologia ainda sendo desenvolvida; dados e conclusões preliminares, sujeitos a alteração.

50
egressos na coorte
4
bases de dados externas
8
passos no pipeline
1
comando reproduz tudo
0
números digitados à mão

1 · Pergunta de pesquisa

O que motivou o estudo

Egressos de TI do IFES — Campus Serra que passaram por uma base comum de formação — ensino (monitoria), pesquisa aplicada (iniciação científica, bolsa FAPES/Prodest) e extensão em laboratórios do IFES — têm hoje que trajetória de carreira e renda? A hipótese: essas três vivências, antes do primeiro emprego formal, antecipam a chegada a posições sênior, à liderança técnica e ao mercado internacional.

Ensino

Monitoria & tutoria

Primeira experiência de ensinar e consolidar fundamentos (programação, estrutura de dados, arquitetura).

Pesquisa

Pesquisa aplicada

Projetos de P&D com bolsa (FAPES/Prodest) — primeiro contato com problemas reais em escala.

Extensão

Laboratório & empresa júnior

Projetos com clientes, métodos ágeis e liderança antes do emprego formal (LEDS entre os principais).

2 · O fluxo em cinco etapas

Um pipeline ETL orquestrado por data/build_report.py — cada etapa lê a saída da anterior

Extract · coleta

Fontes → dados brutos

  • busca_egressos.py — raspa perfis públicos de LinkedIn (browser-use + LLM Mistral): cargo, empresa, vínculo, datas.
  • Bases oficiais IFES: FAPES (bolsas), SRC (extensão), Lattes + SIGPESQ (pesquisa/IC) — cruzadas por nome.
  • Mercado: Stack Overflow, Código Fonte, IPCA/câmbio.
  • Curadoria manual → estrutura em JSON.
saída alunos.json
Transform · cálculo

Série & análises

  • compute_all.py — série salarial (mercado × exp × FX × IPCA), anonimiza A–…
  • fapes_fomento.py, src_extensao.py — fomento e extensão.
  • analise.py — clusters, sankey, gênero, porte de empresa, impacto.
saída consolidado.json · analise.json
Load · render

JSON → dashboards

  • gen_impacto.py — projeta o painel de impacto num dataset.
  • gen_panorama.py — reescreve a base de perfis do panorama.
  • Números vêm sempre do pipeline, nunca do HTML.
saída *.html
QA · validação

Confere & blinda

  • test_projecao_impacto.py — confere cada número do dataset contra a fonte.
  • Varredura de PII no portão: falha se qualquer nome/empresa vazar para o HTML público.
gate falha bloqueia a publicação
Publish

Sai anonimizado

  • --publish copia para o repositório público de egressos e para os docs da diretoria.
  • O repositório com PII real nunca sai da máquina.
saída site público

3 · Fontes de dados

Quatro bases externas + coleta de perfis; tudo público, exceto o cadastro de bolsas

FonteO que fornecePeríodoAcesso
Perfis de LinkedIn
coleta automatizada
Cargo, empresa, vínculo (CLT/PJ/bolsa/estágio), datas e local de cada experiênciaTrajetória completapúblico
FAPES
Res. 361/2026 · via Prodest
Valores reais das bolsas de pesquisa/extensão recebidas (BPIG, apoio técnico, ICT)Anos de bolsarestrito
SRC — extensão IFES Serra
base oficial · src_etl
Participação em ações de extensão e quem foi bolsista de extensão (fomento além da pesquisa) — 30/50 na base, 15 bolsistasTrajetória IFESinstitucional
Lattes (CNPq)
currículos · match por nome
Vínculo de pesquisa/orientação — iniciação científica, mestrado, TCC, projeto — 22/37 encontrados, 7 em ICFormaçãopúblico
SIGPESQ
gestão de pesquisa IFES · horizon.db
Grupos de pesquisa, projetos, orientações e bolsas de IC registrados no sistema (persons, teams, advisorships, fellowships)Formaçãoinstitucional
Stack Overflow Developer SurveySalário de desenvolvedores/dados no Brasil por anos de experiência (mediana e quartis)2018–2023público
Pesquisa Código FonteMédia salarial por senioridade no mercado brasileiro2021–2026público
IPCA (IBGE) + câmbio USD→BRLCorreção de tudo ao poder de compra de R$ de 20262011–2026público

4 · Estimativa salarial — o cálculo

Como cada ponto da série de renda é produzido

R$2026 = medianamercado(ano, trilha, exp) × FXano × IPCAano ÷ 12
FX = câmbio médio USD→BRL do ano · IPCA = fator de correção para R$ de 2026 · ÷12 = anual → mensal. Anos de bolsa usam o valor documentado da FAPES corrigido por IPCA, não estimativa de mercado.
  • Match de mercado. Para cada egresso e cada ano de carreira, cruza-se o ano de experiência com a mediana da Stack Overflow daquela época — mesma trilha (Software ou Dados), filtrando devs do Brasil.
  • Janela de experiência. Amostra em exp ± 1 ano; se ficar com menos de 8 respostas, amplia para ± 2. Exige n ≥ 5 para publicar o ponto.
  • Valor da época vs. hoje. A série mostra duas leituras: o valor da época (corrigido pela inflação) e a valores de hoje (reprecificado pelo mercado de 2026).
  • Anos iniciais. Em estágio/bolsa nos dois primeiros anos aplica-se fator de 0,5 sobre a mediana de mercado, refletindo a jornada/remuneração parcial.

5 · Análises derivadas

A partir da série e dos perfis, sem bibliotecas pesadas (estatística em NumPy puro)

Clusters — KMeans (NumPy) por perfil de carreira Sankey — via de formação → trilha → destino Senioridade × origem — nacional vs. internacional Trilha no tempo — início → meio → atual Porte da empresa — classificado por LLM (só nome público) Tecnologias — presença por pessoa Gênero — inferido offline, agregado Internacionalização — % ao longo do tempo

Cada análise carrega sua ressalva no relatório — em especial gênero (amostra pequena, inferência binária aproximada, não identidade declarada) e porte de empresa (só o nome público da empresa é enviado ao modelo, nunca o nome de qualquer egresso).

6 · Garantia de qualidade & privacidade

Por que os números são confiáveis — e por que ninguém é identificável

  • Fonte única de verdade. As páginas não guardam números próprios: cada valor é lido do catálogo e renderizado no build. Editar o HTML à mão é impossível por design — ele é gerado.
  • QA automático. test_projecao_impacto.py compara cada número do dataset publicado com a fonte que o originou — indicadores, faixas, dispersão, fluxo, tabelas, mapas de calor. Uma divergência = FALHA. Antes essa conferência era feita ao contrário, reextraindo constantes de dentro do HTML; ela deixou de ser possível quando as páginas pararam de ter JavaScript, e deixou de ser confiável antes disso, porque comparava um despejo de constantes desatualizado e passava.
  • Anonimização. Cada pessoa vira um rótulo (A, B, C…). Sem nomes, empresas ou localidades individuais — apenas trilha e anos de experiência.
  • Gate de PII. O portão de publicação varre toda a saída em busca de qualquer nome de pessoa ou empresa da base. Se encontrar, a publicação é bloqueada. O repositório com dados reais nunca é publicado.

7 · Reprodutibilidade

Um comando regenera e valida o relatório inteiro

# gera todos os JSON, reescreve os dashboards e valida
python data/build_report.py

# após validar, publica a versão anonimizada
python data/build_report.py --publish
#EtapaScriptProduz
1Gênero (offline)genero.pygenero_map.json
2Série salarialcompute_all.pyconsolidado.json
3Extensão SRC/IFESsrc_extensao.pysrc_extensao.json
4Fomento FAPESfapes_fomento.pyfapes_fomento.json
5Análiseanalise.pyanalise.json
6Painel de impactogen_impacto.pyimpacto.json
7Render panoramagen_panorama.pydashboard_alunos.html
8Números × fontetest_projecao_impacto.pyPASS/FAIL

8 · Ressalvas

Limites que o método impõe à leitura dos resultados

  • Estimativa, não salário real. A renda deriva de medianas de mercado por experiência — não é holerite individual.
  • Amostra pequena. Cortes por gênero, trilha e origem são direcionais, não inferência estatística.
  • Prêmio internacional subestimado. Os preços vêm do mercado brasileiro; o modelo não captura o ganho real de contratos em moeda estrangeira.
  • Código Fonte ilustrativa. A pesquisa publica só a média por senioridade, sem percentis — a faixa é aproximada.
  • Coleta de perfis. Depende do que está público no LinkedIn; períodos no IFES nem sempre aparecem e são complementados por outras fontes.
  • Cruzamento por nome. SRC, Lattes e SIGPESQ casam por nome completo (sem CPF na base) — pode haver homônimo. Tratados como piso (quem aparece participou; ausência não prova não-participação).