Weiter zum Inhalt

Geokodierung für Data Scientists: Eine Einführung mit Beispielen

In diesem Tutorial lernst du drei verschiedene Wege kennen, wie du mit Geopy eine Adresse in Breiten- und Längengrad umwandelst.
Aktualisiert 18. Sept. 2026  · 9 Min. lesen

Mit KI erkunden

ChatGPTClaudePerplexity

Wenn du mit Echtdaten arbeitest, kannst du nicht davon ausgehen, dass dein Datensatz bereits alle Informationen enthält, die du für dein Data-Science-Projekt brauchst. Meistens liegen nur Teilinformationen vor, die du mit weiteren Merkmalen anreichern musst.

Es kann zum Beispiel sein, dass der Datensatz zwar eine Adresse enthält, aber keine Breiten- und Längengrade. Dann besteht der erste Schritt der Anreicherung darin, dieses Koordinatenpaar hinzuzufügen. Den Prozess, eine Adresse in Breiten- und Längengrad zu überführen, nennen wir Geokodierung.

Geokodierung ist in vielen Bereichen wichtig, etwa in der Immobilienwirtschaft, im Finanzwesen oder in der Logistik. Ohne diese Technik kannst du Daten nicht sinnvoll auf einer Karte analysieren und visualisieren. In diesem Tutorial führen wir die Geokodierung in Python mit einer äußerst hilfreichen Bibliothek namens Geopy durch. Legen wir los!

Was ist Geokodierung?

Geokodierung bezeichnet den Prozess, Adressen (zum Beispiel "1600 Amphitheatre Parkway, Mountain View, CA") in geografische Koordinaten (etwa Breite 37.423021 und Länge -122.083739) umzuwandeln, die du verwenden kannst, um Marker auf einer Karte zu platzieren oder die Karte zu positionieren. Einfach gesagt: Es ist der rechnerische Vorgang, eine physische Adressbeschreibung in eine Position auf der Erdoberfläche zu übersetzen.

Häufig beinhaltet die Geokodierung die Interpolation räumlicher Positionen, etwa entlang von Straßen oder Parzellen innerhalb der geografischen Ausdehnung einer Karte. Die resultierenden Positionen werden als numerische Koordinaten ausgegeben und eignen sich für räumliche Analysen oder Kartenvisualisierungen.

Zur Umwandlung einer Adresse in einen geografischen Ort nutzt die Geokodierung verschiedene Datenquellen. Primär ist eine Straßenreferenzdatenbank, die Straßennamen und Adressbereiche für einen bestimmten Landkreis oder ein Gebiet enthält. Weitere Quellen sind Postleitzahlverzeichnisse, Städtenamendatenbanken und Verzeichnisse wichtiger Orte (zum Beispiel Parks oder Sehenswürdigkeiten).

Geokodierung dient nicht nur dazu, für eine gegebene Adresse Koordinaten zu erhalten. Sie wird auch in räumlicher Analyse, Data Mining und Datenbereinigung eingesetzt. Unternehmen analysieren damit zum Beispiel demografische Informationen, um zielgenaue Marketingkampagnen zu steuern oder Lieferstrecken zu optimieren. Im Bereich der öffentlichen Sicherheit hilft Geokodierung, Einsatzorte zu kartieren, damit die nächstgelegenen Rettungskräfte schnell entsandt werden können.

Im Kontext der Datenwissenschaft ist die Geokodierung ein entscheidender Schritt beim Erstellen georäumlicher Visualisierungen und kommt in vielen Anwendungen zum Einsatz, etwa bei der Vorhersage von Immobilienpreisen, der Optimierung von Lieferwegen oder der Einsatzplanung bei Katastrophen.

Was ist Geopy?

Illustration by Author

Geopy ist eine Open-Source-Python-Bibliothek, die darauf spezialisiert ist, Daten über eine Vielzahl von Geokodierungsdiensten wie Google Maps, OpenStreetMap und ArcGIS um Ortsangaben zu erweitern.

Warum nicht direkt den jeweiligen Geokodierungsdienst statt der Python-Bibliothek nutzen? Die Stärke von Geopy liegt darin, dass du diese Dienste mit nur wenigen Zeilen Code einbinden kannst. Geopy stellt für jeden Dienst eine eigene Klasse bereit, sodass du bequem zwischen den APIs wechseln kannst.

Praxisbeispiel für Geokodierung

In diesem Artikel analysieren wir das Canada Museum Dataset von Kaggle. Es enthält Informationen über Museen in Kanada. Eine solche Sammlung kann zum Beispiel helfen, die Preise für Airbnb-Unterkünfte in Toronto vorherzusagen: Oft steigen die Mieten, je näher ein Objekt an Points of Interest wie Museen, Restaurants oder Cafés liegt.

Werfen wir einen Blick auf den Datensatz:

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

Wir sehen verschiedene Spalten mit Adressinformationen, etwa den Namen des Museums, die Straßenadresse, die Stadt, den Bundesstaat und die Postleitzahl.

Für die nächsten Schritte brauchen wir eine einzelne Spalte, die all diese Informationen zusammenfasst. Wie geht das am besten? Am effizientesten verkettest du mehr als zwei Spalten mit pandas.series.str.cat() und definierst dabei den passenden Trenner zwischen den Spalten:

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

Nun können wir eine String-Variable ‘address1’ erzeugen, die die eindeutige Adresse der ersten Zeile enthält:

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

Wir verwenden sie gleich, um verschiedene Geokodierungsdienste an einer einzelnen Adresse auszuprobieren. Wenn klar ist, wie Geopy die Position ermittelt, lässt sich das auf eine komplette Spalte eines pandas-DataFrames übertragen. Wir testen die folgenden großen Anbieter:

  • Google Maps
  • OpenStreetMap
  • ArcGIS

Geokodierung mit der Google-Maps-API

Die wohl bekannteste Methode, Adressen in Koordinaten umzuwandeln, ist die Google-Maps-API.

Google Maps ist zwar grundsätzlich kostenpflichtig, doch zum Start erhältst du ein Guthaben von 200 US-Dollar.

Um Zugriff zu erhalten, erstellst du ein Konto auf der Google Maps Platform. Eine gute Anleitung zum Erstellen eines API-Schlüssels gibt es hier.

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

GoogleV3 ist die Klasse für die Nutzung der Google-Maps-v3-API. Zuerst testen wir die Positionsbestimmung für eine einzelne Adresse:

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

image5.png

Danach können wir diese Operation auf das Feld unique_address ausweiten, das wir zuvor erstellt haben.

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

Mit apply() wenden wir die Funktion auf alle Zeilen von unique_address an:

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

image3.png

Geokodierung mit der OpenStreetMap-API

OpenStreetMap ist die größte frei bearbeitbare Geodatenbank. Die API ist kostenfrei. Um eine einzelne Adresse zu geolokalisieren, übergibst du der Klasse Nominatim einfach die E-Mail deines OSM-Kontos als user_agent statt eines API-Schlüssels:

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

Leider liefert die OpenStreetMap-API hier None, da die Adresse nicht erkannt wird.

Tatsächlich hat diese API in vielen Gebieten keine gute Adressabdeckung und tut sich mit zahlreichen Straßenangaben im Datensatz schwer.

Deshalb erstellen wir ein weiteres Feld unique_address_osm mit weniger Details:

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]

Anschließend übergeben wir die neue Adresse und versuchen erneut, Breite und Länge aus der Straßenadresse zu ermitteln:

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

image8.png

Wie zuvor wenden wir die Funktion service_geocode() auf die gesamte Spalte unique_address_osm an:

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

Obwohl wir den Namen des Museums nicht angegeben haben, liefert OpenStreetMap sehr ähnliche Koordinaten wie die Google-Maps-API.

Geokodierung mit der ArcGIS-API

ArcGIS ist eine Software für die Analyse und Visualisierung georäumlicher Daten und stellt wie Google Maps und OpenStreetMap auch Ortungsdienste bereit.

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

image2.png

Diesmal gibt es keine Probleme, das Koordinatenpaar zu erhalten. Also weiten wir die Operation auf alle Adressen aus:

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

Ein Blick auf die ersten Zeilen zeigt: Die mit ArcGIS gewonnenen Koordinaten sind den zuvor ermittelten sehr ähnlich, es gibt nur geringe Abweichungen.

Entfernung zwischen zwei Orten messen

Eine weitere Funktion von Geopy ist die Berechnung der Entfernung zwischen zwei Punkten. Das geschieht über die geodätische Distanz zwischen zwei (Breite, Länge)-Paaren.

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

Die Entfernung zwischen diesen beiden Museen beträgt ungefähr 2 Kilometer.

Fazit

Geschafft! Du hast drei Wege kennengelernt, wie du mit Geopy eine Adresse in Breiten- und Längengrad umwandelst. Das ist der Ausgangspunkt für komplexere, fortgeschrittene Analysen mit Geodaten.

Wenn du ohne Code in die Geodatenanalyse einsteigen möchtest, schau dir am besten das DataCamp-Tutorial Working with Geospatial Data: A Guide to Analysis in Power BI an.

Für anspruchsvollere Visualisierungen und Berechnungen könnte Tableau das ideale Tool für dich sein. Der DataCamp-Kurs Introduction to Tableau hilft dir, dynamische Datenvisualisierungen zu erstellen und analytische Herausforderungen zu lösen.

Wenn du Fan der Sprache R bist, ist dieser Kurs ideal, um interaktive Karten mit leaflet zu erstellen. Bleibst du lieber bei Python, empfiehlt sich Visualizing geospatial data in Python — damit baust du beeindruckende Visualisierungen mit geopandas und folium.


Eugenia Anello's photo
Author
Eugenia Anello
LinkedIn

Datenwissenschaftler/in - CRIF

Themen
Python

Lerne die in diesem Tutorial genannten Themen!

Kurs

Arbeiten mit Geodaten in Python

4 Std.
18.1K
Dieser Kurs zeigt, wie du Geodaten in deinen Data-Science-Workflow integrierst.
Details anzeigenRight Arrow
Kurs Starten
Mehr anzeigenRight Arrow