Python

Python/GeoPandasの地理空間結合(spatial join)の挙動を確認したい

GeoPandasには普通のJoinとは違ってSpatial Joinなる地理空間結合があります。

GISデータを扱うときにそういったGeometryに関する結合は役に立つのですが、ドキュメントは英語だし、言い回しが似ていて挙動がどうもわかりにくいのが少々問題です(僕の英語力の問題か…)。

ということで今回はGeoPandasの地理空間結合の挙動を見ていきたいと思います。

 

Binary Predicates

まずは、Binary Predicatesなるものを紹介したいと思います。

こちら日本語訳がわからないので、そのままBinary Predicatesという事にします。

ざっくりどんなものかと言うと、複数のGISオブジェクト(point, linestring, polygonなど)の接触などトポロジカルな位置の関係性によって、TrueかFalseを返すものです。

こちらにShapelyのドキュメントがあるので、興味があれば見てみてください。
https://shapely.readthedocs.io/en/latest/manual.html#binary-predicates

とはいえ、ドキュメントをみてもわかりにくいので実際に実験してみます。

とりあえず、このようなオブジェクトを作ってみます。

このGeoSeries : sとa~eの位置的な関係性から結果のTrue, Flaseを確認しますが、今回はBinary Predicatesの一部でintersects, touches, containsのみやってみます。

 

 

 

 

 

 

 

地理空間結合 Spatial Join

Binary Predicatesがどんなものかやったので、やっとGeoDataFrameで地理空間結合(Spatial Join)をやってみたいと思います。

ドキュメントはこちらです。
https://geopandas.org/docs/user_guide/mergingdata.html

一般的な結合では、keyによってinner, left, right, crossなどの結合をしますが、地理空間結合ではkeyではなく2つのGeoDataFrameのGeometryの位置関係でJoinを行います。

そのときの位置関係にBinary Predicatesを指定する必要があるので、先ほどBinary Predicatesを紹介したのです。

というわけで、Intersectsによる地理空間結合をやってみます。

使うデータはGeoPandasに入っている国境データと都市データです。

 

 

IntersectsによるSpatial Join

ではBinary PredicatesにIntersectsを指定した場合のSpatial Joinをやってみます。

Spatial Joinの頭文字をとって、"sjoin"でSpatial Joinができます。

まずは、inner join。

Left join。

 

Right join。

 

まとめ

今回はGeoPandasの地理空間結合(Spatial Join)とBinary Predicatesについて書きました。

Binary Predicatesは今回はintersects, touches, containsのみでしたが、他にもたくさん種類があるのでドキュメントをよく読んで適切なものを選ぶ必要があります。

また、GeoDataFrameのSpatial Joinをするときも、InnerやLeftなどは一般的なJoinと似た感じですが、結合keyがgeometryになるということで、もし使うことになったらこちらもちゃんとドキュメントを確認して結合方法を再確認したいですね。

がんばって英語を読みましょう!

おすすめ記事

1

お疲れさまです! 久しぶりの更新になってしまいましたが、僕が未経験からデータサイエンティストになるまでの転職活動の全記録を書き残しておきたいと思います。 僕は博士号を取得後に研究員として仕事をしていま ...

2

こんにちわ、さとしです! 気がつけばこのデータサイエンティスト転職から、1年が経とうとしています。 今はご時世的に外にも出られず、変化があまりない生活を送ったせいもあってか、なんかあっという間に1年が ...

3

データサイエンティストに転職して1年が経ち、いろいろな業務を経験させてもらいつつ、自分でもある程度本を読んできました。 仕事の話は下記の記事で書きましたが、自分で読んだ本については書いていないのでこの ...

-Python

Copyright© さとぶろぐ , 2022 All Rights Reserved Powered by AFFINGER5.