Fiona と Pyogrio はどちらも、空間ベクトル データ形式の読み取りと書き込みに使用されるライブラリです。これらにはいくつかの類似点がありますが、アプローチと機能には重要な違いがあります。
1. アプローチ
- Fiona: Fiona は、OGR ベクター データ ソースを操作するためのフル機能の Python ライブラリです。ステートフルなアプローチを使用しており、一連のパスでデータの読み取りまたは書き込みが行われるため、データ処理の柔軟性と制御が向上します。これにより、複雑なデータ変換や増分書き込みまたは追加など、幅広いタスクに適しています[1]。- Pyogrio: Pyogrio は、空間ベクトル ファイル形式の読み取りおよび書き込みにベクトル化 (配列指向) アプローチを使用する実験的なアプローチです。 Cython の numpy 指向のアプローチを内部的に使用して、空間データ レイヤーからデータ ソースとレコードに関する情報を読み取ります。このアプローチにより、より高速な I/O 操作が可能になりますが、すべてのデータが 1 つのパスで読み書きされるステートレスな性質のため、Fiona よりも柔軟性が劣る可能性があります[1]。
2. ファイル形式のサポート
- Fiona: Fiona は、ESRI Shapefile、GeoPackage、GeoJSON などを含む幅広いファイル形式をサポートしています。これは、Python エコシステムの多くのプロジェクト内で使用される汎用の空間フォーマット I/O ライブラリです[1]。- Pyogrio: Pyogrio は、Fiona を使用して GeoPandas GeoDataFrame と空間ファイル形式の間でデータの読み取り/書き込みに必要なデータ変換の数を削減する試みとして、GeoPandas を特にターゲットにしています。 GeoJSON、GeoPackage、Shapefile 形式をサポートしていますが、主な焦点は GeoPandas 指向の I/O 操作です[1][5]。
3. パフォーマンス
- フィオナ: フィオナは柔軟性と堅牢性で知られていますが、パフォーマンスが最適化されていない可能性があります。複雑なデータ変換を処理するように設計されており、増分書き込みまたは追加をサポートします。- Pyogrio: Pyogrio は、ベクトル化されたアプローチを利用して、より高速な I/O 操作を行うように設計されています。これにより、特に大規模なデータセットの場合、Fiona と比較してパフォーマンスが大幅に向上する可能性があります[1]。
4. インストールと互換性
- Fiona: Fiona は広く利用可能であり、Windows を含む幅広いプラットフォームをサポートしています。これはデフォルトで GeoPandas に含まれており、ファイルの読み取りおよび書き込み用のエンジンとして使用できます。- Pyogrio: Pyogrio は Linux および MacOS の Conda-forge で利用できますが、Windows のバイナリ依存関係のパッケージ化が複雑であるため、PyPi ではまだ利用できません。 Raw I/O サポートには、Conda-forge の GDAL と numpy の互換バージョンが必要で、GeoDataFrame I/O サポートには geopandas、pygeos、およびそれらの依存関係が必要です[1]。
5. GeoPandas のデフォルト エンジン
- Fiona: Fiona は現在、GeoPandas がファイルの読み取りと書き込みに使用するデフォルト エンジンです。ただし、GeoPandas 1.0 では、大幅な高速化の可能性があるため、デフォルト エンジンとして Pyogrio を使用するように切り替わります[4]。要約すると、Fiona はデータ処理の柔軟性と制御性を高め、Pyogrio はより高速な I/O 操作向けに最適化されています。 Fiona はより幅広いファイル形式をサポートしており、より広く利用可能ですが、Pyogrio は GeoPandas 指向の I/O 操作専用に設計されており、パフォーマンスを向上させることができます。
引用:[1] https://pypi.org/project/pyogrio/0.2.0/
[2] https://github.com/geopandas/geopandas/issues/2908
[3] https://discourse.pangeo.io/t/geopandas-bbox-and-mask-params-return-empty-dataframe-fiona-pyyogrio-for-file-geodatabase/3011
[4] https://geopandas.org/en/stable/docs/reference/api/geopandas.read_file.html
[5] https://github.com/geopandas/pyogrio