Skip to content

Polars vs Pandas: あなたの2023年のデータ分析チャンピオンを選ぶ

データ処理の巨人たち、Polars対Pandasの戦いは、データ分析の世界で話題になっています。Polars 0.17.0とPandas 2.0のリリースにより、両ライブラリは現在、優位性を競っています。しかし、どちらがあなたのデータ処理ライブラリの選択にふさわしいのでしょうか?この記事では、これらの強力なツールを徹底的に比較し、構文、スピード、使いやすさなどを調査して勝者を決定します。

PolarsとPandas:紹介

大規模なデータセットでPandasコードを数時間待ち続けたことはありませんか?そんなときは、Polarsを使用して、ライバルのPandasよりも大幅な速度向上が期待できます。Polarsはデータフレームの処理において優れ、効率とスピードでPandasを上回っています。

最近のリリースであるPolars 0.17.0とPandas 2.0は、それぞれ大幅なスピード向上を謳っています。Pandas 2.0の新しいApache Arrowサポートは、確かにパフォーマンスを向上させましたが、基本的な操作はNumPy配列でより速く実行されます。1週間前にリリースされたPolars 0.17.0も、その速度向上についての熱狂的なレビューを受けています[^1^]。

さらに深く掘り下げて、Polarsが優れた機能を持つ理由を解明していきましょう。

  • Rustサポート:PolarsはRustを使用して構築されています。Rustは直接機械コードにコンパイルできるため、インタプリタの必要がなく、Pythonよりも高速になります。

  • 並列処理:Polarsでは、マルチスレッドを活用して、複数のCPUコアでベクトル化された操作を並列実行できます。

  • Pythonインターフェース:Rustの基盤にもかかわらず、PolarsはPythonライブラリとして機能し、Rustのパフォーマンスの利点を享受しながら、アクセスしやすいデータ処理インターフェースを提供します。

  • 遅延評価:Polarsは、eager(Pandasで使用される)およびlazy評価APIの両方をサポートしています。lazy評価では、クエリは必要なときにのみ実行され、eager評価では即座に実行がトリガーされます。

この詳細なガイドでは、以下を行います:

  1. NumpyとPyArrowをバックエンドとしたPandas 2.0とPolars 0.17.0の速度を比較します。
  2. PolarsでPandasコードをシンプルから複雑なものに移行する方法を説明します。
  3. 4-CPUコアプロセッサと32 GB RAMを搭載したマシンを使用して、両ライブラリのパフォーマンス対決を行います。

セットアップとデータセット

比較に入る前に、ローカルマシンに最新バージョンのPolarsとPandasがインストールされていることを確認してください。インストールされていない場合は、次のpipコマンドを使用してインストールしてください。

pip install polars==0.17.0 # 最新版のPolars
pip install pandas==2.0.0  #最新版のPandas

私たちの比較は、8つのカテゴリ変数と7つの数値変数からなる、30万行15列の人工データセットに基づいています。この人工データセットはここ (opens in a new tab)からアクセスできます。

以下は、データセットの一部を示しています。

# Pandas
train_pd.head()
 
# Polars
train_pl.head()

最初に、必要なライブラリをインポートしてデータをロードする必要があります。

import pandas as pd
import polars as pl
import numpy as np
import time

データセットの読み込み

データセットの読み込み: Pandas 2.0 vs Polars 0.17の比較分析

巨大なデータセットを扱う場合、データ処理ライブラリの選択はすべての違いを生むことができます。そのため、Pandas 2.0 と Polars 0.17 の両方の読み込み機能に重点を置いた比較分析を行っています。

まず、両ライブラリのParquetファイル読み込み時間を比較してみましょう。Parquetは、ビッグデータ処理フレームワークでの使用を最適化された列指向のストレージファイルフォーマットです。これらのファイルを迅速かつ効率的に読み込む能力は、大規模なデータセットを扱う場合に重要です。

私たちの調査によると、Parquetファイルの読み込みに関して両方のライブラリのパフォーマンスに類似性があることが示されました。ただし、PandasはNumPyバックエンドを利用する場合、このタスクを達成するのにPolarsに比べて2倍の時間がかかります。

集計操作: Polars vs. Pandas

次に、集計関数の評価を行いましょう。これらの操作は、データのレビューに必要な重要なサマリー統計情報を提供するデータ分析において重要です。

簡単なクエリに対する構文とパフォーマンスに関しては、Pandasが優れたオプションとして浮上しました。ただし、両ライブラリのパフォーマンス差はわずかでした。評価したシナリオでは、Polarsは同じ集計関数を使用して集計するリストを操作できるという独自の利点を提供しますが、Pandasはこの機能を提供していません。

フィルタリングおよび選択操作: Pandas vs Polars

フィルタリングおよび選択操作では、データベースからデータを抽出するための条件を指定します。私たちのテストでは、数値列が特定の条件を満たすときにカテゴリカル列のユニークな値の数をカウントし、カテゴリカル列が特定の値と等しい場合にすべての数値列の平均値を計算するというものでした。

このヘッド・トゥ・ヘッド比較では、数値フィルタ操作の実行速度において、Polarsは2倍から5倍の速度でPandasを上回りました。ただし、Pandasは書く必要があるコードが少なく、文字列(カテゴリカル特徴)を扱う際にはやや遅くなります。

PandasとPolarsデータフレームをPyGWalkerで視覚化

PyGWalker (opens in a new tab)は、PandasとPolarsデータフレームから容易にデータ可視化を作成するのに役立つオープンソースのPythonライブラリです。

PyGWalker for Data visualization (opens in a new tab)

Pythonコーディングで複雑な処理を完了する必要はもうなく、簡単にデータをインポートし、変数をドラッグアンドドロップしてさまざまなデータ可視化を作成することができます。以下は、操作に関するクイックデモビデオです。


Jupyter NotebookでPyGWalkerを使用する方法は次のとおりです。

pip install pygwalker
import pygwalker as pyg
gwalker = pyg.walk(df)

また、Kaggle Notebook / Google Colabで試すこともできます。

Kaggle NotebookでPyGWalkerを実行する (opens in a new tab)Google ColabでPyGWalkerを実行する (opens in a new tab)PyGWalkerにGitHubで⭐️をつける (opens in a new tab)
Kaggle NotebookでPyGWalkerを実行する (opens in a new tab)Google ColabでPyGWalkerを実行する (opens in a new tab)PyGWalkerにGitHubで⭐️をつける (opens in a new tab)

PyGWalkerは、私たちのオープンソースコミュニティのサポートの下に構築されています。PyGWalkerのGitHubをチェックして、⭐️をつけてください!

PandasとPolarsに関するFAQ

この分析を通じて、PandasとPolarsの両方がそれぞれの強みと弱点を示しています。これら2つのライブラリをより理解するために、いくつかのよくある質問をまとめました。

  1. 質問: なぜPolarsをPandasの代わりに選ぶ必要があるのですか? 回答: 大規模なデータセットを扱う場合、数値データを扱う多くの操作において、Polarsはより高速な実行速度を誇るため、Pandasの代わりにPolarsを選択することがあります。ただし、Polarsは新しいライブラリであるため、Pandasに慣れ親しんでいる人にとっては学習曲線が必要になる場合があります。

  2. 質問: PandasがPolarsよりも優れた選択肢になる場面はありますか? 回答: はい。単純なクエリやコードの簡潔さが優先される場合、Pandasの方が良い選択肢になることがあります。加えて、Pandasは成熟したライブラリであり、ロバストなコミュニティサポートがあるため、複雑なデータ操作タスクのトラブルシューティングやアドバイスを求める際に有益です。

  3. 質問: PandasとPolarsはグループ化操作におけるヌル値の扱い方が異なりますか? 回答: Pandasはグループ化操作中に自動的にヌル値を除外しますが、Polarsは除外しません。これは、結果に影響を与える可能性があるため、ライブラリを選択する際にはこの違いに注意することが重要です。