Ibis はポータブルな Python データフレーム ライブラリです。
「なぜ Ibis なのか?」に関するドキュメントを参照してください。もっと学ぶために。
バックエンドとサンプル データを使用して Ibis をpip install
できます。
pip install ' ibis-framework[duckdb,examples] '
ヒント
その他のインストール オプションについては、インストール ガイドを参照してください。
次に、Ibis を使用します。
> >> import ibis
> >> ibis . options . interactive = True
> >> t = ibis . examples . penguins . fetch ()
> >> t
┏━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━┓
┃ species ┃ island ┃ bill_length_mm ┃ bill_depth_mm ┃ flipper_length_mm ┃ body_mass_g ┃ sex ┃ year ┃
┡━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━┩
│ string │ string │ float64 │ float64 │ int64 │ int64 │ string │ int64 │
├─────────┼───────────┼────────────────┼───────────────┼───────────────────┼─────────────┼────────┼───────┤
│ Adelie │ Torgersen │ 39.1 │ 18.7 │ 181 │ 3750 │ male │ 2007 │
│ Adelie │ Torgersen │ 39.5 │ 17.4 │ 186 │ 3800 │ female │ 2007 │
│ Adelie │ Torgersen │ 40.3 │ 18.0 │ 195 │ 3250 │ female │ 2007 │
│ Adelie │ Torgersen │ NULL │ NULL │ NULL │ NULL │ NULL │ 2007 │
│ Adelie │ Torgersen │ 36.7 │ 19.3 │ 193 │ 3450 │ female │ 2007 │
│ Adelie │ Torgersen │ 39.3 │ 20.6 │ 190 │ 3650 │ male │ 2007 │
│ Adelie │ Torgersen │ 38.9 │ 17.8 │ 181 │ 3625 │ female │ 2007 │
│ Adelie │ Torgersen │ 39.2 │ 19.6 │ 195 │ 4675 │ male │ 2007 │
│ Adelie │ Torgersen │ 34.1 │ 18.1 │ 193 │ 3475 │ NULL │ 2007 │
│ Adelie │ Torgersen │ 42.0 │ 20.2 │ 190 │ 4250 │ NULL │ 2007 │
│ … │ … │ … │ … │ … │ … │ … │ … │
└─────────┴───────────┴────────────────┴───────────────┴───────────────────┴─────────────┴────────┴───────┘
>> > g = t . group_by ( "species" , "island" ). agg ( count = t . count ()). order_by ( "count" )
> >> g
┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━┓
┃ species ┃ island ┃ count ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━┩
│ string │ string │ int64 │
├───────────┼───────────┼───────┤
│ Adelie │ Biscoe │ 44 │
│ Adelie │ Torgersen │ 52 │
│ Adelie │ Dream │ 56 │
│ Chinstrap │ Dream │ 68 │
│ Gentoo │ Biscoe │ 124 │
└───────────┴───────────┴───────┘
ヒント
Ibis の完全な紹介については、入門チュートリアルを参照してください。
ほとんどのバックエンドでは、Ibis はデータフレーム式を SQL にコンパイルすることで機能します。
> >> ibis . to_sql ( g )
SELECT
"t1" . "species" ,
"t1" . "island" ,
"t1" . "count"
FROM (
SELECT
"t0" . "species" ,
"t0" . "island" ,
COUNT ( * ) AS "count"
FROM "penguins" AS "t0"
GROUP BY
1 ,
2
) AS "t1"
ORDER BY
"t1" . "count" ASC
SQL と Python コードを混在させることができます。
> >> a = t . sql ( "SELECT species, island, count(*) AS count FROM penguins GROUP BY 1, 2" )
> >> a
┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━┓
┃ species ┃ island ┃ count ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━┩
│ string │ string │ int64 │
├───────────┼───────────┼───────┤
│ Adelie │ Torgersen │ 52 │
│ Adelie │ Biscoe │ 44 │
│ Adelie │ Dream │ 56 │
│ Gentoo │ Biscoe │ 124 │
│ Chinstrap │ Dream │ 68 │
└───────────┴───────────┴───────┘
>> > b = a . order_by ( "count" )
> >> b
┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━┓
┃ species ┃ island ┃ count ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━┩
│ string │ string │ int64 │
├───────────┼───────────┼───────┤
│ Adelie │ Biscoe │ 44 │
│ Adelie │ Torgersen │ 52 │
│ Adelie │ Dream │ 56 │
│ Chinstrap │ Dream │ 68 │
│ Gentoo │ Biscoe │ 124 │
└───────────┴───────────┴───────┘
これにより、Python の柔軟性と最新の SQL のスケールとパフォーマンスを組み合わせることができます。
Ibis は 20 近くのバックエンドをサポートしています。
ほとんどの Python データフレームは、実行エンジンと密接に結合されています。また、多くのデータベースは SQL のみをサポートしており、Python API はサポートしていません。 Ibis は、Python でデータ操作用の共通 API を提供し、その API をバックエンドのネイティブ言語にコンパイルすることで、この問題を解決します。これは、単一の API を学習し、サポートされているバックエンド (実行エンジン) でそれを使用できることを意味します。
Ibis は、次の 2 種類のバックエンドを幅広くサポートしています。
別のバックエンドを使用するには、Ibis が使用するバックエンドを設定できます。
> >> ibis . set_backend ( "duckdb" )
> >> ibis . set_backend ( "polars" )
> >> ibis . set_backend ( "datafusion" )
通常は、接続オブジェクトを作成します。
> >> con = ibis . duckdb . connect ()
> >> con = ibis . polars . connect ()
> >> con = ibis . datafusion . connect ()
そして、そのバックエンドでテーブルを操作します。
> >> con . list_tables ()
[ 'penguins' ]
> >> t = con . table ( "penguins" )
CSV や Apache Parquet などの一般的なファイル形式から読み取ることもできます。
> >> t = con . read_csv ( "penguins.csv" )
> >> t = con . read_parquet ( "penguins.parquet" )
これにより、コードを 1 行変更するだけで、ローカルで繰り返し実行し、リモートでデプロイすることができます。
ヒント
DuckDB と BigQuery で同じコードを使用する一例については、バックエンドに依存しない配列に関するブログをご覧ください。
Ibis はオープンソース プロジェクトであり、コミュニティ内の誰からの貢献も歓迎します。
GitHub で交流したり、Zulip でチャットしたりして、コミュニティに参加してください。
詳細については、https://ibis-project.org/ をご覧ください。
Ibis プロジェクトは、移植可能な Python データフレーム ライブラリを構築および維持するための、独立して管理されるオープン ソース コミュニティ プロジェクトです。アイビスには、さまざまなデータ企業や機関に貢献者がいます。