8 ポイント 投稿者 GN⁺ 2024-08-30 | 2件のコメント | WhatsAppで共有
  • pandas と dask バックエンドを廃止し、バージョン 10.0 で削除する予定
  • pandas バックエンドと既定の DuckDB バックエンドの間に機能差はなく、DuckDB のほうがはるかに高性能
  • pandas DataFrame は引き続き Ibis でデータを受け渡しする形式として使用できるが、pandas を使ったクエリ実行はサポートしない
  • ほとんどのロジックは dask バックエンドにも当てはまり、dask は優れたプロジェクトであり、Ibis の外では引き続き使うべき

なぜ pandas なのか? そして Ibis の歴史

  • Ibis の初期には Impala バックエンドしか存在しなかった
  • Postgres バックエンドが追加されたが、インストールが複雑で、ユーザーが気軽に Ibis を試せなかった
  • ノートブック以外の追加インフラなしで Ibis API を試せる方法が必要だった
  • 当時唯一のインメモリ DataFrame エンジンである pandas バックエンドにつなぐのが明らかな答えだった

Pandas バックエンドの難しさ

  • pandas は当時としては最良の選択だったが、Ibis のデータ分析モデルとは相性がよくなかった
  • pandas バックエンドは他のバックエンドと根本的に異なり、最も多くの特別扱いのコードを抱えている
  • pandas は本質的に即時実行エンジンであり、Ibis は遅延実行モデルを使う
  • pandas インターフェースを遅延方式で動作させるのは難しい
  • pandas バックエンドは他のバックエンドより遅く、そのために数千行のコードが必要
  • pandas の NaN と Ibis の NULL は根本的に異なる概念だが、これらを同じものとして扱わなければならない
    • pandas では NaN を欠損値の表現として使ってきたが、これは他のバックエンドとの互換性問題を引き起こす
    • NULL は欠損値を表し、NaN は数値ではないことを表す fundamentally 異なる概念
  • pandas の新しい Arrow ベースの型は大きな改善だが、依然として問題がある

新規ユーザーを混乱させる

  • 人は慣れたものを好む
  • 初めて Ibis を使うとき、Ibis とバックエンドの両方を選ばなければならない
  • 新規ユーザーはしばしば「Ibis は遅い」と報告する
  • その大半は pandas バックエンドを使っていたため
  • DuckDB や Polars を使っていれば、はるかに簡単に始められただろう

機能の同等性

  • pandas バックエンドを削除する最も強力な理由は重複性にある
  • DuckDB バックエンドは pandas DataFrame をシームレスにクエリでき、複数形式の UDF をサポートし、parquet、CSV、JSON などさまざまな形式の読み書きができる
  • DuckDB はインストールが簡単で、ローカルで動作し、非常に高速で、Python エコシステムとうまく相互運用できる

GN⁺ のまとめ

  • DuckDB を既定のバックエンドとして採用したのは非常に賢明な判断に見える。インストールが簡単で、ローカルで動作し、非常に高速で、Python エコシステムとうまく相互運用できる。これは Ibis が当初 pandas をバックエンドに追加した理由でもある
  • pandas が引き続きデータ受け渡しのフォーマットとして使える点は、既存の pandas ユーザーにとって良い知らせ。既存コードを完全に捨てる必要はない
  • しかし、クエリ実行に pandas をもう使わないのは正しい方向に見える。pandas の即時実行モデルは Ibis の遅延実行モデルと合わない。このため pandas バックエンドは、しばしば pandas を直接使うよりもはるかに遅い
  • Ibis がますます多くのバックエンドをサポートするにつれて、特定のバックエンド向けに調整されたコードを保守するのはますます難しくなるだろう。pandas バックエンドを削除すれば、コードベースはよりクリーンになり、保守もしやすくなるはず
  • DuckDB バックエンドで pandas の全機能を置き換えられるなら、pandas バックエンドを維持する理由はないように見える。むしろ新規ユーザーを混乱させる可能性がある

2件のコメント

 
yangeok 2024-09-03

やはり一番なじみのある pandas を今でも一番多く使っているのが現実ですよね、,

 
GN⁺ 2024-08-30
Hacker Newsの意見
  • NaN は 0/0 の結果で、値は存在するが正確には分からないことを意味する

    • NULL は特定の位置の値が分からないことを意味する
    • NaN と NULL の実装は異なるが、完全に無関係ではない
    • Python の None は NaN や NULL とは異なる
  • pandas より優れた計算エンジンは多い

    • 既存のコードベースやサードパーティー統合のために pandas を使い続けている
    • 小規模なデータ作業には pandas で十分に適している
  • この数か月、新しいプロジェクトでは pandas を ibis に置き換えている

    • ibis の文法は pandas より柔軟だ
    • 演算のチェイニングによってコードスニペットの移植性が高まる
    • DuckDB バックエンドは非常に高速だ
    • コミュニティはとても活発で親切だ
    • 同僚たちに ibis を勧めている
  • pandas のマルチインデックス機能が最も強力だ

    • 列にも使える
    • 新しいツール群がこの機能をどう扱うのか確信が持てない
  • Polars を検討したことがあるのか気になる

    • グループ内で pandas が嫌われているので、Polars を標準として使っている
  • pandas は新しい種類の列へ拡張できる

    • Polars がこれをサポートしているのかはよく分からない
  • Ibis の価値は DuckDB を使えることではない

    • 新しいツールが出てきても文法はそのまま動き続ける
  • Ibis についてはあまり聞いたことがない

    • pandas から離れるなら、Ibis を試す可能性は低くなる
    • 新しいフレームワークが pandas/numpy から離れつつあるが、互換性とエッジケースが解決されるまでは待つつもりだ
    • 数ミリ秒余計に待っても気にしない
  • pandas のライブラリ API は常に直感的というわけではない

    • NaN/None の問題はあるが、これは些細な不便さだ
  • pandas を使う理由は統合されたエコシステムにある

    • json ファイル、csv ファイル、python dict などからデータを読み込み、plotly で可視化するときに pandas は便利だ
    • Ibis が pandas データフレームと互換性があるなら、バックエンドはあまり気にしない