Pular para o conteúdo principal

Geocodificação para cientistas de dados: introdução com exemplos

Neste tutorial, você vai aprender três maneiras diferentes de converter um endereço em latitude e longitude usando a biblioteca Geopy.
Atualizado 17 de set. de 2026  · 9 min lido

Explorar com IA

ChatGPTClaudePerplexity

Quando você trabalha com dados do mundo real, não dá para presumir que o conjunto de dados traga todas as informações indispensáveis para resolver seu projeto de ciência de dados. Na maioria das vezes, você tem informações parciais e precisa enriquecer os dados com atributos adicionais.

Pode acontecer de o dataset conter um endereço, mas, ao mesmo tempo, faltar a latitude e a longitude. Nesse caso, o primeiro passo do enriquecimento é adicionar esse par de coordenadas. Chamamos esse processo de converter um endereço em latitude e longitude de geocodificação.

A geocodificação é muito importante em várias áreas, como mercado imobiliário, finanças e logística. Sem essa técnica, você não consegue analisar e visualizar os dados em um mapa. Neste tutorial, vamos fazer geocodificação em Python usando uma biblioteca salvadora chamada Geopy. Vamos lá!

O que é geocodificação?

Geocodificação é o processo de converter endereços (como "1600 Amphitheatre Parkway, Mountain View, CA") em coordenadas geográficas (como latitude 37.423021 e longitude -122.083739), que você pode usar para posicionar marcadores em um mapa ou centralizar o mapa. Em termos simples, é o processo computacional de transformar a descrição de um endereço físico em um ponto na superfície da Terra.

O processo de geocodificação costuma envolver a interpolação de localizações espaciais, como ruas ou lotes, dentro da extensão geográfica de um mapa. As localizações resultantes são geradas como coordenadas numéricas, adequadas para análises espaciais ou visualização em mapas.

A geocodificação usa diversas fontes de dados para converter um endereço em uma localização geográfica. A principal fonte é um banco de referência de vias que contém nomes de ruas e faixas de numeração dentro de um determinado município ou área. Outras fontes incluem bases de CEP, bancos de nomes de cidades e bases de pontos de interesse (como parques ou marcos).

Geocodificar não é só obter coordenadas para um endereço. Também é usado em análise espacial, mineração de dados e saneamento de dados. Por exemplo, empresas usam geocodificação para analisar informações demográficas e impulsionar campanhas de marketing direcionadas ou otimizar rotas de entrega. Na área de segurança pública, a geocodificação ajuda a mapear ocorrências de emergência para despachar rapidamente o serviço mais próximo.

No contexto de ciência de dados, a geocodificação é uma etapa crucial para criar visualizações geoespaciais e pode ser aplicada em vários casos, como previsão de preços de imóveis, otimização de rotas de entrega e planejamento de resposta a desastres.

O que é a Geopy?

Illustration by Author

Geopy é uma biblioteca Python de código aberto especializada em adicionar localização aos dados por meio de uma grande variedade de serviços de geocodificação, como Google Maps, OpenStreetMap e ArcGIS.

Você pode se perguntar por que não usar o serviço de geocodificação diretamente em vez da biblioteca Python. A vantagem da Geopy é permitir explorar esses serviços com poucas linhas de código. A Geopy implementa uma classe para cada serviço, e você consegue alternar facilmente de uma API para outra.

Projeto prático de geocodificação

Neste artigo, vamos analisar o dataset Canada Museum do Kaggle. Ele traz informações sobre museus localizados no Canadá. Essa coleção de museus pode ser útil para prever o preço de acomodações no Airbnb em Toronto; por exemplo, você deve ter notado que o valor de um anúncio aumenta quanto mais perto ele está de pontos de interesse, como museus, restaurantes, cafés etc.

Vamos dar uma olhada no dataset:

import pandas as pd
import geopy

l_cols= ['Name','Street Address','City','State','Zipcode']
df = pd.read_csv('/kaggle/input/canada-museums/museums list CAN.csv', encoding = "ISO-8859-1",usecols=l_cols)
df = df[df.City=='Toronto']
df.head()

dataset

Por essa visão geral, vemos que diferentes colunas trazem informações de endereço, como o nome do museu, o logradouro, a cidade, o estado e o CEP.

