Fuçando a transparência

 

Acordando o blog depois de anos parado, o assunto de hoje é: Transparência.

O Governo Federal lançou recentemente no seu Portal da Transparência, um sistema que permite a consulta dos salários de todos os servidores. Polêmicas a parte (eu acho que os dados poderiam ser facilmente anonimizados, solucionando 90% dos pontos polêmicos e sem atrapalhar em nada), a ferramenta é bem pobrinha. Dá pra consultar servidor por servidor o quanto ele ganha. Tirando a curiosidade sobre autoridades específicas (presidente, ministros, etc), não serve pra absolutamente NADA! (Serve pra saber pra qual parente você vai pedir dinheiro emprestado e de qual parente você deve fugir pra não ter de emprestar, mas isso não tem PN a ver com transparência.). Do ponto de vista de transparência e utilidade pública, o portal deveria ter formas de se manipular e agrupar os dados, procurando padrões estranhos, anomalias, etc. Pra isso, ele não serve. Aí entra a fuçação (sic?)!

Baixar pra ter em mãos

Pra fuçar, é preciso ter os dados em mãos. Poder manipular, transformar, jogar pra cima, apertar, chamar de meu amor e tudo mais! Meu primeiro passo então nessa briga, foi de como obter esses dados. O site permite o download de uma parcela desses dados, basta clicar no link "baixar mais dados" logo acima da lista de nomes logo na primeira tela:
link de download do arquivo de servidoresSó que esse arquivo não inclui o mais importante, que são os valores, os salários propriamente ditos. Inclui somente os dados de lotação do servidor (órgão, cargo, funções ocupadas, etc). Isso, sozinho, não serve pra quase nada (só pra contar quantas pessoas tem em cada órgão, porcentagens de funções gratificadas, e umas coisinhas interessantes que eu vou colocar mais em baixo). Eu ainda precisava da outra metade dos dados, que não existem em arquivinho pronto pra baixar. Aí a começa a fuçação.

Com cuspe, com jeito e um pouquinho de wget

Os dados de salário ficam em uma página separada. Pra chegar nela, preciso clicar no nome da pessoa, abrindo assim a tela com os cargos que ela ocupa, depois clicar novamente no botão de Remuneraçãoe finalmente abre-se uma tela com os valores de salário, descontos, rendimentos eventuais, etc. Baixar uma por uma as quase 700 mil páginas não era comigo.

A primeira coisa que fiz foi tentar identificar um jeito de automatizar isso. Notei que na URL havia sempre um campo numérico do tipo: IdServidor=XXXXXXX. Opa, bom demais. Isso provavelmente é a chave desses registros no banco de dados, e deve ser um valor seqüencial. Fiz alguns testes e cheguei a conclusão que dava pra fazer! Dava pra baixar tudo usando esse ID. Só que esse "IdServidor" não aparecia no arquivo baixado. Eu ia ter de improvisar pra saber quais eram os valores válidos pra ele. Busca binária, descobri o primeiro valor em 1000000 e o ultimo em 1691091 [foot]parece que esse valor andou crescendo de lá pra cá, então vou ter de conferir e baixar tudo de novo[/foot]. Agora era só baixar usando wget:

 for ((i=1000000;i<1691092;i++))
     do wget 'http://www.portaltransparencia.gov.br/servidores/Servidor-DetalhaRemuneracao.asp?Op=1&IdServidor='${i} -O salario.${i}.html -o /dev/null &
     if [ $((i%100)) -eq 0 ]
         then echo "echo waiting for $i"
         wait;
     fi
 done

(note que eu rodo 100 processos em background pra aumentar o nível de paralelismo. na época o site estava bem lento, então foi necessário fazer isso. Agora já não sei como está e pode não ser a forma ideal).

Pronto, os dados estavam todos ali. Agora só precisava "extrair" eles dos htmls e transformar em algo mais processável.

e PERL, não se esqueça do PERL...

