Polars 日本語ユーザーガイド
このドキュメントは Polars 公式のユーザーガイドを有志が日本語に翻訳したものです。本ドキュメントに記載の内容は最新のバージョンを反映していない可能性があるので、最新の情報は公式のユーザーガイドを参照してください。
本ページの以降の記載は、公式のユーザーガイドのトップページの内容の一部を抜粋し日本語化したものです。
Polars は、構造化データを操作するための非常に高速な DataFrame ライブラリです。核となる部分は Rust で書かれており、Python、R、NodeJS で利用可能です。
主な特徴
- 高速:Rust でゼロから書かれ、マシンに近い設計で外部依存性がありません。
- I/O:ローカル、クラウドストレージ、データベースなど、すべての一般的なデータストレージレイヤーに対して一級のサポートをします。
- 直感的な API:意図した方法でクエリを書くことができます。Polars は内部的に最も効率的な実行方法をクエリオプティマイザーを使用して決定します。
- Out of Core:ストリーミング API を使用して、一度にすべてのデータをメモリに置くことなく結果を処理することができます。
- 並列性:追加の設定なしで、利用可能な CPU コア間でワークロードを分割することにより、マシンの力を活用します。
- ベクトル化クエリエンジン:Apache Arrow を使用して、列指向のデータ形式でクエリをベクトル化して処理し、SIMD を使用して CPU 使用率を最適化します。
DataFrame を知らないユーザーへ
DataFrame は、データ操作および分析に便利な2次元データ構造です。行と列にラベル付きの軸があり、各カラムは異なるデータ型を含むことができるため、マージや集約などの複雑なデータ操作がずっと簡単になります。その柔軟性とデータの保管および取り扱い方法が直感的であるため、DataFrame は現代のデータ分析とエンジニアリングでますます人気が高まっています。
哲学
Polars の目標は、以下を提供することです:
- マシン上で利用可能なすべてのコアを活用します。
- 不要な処理/メモリ割り当てを減らすためにクエリを最適化します。
- 利用可能な RAM よりもはるかに大きなデータセットを扱うことができます。
- 一貫性があり予測可能な API を提供します。
- 厳格なスキーマに準拠しています(クエリ実行前にデータ型が分かっている必要があります)。
Polars は Rust で書かれており、これにより C/C++ 並みのパフォーマンスが得られ、クエリエンジンでパフォーマンスが重要な部分を完全に制御できます。
例
  scan_csv ·  filter ·  group_by ·  collect
import polars as pl
q = (
    pl.scan_csv("docs/data/iris.csv")
    .filter(pl.col("sepal_length") > 5)
    .group_by("species")
    .agg(pl.all().sum())
)
df = q.collect()
  LazyCsvReader ·  filter ·  group_by ·  collect ·  Available on feature csv ·  Available on feature streaming
use polars::prelude::*;
let q = LazyCsvReader::new("docs/data/iris.csv")
    .has_header(true)
    .finish()?
    .filter(col("sepal_length").gt(lit(5)))
    .group_by(vec![col("species")])
    .agg([col("*").sum()]);
let df = q.collect()?;
より詳細な紹介は次の章から参照できます。