Hackeando Gastos Governamentais com Python 3

Uma breve introdução

Ontem, 12 de outubro (2017), aproveitei para publicar um pequeno projeto que desenvolvi em alguns dias. Postei nos grupos do Facebook Python Brasil e A.P.D.A., além da minha timeline. Obtive um feedback bem legal e maior do que eu esperava. E é ele que será tratado aqui.

É de conhecimento comum que dá pra fazer várias coisas com uma linguagem de programação. Aprender tudo sobre uma é praticamente impossível, para meros mortais. Por isso, é importante encontrar um foco. Em tese, deve ser algo desafiador e que desperte o interesse de quem está escrevendo os códigos. Eu fui atrás do meu foco, se encontrei eu não sei. Mas estou gostando de raspagem de dados.

A inspiração

Já acompanho há um tempo o trabalho do Professor Fernando Ashikaga. Ele ministra cursos e palestras sobre raspagem de dados. Acompanhei pelo YouTube uma dessas palestras realizada pela Roadsec SP.

A partir dessa palestra eu fiquei ainda mais interessado em raspagem de dados e pensei em me desafiar.

A fonte dos dados

E como atualmente se fala bastante em gastos e orçamento do governo, resolvi utilizar o Portal da Transparência do Governo Federal como objeto de estudo.

As ferramentas

Comecei meus estudos pela documentação do Beautiful Soup[1]. Tinha que ser com Python. E nisso fui passando algumas noites aprendendo coisas novas, inclusive o Jupyter Notebook[2] que não conhecia. Eu utilizava mais o vim e o iPython.

O Pyplot[3] foi utilizado para a plotagem dos gráficos. Logo depois o Seaborn foi aplicado no projeto.

Uma definição rápida sobre o Beautiful Soup:

"Beautiful Soup é uma biblioteca Python para extrair dados de arquivos HTML e XML. Ele funciona com o seu analisador favorito para fornecer maneiras idiomáticas de navegar, pesquisar e modificar a árvore de análise. Geralmente economiza horas ou dias de trabalho do programador."[1]

Agora, uma definição rápida sobre o Jupyter Notebook:

"O notebook amplia a abordagem baseada em console para a computação interativa em uma direção qualitativamente nova, fornecendo uma aplicação baseada na web adequada para capturar todo o processo de computação: desenvolvimento, documentação e execução de código, além de comunicar os resultados."[2]

E sobre o Pyplot:

"Matplotlib.pyplot é uma coleção de funções de estilo de comando que fazem Matplotlib funcionar como MATLAB. Cada função pyplot faz alguma alteração em uma figura: por exemplo, cria uma figura, cria uma área de traçado em uma figura, traça algumas linhas em uma área de traçado, decora o gráfico com rótulos, etc."[3]

O desafio

O desafio teve como objetivo auxiliar na aprendizagem da técnica de raspagem de dados. Ele foi: realizar raspagem de dados no Portal da Transparência e apresentar graficamente os gastos diretos de alguns órgãos superiores, desde o início da inserção dos dados no portal até o ano atual.

Os órgãos escolhidos foram: Presidência da República; Ministério da Ciência, Tecnologia, Inovação e Comunicações; Ministério da Educação; Ministério da Previdência Social; Ministério da Saúde; Ministério do Meio Ambiente; e Ministério do Esporte. Nenhum motivo especial foi utilizado na escolha desses órgãos.

Dessa forma, dentre vários questionamentos, as seguintes perguntas a serem respondidas são:

  • Qual órgão recebe o maior investimento do Governo?

  • Qual órgão recebe o menor investimento do Governo?

  • Qual governo gastou mais com a Presidência da República?

Acessando os dados

O primeiro passo foi verificar os padrões tanto das urls quanto do html das páginas, além de identificar os dados que devem ser extraídos. O html da página é igual para todos os anos e órgãos superiores, e os dados se encontram exatamente dentro das mesmas posições e marcações html. Depois de anotar esses padrões, passamos para a captura e limpeza dos dados.

