mcpField
P
polars

polars

github.com/davila7データ・データベース33.0k539 回インストール1 日前に更新
リポジトリ

polars について

Python と Rust の DataFrame ライブラリ Polars の利用を支援するスキルです。式ベースの変換、遅延クエリ実行、データ入出力、pandas からの移行方法を扱います。

主な機能

  1. 01式ベースの DataFrame 操作
  2. 02遅延クエリの最適化
  3. 03グループ化とウィンドウ関数
  4. 04一般的な形式の読み書き
  5. 05結合・整形・連結
  6. 06pandas 移行ガイド

活用シーン

  1. 01Polars でデータ処理パイプラインを構築
  2. 02遅延実行で大規模データのクエリを最適化
  3. 03pandas の処理を Polars に置き換え
  4. 04表形式データの読み込み・変換・出力

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/davila7/claude-code-templates --skill polars

インストール後、Claude Code で/polarsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
best_practices.md
core_concepts.md
io_guide.md
operations.md
pandas_migration.md
transformations.md

詳細

Polars

概要

Polars は Apache Arrow 上に構築された、Python と Rust 向けの超高速な DataFrame ライブラリです。Polars の式ベースの API、遅延評価フレームワーク、高性能なデータ操作機能を使って、効率的なデータ処理、pandas からの移行、データパイプラインの最適化を行えます。

クイックスタート

インストールと基本的な使い方

Polars をインストールします:

uv pip install polars

DataFrame の基本的な作成と操作:

import polars as pl

# Create DataFrame
df = pl.DataFrame({
    "name": ["Alice", "Bob", "Charlie"],
    "age": [25, 30, 35],
    "city": ["NY", "LA", "SF"]
})

# Select columns
df.select("name", "age")

# Filter rows
df.filter(pl.col("age") > 25)

# Add computed columns
df.with_columns(
    age_plus_10=pl.col("age") + 10
)

中核となる概念

式

式は Polars 操作の基本的な構成要素です。データに対する変換を表現し、組み合わせ、再利用、最適化することができます。

主な原則:

  • 列を参照するには pl.col("column_name") を使用します
  • メソッドをチェーンして複雑な変換を構築します
  • 式は遅延評価され、コンテキスト(select、with_columns、filter、group_by)内でのみ実行されます

例:

# Expression-based computation
df.select(
    pl.col("name"),
    (pl.col("age") * 12).alias("age_in_months")
)
遅延評価と即時評価

即時評価(DataFrame): 操作は即座に実行されます

df = pl.read_csv("file.csv")  # Reads immediately
result = df.filter(pl.col("age") > 25)  # Executes immediately

遅延評価(LazyFrame): 操作はクエリプランを構築し、実行前に最適化されます

lf = pl.scan_csv("file.csv")  # Doesn't read yet
result = lf.filter(pl.col("age") > 25).select("name", "age")
df = result.collect()  # Now executes optimized query

遅延評価を使うべき場合:

  • 大規模なデータセットを扱う場合
  • 複雑なクエリパイプラインの場合
  • 一部の列や行だけが必要な場合
  • パフォーマンスが重要な場合

遅延評価の利点:

  • 自動的なクエリ最適化
  • 述語プッシュダウン
  • 射影プッシュダウン
  • 並列実行

詳細な概念については、references/core_concepts.md を読み込んでください。

よく使う操作

Select

列を選択して操作します:

# Select specific columns
df.select("name", "age")

# Select with expressions
df.select(
    pl.col("name"),
    (pl.col("age") * 2).alias("double_age")
)

# Select all columns matching a pattern
df.select(pl.col("^.*_id$"))
Filter

条件で行をフィルタリングします:

# Single condition
df.filter(pl.col("age") > 25)

# Multiple conditions (cleaner than using &)
df.filter(
    pl.col("age") > 25,
    pl.col("city") == "NY"
)

# Complex conditions
df.filter(
    (pl.col("age") > 25) | (pl.col("city") == "LA")
)
With Columns

既存の列を保持したまま、列を追加または変更します:

# Add new columns
df.with_columns(
    age_plus_10=pl.col("age") + 10,
    name_upper=pl.col("name").str.to_uppercase()
)

# Parallel computation (all columns computed in parallel)
df.with_columns(
    pl.col("value") * 10,
    pl.col("value") * 100,
)
Group By と集計

データをグループ化して集計を計算します:

# Basic grouping
df.group_by("city").agg(
    pl.col("age").mean().alias("avg_age"),
    pl.len().alias("count")
)

# Multiple group keys
df.group_by("city", "department").agg(
    pl.col("salary").sum()
)

# Conditional aggregations
df.group_by("city").agg(
    (pl.col("age") > 30).sum().alias("over_30")
)

詳細な操作パターンについては、references/operations.md を読み込んでください。

集計とウィンドウ関数

集計関数

group_by コンテキスト内でよく使われる集計:

  • pl.len() - 行数をカウント
  • pl.col("x").sum() - 値の合計
  • pl.col("x").mean() - 平均
  • pl.col("x").min() / pl.col("x").max() - 最小値・最大値
  • pl.first() / pl.last() - 最初・最後の値
over() によるウィンドウ関数

行数を保持したまま集計を適用します:

# Add group statistics to each row
df.with_columns(
    avg_age_by_city=pl.col("age").mean().over("city"),
    rank_in_city=pl.col("salary").rank().over("city")
)

# Multiple grouping columns
df.with_columns(
    group_avg=pl.col("value").mean().over("category", "region")
)

マッピング戦略:

  • group_to_rows(デフォルト): 元の行順序を保持します
  • explode: 高速ですが、行がグループ化されてまとめられます
  • join: リスト列を作成します

データ入出力

対応フォーマット

Polars は次の読み書きに対応しています:

  • CSV、Parquet、JSON、Excel
  • データベース(コネクタ経由)
  • クラウドストレージ(S3、Azure、GCS)
  • Google BigQuery
  • 複数ファイル/パーティション分割されたファイル
一般的な入出力操作

CSV:

# Eager
df = pl.read_csv("file.csv")
df.write_csv("output.csv")

# Lazy (preferred for large files)
lf = pl.scan_csv("file.csv")
result = lf.filter(...).select(...).collect()

Parquet(パフォーマンスに推奨):

df = pl.read_parquet("file.parquet")
df.write_parquet("output.parquet")

JSON:

df = pl.read_json("file.json")
df.write_json("output.json")

包括的な入出力のドキュメントについては、references/io_guide.md を読み込んでください。

変換

結合

DataFrame を結合します:

# Inner join
df1.join(df2, on="id", how="inner")

# Left join
df1.join(df2, on="id", how="left")

# Join on different column names
df1.join(df2, left_on="user_id", right_on="id")
連結

DataFrame を積み重ねます:

# Vertical (stack rows)
pl.concat([df1, df2], how="vertical")

# Horizontal (add columns)
pl.concat([df1, df2], how="horizontal")

# Diagonal (union with different schemas)
pl.concat([df1, df2], how="diagonal")
ピボットとアンピボット

データの形を変換します:

# Pivot (wide format)
df.pivot(values="sales", index="date", columns="product")

# Unpivot (long format)
df.unpivot(index="id", on=["col1", "col2"])

詳細な変換の例については、references/transformations.md を読み込んでください。

pandas からの移行

Polars は、よりすっきりした API で pandas と比べて大幅なパフォーマンス向上を実現します。主な違いは次のとおりです:

概念上の違い
  • インデックスなし: Polars は整数位置のみを使用します
  • 厳格な型付け: 暗黙的な型変換は行いません
  • 遅延評価: LazyFrame で利用可能です
  • デフォルトで並列: 操作は自動的に並列化されます
一般的な操作の対応表
操作PandasPolars
列の選択df["col"]df.select("col")
フィルタdf[df["col"] > 10]df.filter(pl.col("col") > 10)
列の追加df.assign(x=...)df.with_columns(x=...)
グループ化df.groupby("col").agg(...)df.group_by("col").agg(...)
ウィンドウdf.groupby("col").transform(...)df.with_columns(...).over("col")
主な構文パターン

Pandas の逐次処理(遅い):

df.assign(
    col_a=lambda df_: df_.value * 10,
    col_b=lambda df_: df_.value * 100
)

Polars の並列処理(速い):

df.with_columns(
    col_a=pl.col("value") * 10,
    col_b=pl.col("value") * 100,
)

包括的な移行ガイドについては、references/pandas_migration.md を読み込んでください。

ベストプラクティス

パフォーマンス最適化
  1. 大規模データセットには遅延評価を使用する:

    lf = pl.scan_csv("large.csv")  # Don't use read_csv
    result = lf.filter(...).select(...).collect()
    
  2. ホットパスでの Python 関数の使用を避ける:

    • 並列化のために式 API の範囲内に留める
    • .map_elements() は必要な場合にのみ使用する
    • ネイティブの Polars 操作を優先する
  3. 非常に大きなデータにはストリーミングを使用する:

    lf.collect(streaming=True)
    
  4. 必要な列だけを早い段階で選択する:

    # Good: Select columns early
    lf.select("col1", "col2").filter(...)
    
    # Bad: Filter on all columns first
    lf.filter(...).select("col1", "col2")
    
  5. 適切なデータ型を使用する:

    • 低カーディナリティの文字列には Categorical を使用する
    • 適切な整数サイズを選ぶ (i32 と i64 の比較)
    • 時系列データには日付型を使用する
式のパターン

条件付き操作:

pl.when(condition).then(value).otherwise(other_value)

複数の列にまたがる列操作:

df.select(pl.col("^.*_value$") * 2)  # Regex pattern

null の処理:

pl.col("x").fill_null(0)
pl.col("x").is_null()
pl.col("x").drop_nulls()

その他のベストプラクティスやパターンについては、references/best_practices.md を読み込んでください。

リソース

このスキルには、包括的なリファレンスドキュメントが含まれています:

references/
  • core_concepts.md - 式、遅延評価、型システムの詳細な解説
  • operations.md - 一般的な操作をすべて例付きで解説した包括的なガイド
  • pandas_migration.md - pandas から Polars への完全な移行ガイド
  • io_guide.md - サポートされているすべての形式のデータ I/O 操作
  • transformations.md - 結合、連結、ピボット、再形成操作
  • best_practices.md - パフォーマンス最適化のヒントと一般的なパターン

ユーザーが特定のトピックについて詳細な情報を必要とする場合は、これらのリファレンスを必要に応じて読み込んでください。

コメント