pandas, polars, pyspark の概要と違い

に公開

pandas, polars, pyspark の概要と違い

pandas と polars,pyspark の概要

間違ってたら教えておくれー

pandas

Pythonで最も使われるデータ分析ライブラリ。
単一マシンのメモリ上でデータを扱い、小〜中規模データに向いている。
即時実行で対話的な分析が得意。


polars

Rust製の高速データフレームライブラリ。
マルチプロセス処理とメモリ効率が良く、中〜大規模データも高速処理可能。
pandasに似たAPIを持つ。


PySpark

Apache SparkのPython API。
クラスタでの分散処理により、大規模ビッグデータのバッチ処理やストリーミングに強い。


補足

  • シングル? マルチプロセス?

シングルプロセスとは、コンピュータのCPUの中の「1つのコア」を使って処理をひとつずつ順番に実行する方式のこと。
マルチプロセスは、複数のCPUコアを使い、複数の処理を同時並行で実行する方式のこと

pandas と polars,pyspark のコード例

pandas

import pandas as pd
import numpy as np

# --- 1. データ作成 ---
np.random.seed(42)
n = 100_000
df = pd.DataFrame({
    "id": np.arange(1, n + 1),
    "category": np.random.choice(["a", "b", "c", "d"], size=n),
    "value": np.random.randn(n)
})

# --- 2. nullを混入 ---
df.loc[np.random.rand(n) < 0.1, "value"] = np.nan

# --- 3. クレンジング ---
df["category"] = df["category"].str.upper()         # 小文字 → 大文字
df_clean = df.dropna(subset=["value"])              # null除去

# --- 4. 集計 ---
result = df_clean.groupby("category")["value"].sum().reset_index(name="total_value")
print(result)

polars

import polars as pl
import numpy as np

# --- 1. データ作成 ---
np.random.seed(42)
n = 100_000
df = pl.DataFrame({
    "id": np.arange(1, n + 1),
    "category": np.random.choice(["a", "b", "c", "d"], size=n),
    "value": np.random.randn(n)
})

# --- 2. nullを混入 ---
mask = np.random.rand(n) < 0.1
df = df.with_columns([
    pl.Series("value", [val if not m else None for val, m in zip(df["value"], mask)])
])

# --- 3. クレンジング ---
df_clean = (
    df
    .with_columns([
        pl.col("category").str.to_uppercase(),      # 小文字 → 大文字
    ])
    .drop_nulls(["value"])                          # null除去
)

# --- 4. 集計 ---
result = (
    df_clean
    .group_by("category")
    .agg(pl.col("value").sum().alias("total_value"))
)
print(result)

pyspark

from pyspark.sql.functions import col, expr, upper, when, randn, rand, sum as _sum

# --- 1. データ作成 ---
df = (
    spark.range(1, 100_001)
    .withColumn("category", expr("CASE int(rand() * 4) WHEN 0 THEN 'a' WHEN 1 THEN 'b' WHEN 2 THEN 'c' ELSE 'd' END"))
    .withColumn("value", randn())
)

# --- 2. nullを混入 ---
df = df.withColumn("value", when(rand() < 0.1, None).otherwise(col("value")))

# --- 3. クレンジング ---
df_clean = (
    df.filter(col("value").isNotNull())         # null除去
      .withColumn("category", upper(col("category")))  # 小文字 → 大文字
)

# --- 4. 集計 ---
result = (
    df_clean.groupBy("category")
            .agg(_sum("value").alias("total_value"))
)

result.show()


pandas と polars,pyspark の長所

pandasの長所


圧倒的な普及率と豊富な情報資源

pandasはPythonのデータ分析分野で最も広く使われているライブラリなので、なので、情報源豊富
・"pandas"の検索結果:44,700,000件
・"polars"の検索結果:5,180,000件
・"pyspark"の検索結果:9,420,000件

他のPythonライブラリとの親和性が高い

機械学習のscikit-learnや可視化のmatplotlib、統計解析のstatsmodelsなど、メジャーな分析ライブラリと親和性が高い

即時評価(Eager Evaluation)で対話的な分析に最適

pandasはコードを書いた瞬間に処理が実行されるため、Jupyter Notebookなどの対話的な環境でのデータ探索や試行錯誤に非常に向いている
....けど、polarsやpysparkでも即時評価はできるので長所として挙げるのはいかがなものか

polarsの長所


高速処理性能(マルチプロセス対応)

複数のCPUコアを使った並列処理(マルチプロセス)が標準で可能。

メモリ効率が良く大規模データに強い

データの型を厳密に管理することで列指向の設計にし、メモリを節約してる

遅延評価(Lazy Evaluation)による最適化処理

polarsは処理を一時的にためてからまとめて実行する「遅延評価」機能を持ちます。
これにより、無駄な中間処理を削減し、効率的な処理計画を立てて高速化とメモリ節約を実現しています。

PySparkの長所

上記のpolarsの長所を持ちつつ、加えて以下の長所がある


分散処理により超大規模データを高速処理可能

PySparkはApache SparkのPython用APIで、複数のサーバー(クラスタ)に処理を分散させることで、TB〜PB規模のビッグデータを高速に処理できます。
大量データのETL処理や集計、機械学習に最適です。

ビッグデータストレージとの親和性が高い

HadoopのHDFS、Amazon S3、Azure Blob Storageなど、大規模分散ストレージとスムーズに連携できるため、データ基盤構築に適しています。

豊富なエコシステムと多様な用途に対応

Spark MLlibでの分散機械学習や、Structured Streamingによるリアルタイムデータ処理にも対応し、幅広い用途で利用可能です。

pandas と polars,pyspark の短所

その項目にはない他項目の長所が、その項目の短所なので、各項目の短所は端折ります。
例: polars,pysparkはメモリの使用が効率的→pandasにはそれがない。つまりそれがpandasの短所

Discussion