Portal Transparencia

Capturando e limpando os dados

Basicamente, a captura da url referente a cada órgão superior foi feita, bem como a captura dos dois valores de "class=colunaValor" pertencente a marcação "< td>", sendo o de interesse o segundo que é refente ao valor destinado ao órgão. Após isso, temos um tratamento para retirar o que não for de interesse, deixando apenas o valor do segundo  "class=colunaValor".

Portal Transparencia Fonte

O valor de cada ano, após passar por esse tratamento, é adicionado dentro de uma lista. Essa string deve ser convertida em float para colocar todos os valores em uma única unidade, pois, como os gráficos devem representar esses dados, nada melhor do que deixá-los da forma mais amigável possível. A unidade escolhida foi bilhão de reais com base em todos os dados.

Dessa forma, foram capturados e limpos os dados para cada órgão superior. Em seguinda, eles foram adicionados a uma lista de valores em bilhões de reais desde o ano de 2004 até o ano de 2018. Com isso, junto com uma lista contendo os anos (2004, 2005..., 2018), os gráficos foram plotados da forma Em bilhões de R$ (eixo y) X Ano (eixo x) para cada um deles.

Foi adicionado a possibilidade de plotar todos os órgãos em um único gráfico ou escolher quais queremos comparar.

Principal desafio encontrado

  • A não existência de dados anteriores a 2004. O que permitiria a comparação entre os governos anteriores a esse período

Resultados

Qual órgão recebe o maior gasto do Governo?

Até o ano de 2015, o gasto destinado a Previdência Social era o maior. Já a partir de 2016, a Educação adquiriu essa posição e a manteve no corte dos gastos em 2017.

Gráfico 01

Qual órgão recebe o menor gasto do Governo?

O órgão Esporte, desde 2004, é o que menos recebe investimentos do Governo. Em 2007 (Jogos Pan-Americanos de 2007) teve o seu maior investimento que foi seguido de uma grande queda em 2008. A queda devido ao corte nos gastos em 2017 foi menor do que o corte de 2008. Porém, em 2018 alcançou a sua maior queda.

Gráfico 02

Qual Governo gastou mais com a Presidência da República?

Desde 2004 esse órgão possuiu pequenas reduções de gastos nos anos de 2010 e 2012. Porém, em 2018 teve um corte mais significativo.

Gráfico 03

Sobre os gráficos

É possível gerar os gráficos por órgão superior, isso totaliza 7 gráficos. Somado a isso, o código permite plotar gráficos com mais de um órgão superior, o que é ideal quando se quer comparar gráficos. Os gráficos podem ser acessados aqui: GitHub.

Considerações

A intenção deste pequeno projeto foi somente a de aprender e praticar raspagem de dados utilizando Python. Em relação as análises acerca do momento econômico e político no qual o País vive(u) fica por conta do leitor. Vale ressaltar que esses valores são os divulgados pelo próprio Governo.

O código completo pode ser encontrado no meu GitHub: https://github.com/edsonlead/data_scraping/blob/master/001/. Ainda irei aplicar algumas melhorias e quem sabe outras funções.

Agradeço ao Juliano Garcia, Anderson Rezende e Roberto Sousa pela ajuda na representação gráfica dos dados, ao Prof Fernando Ashikaga pela inspiração e divulgação dos seus conhecimentos. E a todos que deram um feedback nas publicações que postei. Vocês me motivaram ainda mais.

Gostou desse estudo? Caso tenha alguma sugestão ou comentário, faça bom uso das issues: https://github.com/edsonlead/data_scraping/issues. Ou do espaço para comentários aqui neste post. Aproveite e me siga no Twitter para trocarmos uma ideia legal.

Obrigado por ler até aqui. :)

Referências

1 https://www.crummy.com/software/BeautifulSoup/bs4/doc/

2 http://jupyter-notebook.readthedocs.io/en/latest/notebook.html

3 https://matplotlib.org/users/pyplot_tutorial.html

Go Top
comments powered by Disqus