Pois é.. e toca analisar os htmls pra ver como os dados estão estruturados ali e depois fazer um parser, quanto mais meia boca melhor, afinal é PERL, pra cuspir esses dados em formato "de gente". No caso, "de gente" era um CSV. O programinha em perl pra processar essa galerinha aí foi esse aqui ó: parse.pl. Nada de mais. Só espera pelas coisas certas nos lugares certos. Eu acabei optando por ignorar uma série de coisas como 13, férias, jetons, etc, e me ative só ao "importante": salário bruto, "Abate Teto", imposto, previdência e o salário líquido. Na verdade nem o líquido eu acho útil, já que ele inclui férias ou 13 de um monte de gente. Qualquer conta feita pelo líquido fica distorcida por causa desses pagamentos eventuais. No fundo, eu sempre olho pelo salário bruto menos o abate do teto (estritamente falando, é "mais", porque já vem negativo) que é a conta que melhor dá uma idéia da situação das coisas.

 E pra juntar tudo?

Pois é... E pra juntar tudo? Agora tava na hora, eu tinha descobrir um jeito. Mas pra começar eu achei que colocando tudo num banco de dados ficaria mais fácil de achar um jeito de casar um arquivo com o outro. Foi mais fácil que eu pensava. O Mysql importa de arquivo csv. Criei toscamente as tabelas com todos os campos varchar(255), importei e fui fuçar. A primeira coisa que tentei foi pelo nome.  SELECT nome, COUNT(*) FROM salario GROUP BY nome HAVING COUNT(*) > 1 me deu uma péssima surpresa... cheio de gente com nome igual... Mas o CPF deles era diferente... Será? bora então!  SELECT nome, cpf, COUNT(*) FROM salario GROUP BY nome, cpf HAVING COUNT(*) > 1.

BINGO!

Nenhuma repetição! Usando o CPF mais o nome eu consigo identificar unicamente todos os servidores, e consigo "casar" uma tabela com a outra. Acrescentei logo um campo "id_servidor" na tabela de servidores e preenchi:  UPDATE servidor SET id_servidor = (SELECT id_servidor FROM salario WHERE salario.cpf = servidor.cpf AND salario.nome = servidor.nome);. Voilá! Temos as duas tabelas relacionadas e podemos brincar de fuçar!

Fuçar na mão, também não né?

Fiz um monte de queries, pensei num monte de coisas, mas a coisa tava começando a ficar chata e repetitiva. Resolvi sistematizar isso tudo num programinha. Como surgiu uma discussão sobre grails com uma galera na mesma semana, o povo querendo saber se valia a pena usar em produção, etc, resolvi fazer em grails uma aplicaçãozinha de fuçar os dados. Minha idéia seria que facilitaria minha vida usar hql/hibernate ao invés de SQL puro.

Ledo engano!

Hibernate e HQL se mostraram lentos demais pro que eu queria fazer. É muito dado, muita manipulação de conjuntos grandes. Muito group by, inner queries, etc. Enfim, não rolou. Acabei fazendo tudo em SQL e usando o grails só mesmo como plataforma pra jogar os dados na web de forma bonitinha. No final, joguei tudo pra dentro do grails mesmo. A importação dos CSVs, a validação dos dados, a denormalização (que eu não tinha feito quando era só no sql), e ainda fiz um passo extra de tokenização dos nomes, que vai ser útil mais pra frente. O fonte dele está disponível no google code. Basta rodar com "grails run-app" dentro da raiz dele e ele já te manda pra tela de carga dos dados no primeiro acesso. Daqui pra frente ignorem meu banco original descrito lá pra cima. Vamos usar o banco gerado pela aplicação grails, beleza?

O que eu achei?

Pouca coisa interessante saiu no começo. A pior delas foi descobrir que fiz besteira! O banco central é o órgão que, na média, melhor paga no governo federal (mentira, não tem os dados do legislativo e TCU ou senado provavelmente pagam ainda melhor). Tivesse continuado por lá, tava rico: a média salarial por lá é de R$ 16.734,28. Bem a frente da AGU e da CGU que são os próximos "grandes" na lista. Uma tabelinha abaixo com os 20 primeiros. Destaque pros que tem gente suficiente pra média ser significativa:

Órgão de Lotação Qtd. Média
EMPRESA BRAS. DE SERVICOS HOSPITALARES 2 R$ 26.723,14
CENTRO NAC.TECNO.ELETRONICA AVANCADA S.A 8 R$ 20.146,68
EMPRESA DE PESQUISA ENERGETICA 9 R$ 17.147,72
BANCO CENTRAL DO BRASIL 4483 R$ 16.734,28
EMPRESA DE TRENS URBANOS DE PORTO ALEGRE 12 R$ 15.310,35
NUCLEBRAS EQUIPAMENTOS PESADOS 10 R$ 15.108,61
ADVOCACIA-GERAL DA UNIAO 7547 R$ 15.093,39
CONTROLADORIA-GERAL DA UNIAO 2343 R$ 14.247,21
INSTITUTO DE PESQUISA ECONOMICA APLICADA 564 R$ 14.184,95
SUPERINTENDENCIA DE SEGUROS PRIVADOS 422 R$ 13.678,70
MINISTERIO DA FAZENDA 32606 R$ 12.487,78
AGENCIA NACIONAL DE AGUAS 328 R$ 12.379,99
COMISSAO DE VALORES MOBILIARIOS 564 R$ 12.355,82
AGENCIA NAC PETROLEO GAS NAT BIOCOMBUSTI 686 R$ 11.296,41
GOVERNO DO ESTADO DA BAHIA 1 R$ 11.179,36
MINISTERIO DAS RELACOES EXTERIORES 1549 R$ 11.119,07
EMPRESA BRASILEIRA DE PESQ. AGROPECUARIA 86 R$ 11.035,41
AGENCIA NACIONAL DE VIGILANCIA SANITARIA 1937 R$ 10.944,00
AGENCIA NACIONAL DE SAUDE SUPLEMENTAR 599 R$ 10.823,87
AGENCIA NAC. DE TRANSPORTES AQUAVIARIOS 331 R$ 10.773,54

Mas aí entra um probleminha: a Receita Federal nem aparece. São todos lotados como "Ministério da Fazenda", (o que está certo, já que ela não é um órgão independente, mas uma secretaria do ministério). Dá pra ter uma idéia melhor de quem recebe mais pegando a descrição dos cargos:

Posição Nome Qtd. Média
1 PRESIDENTE DO BANCO CENTRAL 1 R$ 26.723,13
2 PRESIDENTA DA REPUBLICA 1 R$ 26.723,13
4 DIRETOR SERVIDOR DO BANCO CENTRAL 4 R$ 26.376,98
7 MINISTRO DE PRIMEIRA CLASSE 56 R$ 23.849,09
8 MINISTRO DE ESTADO 28 R$ 23.007,40
10 MINISTRO DE SEGUNDA CLASSE 92 R$ 21.803,78
12 DELEGADO DE POLICIA CIVIL ESPECIAL 16 R$ 21.165,92
13 DELEGADO DE POL FEDERAL CLASSE ESPECIAL 400 R$ 20.923,64
14 TEC DE PLANEJ E PESQUISA-QUADRO SUPLEMEN 15 R$ 20.709,22
17 PERITO CRIMINAL FEDERAL CLASSE ESPECIAL 161 R$ 20.121,84
19 AUDITOR-FISCAL DA RECEITA FEDERAL BRASIL 11556 R$ 19.581,05
21 CONSELHEIRO 109 R$ 19.460,44
24 TECNICO DE PLANEJAMENTO 70 R$ 19.171,38
28 AUDITOR FISCAL DO TRABALHO 2992 R$ 18.763,84
29 ADVOGADO DA UNIAO 1664 R$ 18.648,99
32 ANALISTA DO BANCO CENTRAL 3604 R$ 18.437,51
34 PROCURADOR DO BANCO CENTRAL 197 R$ 18.286,05
35 PROCURADOR FEDERAL 4023 R$ 18.126,87
37 PROCURADOR DA FAZENDA 1973 R$ 18.096,88
38 TECNICO DE PLANEJAMENTO E PESQUISA 241 R$ 17.943,75

Inclui uma coluna de "posição" porque eu tive de cortar um monte de cargos com poucas pessoas (uma ou duas na maioria das vezes) que não fazem muito sentido nesse contexto. Aí da pra ver que a galera do Banco Central ainda perde pra galera da Receita Federal, apesar de tar lá bem pertinho.

Uma coisa interessante de notar nessa tabela são os "ministros de estado", que em princípio ganham o mesmo que o presidente da república ou o presidente do BC, mas que ali estão bem pra baixo. Fuçando um pouco a gente descobre que vários deles recebem R$ 0,00 pois atingem o teto com as remunerações originais deles (do legislativo ou de outras esferas de poder) que não aparecem na lista. E tem o Brizola Neto, que tomou posse durante o mês de maio e não recebeu o valor integral por isso.

