高速な表計算ライブラリ「Polars」と「Pandas」でテーブル処理の速度を比較してみた

polarsのアイキャッチ IT

はじめに

データサイエンスの分野では、表形式のデータ処理が欠かせない作業の一つとなります。これまで「Pandas」が広く使われてきましたが、最近はRustで開発された「Polars」というライブラリが注目を集めています。

Polarsは、その高速な処理能力とメモリ効率の良さで、特に大規模データに対して優れたパフォーマンスを発揮することが特徴です。

本記事では、Polarsの性能をPandas比較し、使いやすいさを検証してみます。

PolarsやPandasはテーブル処理には不可欠な技術となります。これらについて理解が難しい場合は、経験豊富な方とマンツーマンで学習していくのもオススメです。

Polarsとは

Polarsは、Rustというプログラミング言語で開発されたデータフレームライブラリで、高いパフォーマンスを引き出します。

さらに、Polarsは並列処理を活用することで、マルチコア環境でも効率的に動作し、大規模データに対しても高速な処理が可能です。

Polarsサイトにはベネフィットとして以下の3つが書かれています。

  • Fast:Polars is written from the ground up with performance in mind. Its multi-threaded query engine is written in Rust and designed for effective parallelism. Its vectorized and columnar processing enables cache-coherent algorithms and high performance on modern processors.。
  • Easy to use:You will feel right at home with Polars if you are familiar with data wrangling. Its expressions are intuitive and empower you to write code which is readable and performant at the same time.
  • Open source:Polars is and always will be open source. Driven by an active community of developers, everyone is encouraged to add new features and contribute. Polars is free to use under the MIT license.

引用:Polars

高速で、誰でも使いやすいオープンソースのライブラリとして活用できるということになります。公式にはPandasの30倍程度の速さを計測したとのことも書いてあります。

PolarsとPandasを比較してみる

今回はKaggleのコンペティションのデータを使ってみました。

UM – Game-Playing Strength of MCTS Variantsのtrainデータを使ってみます。1.22GBで行, 列が(233234, 814)あります。

Polarsはversion1.13.1、Pandasはversion2.2.3を使います。

PCスペックはプロセッサがAMD Ryzen 7 5825U with Radeon Graphics、RAMは16GBを使います。

データ読み込み

まずはデータを読み込みます。

%%timeit -r 7 -n 5
df = pl.read_csv("../input/kaggle_train.csv") # Polars
%%timeit -r 7 -n 5
df = pd.read_csv("../input/kaggle_train.csv") # Pandas
PolarsPandas
実行時間1.27 s ± 115 ms11.5 s ± 450 ms

Polarsの方が10倍近く速くなりました。こちらのデータは少し重いのですが、Polarsはすぐ読み込むことができたため、ストレスなく分析できそうです。

逆にPandasだと11.5 sという結果だったので、毎回読み込むと相当なストレスになると感じました。

欠損値埋め

欠損値を埋める処理を試してみます。

%%timeit -r 7 -n 5
filled_df = df.fill_null(0) # Polars
%%timeit -r 7 -n 5
filled_df = df.fillna(0) # Pandas
PolarsPandas
実行時間221 ms ± 8.26 ms443 ms ± 27.1 ms

Polarsの方が2倍近く速くなりました。しかし、どちらも速いので全く気になりませんでした。

Group集計

Group集計を試してみます。

%%timeit -r 7 -n 5
grouped_df = df.group_by("GameRulesetName").agg(pl.col("utility_agent1").mean()) # Polars
%%timeit -r 7 -n 5
grouped_df = df.groupby("GameRulesetName")["utility_agent1"].mean().reset_index() # Pandas
PolarsPandas
実行時間413 ms ± 11.1 ms17.6 ms ± 792 µs

この場合は、Pandasの方がだいぶ速くなりました。しかし、どちらも速いので全く気になりませんでした。

PolarsとPandasの比較結果

今回試した結果では、2勝1敗でPolarsの勝ちになりました。他の記事でも、処理によってはPandasの方が速いというのも見られたので、どちらを使うかは試したうえで使うのもいいかもしれません。

ただ今回のデータを用いた読み込みについてはPandasが相当遅くストレスになったので、Pandas読み込みで遅いときはPolarsに切り替えるのもいいと思います。

PolarsとPandasの書き方まとめ

PolarsとPandasでは書き方が違うため、いくつか例を挙げます。こちらを用いて変換などを操作をしながら試していくのがいいと思います。

CSVの読み込み

# CSVファイルの読み込み
df = pl.read_csv("sample_data.csv") # Polars

df = pd.read_csv("sample_data.csv") # Pandas

Group集計

# category列でグループ化し、value列の合計を計算
grouped_df = df.group_by("category").agg(pl.col("value").sum()) # Polars

grouped_df = df.groupby("category")["value"].sum().reset_index() # Pandas

行の条件抽出

# value列が10以上の行を抽出
filtered_df = df.filter(pl.col("value") >= 10) # Polars

filtered_df = df[df["value"] >= 10] # Pandas

列同士の計算

# 新しい列totalを追加し、value列とquantity列の積を計算
df = df.with_columns((pl.col("value") * pl.col("quantity")).alias("total")) # Polars

df["total"] = df["value"] * df["quantity"] # Pandas

列選択

# 特定の列(categoryとvalue)だけを選択
selected_df = df.select(["category", "value"]) # Polars

selected_df = df[["category", "value"]] # Pandas

ソート

# value列で昇順にソート
sorted_df = df.sort("value") # Polars

sorted_df = df.sort_values("value") # Pandas

型確認

# データ型の確認
print(df.schema) # Polars

print(df.dtypes) # Pandas

まとめ

PolarsとPandasはどちらもデータフレーム操作に活用するライブラリです。今回は処理が速いと噂のPolarsを試して、処理速度を試してみました。

Polarsの方が速いこともあればPandasが速いこともあったため状況に応じて使い分けるのが良さそうです。

Polarsを学ぶのにオススメの方法

書籍:Polarsとpandasで学ぶ データ処理アイデアレシピ55

Polarsを体系的に学びたい方には以下の書籍がオススメです。pandasとの比較や使い分けも丁寧に解説されており、現場で役立つ55のレシピが収録されています。

スクール:現役データサイエンティストに教えてもらう

Polarsに限らず、Pandasなども含めデータの前処理は非常に重要です。相談しながら進められるスクールもオススメです。

データサイエンティストになるためにオススメのスクール5選。
はじめに近年、多くの企業でデータ活用が進み、AIやデータ分析への期待がますます高まっています。そのため、データサイエンティストは現代のビジネス界で最も需要のある職業の一つです。データ分析、機械学習、統計学、プログラミングなど多岐に...

コメント

Copied title and URL