Foto de um laptop na cor cinza com um mapa na tela.
Photo by Edgar Moran on Unsplash

Como melhorar o processo de limpeza e transformação de dados geoespaciais com Power BI e Python?

Francisco Foz
5 min readOct 18, 2022

Limpar dados é um processo comum para qualquer pessoa que trabalhe com análise de dados.

Às vezes é rápido, por muitas outras não.

A Cassie exemplificou muito bem com esse tweet:

Outro dia em meu trabalho, estava limpando e transformando dados geoespaciais (de endereço, latitude e longitude) dentro do Power BI, mas estava levando um bom tempo.

Fui ver se tinha uma forma melhor de otimizar esse processo e encontrei!

Bom, no texto de hoje eu contarei o que encontrei e a minha experiência.

Bora lá?!

Gif de uma mão passando um barbante entre dois alfinetes de madeira ligando o país de Cuba e dos Estados Unidos da América.

Sumário

Obtendo o endereço com API no Power BI

Obtendo as coordenadas geoespaciais com Python

Considerações finais

Obtendo o endereço com API no Power BI

Os dados de entrada do usuário geralmente vem bem sujos.

O nome de uma cidade como São Paulo, pode vir como:

SP, Sao Paulo, São Psulo, sap paulo, SãoPaulo…

Agora multiplica isso para outras cidades, bairros, ruas…

Bom, pensei que o CEP poderia me ajudar, já que teria todas essas informações, mas como extrair dados de endereço do CEP com o Power BI?

Bom, tendo os dados de cep na sua tabela será necessário:

  1. Abrir uma nova fonte de dados da web para a API de CEP. Você pode usar o via cep: https://viacep.com.br/
Imagem ilustrando a consulta da API de CEP.

2. Transformar ela em uma consulta, modificando o valor inserido do CEP para o texto “&Text.From(cep)&”.

Imagem da modificação da consulta para virar uma função de CEP.

Código modificado no editor avançado do power query:

cep)=>letFonte = Json.Document(Web.Contents(“viacep.com.br/ws/”& Text.From(cep) &”/json/”)),#”Convertido para Tabela” = Table.FromRecords({Fonte}),#”Tipo Alterado” = Table.TransformColumnTypes(#”Convertido para Tabela”,{{“cep”, type text}, {“logradouro”, type text}, {“complemento”, type text}, {“bairro”, type text}, {“localidade”, type text}, {“uf”, type text}, {“ibge”, Int64.Type}, {“gia”, Int64.Type}, {“ddd”, Int64.Type}, {“siafi”, Int64.Type}})in#”Tipo Alterado”

Ela irá virar uma função:

Imagem da consulta criada.

3. Adicionar uma nova coluna com a consulta a ser realizada em todos os CEPs:

Imagem ilustrando o processo de criação de nova coluna do CEP.

4. Pronto! Uma nova coluna será gerada com todos os endereços do CEP.

Imagem do endereço extraído do CEP.

Legal né?!

Eu vi essa dica nesse vídeo aqui:

Obtendo as coordenadas geoespaciais com Python

Ótimo, já tinha os dados de endereço limpo, mas se quisesse ter um mapa bonitão, precisaria das coordenadas da latitude e longitude.

Passando no feed do Linkedin, encontrei esse texto maravilhoso da Naomi:

Gosto do Linkedin por isso, acabo conseguindo me atualizar de algumas informações que nem sempre chegariam em mim por outras redes.

Apenas é necessário realizar “limpezas” de vez em quando como qualquer outra rede social.

Nele a Naomi utiliza a API do Google para coletar as coordenadas de um conjunto de dados com quase 83 mil linhas.

As ferramentas do Google são bem poderosas e podem te auxiliar em muitos aspectos.

Eu já flertei com uma de tradução e contei nesse texto aqui:

Bem… meus dados eram bem menores do que esses e não queria utilizar os créditos do Google então… dei mais uma googlada.

Encontrei essa pergunta no fórum da Alura:

Fiquei super animado com a resposta!

Conheci a Geopy e fui testar dentro do Power BI.

Dentro do Power Query você pode utilizar scripts em Python:

Imagem do botão no Power BI para executar scripts em Python.

Mesclei as colunas da cidade com a da rua.

Coloquei o código:

from geopy.geocoders import Nominatimgeolocator = Nominatim(user_agent=”geolocalização”)lat = []long = []for i in dataset[‘Endereco’]:location = geolocator.geocode(i)lat.append(str(location.latitude))long.append(str(location.latitude))dataset[‘lat’] = latdataset[‘long’] = long
Imagem do código em Python dentro do Power BI.

Rodei e…

Imagem ilustrando as coordenadas de latitude e longitude extraídas com a biblioteca do GeoPy com Python.

Muito legal né?!

Se você tiver curiosidade sobre ela, tem esse vídeo da Kizzy utilizando essa biblioteca também:

Considerações finais

Durante minha jornada ao tentar deixar mais ágil o processo de limpeza de dados eu encontrei mais duas formas de manusear dados geoespaciais com Python e Power BI.

Mas ao chegar ao meu trabalho… os valores de CEP não tinham sido validados e nem todos estavam corretos.

Ou seja… não resolveu dessa vez.

Dei risada e voltei a limpeza e transformação “manual”, mas de qualquer forma fiquei alegre pela experiência e aprendizado.

Agora me diga, quais outras otimizações de limpeza de dados você conhece?

Compartilhe nos comentários e vamos trocar conhecimento.

Se você chegou até aqui e curtiu, dê palmas, compartilhe e se inscreva para me acompanhar.

Ainda há muito a se explorar.

--

--

Francisco Foz
Francisco Foz

Written by Francisco Foz

Bibliotecário | Analista de dados | Disseminando informações para produzir conhecimento.

No responses yet

Write a response