GeoPandasによる空間結合
メニューを表示するにはスワイプしてください
空間結合は、属性値の一致だけでなく、空間的な関係に基づいて地理空間データセットを結合する強力な手法。
geopandas を使用すると、「どのポイントがどのポリゴン内にあるか」や「どのフィーチャが互いに最も近いか」といった問いに簡単に答えることが可能。
この機能の中心となるのが geopandas の sjoin() メソッドであり、2つの GeoDataFrame オブジェクトを空間的な関係で結合する。
例えば、学校の位置(ポイント)を含むデータセットと、地域の境界(ポリゴン)を含む別のデータセットがあるとする。 空間結合を行うことで、どの学校がどの地域に位置しているかを特定したり、地域ごとの学校数を集計したりできる。
sjoin() の geopandas メソッドでは、結合に使用する空間関係(within、contains、intersects など)を指定可能。
さらに、left、right、inner などの結合タイプも選択でき、各データセットのレコードがどのようにマッチし、結果に保持されるかを制御できる。
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"]])
上記の例では、3種類の結合タイプを確認できる:
- Left join:すべてのポイント(学校)を保持し、利用可能な場合は地域情報を追加。
- Right join:すべてのポリゴン(地域)を保持し、その中に含まれる学校を追加。
- Inner join:地域内に存在するポイントのみを保持。
適切な結合タイプの選択は、分析目的によって異なる。 例えば、地域内外を問わずすべての学校を取得したい場合は left join を使用。 すべての地域とその中に含まれる学校を確認したい場合は right join を使用。 地域内に存在する学校だけに関心がある場合は inner join を使用。
すべて明確でしたか?
フィードバックありがとうございます!
セクション 2. 章 1
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください
セクション 2. 章 1