Skip to content

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()?;

より詳細な紹介は次の章から参照できます。