Para os próximos passos, precisamos de uma coluna única que una todas as informações dessas colunas. Como fazer isso? A forma mais eficiente de concatenar mais de duas colunas é usando pandas.series.str.cat(), que permite especificar o separador desejado entre uma coluna e outra:

df['Country'] = 'Canada'
l_cols_concat = ['Street Address','City','State','Zipcode','Country']
df['unique_address'] = df['Name'].str.cat(others=df[l_cols_concat], sep=',',na_rep='')
df.head()

dataset with unique address

Podemos criar uma variável string chamada ‘address1’ que contém o endereço único da primeira linha:

address1 = df['unique_address'].iloc[0]
print(address1)
# Bizune Event Gallery,452 Richmond St W,Toronto,ON,M5V 1Y1,Canada

Vamos usá-la nos próximos passos para testar diferentes serviços de geocodificação em um único endereço. Quando ficar claro como a Geopy extrai a localização, podemos estender para toda uma coluna de um dataframe do pandas. Vamos testar os seguintes provedores principais:

  • Google Maps
  • OpenStreetMap
  • ArcGIS

Geocodificação com a API do Google Maps

O método mais popular para converter endereços em coordenadas é usando a API do Google Maps.

Embora o Google Maps ofereça serviços pagos, você recebe US$ 200 em créditos gratuitos ao criar a conta pela primeira vez.

Para acessar o serviço, você precisa criar uma conta na Google Maps Platform. Há um ótimo tutorial que ajuda você a gerar a chave de API.

GM_API_KEY = 'your_api_key'
from geopy.geocoders import GoogleV3
geolocator = GoogleV3(api_key=GM_API_KEY)

GoogleV3 é a classe implementada para usar a API Google Maps v3. Primeiro, vamos tentar extrair a localização de um único endereço:

location = geolocator.geocode(address1)
print('Latitude: '+str(location.latitude)+', Longitude: '+str(location.longitude))

image5.png

Depois, podemos estender essa operação para o campo unique_address que criamos anteriormente.

def service_geocode(g_locator, address):
    location = g_locator.geocode(address)
    if location!=None:
      return (location.latitude, location.longitude)
    else:
      return np.NaN

Podemos usar apply() para aplicar a função em todas as linhas de unique_address:

df['LAT_LON'] = df['unique_address'].apply(lambda x:service_geocode(geolocator,x))
df[['unique_address','LAT_LON']].head()

image3.png

Geocodificação com a API do OpenStreetMap

Como o OpenStreetMap é o maior banco de dados geográfico gratuito e colaborativo, a API é gratuita. Para geolocalizar um único endereço, basta informar o e-mail da sua conta OSM como entrada para a classe Nominatim, em vez da chave de API:

from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent="your_email")
location = geolocator.geocode(address1)
print(location)
# None

Infelizmente, a localização retornada pela API do OpenStreetMap é None porque o endereço não foi reconhecido.

De fato, essa API tem dificuldade em localizar a maioria dos endereços do dataset porque não possui boa cobertura de endereços em todas as áreas.

Por isso, precisamos criar outro campo, unique_address_osm, com menos informações:

l_cols_concat = ['City','State','Country']
df['unique_address_osm'] = df['Street Address'].str.cat(others=df[l_cols_concat], sep=',',na_rep='')
address1_osm = df['unique_address_osm'].iloc[0]

Em seguida, passamos o novo endereço e tentamos novamente extrair a latitude e a longitude a partir do logradouro:

address1_osm = df['unique_address_osm'].iloc[0]
location = geolocator.geocode(address1_osm)
print('Latitude: '+str(location.latitude)+', Longitude: '+str(location.longitude))

image8.png

Como antes, aplicamos a função service_geocode() a toda a coluna unique_address_osm:

df['LAT_LON_osm'] = df['unique_address_osm'].apply(lambda x: service_geocode(geolocator,x))
df[['unique_address_osm','LAT_LON','LAT_LON_osm']].head()

image11.png

Embora não tenhamos especificado o nome do museu, o OpenStreetMap retornou coordenadas muito próximas às da Google Maps API.

Geocodificação com a API do ArcGIS

ArcGIS é um software que permite analisar e visualizar dados geoespaciais. Ele também oferece serviços de localização, assim como Google Maps e OpenStreetMap.