Mas por enquanto é só fatos curiosos. Não tem nada de realmente interessante. Foi quando eu resolvi entrar pra numerologia e descobrir

Qual o significado do seu nome?

Pois é, quais nomes (ou sobrenomes) fazem as pessoas ganharem mais? Como eu fiz a tokenização dos nomes, dá pra agrupar por eles e descobrir. E aqui vai uma dica: se quiser que seu filho se dê bem no funcionalismo público, chame ele de Ricardo! (E nunca, mas nunca mesmo, chame sua filha de Camila). Na verdade, eu filtrei os 100 nomes mais comuns e peguei os maiores e menores salários médios entre eles:

Nome Qtd Média
RICARDO 3557 R$ 8.334,13
EDUARDO 3156 R$ 8.187,19
MAURICIO 1371 R$ 8.119,83
MAURO 1186 R$ 8.109,96
SERGIO 3523 R$ 8.090,30
CELSO 926 R$ 8.034,11
MARCO 1860 R$ 7.983,56
ALEXANDRE 2922 R$ 7.977,80
MARIO 1859 R$ 7.976,97
FLAVIO 1527 R$ 7.942,51

Comparando com os nomes mais comuns, que ficam perto da média geral:

Nome Qtd Média
MARIA 31476 R$ 6.324,43
JOSE 23187 R$ 6.740,67
ANTONIO 10156 R$ 6.789,10
ANA 9116 R$ 6.370,80
CARLOS 8715 R$ 7.432,78
PAULO 8462 R$ 7.608,24
JOAO 8382 R$ 6.782,20
LUIZ 7963 R$ 7.536,28
FRANCISCO 7538 R$ 6.403,44
MARCELO 4283 R$ 7.933,07

Dá pra se ver a importância de ser Ricardo! São quase R$ 2.000,00 a mais. E pra camila então, nem se fala:

Nome Qtd Média
CAMILA 761 R$ 4.268,22
DIEGO 682 R$ 4.606,43
PRISCILA 597 R$ 4.743,88
RAIMUNDA 602 R$ 4.851,35
ALINE 1288 R$ 4.937,33
ANDREIA 630 R$ 5.044,09
VANESSA 956 R$ 5.080,88
THIAGO 1245 R$ 5.088,57
FRANCISCA 1297 R$ 5.152,34
THAIS 501 R$ 5.202,00

Um Ricardo vale quase o dobro de uma Camila!

(Eu não sei explicar esses fenômenos, mas a predominância masculina no topo e feminina na base dão uma idéia de que sexo deve ter influencia no salário. Outro fator que parece relevante é a época em que o nome esteve na moda. Ricardos tendem a ser mais velhos que Camilas, o que os coloca em patamares maiores nos planos de carreira. Ainda devem ter outros fatores extra-numerologia pra explicar, quem tiver palpites verificáveis, poste nos comentários)

E o que falta?

Bom, isso tudo foi diversão. Falta encontrar algo de sério nisso tudo. Pra isso eu queria fazer um data-mining mais sério nos dados, mas me falta experiência. Tentei montar um BI no pentaho com os dados, mas ainda estou apanhando pra modelar bem esses dados. Principalmente o fato de ter várias pessoas com mais de um cargo me deixa sem saber como isso se modela num DW.

Num data-mining "manual" andei descobrindo uns padrões interessantes: Quando agrupo as pessoas por órgão e por nome/sobrenome, encontro vários casos de pessoas que estão no mesmo órgão, tem o mesmo sobrenome, em geral uma mulher e um homem, ele com cargo de direção, ela com uma função comissionada de assessoramento, mas com um salário mais alto que a média. Sem uma verificação mais profunda, não posso afirmar nada, mas parece que: ou os diretores se apaixonam pelas assessoras mais bem graduadas, ou eles conseguem encaixar suas esposas nos melhores cargos de assessoramento dos órgãos onde trabalham. Conhecendo o serviço público, vou chutar que é a segunda opção!

