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