from geopy.geocoders import ArcGIS
geolocator_arcgis = ArcGIS()
location = geolocator_arcgis.geocode(address1)
print('Latitude: '+str(location.latitude)+', Longitude: '+str(location.longitude))

image2.png

Desta vez não houve problema para obter o par de coordenadas. Podemos prosseguir estendendo essa operação para todos os endereços:

df['LAT_LON_arcgis'] = df['unique_address'].apply(lambda x: service_geocode(geolocator_arcgis,x))
df[['unique_address','LAT_LON','LAT_LON_osm','LAT_LON_arcgis']].head()

image6.png

Olhando as primeiras linhas do dataset, vemos que o par de coordenadas obtido com ArcGIS é semelhante aos anteriores, com uma pequena diferença.

Medir a distância entre dois lugares

Outra funcionalidade da Geopy é permitir calcular a distância entre dois pontos. Isso é possível usando a distância geodésica obtida entre dois pares (latitude, longitude).

from geopy.distance import geodesic
point1 = df.LAT_LON_arcgis.iloc[0]
point2 = df.LAT_LON_arcgis.iloc[1]
distance = geodesic(point1, point2)
print('The distance between {} and {} is {} meters'.format(df.Name.iloc[0],df.Name.iloc[1],distance.meters))

image1.png

A distância entre esses dois museus é de aproximadamente 2 quilômetros.

Considerações finais

É isso! Você aprendeu três formas diferentes de converter um endereço em latitude e longitude usando a Geopy. Este é um ponto de partida para análises geoespaciais mais complexas e avançadas.

Se você quer começar com análise geoespacial sem código, a melhor forma é conferir o tutorial da DataCamp Working with Geospatial Data: A Guide to Analysis in Power BI.

Para criar visualizações e cálculos mais avançados, o Tableau pode ser a ferramenta ideal para você. O curso da DataCamp Introduction to Tableau vai permitir que você crie visualizações de dados dinâmicas e resolva qualquer problema analítico.

Se você é fã de R, este ótimo curso é para criar mapas interativos com leaflet. Se prefere Python, considere fazer Visualizing geospatial data in Python, que ajuda você a criar visualizações incríveis usando geopandas e folium.


Eugenia Anello's photo
Author
Eugenia Anello
LinkedIn
Tópicos
Python

Aprenda os tópicos citados neste tutorial!

Curso

Trabalhando com Dados Geoespaciais em Python

4 h
18.1K
Este curso vai te mostrar como integrar dados espaciais no seu fluxo de trabalho de Ciência de Dados em Python.
Ver detalhesRight Arrow
Iniciar Curso
Ver maisRight Arrow
Relacionado

Tutorial

Guia passo a passo para criar mapas em Python usando a biblioteca Plotly

Faça seus dados se destacarem com mapas impressionantes criados com Plotly em Python
Moez Ali's photo

Moez Ali

7 min

Tutorial

Matrizes Python

Matrizes Python com exemplos de código. Aprenda hoje mesmo a criar e imprimir matrizes usando o Python NumPy!
DataCamp Team's photo

DataCamp Team

3 min

Tutorial

Tutorial de docstrings em Python

Saiba mais sobre os Docstrings do Python. Encontre diferentes exemplos e tipos de formatos de docstrings para Sphinx, Numpy e Pydoc.
Aditya Sharma's photo

Aditya Sharma

15 min

Tutorial

Python JSON Data: Um guia com exemplos

Aprenda a trabalhar com JSON em Python, incluindo serialização, deserialização, formatação, otimização de desempenho, manipulação de APIs e compreensão das limitações e alternativas do JSON.
Moez Ali's photo

Moez Ali

6 min

Tutorial

Tutorial e exemplos de funções e métodos de listas Python

Aprenda sobre as funções e métodos da lista Python. Siga agora os exemplos de código para list() e outras funções e métodos Python!
Abid Ali Awan's photo

Abid Ali Awan

7 min

Tutorial

Funções em Python: como chamar e escrever funções

Descubra como escrever funções em Python reutilizáveis e eficientes. Domine parâmetros, instruções de retorno e temas avançados como funções lambda. Organize melhor seu código com main() e outras boas práticas.
Karlijn Willems's photo

Karlijn Willems

14 min

Ver MaisVer Mais