36 thoughts on “Fuçando a transparência

    • Eu também pensei nele 😀 Acho que "nome de rico" x "nome de pobre" pode justificar uma boa parte da diferença também, só não tenho dados suficientes pra afirmar isso, preferi não gerar polêmica!

  1. Em primeiro lugar, parabéns pelo post, eu mesmo queria fazer algo assim mas estava com preguiça 😉
    Eu recomendo que você faça gráficos de histograma para entender a forma das distribuições dos salários e procurar algum padrão interessante, só olhando para as médias a gente perde muita coisa.
    Quanto à questão dos nomes, a distribuição dos salários deve seguir uma distribuição normal, com média m e desvio padrão s. Suponha que você tenha uma máquina de sortear números aleatórios de acordo com essa distribuição e obtenha um amostra de tamanho n. Se você calcular a média da sua amostra, a chance maior é que ela caia num intervalo em torno de m, digamos (m-s, m+s). Mas se você repetir o procedimento muitas vezes, alguma hora você vai ter uma amostra com média muito menor/muito maior que m, mesmo se o seu procedimento de sorteio for aleatório. Se você aumentar o valor de n, fica mais difícil obter um valor de média da amostra muito diferente de m e vice-versa, com n pequeno é mais provável que você tenha "sorte" e obtenha um valor extremo.
    Então, só de bater o olho não dá para saber se o salário dos Ricardos é tão diferente da média, é preciso ver quantos desvios padrões o valor está acima. Mas mesmo que seja, pode ser apenas um artefato de fazer múltiplas comparações. Note que você obteve os valores mais extremos para os nomes menos frequentes, o que é consistente com a teoria estatística. Como sempre, existe um tirinha do xkcd para essa situação:
    http://xkcd.com/882/
    Se eu fosse chutar, acho até que deve existir um efeito nome/salário, mas deve ser via alguma variável adicional, como você sugeriu (idade, nome de rico/pobre, nome mais/menos popular por região do país).

    • Bom, em primeiro lugar, obrigado pelos parabéns. 😀 E confesso que preguiça é o que tem me segurado de fazer algo mais sério. Sobre analises estatísticas mais complexas, me faltam tanto as ferramentas quanto o conhecimento necessário. Os dados são enormes. São quase um milhão e meio de registros. Cada query pra calcular uma simples média agrupando os dados por nome leva quase 10 minutos no meu computador. Se fosse gerar um histograma disso levaria dias. Pelo menos com as ferramentas que tenho.
      A distribuição dos salários me parece ser exponencial e não normal, já que tem muita gente ganhando pouco e pouca gente ganhando muito. Mas só gerando mesmo um histograma pra confirmar. A distribuição entre os nomes talvez seja mais aleatória. Não sei bem como testar isso, aceito sugestões! 😀
      E acima de tudo, obrigado mesmo pelo apoio!

  2. Quanto aos nomes, o que você descobriu foi uma predominância de nomes masculinos ganhando salários mais altos. Eu chutaria que sim, os homens ganham mais, mas basta um Sétura e duas Malfisas ganhando vinte mil para provar que os dados agrupados assim [número de nomes - média de salário] não têm realmente muita utilidade.

    • Essa parte (de que não têm realmente muita utilidade) eu já sabia 😀 Agora o que eu preciso é de algo que seja humanamente factível E tenha utilidade! 😛 é disso que eu tou atrás!

      • Se você achar quanto cada instituição gasta por mês e cruzar todos os dados com os orçamentos publicados no D.O.U., dá para saber quanto dinheiro está sumindo.

        Falando em nada disso, você achou algum CPF repetido?

        • como os CPFs estão "anonimizados", tipo esse daqui: ***.999.991-** tem uma penca de repetições (158654 pra ser mais exato), mas não tem repetições de pares [nome, cpf] não.

  3. Girino, tem como disponibilizar o CSV? Acho que consigo fazer umas análises interessantes simplesmente usando tabelas dinâmicas no Excel.

  4. Girino, adorei! Parabéns pela ideia e madrugadas investidas! Pena q vc nao vai conseguir ter as informações do Tcu aí, a não ser q as definições mudem nas próximas horas. Se quiser brincar de verdade com mineração, sugiro a ferramenta Weka: http://www.cs.ccsu.edu/~markov/weka-tutorial.pdf. Se quiser fazer uma modelagem multidimensional, observe q uma estrela apenas não deve responder todas perguntas. Estou à disposição para trocar ideias! Bjim

    • Ei Fá. Valeu pela força.

      Eu já experimentei o weka, mas ele deu out of memory com a quantidade de dados 🙁 preciso de um computador melhor pra poder fazer isso 😀

  5. Opa Girino,
    Se vc quiser comparar os dados, saiba que existe um banco de dados similar nos EUA. Por acaso voce tem dados sobre escolaridade dos funcionarios? Ia ser legal comparar os salarios com os da iniciativa privada por grau de escolaridade.

  6. Oi Girino!
    Sensacional o seu post - concordo que esses dados polemicos de salario se servidor no fim das contas sao quase inuteis, mas você encontrou coisas interessantes aí (especialmente em relacao ao genero).
    Você liberou os dados brutos e tratados em algum lugar? Adoraria usar pra fazer algumas visualizacões.
    Abs,
    Daniela

  7. Sensacional, Girino!
    Você subiu seus dados tratados em algum lugar? Eu adoraria fazer algumas visualizações em cima dessa história dos dados dos nomes (mulheres X homens) no serviço público.
    Abraço,
    Daniela - Comunidade Transparência Hacker

    • oi, desculpa a demora em responder (e em aprovar seu comment). Eu estava trocando de micro essa semana. (ainda não consegui por tudop em dia, esto uagora no micro velho tentando fazer um backup prum hd externo pra passar tudo pro novo.. ô luta).

      Enfim, vamos ao que interessa: os dados brutos agora foram liberados pela propria CGU, num formato mais "amigável" até que o meu. Quando você clica no link "baixar mais dados" do portal da transparência os dados agora vem completos, em formato CSV e com um campo id_servidor que permite fazer ocasamento entre os vários arquivos. Se quiser os dados que eu usei e extrai "na mão" da página deles, estão em http://girino.org/servidores

      Sobre os dados já processados, não tenho em mãos de forma fácil, mas coloquei no google code um projeto com o programa (em grails, precisa baixar e instalar o grails, disponivel no site http://grails.org ). Depois pode baixar os fontes do meu programa em http://code.google.com/p/hacktransparencia/source/checkout

      PAra rodar esse programa, entre no diretório em que ele foi baixado e rode, na linha de comando:

      grails run-app

      depois abra o endereço http://localhost:8080 no seu browser. Vai demorar algumas horas antes de ficar utilizável pois ele precisa fazer a carga dos dados para um banco de dados.

      Estava, logo antes de trocar de micro, trabalhando numa versão do programa mais simples e baseada nos novos formatos de dados fornecidos pela CGU. Deve gerar um novo post de blog quando terminar.

  8. Parabens, muito bom.
    Só tenho opniao diferente sobre focar no salario bruto. Se voce observar tem gente ganhando acima do teto (ex. alguns ministros recebem acima de R$40.000,00 - fazenda, planejamento...). Pegando somente o bruto isto nao aparece. Seria legal identificar os top 20 mas incluindo tudo. Como normalmente nao são servidores, mas cargos de livre nomeacao e recebem jetons isto nao aparece se voce olhar somente o salario. Mas a informacao esta la na base. Abcs

  9. Fiquei curiosíssimo com o fato de meus charás ganharem, mal então resolvi investigar. Minha conclusão rápida e sem muito rigor científico: Por alto, uns 90% dos Diegos são soldados ou cabos do Exército, Marinha ou Aeronáutica. Provavelmente nascidos no fim da década de 80 e início da década de 90, o boom dos Diegos, muito novos ainda, muita coisa pra conquistar ainda hehehe
    Avante Diegos!

  10. Parabens pelo trabalho. Você teria como publicar as liistas completas? queria ver como está o órgão que eu trabalho em relação a outros...

  11. Meus parabéns! Achei super interessante a verificação dos valores por órgão e depois por cargo.
    Concordo que é importante avançar, principalmente na questão daqueles que recebem acima do limite constitucional, devido a participação em conselhos (jetons). Será que é possível verificar quem recebeu a mais que o teto constitucional por vários meses?

    • Só existem informações de 2 meses, maio e junho, por enquanto. Mas no futuro, quando se acumularem mais meses, sim, será possível.

  12. Pingback: Primeiras análises do Portal da Transparência | Arquitetura Falada

Leave a Reply