Skip to content

Instantly share code, notes, and snippets.

@oten
Last active September 10, 2016 22:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save oten/f9abb2b25601d5cb6df6c4f233015020 to your computer and use it in GitHub Desktop.
Save oten/f9abb2b25601d5cb6df6c4f233015020 to your computer and use it in GitHub Desktop.

A ideia de trabalhar esses dados veio do Pedro Markun em uma postagem no facebook. Os primeiros arquivos em formato JSON foram gerados experimentando pelo REPL do Python e pelo terminal do Linux. O problema é recuperar isso quando alguém pede o código. O Capi Etheriel levantou alguns pontos importantes sobre ter todos os códigos embasando as visualizações e outras análises que possam vir a ser feitas com esses dados. Então, no repositório veradores_sp estão os scripts de conversão do TXT em JSON além do TXT de entrada e o JSON final. Como o TXT usado nele sofreu algumas correções em relação ao original, nesse texto será descrito o motivo de cada alteração e como elas foram feitas para quem quiser tentar reproduzir tudo partindo do arquivo baixado no site da Câmara.

O arquivo original em formato TXT pode ser baixado em:

http://www2.camara.sp.gov.br/Dados_abertos/vereador/vereador.txt

E uma especificação aqui:

http://www2.camara.sp.gov.br/Dados_abertos/vereador/Descricao.pdf

Dando uma primeira olhada no arquivo:

$ file vereador.txt 
vereador.txt: ISO-8859 text, with very long lines, with CRLF line terminators

$ head -3 vereador.txt 

Registro#Nome#NomeParlamentar#LiderPartido^iDataIn^fDataFin^cCargo#^cMesaCargo^iInicioCargo^fFimCargo^bObservacao#^pPeriodoHistorico^nNumeroLegislatura^sSituacao^qQuantVotos#^iVereancaDataIn^fVereancaDataFin^situacao^pPartido^bNomeVereadorSaiu^cObsPartido^dObsVereanca#^nComissaoNome^iDataIn^fDataFin^cCargo^dObs
40001#Aloysio de Menezes Greenhalgh#Alo�sio Greenhalgh%Aloysio Greenhalgh####^p3^n1^sSuplente^q1608%#^i01/01/1948^f31/12/1951^svereador^pPTB^bMeir Benaim^dAssumiu em car�ter efetivo o mandato de vereador em 01/01/1948 substuindo Meir Benaim cassado pelo TSE em 31/12/1947.%#^nComiss�o de Servi�os de Utilidade P�blica^i10/03/1948^f31/12/1948^cPresidente%^nComiss�o de Justi�a^i05/01/1949^f31/12/1949^cMembro%^nComiss�o de Estat�stica, Cadastro, Fomento Econ�mico e Ruralismo^i03/03/1950^f31/12/1950^cVice-Presidente%^nComiss�o de Justi�a^i26/01/1951^f31/12/1951^cMembro%

Como meu locale está configurado em UTF-8:

$ echo $LANG
pt_BR.UTF-8

...para o arquivo aparecer bonitinho no terminal vamos converter a sua codificação:

$ iconv --from-code=ISO-8859-1 --to-code=UTF-8 vereador.txt > ver.txt
$ head -3 ver.txt 

Registro#Nome#NomeParlamentar#LiderPartido^iDataIn^fDataFin^cCargo#^cMesaCargo^iInicioCargo^fFimCargo^bObservacao#^pPeriodoHistorico^nNumeroLegislatura^sSituacao^qQuantVotos#^iVereancaDataIn^fVereancaDataFin^situacao^pPartido^bNomeVereadorSaiu^cObsPartido^dObsVereanca#^nComissaoNome^iDataIn^fDataFin^cCargo^dObs
40001#Aloysio de Menezes Greenhalgh#Aloísio Greenhalgh%Aloysio Greenhalgh####^p3^n1^sSuplente^q1608%#^i01/01/1948^f31/12/1951^svereador^pPTB^bMeir Benaim^dAssumiu em caráter efetivo o mandato de vereador em 01/01/1948 substuindo Meir Benaim cassado pelo TSE em 31/12/1947.%#^nComissão de Serviços de Utilidade Pública^i10/03/1948^f31/12/1948^cPresidente%^nComissão de Justiça^i05/01/1949^f31/12/1949^cMembro%^nComissão de Estatística, Cadastro, Fomento Econômico e Ruralismo^i03/03/1950^f31/12/1950^cVice-Presidente%^nComissão de Justiça^i26/01/1951^f31/12/1951^cMembro%

