こんにちは!薫です。
今回はPythonのPolarsライブラリについて、Pandasと比較をしながら解説します。
Polarsとは?
Pythonには、データ分析や処理に便利なライブラリが数多く存在します。
その中でも、Pandasは広く利用されており、高速で柔軟なデータ処理が可能となっています。
しかし、最近ではPandasに代わる高速なライブラリが注目されています。
その一つがPolarsです。
Polarsは、Rustで書かれたPython用のデータ処理ライブラリであり、Pandasに似たAPIを持っていますが、高速な処理が可能なのが特徴です。
本記事では、PolarsとPandasを比較しながら、Polarsの基本的な使い方について紹介していきます。
インストール方法
Polarsのインストールには、pipを使います。
以下のコマンドでインストールが可能です。
pip install polars
Polarsの使い方
では続いて、Polarsの基本的な使い方をサンプルコードとともに紹介していきます。
データの読み込み
Polarsでは、CSVやParquet、Arrowなどのフォーマットに対応しています。
以下のコードで、CSVファイルを読み込んでみましょう。
これで、CSVファイルの内容がDataFrame形式で読み込まれます。
import polars as pl
df = pl.read_csv('data.csv')
print(df)
データの加工
Pandas同様、Polarsでもデータの加工が可能です。
例えば、以下のコードで、dfのage列に1を加えてみましょう。
df['age'] += 1
print(df)
これで、age列の全ての値に1が加算されます。
また、Polarsでは、Pandasと同様にqueryメソッドを利用することで、条件を指定して行を選択することができます。
以下のコードでは、ageが30以上の行のみを選択しています。
df_filtered = df.query('age >= 30')
print(df_filtered)
データの結合
Pandas同様、Polarsでも複数のデータを結合することができます。
以下のコードでは、df1とdf2の内容をid列で結合しています。
import polars as pl
df1 = pl.DataFrame({
'id': [1, 2, 3],
'name': ['Alice', 'Bob', 'Charlie']
})
df2 = pl.DataFrame({
'id': [2, 3, 4],
'age': [25, 30, 35]
})
merged = df1.join(df2, on='id', how='inner')
print(merged)
データの集計
Polarsでも、Pandas同様にデータの集計が可能です。
以下のコードでは、dfのage列の平均値を算出しています。
mean_age = df['age'].mean()
print(mean_age)
データのグループ化
データのグループ化も、Pandas同様に可能です。
以下のコードでは、dfをgender列でグループ化して、age列の平均値を算出しています。
grouped = df.groupby('gender')['age'].mean()
print(grouped)
データのソート
データのソートも、Pandas同様に可能です。
以下のコードでは、dfをage列で降順にソートしています。
sorted_df = df.sort('age', reverse=True)
print(sorted_df)
メモリ使用量の削減
Polarsは、Pandasよりも高速に動作する代わりに、メモリ使用量が多くなる傾向があります。
しかし、PolarsではDataFrameの一部を選択するときに、元のデータをコピーするのではなく、ビューを作成することができます。
これにより、メモリ使用量を削減することができます。
以下のコードでは、dfの一部を選択してビューを作成しています。
view = df[df['age'] >= 30]
print(view)
パフォーマンスの比較
最後に、PolarsとPandasのパフォーマンスを比較してみましょう。
以下のコードでは、100万行のデータを処理する場合のPolarsとPandasの処理速度を比較しています。
import pandas as pd
import numpy as np
import time
# Generate data
n = 1000000
data = {'a': np.random.randint(0, 100, n),
'b': np.random.rand(n),
'c': np.random.choice(['x', 'y', 'z'], n)}
df = pd.DataFrame(data)
pl_df = pl.DataFrame(data)
# Time Pandas
start = time.time()
df = df.groupby('c')['a'].sum()
end = time.time()
print("Pandas: ", end - start)
# Time Polars
start = time.time()
pl_df = pl_df.groupby('c')['a'].sum()
end = time.time()
print("Polars: ", end - start)
結果は、以下のようになります。
Pandas: 0.05713844299316406
Polars: 0.014515161514282227
結果として、PolarsはPandasに比べて約4倍の速度で処理が完了していることがわかります。
まとめ
いかがでしたか?
本記事では、PolarsとPandasを比較しながらPolarsの基本的な使い方について解説しました。
Polarsは、Pandasと同様の機能を備えながらも高速に処理できるため、大量のデータを扱う場合には特に有用です。
また、PolarsはRustで実装されているため、Python以外の言語でも利用することができます。
ただしPolarsはまだ開発途中のライブラリであり、Pandasと比較して機能が不足している部分もあります。
そのため、使用する場合はデータに合わせて十分なテストを行い、慎重に検討する必要があります。
今後、Polarsの機能拡張や更なるパフォーマンスの改善が期待されています。
この記事が、皆様のお役に立ちましたら幸いです。
コメント