地理データ用の Python ツール
GeoPandas は、パンダ オブジェクトに地理データのサポートを追加するプロジェクトです。現在、それぞれpandas.Series
およびpandas.DataFrame
のサブクラスであるGeoSeries
およびGeoDataFrame
タイプを実装しています。 GeoPandas オブジェクトは、形の良いジオメトリ オブジェクトに作用し、幾何学的操作を実行できます。
GeoPandas のジオメトリ操作はデカルトです。座標参照系 (crs) はオブジェクトの属性として保存でき、ファイルからロードするときに自動的に設定されます。オブジェクトは、 to_crs()
メソッドを使用して新しい座標系に変換できます。現在、操作に同様の座標を強制することはありませんが、将来的には変更される可能性があります。
ドキュメントは geopandas.org (現在のリリース) および Read the Docs (リリース バージョンおよび開発バージョン) で入手できます。
GeoPandas プロジェクトはオープン ガバナンス モデルを使用しており、NumFOCUS によって財政的に後援されています。プロジェクトの開発時間、プロフェッショナル サービス、旅行、ワークショップ、その他さまざまなニーズの支払いに役立てるため、税控除の対象となる寄付を行うことを検討してください。
詳細については、インストールに関するドキュメントを参照してください。 GeoPandas は次のパッケージに依存します。
pandas
shapely
pyogrio
pyproj
packaging
さらに、 matplotlib
オプションの依存関係であり、プロットに必要です。これらのパッケージは地理空間分析用のいくつかの低レベル ライブラリに依存しているため、インストールが困難になる場合があります。したがって、conda パッケージ マネージャーを使用して GeoPandas をインストールすることをお勧めします。詳細については、インストールに関するドキュメントを参照してください。
>>> import geopandas
>>> from shapely.geometry import Polygon
>>> p1 = Polygon([(0, 0), (1, 0), (1, 1)])
>>> p2 = Polygon([(0, 0), (1, 0), (1, 1), (0, 1)])
>>> p3 = Polygon([(2, 0), (3, 0), (3, 1), (2, 1)])
>>> g = geopandas.GeoSeries([p1, p2, p3])
>>> g
0 POLYGON ((0 0, 1 0, 1 1, 0 0))
1 POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))
2 POLYGON ((2 0, 3 0, 3 1, 2 1, 2 0))
dtype: geometry
一部の地理操作は通常の panda オブジェクトを返します。 GeoSeries
のarea
プロパティは、 GeoSeries
内の各アイテムの面積を含むpandas.Series
を返します。
>>> print(g.area)
0 0.5
1 1.0
2 1.0
dtype: float64
他の操作は GeoPandas オブジェクトを返します。
>>> g.buffer(0.5)
0 POLYGON ((-0.3535533905932737 0.35355339059327...
1 POLYGON ((-0.5 0, -0.5 1, -0.4975923633360985 ...
2 POLYGON ((1.5 0, 1.5 1, 1.502407636663901 1.04...
dtype: geometry
GeoPandas オブジェクトは、それ自体をプロットする方法も知っています。 GeoPandas はプロットに matplotlib を使用します。 GeoSeries
のプロットを生成するには、次を使用します。
>>> g.plot()
GeoPandas は、pyogrio によって認識される任意のデータ形式を読み取ることができる代替コンストラクターも実装します。ニューヨーク市の区の境界を含む ESRI シェープファイルを含む zip ファイルを読み取るには (例はgeodatasets
パッケージを使用して取得できます):
>>> import geodatasets
>>> nybb_path = geodatasets.get_path('nybb')
>>> boros = geopandas.read_file(nybb_path)
>>> boros.set_index('BoroCode', inplace=True)
>>> boros.sort_index(inplace=True)
>>> boros
BoroName Shape_Leng Shape_Area
BoroCode
1 Manhattan 359299.096471 6.364715e+08
2 Bronx 464392.991824 1.186925e+09
3 Brooklyn 741080.523166 1.937479e+09
4 Queens 896344.047763 3.045213e+09
5 Staten Island 330470.010332 1.623820e+09
geometry
BoroCode
1 MULTIPOLYGON (((981219.0557861328 188655.31579...
2 MULTIPOLYGON (((1012821.805786133 229228.26458...
3 MULTIPOLYGON (((1021176.479003906 151374.79699...
4 MULTIPOLYGON (((1029606.076599121 156073.81420...
5 MULTIPOLYGON (((970217.0223999023 145643.33221...
>>> boros['geometry'].convex_hull
BoroCode
1 POLYGON ((977855.4451904297 188082.3223876953,...
2 POLYGON ((1017949.977600098 225426.8845825195,...
3 POLYGON ((988872.8212280273 146772.0317993164,...
4 POLYGON ((1000721.531799316 136681.776184082, ...
5 POLYGON ((915517.6877458114 120121.8812543372,...
dtype: geometry