Incrementando dados geográficos com o Censo Nacional do IBGE

Bruno Belluomini
Creditas Tech
Published in
4 min readFeb 20, 2019
Photo by Adolfo Félix on Unsplash

Geolocalização é um ponto importante em diversos domínios. Serviços de entrega, seguradoras ou franquias estão muito interessadas em conhecer a fundo uma região.

Como um dos produtos da Creditas é o empréstimo com garantia de imóvel, a localização é fator importante visto que ela influencia diretamente no valor da garantia, o qual está atrelado ao valor empréstimo que o cliente pode fazer.

No contexto de ciência de dados, saber CEP, bairro, cidade e estado podem não ser o suficiente. O mais interessante é encontrarmos outras informações mais genéricas que expliquem características daquela localidade.

Digamos que um modelo de machine learning foi treinado com uma feature que recebe o nome do bairro em um dataset contendo apenas exemplos de clientes do estado de São Paulo. Se este modelo receber como entrada algum cliente do Rio de Janeiro para fazer uma predição ele não vai saber o que fazer com um bairro de valor “Barra da Tijuca” e pode resultar ou num erro ou numa predição completamente equivocada.

Em contrapartida, se o modelo receber a quantidade de habitantes entre 18 e 60 anos daquele mesmo bairro, isso generaliza o fator de localização geográfica para o modelo uma vez que qualquer lugar pode ter o mesmo número contabilizado.

Portanto, busque sempre usar features como renda_per_capita_media ou indice_de_furtos_a_cada_100_habitantes em vez do nome do Bairro ou Cidade, por exemplo.

”Mas onde conseguir estes dados?” você se pergunta. Existem algumas fontes de dados abertas como o Geosampa para a cidade de São Paulo, mas numa escala nacional uma das melhores para se utilizar é o censo nacional do IBGE.

Sobre o Censo Nacional do IBGE

O Censo Nacional do IBGE é o principal estudo estatístico sobre a população brasileira e ocorre a cada 10 anos, sendo a versão mais recente realizada em 2010. Nele é possível encontrar informações como número de pessoas alfabetizadas, maiores de idade, infraestrutura urbana, etc.

Os dados coletados são em função da menor unidade territorial chamada setor censitário. Existem cerca de 314 mil setores censitários no Censo 2010 mapeados em todo o Brasil. Cada setor censitário possui um id único no formato <UF><MMMMM><DD><SD><SSSS>, onde:

UF – Unidade da Federação
MMMMM – Município
DD – Distrito
SD – Subdistrito
SSSS – Setor
Exemplo de organização de setores censitários do bairro Itaim Bibi (em azul claro) na cidade de São Paulo. Cada setor é limitado pelas linhas azuis mais escuras. Extraído de https://censo2010.ibge.gov.br/sinopseporsetores/

A base de dados coletados do Censo IBGE 2010 pode ser encontrada aqui seguindo o caminho:

Censos
├── Censo_Demografico_2010
├── Resultados_do_Universo
├── Agregados_por_Setores_Censitarios
├── <bases_de_dados>

Os arquivos de dados possuem encoding iso8859_15 e ; como separador.

Chega de papinho: Hora da prática!

Sem mais delongas, vamos a um exemplo prático considerando o endereço da Creditas:

Dataframe do exemplo acima formatado

Nosso objetivo é extrair as variáveis do Censo para este endereço. Quando abrir a base de dados do Censo vai se deparar com algo similar à tabela abaixo:

Cod_setor é código do setor censitário e V001, V002 e V003 são exemplos das variáveis encontradas. As explicações sobre elas podem ser encontradas na documentação do Censo também disponível no link para a base de dados.

O desafio então vai ser transformar a string do endereço no código 355030835000017 para extrair as variáveis. A ligação entre as duas será feita usando um arquivo geoespacial chamado Shapefile (.shp), um dataframe que contém características geográficas cujo formato é parecido com isto:

As duas colunas que importam para nós são a CD_GEOCODI, o código do setor censitário, e a geometry que contém um objeto POLYGON com as coordenadas geográficas (longitude e latitude respectivamente) do desenho daquele setor.

A ideia do processo vai ser de converter o endereço em longitude e latitude para então pegar o código do setor com o Shapefile.

Os arquivos Shapefile .shp dos setores censitários podem ser acessados aqui.

Convertendo endereço para longitude e latitude

Existem diversos serviços que permitem fazer a conversão do endereço em longitude e latitude. Neste exemplo vamos utilizar a API do Google Maps Geocoding junto com a biblioteca googlemaps.

Para utilizar esta API é necessária uma chave de autenticação. Você pode obtê-la para fazer algumas requests gratuitamente aqui.

Obtendo o código do setor censitário a partir de um endereço

Agora que conseguimos o ponto com as coordenadas nós precisamos encontrar em qual setor censitário ele está localizado. O próximo passo é converter a string de coordenadas num objeto Point para que o Shapefile entenda que se trata de um ponto geográfico. Vamos usar a biblioteca shapely para isso.

O próximo passo é carregar o Shapefile dos setores censitários com a biblioteca geopandas para fazermos o match do ponto com o polígono do setor.

Finalmente, o último passo é dar um merge do nosso dataset com o que contém as variáveis do censo e correr pro abraço.

O resultado final ficará assim:

Reforçando aqui que o significado das variáveis V001, V002 e V003 podem ser encontrados na documentação do Censo.

Boas! Você acabou de enriquecer sua base de dados com características do endereço mais interessantes.

Além do censo do IBGE você pode aplicar o mesmo conceito com outras bases abertas, como estas citadas no link abaixo:

https://wiki.openstreetmap.org/wiki/Dados_para_consulta_de_Prefeituras_e_Governos_estaduais_e_federal

Espero que essa metodologia consiga te fazer identificar fatores geográficos que vão te permitir fazer análises e predições em qualquer lugar do Brasil =D

Tem interesse em trabalhar conosco? Nós estamos sempre procurando por pessoas apaixonadas por tecnologia para fazer parte da nossa tripulação! Você pode conferir nossas vagas aqui.

--

--

Bruno Belluomini
Creditas Tech

Data Scientist na Creditas e formado em engenharia civil que trocou o concreto por dados