Não é obrigatório mas podemos converter a quebra de linha para o padrão do Linux:

$ tr -d '\r' < ver.txt > vereador.txt

agora

$ file vereador.txt 
vereador.txt: UTF-8 Unicode text, with very long lines

Bom, já dá pra começar a tentar entender o arquivo. Ele tem um cabeçalho com os nomes dos campos e o arquivo de especificação dão várias dicas de como ele está organizado. Como é um registro por linha e um vereador por registro vamos tentar listar o nome de todos os vereadores...

$ cut -d '#' -f2 vereador.txt

Nome
Aloysio de Menezes Greenhalgh
Altimar Ribeiro de Lima
André Nunes Júnior
Angelo Bortolo
Anis Aidar
Antenor Ervêu Bettarello
Arnaldo de Morais Arruda (Padre)
Camillo Ashcár
...

tem algo estranho no meio da listagem...

...
Abilio Martins da Costa
Dante Pellacani
Floriano Francisco Dezen
Ramiro Luchesi
Aparecido Sidney de Oliveira
Marcos Belizário
^nComissäo Permanente de Meio Ambiente^i31/03/2015^f12/06/2015^cMembro suplente de Ricardo Teixeira^dComissäo Extraordinária Permanente de Meio Ambiente%
Valdecir Aparecido do Nascimento
João Carlos Camisa Nova
...

Tem umas quebras de linha a mais no arquivo. Olhando isso de perto...

