Räumliche Joins mit Geopandas
Swipe um das Menü anzuzeigen
Räumliche Joins sind eine leistungsstarke Methode, um geodatenbasierte Datensätze anhand ihrer räumlichen Beziehungen zu kombinieren, anstatt nur übereinstimmende Attributwerte zu verwenden. Mit geopandas lassen sich räumliche Joins einfach durchführen, um Fragen wie „Welche Punkte liegen in welchen Polygonen?“ oder „Welche Objekte liegen am nächsten beieinander?“ zu beantworten. Das zentrale Werkzeug hierfür in geopandas ist die Methode sjoin(), die zwei GeoDataFrame-Objekte durch Auswertung ihrer räumlichen Beziehungen zusammenführt.
Angenommen, es gibt zwei räumliche Datensätze: einen mit Standorten von Schulen (als Punkte) und einen weiteren mit den Grenzen von Stadtvierteln (als Polygone). Durch einen räumlichen Join lässt sich ermitteln, welche Schule in welchem Stadtviertel liegt oder wie viele Schulen es pro Stadtviertel gibt.
Die Methode sjoin() in geopandas ermöglicht es, den Typ der räumlichen Beziehung für den Join festzulegen, zum Beispiel within, contains oder intersects. Zusätzlich kann der Typ des Joins gewählt werden — left, right oder inner — was bestimmt, wie Datensätze aus jedem Datensatz abgeglichen und im Ergebnis beibehalten werden.
123456789101112131415161718192021222324252627282930313233343536import geopandas as gpd from shapely.geometry import Point, Polygon # Create GeoDataFrame of points (e.g., schools) points = gpd.GeoDataFrame({ "school": ["A", "B", "C"], "geometry": [ Point(1, 1), Point(2, 2), Point(3, 3) ] }) # Create GeoDataFrame of polygons (e.g., neighborhoods) polygons = gpd.GeoDataFrame({ "neighborhood": ["Red", "Blue"], "geometry": [ Polygon([(0,0), (0,2), (2,2), (2,0)]), # Red neighborhood Polygon([(2,2), (2,4), (4,4), (4,2)]) # Blue neighborhood ] }) # Spatial join: which school is in which neighborhood? left_join = gpd.sjoin(points, polygons, how="left", predicate="within") right_join = gpd.sjoin(points, polygons, how="right", predicate="within") inner_join = gpd.sjoin(points, polygons, how="inner", predicate="within") print("Left Join Result:") print(left_join[["school", "neighborhood"]]) print("\nRight Join Result:") print(right_join[["school", "neighborhood"]]) print("\nInner Join Result:") print(inner_join[["school", "neighborhood"]])
Im obigen Beispiel werden drei Join-Typen dargestellt:
- Left Join: Beibehaltung aller Punkte (Schulen), Hinzufügen von Stadtviertel-Informationen, sofern verfügbar;
- Right Join: Beibehaltung aller Polygone (Stadtviertel), Hinzufügen der darin enthaltenen Schulen;
- Inner Join: Beibehaltung nur der Punkte, die sich innerhalb eines Stadtviertels befinden.
Die Wahl des richtigen Join-Typs hängt von den Analysezielen ab. Wenn beispielsweise alle Schulen angezeigt werden sollen, unabhängig davon, ob sie in einem Stadtviertel liegen, wird ein Left Join verwendet. Wenn alle Stadtviertel und die darin enthaltenen Schulen betrachtet werden sollen, wird ein Right Join verwendet. Wenn nur Schulen relevant sind, die sich innerhalb von Stadtvierteln befinden, wird ein Inner Join verwendet.
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen