😽
Pythonにおける分析の軽量化ライブラリ・拡張子の紹介(地理空間データ編)
簡単なまとめ
拡張子変換やライブラリを変換することで、メモリ不足等で動かない処理を動かすことが可能になる場合がある。特に
- GeoParquet(拡張子)
- dask-geopandas(ライブラリ)
に関しては、メモリ消費量などの兼ね合いで処理がうまく動作しない場合は試してみると良い。
なお、polarsのGIS用途に関してはpolars-reverse-geocodingやpolars-h3等、有志による拡張機能が続々作成されているので、プラグインのページをチェックしておくと、より洗練された拡張機能が出てくる可能性がある。
使用データ
- 利用しているポリゴンは気象庁の予報区のGISデータの市町村等(地震津波関係)。
分析ライブラリ
大容量データの場合は
- dask-geopandasで読み込み
- 拡張子を軽量な拡張子であるgeoparquetに変更
- 再度dask-geopandasで軽量化して読み込む
- 加工後、geopandasに戻し、可視化
上記のような流れが良いと考える。
geopandas
- Pythonで地理空間分析を行う際に(おそらく)最も基本となるライブラリ。
- ポリゴンのマージや交差など、基本的な処理は一通りできる。
メリット
- 一般的なライブラリなので情報が豊富
-
with openと比べて、可視化ライブラリも付属していたり、様々なファイルの読み込みが可能
デメリット
- 処理速度は早くはない
- メモリの効率が良くないため、数GB単位のデータだと処理することが難しい
dask-geopandas
- geopandasベースの軽量ライブラリです。並列処理に特化しているライブラリであるdask-dataframeをベースにしているので、メモリに乗らない量のデータも取り扱える。
- geopandasベースなので、処理時に利用するコマンドはほぼ同じ。
メリット
- 大容量データも読み込むことができ、そのまま空間演算も可能
-
compute()をする前に空間演算を行えば、メモリ消費量は少なく分析が可能
デメリット
-
compute()を行うまで、データの中身を見ながら方針を立てて作業ができない
polars_st
- polarsを地理空間分析に応用したもの。
- polarsのgis版であるgeo-polarsの更新がGithubを見る限り滞っていることを踏まえると、こちらのほうが利用できる可能性が高い。
メリット
- polarsベースなので、メモリ効率が良く、大容量データを扱える
デメリット
- 情報量が少ない
- polarsベースなので、geopandasよりは慣れるのに時間がかかる。
- まだベータ版なのでサービスで使うのは難しい(実験や分析で使うなら可)
拡張子
分析ではなく、サービスで使う場合は、FlatGeobuf、GeoParquet共に描画する際に難があるため、処理後はGeoJsonやSHP等の一般的なデータ形式に戻すことを推奨
もしくはloaders.glやlonboardのようなデータ可視化ライブラリを別途探索することを推奨
FlatGeobuf
GeoJSONをバイナリ化して圧縮することで、軽量化したデータ形式。
メリット
- GeoJSONの1/10位の容量で、かつサービスとの互換性が高い
- 5年以上前からあるデータ形式のため、GDALのバージョンが余程古くない限り、QGISでも問題なく読み込める
デメリット
- 分析などで、処理時間が求められる用途においてはGeoParquetに劣る
- 数GBクラスの大規模データになるとメモリ的に厳しい
GeoParquet
- Apache Parquetベースの、とにかく軽量な地理空間データを取り扱えるデータ形式。
- 最近はOverture Mapsで利活用されるなど、FlatGeobufのように分析以外の用途でも広まりつつある。
メリット
- データ容量の圧縮率が非常に高く、数GB単位のファイルが数十MBまで圧縮される場合もある
- 空間演算時の処理速度が圧倒的に早い
デメリット
- 現状は分析特化なので、フロントエンドやバックエンドでは使いにくい
- GDALのバージョンへの依存度が高く、バージョンによっては挙動が怪しくなるため、分析時もcondaなどで環境構築して作業することを推奨
- MacだとGDALのバージョンの兼ね合いでそのままでは読み込めない。解決方法はこちら
Discussion