$ grep -vn ^[0-9] vereador.txt
1:
2:Registro#Nome#NomeParlamentar#LiderPartido^iDataIn^fDataFin^cCargo#^cMesaCargo^iInicioCargo^fFimCargo^bObservacao#^pPeriodoHistorico^nNumeroLegislatura^sSituacao^qQuantVotos#^iVereancaDataIn^fVereancaDataFin^situacao^pPartido^bNomeVereadorSaiu^cObsPartido^dObsVereanca#^nComissaoNome^iDataIn^fDataFin^cCargo^dObs
276:
277: 
278:^dLicenciou-se de 01/01/2013 a 31/03/2016 para ocupar o cargo de Secretário Municipal de Esportes, Lazer e Recreação, sendo substituído por Marco Antonio Ricciardelli (Portaria nº 107, de 31/03/2016, publicada no D.O.C. de 01/04/2016).%^i15/03/2016^f31/12/2016^svereador^pPR^cDesfiliou-se do PTB em 04/03/2016.
279:^dLicenciou-se de 01/01/2013 a 31/03/2016 para ocupar o cargo de Secretário Municipal de Esportes, Lazer e Recreação, sendo substituído por Marco Antonio Ricciardelli (Portaria nº 107, de 31/03/2016, publicada no D.O.C. de 01/04/2016).%#^nComissão de Constituição e Justiça^i21/02/2001^f31/12/2001^cMembro%^nComissão de Constituição e Justiça^i01/03/2002^f31/12/2002^cMembro%^nComissão Permanente de Defesa dos Direitos Humanos e Cidadania^i01/03/2002^f31/12/2002^cMembro^dComissão Extraordinária Permanente de Defesa dos Direitos Humanos e Cidadania%^nComissão de Constituição e Justiça^i00/00/2003^f31/12/2003^cMembro%^nComissão de Constituição e Justiça^i00/00/2004^f31/12/2004^cMembro%^nComissão de Constituição e Justiça^i24/02/2005^f31/12/2005^cPresidente%^nComissão de Trânsito, Transporte e Atividade Econômica^i22/02/2007^f27/03/2007^cPresidente^dAtravés da Resolução 01/2007, publicada no DOC de 28/03/2007, passou a denominar-se Comissão de Trânsito, Transporte,  Atividade Econômica, Turismo, Lazer e Gastronomia%^nComissão de Trânsito, Transporte, Atividade Econômica, Turismo, Lazer e Gastronomia^i28/03/2007^f31/12/2007^cPresidente^dAté a Resolução 01/2007, publicada no DOC de 28/03/2007, denominava-se Comissão de Trânsito, Transporte e Atividade Econômica%^nComissão de Constituição, Justiça e Legislação Participativa^i20/02/2008^f31/12/2008^cMembro%^nComissão de Constituição, Justiça e Legislação Participativa^i12/02/2009^f31/12/2009^cVice-Presidente%^nComissão de Educação, Cultura e Esportes^i10/02/2010^f31/12/2010^cMembro%^nComissão de Finanças e Orçamento^i22/03/2011^f31/12/2011^cMembro%^nComissão de Constituição, Justiça e Legislação Participativa^i14/04/2012^f31/12/2012^cMembro Titular%^nComissäo Permanente de Defesa dos Direitos Humanos, Cidadania, Segurança Pública e Relações Internacionais^i20/06/2012^f31/12/2012^cMembro Titular^dComissäo Extraordinária Permanente de Defesa dos Direitos Humanos, Cidadania, Segurança Pública e Relações Internacionais%^nComissäo Permanente de Defesa dos Direitos da Criança, do Adolescente e da Juventude^i23/08/2012^f31/12/2012^cMembro Titular^dComissäo Extraordinária Permanente de Defesa dos Direitos da Criança, do Adolescente e da Juventude%^nCorregedoria^i01/01/2011^f31/12/2011^cIntegrante%^nComissão de Administração Pública^i04/04/2014^f31/12/2014^cMembro%^nComissäo Permanente de Meio Ambiente^i15/04/2014^f31/12/2014^cMembro^dComissäo Extraordinária Permanente de Meio Ambiente%^nComissão de Educação, Cultura e Esportes^i03/03/2015^f31/12/2015^cMembro%^nComissäo Permanente de Meio Ambiente^i31/03/2015^f31/12/2015^cMembro^dComissäo Extraordinária Permanente de Meio Ambiente%^nComissão de Administração Pública^i01/04/2016^f31/12/2016^cMembro%
737:^ssuplente^pPV^bAparecido Sidney de Oliveira%^i15/03/2015^f12/06/2015^ssuplente^pPV^bRicardo Teixeira%#^nComissäo Permanente de Meio Ambiente^i31/03/2015^f12/06/2015^cMembro suplente de Ricardo Teixeira^dComissäo Extraordinária Permanente de Meio Ambiente%
1419:

As linhas 1 e 1419 estão vazias mas sendo a primeira e a última não dariam muito galho. A linha 2 é o cabeçalho então não deveria começar com número mesmo. No meio do arquivo temos as linhas 276 e 277 vazias e as linhas 278, 279 e 737 que começam no meio de um registro. Como são poucas linhas dá pra corrigir manualmente e chegar nesse arquivo:

https://github.com/oten/veradores_sp/blob/master/vereadores.txt

testando se cada linha começa com o número de registro...

$ grep -vn ^[0-9] vereador.txt 
1:Registro#Nome#NomeParlamentar#LiderPartido^iDataIn^fDataFin^cCargo#^cMesaCargo^iInicioCargo^fFimCargo^bObservacao#^pPeriodoHistorico^nNumeroLegislatura^sSituacao^qQuantVotos#^iVereancaDataIn^fVereancaDataFin^situacao^pPartido^bNomeVereadorSaiu^cObsPartido^dObsVereanca#^nComissaoNome^iDataIn^fDataFin^cCargo^dObs

Agora só o cabeçalho não começa com um número de registro como esperado.

Com esse arquivo dá pra extrair informações com as regexes desse script na linha de comando usando grep -P ou pelo módulo re do Python.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment