Beruflich Dokumente
Kultur Dokumente
______________________________________________________
Prof. Dr. Vinicius Cardoso Garcia
Orientador
______________________________________________________
Profa. Dra. Bernadette Farias Lóscio
Avaliadora
Recife
2019
1
RESUMO
2
ABSTRACT
In a context where many individuals have fast and convenient access to data, it is not
difficult to understand why the internet has become a major channel for data dissemination.
This potential has been exploited in a variety of ways. In this scenario, the idea of open
government data began to flourish. Governments have moved to make data available to the
population. However, sometimes data are presented in an unfriendly, segregated and not
machine processable. Public agencies seem to understand open data only as an accountability
to the population, leaving aside the principles that govern the core of open data. This work
aims to implement a data extraction system of the Recife City Council and to present and
make the data more interesting for reuse. The less hindrance to accessing and interpreting
public information, the more interest and motivation there will be for the population. A
population provided with information is better prepared and empowered to charge their
representatives.
Keywords: open government data, data extraction.
3
AGRADECIMENTOS
Agradeço aos professores que me ajudaram durante o decorrer do curso. Agradeço aos
colegas dispostos a ajudar e compartilhar conhecimentos.
Um agradecimento especial ao professor Vinícius Garcia, que ministrou os cursos com
os quais mais me identificava, e que sempre conseguir passar os conhecimentos da melhor
maneira possível demonstrando seu amor pela profissão em suas aulas.
4
LISTA DE ABREVIATURAS
5
SUMÁRIO
1. INTRODUÇÃO 7
1.1. Contexto 7
1.2. Problema 8
1.3. Objetivo 9
7. REFERÊNCIAS 26
6
1. INTRODUÇÃO
1.1. Contexto
7
7. Não proprietários: Órgãos ou entidades não devem ter controle exclusivo dos dados.
8. Livre de licenças: Os dados não devem estar submetidos a licenças. Restrições sobre
privacidade, e outros pontos devem ser bem justificados.
Tais leis foram propostas no contexto de dados abertos governamentais, mas podem
abranger facilmente outras definições e categorias de dados abertos[2].
Esses princípios e ideias criadas, foram tomando cada vez mais forma e ganhando
mais adeptos.
Em 18 de novembro de 2011, foi aprovada no Brasil a Lei nº 12.527, conhecida como
“Lei de Acesso à Informação” [10]. Como o nome sugere, a lei foi criada no intuito de
regulamentar o acesso à informações governamentais. Desde então, os órgãos públicos se
viram compelidos a se movimentarem para viabilizarem a disponibilização dos dados abertos
em seus respectivos escopos de atuação. Foi criada uma cartilha de publicação para a
publicação de dados abertos no Brasil [4]. Em março de 2013, foi lançado o Portal da
Transparência da Prefeitura de Recife, além disso, o site da Câmara Municipal de Recife
começou a disponibilizar dados referentes aos servidores da Câmara, bem como os vereadores
[5].
1.2. Problema
8
pelos interessados seja trabalhosa. É importante ressaltar também, que os dados
disponibilizados constam em diferentes fontes e formatos, dificultando o trabalho para quem
tem como intenção a consulta de informações. Para quem deseja extrair os dados para a sua
utilização em pesquisas, apenas parte dos dados podem ser baixados em planilhas, a outra
parte consta apenas no front-end da página, sem opção de download [8]. A disposição dos
dados será mais detalhada no próximo tópico.
1.3. Objetivo
1.4 Concepção
Como citado anteriormente, alguns dados necessários para a realização deste trabalho
não estavam disponíveis para download, constando apenas no front-end das páginas do site da
Câmara Municipal, em contrapartida, outros dados poderiam ser baixados em planilhas. Se
fazia necessária a estruturação e transformação, e integração dos dados para sua persistência
em uma base de dados relacional para permitir a correlação entre os dados provenientes de
fontes distintas. A apresentação dos dados por meio de alguma ferramenta de visualização,
para facilitar o consumo dos dados por parte de interessados.
9
Para facilitar a organização do projeto, este foi divido em três tópicos:
10
2. DISPOSIÇÃO DOS DADOS DA CÂMARA MUNICIPAL
11
● Mesa diretora
● Comissões
● Parlamentares
● Pauta da Sessão
● Sessão Plenária
● Matérias Legislativas
● Normas Jurídicas
● Relatórios
Dos itens acima, os mais interessantes para o trabalho são Parlamentares, Sessão
Plenária e Matérias Legislativas. Os outros itens apresentam massas de dados muito grandes e
de pouco cunho prático. Parlamentares possui uma lista de todos os vereadores. De Sessão
Plenária, pode-se extrair a lista de presença, que pode nos dar dados sobre quem são os
vereadores mais presentes e mais faltantes. E no item de Matérias Legislativas, constam todas
as propostas apresentadas pelos vereadores. Esses três conjuntos de dados podem trazer
informações práticas e de boa relevância para a pesquisa.
Quanto a navegação de telas, o item parlamentares nos apresenta uma lista com os
nomes dos parlamentares, seu partido, e se ele ainda está exercendo o cargo. Podemos
também escolher ver essas informações de acordo com a legislatura. Para o projeto, foi
escolhida a legislatura atual. Não vemos porém, alguma opção onde possamos fazer o
download dos dados.
Na parte de sessões, a história é parecida. Podemos navegar entre dias vendo
informações sobre as sessões plenárias de cada dia, porém não temos a opção de baixar os
dados.
12
Figura 1 - Formulário para pesquisas sobre matérias legislativas
(Fonte: site do Sistema de Processo Legislativo)
13
3. COLETA DOS DADOS
Como mencionado no item anterior deste trabalho, parte dos dados estavam
disponíveis por meio de planilhas, facilitando o acesso, e principalmente, o armazenamento
dos dados por parte dos interessados. Contudo, uma grande e importante parte dos dados
estavam dispostos apenas por meio da UI (User Interface) do site SAPL. Sendo assim, as
opções para quem deseja extrair tais dados para posterior utilização são, copiar manualmente
os dados para outro ambiente, ou automatizar esse processo por meio de algum software de
extração de dados web. Isso torna o processo mais complicado e cria um grande filtro para
indivíduos interessados na extração dos dados, pois, levando em conta a distribuição da
população, poucas pessoas possuem o conhecimento técnico e o tempo para o
desenvolvimento de um software que execute as tarefas necessárias para obter o resultado
esperado.
Para a coleta dos dados do SAPL, foi escolhida a técnica de Web Scraping, que
consiste em percorrer páginas web com a utilização de software, e extrair os dados do
front-end das páginas de forma automatizada, para estruturação em planilhas ou base de dados
[9].
Para este propósito, foi escolhido o desenvolvimento de uma aplicação em Java, com a
utilização do Jsoup. O Jsoup é uma biblioteca Java open source para a extração e manipulação
de dados contidos em HTML. Existem muitas soluções e bibliotecas apropriadas para Web
Scraping em diferentes linguagens disponíveis para uso gratuito. A escolha do Java deve-se à
familiaridade e facilidade que as IDE’s de Java nos proporcionam para o debugging, bem
como a vasta documentação disponível não apenas nos sites oficiais das ferramentas, como
em fóruns online, devido a grande popularidade da linguagem.
A primeira página escolhida para começar a extração dos dados foi a dos
parlamentares, já que, todos os outros dados coletados para a execução deste projeto giram em
torno dos vereadores. Essa primeira extração não trouxe muitos problemas, apesar de
14
embutidos no front-end da página, os dados estavam em um formato muito similar a um CSV,
além de conter poucos registros, quarenta e cinco apenas. O código foi implementado visando
a extração das colunas colunas disponíveis na página, nome parlamentar, nome civil, partido e
se o parlamentar está ativo ou não. Só foram extraídos os dados sobre os vereadores que
pertencem a legislatura atual.
A segunda categoria escolhida, foi a de sessões plenárias. Também não houveram
dificuldades em sua extração. Os dados escolhidos para serem extraídos das sessões foram o
nome da sessão, o seu tipo (se é ordinária ou extraordinária), hora da abertura, hora do
encerramento, sua data e sua lista de presença, que era a informação mais interessante para o
prosseguimento do projeto. Algo chamou a atenção a respeito dos dados desta categoria.
Existia uma lacuna grande entre os anos. Eram 111 registros correspondentes ao ano de 2019,
apenas 1 correspondentes à 2018, e 2 correspondendo à 2017, 2 a 2014, e 78 a 2013. Poucos
dados dos anos 2018, 2017 e 2014 e absolutamente nenhum dado sobre os anos de 2016 e
2015.
A terceira categoria para a extração dos dados foi a de matérias legislativas. A difícil e
com a maior quantidade de dados. A tela inicial da página de matérias possui um formulário
para a escolha de parâmetros a serem pesquisados, e ao pesquisar sem parâmetro algum ele
retornava as 10.000 (dez mil) primeiras entradas.
As entradas eram ordenadas por ordem alfabética de acordo com o nome do tipo da
matéria legislativa. Logo, a opção de fazer uma pesquisa sem parâmetros e extrair os dados,
15
não era possível, já que só seriam extraídos os 10.000 primeiros. Foi necessário percorrer as
páginas de todas as categorias, e percorrer a paginação do resultado de todas as pesquisas.
Felizmente, a URL gerada pelas pesquisas, apesar de grande, não escondia os parâmetros, o
que facilitou bastante, principalmente para superar a paginação, que por vezes é um desafio na
técnica de web scraping [9].
Durante a extração dos dados sobre as matérias surgiu o problema dos links ficarem
temporariamente indisponíveis, difícil precisar se isso ocorreu por problemas de conexão
comuns, ou se a quantidade de requisições foi muito grande, fazendo com que o load balancer
do SAPL bloqueasse requisições temporariamente. Por precaução, foi implementado no
código um simples sistema de verificação, onde se uma requisição retornasse nula, a aplicação
esperaria 30 segundos antes de tentar novamente. Além disso, foi colocado um temporizador
entre as requisições, para evitar a sobrecarga dos servidores da câmara. Isso tornou o trabalho
custoso, e tornou o processo de extração de dados dessa categoria levar aproximadamente 3
horas para ser concluído. A massa de dados foi a maior encontrada, mas em comparação com
as massas de dados que encontramos hoje em dia não é tão grande assim, apenas 11.290 (onze
mil duzentas e noventa) entradas.
Em geral o site da SAPL respondia bem, era intuitivo de usar, mas pecava em não
possuir meios de extração diretos, além de estar fora do ar em algumas tentativas de acesso no
decorrer da elaboração deste projeto.
3.2. Planilhas
Os dados sobre remunerações podem ser acessados pelo site da Câmara Municipal,
por meio de um iframe que recebe parâmetros, executa uma consulta e disponibiliza o
download do resultado pelos formatos CSV, TXT, XLS, ODF, XML ou PDF. Foi escolhido o
formato CSV, por ter uma estrutura interessante e amigável do ponto de vista de máquina. Já
existem inúmeras bibliotecas para a extração e manuseio de dados nesse formato.
Outra massa de dados que nos interessa é referente às verbas indenizatórias recebidas
pelos vereadores. Elas podem ser acessadas por uma sessão no site da Câmara Municipal e só
16
podem ser baixadas no formato XLSX. O formato também é amigável à extração, e não causa
transtornos nesse sentido.
Para a coleta dos dados de ambas as massas de dados descritas acima, foram
implementados scripts em Python, que extraia estruturava e fazia inserção dos dados na nossa
base de dados. A linguagem Python foi escolhida para essa tarefa por ser bastante prática,
possuir boas libs para executarem a tarefa de maneira satisfatória, além possuir ferramentas de
debugging que facilitam bastante.
Infelizmente não foi possível utilizar o mesmo script para as planilhas das duas
categorias, já que a estruturação dos dados era diferente entre elas.
17
O desafio na extração desses dados, se deve mais à estruturação dos dados nas
planilhas referentes à verbas indenizatórias. Nas planilhas de remuneração cada linha refletia
exatamente o que deveria ser inserido no banco, bastante simples. Porém no caso das verbas
indenizatórias, foi necessário um esforço maior, já que a tabela possuía atributos em ambos os
eixos como mostrado na figura abaixo.
18
4. PERSISTÊNCIA DOS DADOS
Os dados das tabelas “vereadores”, “sessoes” e “presencas” foram extraídos via web
scraping pelo site SAPL. O campo “nome_parlamentar” na tabela “vereadores” foi
19
correlacionado com o nome “autor” na tabela “materias”, assim foi possível adicionar as
chaves estrangeiras em “materias”. Da mesma forma, o “nome_parlamentar” da tabela
“vereadores” foi correlacionado com os nomes contidos no campo “lista_de_presenca” da
tabela “sessoes”, assim foi possível a criação e adição das chaves estrangeiras em
“presencas”. Já esse conjunto de dados foi retirado da mesma fonte, a integração foi possível
já que os nomes dos vereadores eram correlacionáveis entre as tabelas.
Os dados contidos nas tabelas “remuneracoes” e “verbas_indenizatorias”, foram
extraídas de planilhas baixadas do site da Câmara Municipal. Para relacionar os dados
planilhas com o conjunto de dados anterior foi um pouco mais trabalhoso, já que, não foi
possível encontrar um identificador que gerasse uma correlação perfeita. As planilhas de
remunerações continham o número da matrícula dos vereadores, porém tal informação não
constava em mais nenhum conjunto de dados. Logo, a integração dos dados precisou ser feita
pelos nomes dos vereadores novamente. Porém, nesse caso, ocorreram problemas de
integração, já que os nomes de alguns vereadores contavam de forma bastante diferente entre
os conjuntos de dados. Por exemplo, no site da SAPL, o nome da vereadora Michelle Collins
constava como “Missionária Michelle Collins”, tanto como nome civil como nome
parlamentar. Já nas planilhas o nome da vereadora constava como “Daize Michelle”. Esse tipo
de discrepância dificultou a correlação dos dados. Foram observados também alguns casos de
erros de digitação. Tais casos precisaram ser tratados individualmente.
A tabela central do modelo é a de vereadores. Todas as outras tabelas recebem o id de
vereadores como chave estrangeira, com exceção da tabela “sessoes”, já que a relação entre
vereadores e “sessoes” era de n:n, foi criada uma tabela intermediária que recebe chaves
estrangeiras de ambas.
A adição das chaves estrangeiras foi feita por meio de um script em Python. Os
campos contendo datas também precisaram sofrer alterações para que ficassem todos com um
formato homogêneo, e que pudessem ser lidos facilmente pela nossa ferramenta de
visualização.
20
21
5. APRESENTAÇÃO DOS DADOS
5.1. Dashboard
Para a montagem da visualização dos dados foi usada a pilha de software conhecida
como ELK (Elasticsearch, Logstash e Kibana). O Logstash é uma pipeline de processamento
de dados, que executa a coleta de dados por variados tipos de fontes diferentes, os transforma
e os envia, no nosso caso, o envio foi para o Elasticsearch. Esse, por sua vez, é um servidor de
buscas bastante conhecido. Os dados brutos são analisados, normalizados e enriquecidos antes
de serem indexados. Um índice no Elasticsearch corresponde a um conjunto de dados. Esse
índice pode ser consumido pelo Kibana, que têm os dados a disposição para que estes sejam
utilizados para construção de gráficos e tabelas [6].
Por meio de um plugin do Logstash é possível consumir dados de uma base SQL, por
meio de consultas, e alimentar o Elasticsearch. É o que foi feito no nosso caso. Depois os
gráficos começaram a ser trabalhados através do Kibana. No Kibana, é possível criar
visualizações separadas, que são então agregadas em um dashboard. Foi criado um
dashboard interativo contendo dados relevantes sobre nossos vereadores. Abaixo alguns
exemplos:
22
Figura 7 - Visualizações de maiores médias de remuneração mensal e o total pago por mês em verbas
indenizatórias
Como os dados são relacionados pelo índice criado pelo Elasticsearch, ao clicar no
nome de algum vereador, ou partido, o Kibana cria um filtro de dados, e todas as
visualizações são modificadas para aquele vereador ou partido escolhido.
5.2. Website
Foi criado um web site simples para a apresentação dos dados e do dashboard.
23
A tecnologia escolhida foi Ruby on Rails. Ruby é uma linguagem de programação que vem
ganhando muitos adeptos nos últimos anos. Possui um framework poderoso chamado Rails. É
bastante fácil de usar e ganhou fama por tornar possível resultados rápidos. Por se tratar de
uma prova de conceito, o Ruby on Rails ajudou a tornar o processo de criar um web site
simples e rápido.
O site possui três páginas. A página inicial apresenta uma breve descrição sobre o site,
e explica sucintamente como o usuário pode ter acesso aos dados. Existe a página criada para
a apresentação do dashboard onde o usuário pode interagir com o mesmo. E a terceira
paǵina é uma página de downloads, onde o usuário pode baixar os dados utilizados em
formato de CSV e os scripts SQL para a criação das tabelas.
24
Figura 10 - Paǵina com o dashboard interativo
25
6. CONCLUSÃO E TRABALHOS FUTUROS
Como aponta o estudo [11], os órgãos públicos brasileiros parecem acreditar que
transparência e dados abertos, são sinônimos. A publicação dos dados por parte dos nossos
órgãos é tratada como uma prestação de contas, e os princípios dos dados abertos são muitas
vezes ignorados.
A criação de projetos que suportam dados abertos serve para alimentar cada vez a
causa. A viabilização de acesso à informação sobre nossos representantes tem como objetivo
engajar os interessados e muní-los de informações para embasar as reivindicações.
O site Operação Política Supervisionada é uma iniciativa que faz a captação de dados,
estruturação e apresentação [7]. É um trabalho excelente, mas que deveria ser feito pelos
órgãos públicos. Se a política de dados abertos fosse tratada de maneira séria pelos órgãos
brasileiros competentes, trabalhos como esse não teriam razão de ser. Entretanto, enquanto
nossos órgãos não se mexem, cabe a nós cidadãos lutar por uma política de dados abertos
melhor.
26
7. REFERÊNCIAS
[1] JUNIOR, Eder Antonio Pansani; FERNEDA, Edberto. Dados Governamentais Abertos:
uma análise da qualidade dos dados em portais de transparência brasileiros. GT-8 –
Informação e Tecnologia, Londrina, 2018.
[2] O Que são dados abertos?. [S. l.], 2018. Disponível em:
http://dados.gov.br/pagina/dados-abertos. Acesso em: 25 nov. 2019.
[3] Quando surgiram os oito princípios dos dados abertos?. [S. l.], 2018. Disponível em:
https://br.okfn.org/2015/04/14/quando-surgiram-os-oito-principios-dos-dados-abertos/.
Acesso em: 25 nov. 2019.
[4] Cartilha de publicação de Dados Abertos. [S. l.], 2017. Disponível em:
http://dados.gov.br/pagina/cartilha-publicacao-dados-abertos. Acesso em: 25 nov. 2019.
[7] Operação Política Supervisionada. [S. l.], 2017. Disponível em: https://ops.net.br. Acesso
em: 23 nov. 2019.
[8] KLEIN, Rodrigo Hickmann; KLEIN, Deisy Cristina Barbiero; LUCIANO, Edimara
Mezzomo. Identificação de mecanismos para a ampliação da transparência em portais de
dados abertos: uma análise no contexto brasileiro. EBAPE, Porto Alegre, 2018.
27
[9] MESCHENMOSER, Philipp; MEUSCHKE, Norman; HOTZ, Manuel; GIPP, Bela.
Scraping Scientific Web Repositories: Challenges and Solutions for Automated Content
Extraction. D-Lib Magazine, [s. l.], v. 22, ed. 9/10, 2016.
[10] SEGUNDO, José Eduardo Santarem. Web Semântica, dados ligados e dados abertos:
uma visão dos desafios do Brasil frente às iniciativas internacionais. GT 8 – Informação e
Tecnologia, [S. l.], v. 22, 2015. XVI Encontro Nacional de Pesquisa em Ciência da
Informação, 2015, João Pessoa.
[11] BRAGA, Claudomilson Fernandes; TUZZO, Simone Antoniaci. Artigo Original Dados
abertos à brasileira: aspectos de uma cidadania denegada. Comunicação & Inovação, [s. l.], v.
18, ed. 37, 2017.
28