sábado, 7 de julho de 2012

Mapa dos assentamentos do INCRA no Rio Grande do Sul

Este mapa mostra os assentamentos do INCRA no Rio Grande do Sul, situação até 2012. Foi feito a partir de dados na Relação de Projetos de Reforma Agrária do órgão. É um "quase tutorial" de jornalismo de dados.

Os dados estão em um documento PDF, o que facilita sua visualização mas dificulta sua manipulação. Então eu tive que copiá-los como texto com o PDF Xchange Viewer e limpá-los com o Notepad++, através de procura-e-troca por expressões regulares.

Primeiro, copiei e colei no NP++. Tirei o cabeçalho de cada página com:

^Projetos(.*\n){26}.*UF:
####


(Neste artigo, a primeira linha é o padrão de busca, e a segunda, o que é para colocar no lugar do padrão encontrado). Isto, em linguagem regexp, significa "Selecione, deste o início da linha onde diz "Projetos", mais 26 linhas até onde diz "UF:".

Troquei por "#" para marcar o fim de cada página e facitar a limpeza. No final, tirei-os.

Depois, tirei o rodapé das páginas com:

Page.*\n(.*\n){3}

Troquei por nada.

Sobraram algumas linhas totalizando os resultados e o final do documento, que limpei à mão.

O resultado foram mais de 800 linhas como estas:

PA0006000 PA MIRITIPITANGA 106 RES 06 00205 02/09/1992 TOME-ACU 4.356,0000 92 28/01/1987 Desapropria
PA0016000 PA MANOEL CRESCÊNCIO DE SOUZA 465 POR 07 917 26/11/1986 AURORA DO PARA 17.398,8000 367 26/06/1986 Desapropria


O documento foi gerado com o Cristal Report, programa de formação de banco de dados. Está bem estruturado, o que facilitou a recuperação dos dados em tabelas.

Estranhamente, o Xchange Viewer copiou as colunas de dados (chamados de "campos") em ordem diferente daquela do PDF. Suponho que em função de milimétricas diferenças de posicionamento das linhas no PDF. No entanto, a mudança de posição foi consistente, o que me permitiu recuperar os dados com apenas mais três procuras-e-trocas.

Como o mecanismo de regexp do NP++ só permite guardar até 9 padrões de busca, tive que fazer a busca em duas partes. Primeiro,  busquei e troquei as nove primeiras colunas com:

^([A-Z]{2}[0-9]{7}) *(.*?) *([0-9\.]*) *([A-Z]{3}) *([0-9]{2}) *([0-9]{2,5}|.{1,5}) *([0-9\/]{10}) *([A-Z'\- ]*)([0-9\.,]*)
\1\t\2\t\3\t\4\t\5\t\6\t\7\t\8\t\9#!#


Cada padrão entre parentesis foi recolocado com "\1", "\2", etc, entremeados com tabulação, que prefiro usar em vez de vírgula, nos arquivos CSV.

Em linguagem regexp, isto quer dizer: 

Selecione uma sequência de duas letras e sete algarismos, seguido de nenhum ou mais espaços, seguido da menor sequência de quaisquer caracteres e nenhum ou mais espaços até uma sequência de algarismos ou ponto e nenhum ou mais espaços, seguido de três caracteres e nenhum ou mais espaços, seguido de dois algarismos e nenhum ou mais espaços, seguido de dois a cinco algarismo ou de nenhum a cinco caracteres quaisquer e nenhum ou mais espaços, seguido de uma sequência de dez algarismos ou barra e nenhum ou mais espaços, seguido de uma sequência de caracteres, apóstrofe, hífen ou espaço e nenhum ou mais espaços até uma sequência de quaisquer algarismos, ponto ou vírgula, inclusive.

Este padrão casou com os seguintes campos, conforme a cor indica:

PA0006000 PA MIRITIPITANGA 106 RES 06 00205 02/09/1992 TOME-ACU 4.356,0000 92 28/01/1987 Desapropria

Usei um marcador temporário (#!#) que será usado para encontrar a posição nos resistro que ainda não foi trocada. Então, busquei e troquei as últimas colunas com:

#!# *([0-9\-\.]*) *([0-9\/]{10}) *(.*)
\t\1\t\2\t\3


Isto quer dizer:

Procure pela sequência #!# e nenhum ou mais espaços até uma sequência de algarismos, hífen ou ponto e nenhum ou mais espaços seguido de uma sequência de dez algarismos ou barra e nenhum ou mais espaços, seguidos de quaisquer caracteres até o fim da linha.

Estas buscas e trocas deixaram poucas linhas que foram consertadas à mão.

O arquivo foi salvo em formato Comma Separated Values (CSV) e carregado numa planilha LibreOffice, onde foi feita a consistência dos dados, as colunas colocadas na ordem do documento PDF e a coluna com vírgula decimal foi marcada como língua inglesa, para trocar a vírgula por ponto decimal.

Copiei os nomes de cidade e assentamentos, colei no NP++ e baixei a caixa (coloquei em formato nome próprio), cuidando depois de trocar " Do " por " do ", " Da " por " da ", " D'a " por " d'A ", etc. Isto é necessário porque o recurso de juntar tabelas no GFT precisa ter uma casamento perfeito entre os nomes de cidade e seu mapa.

A seguir, filtrei os dados do Rio Grande do Sul e subi para o Google Fusion Table. Não subi todos os dados porque o GFT tem limite de 3 mil linhas de dados, e o arquivo do INCRA tem mais de 8 mil registros.

No Fusion, agreguei os dados por município, baixei como CSV e subi novamente para poder fazer o mapa com os dados agregados. Fiz um merge com os mapas dos municípios do Rio Grande do Sul que tenho em outra tabela, ajustei a apresentação dos balões de informação, mudei a cor do mapa de tons para vermelho. O resultado aparece abaixo. Clique no município para ver os dados.



Veja a tabela original no Google Fusion Tables. E use os mapas dos municípios do Rio Grande do Sul à vontade.

2 comentários:

  1. Parabéns! O resultado ficou muito bom. O que você acha da ideia de usar o Perl da seguinte forma: perl -i -pe 's/padraodebusca/substituicao/' arquivo.txt

    ResponderExcluir
  2. ola , onde esta o mapa em PDF ?? estou fazendo uma pesquisa sobre o estado, gostaria da imagem do mapa , que usarei devidamente referenciado, pode vir inclusive com referencias. mando copia do trabalho se quiseres ,assim que pronto .

    ResponderExcluir