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()?;
より詳細な紹介は次の章から参照できます。