「Polarsデータ操作ライブラリのはじめ方」

Introduction to the Polars Data Manipulation Library

イントロダクション

皆さんご存知の通り、PandasはPythonのデータ操作ライブラリです。しかし、いくつかの欠点があります。この記事では、Rustプログラミング言語で書かれたPythonのもう一つの強力なデータ操作ライブラリについて学びます。Rustで書かれているにもかかわらず、Pythonプログラマー向けの追加パッケージを提供しています。これはPandasと似ているように、Pythonを使ってPolarsを始める最も簡単な方法です。

学習目標

このチュートリアルでは、以下のことを学びます:

  • Polarsデータ操作ライブラリの導入
  • Polarsを使用したデータの探索
  • Pandas vs Polarsの速度比較
  • データ操作関数
  • Polarsを使用した遅延評価

この記事はData Science Blogathonの一部として公開されました。

Polarsの特徴

  • Pandasライブラリよりも高速です。
  • 強力な式構文を持っています。
  • 遅延評価をサポートしています。
  • メモリ効率も良いです。
  • 利用可能なRAMよりも大きいデータセットも扱うことができます。

Polarsには、イーガーAPIとレイジーAPIの2つの異なるAPIがあります。イーガー実行はPandasと似ており、コードがエンカウントされるとすぐに実行され、結果がすぐに返されます。一方、レイジー実行は開発が必要な場合まで実行されません。レイジー実行は不要なコードの実行を避けるため、より効率的です。レイジー実行は不要なコードの実行を避けるため、より効率的です。

アプリケーション/ユースケース

このライブラリのいくつかのアプリケーションを以下に示します:

  • データの視覚化:このライブラリは、PlottersなどのRustの視覚化ライブラリと統合されており、データからの洞察を伝えるためのインタラクティブなダッシュボードや美しい視覚化を作成するために使用することができます。
  • データ処理:並列処理と遅延評価のサポートにより、Polarsは大規模なデータセットを効果的に処理することができます。クリーニング、変換、データの操作など、さまざまなデータ前処理タスクも実行できます。
  • データ分析:Polarsを使用すると、大規模なデータセットを容易に分析して有意義な洞察を得ることができます。計算や統計のためのさまざまな関数が提供されています。Polarsを使用して時系列分析も行うことができます。

これら以外にも、データの結合やマージ、強力な式構文を使用したデータのフィルタリングやクエリ、統計の分析と集計など、多くの他のアプリケーションがあります。強力な機能により、このライブラリはビジネス、電子商取引、ファイナンス、医療、教育、政府など、さまざまなドメインで使用することができます。一つの例として、病院からリアルタイムのデータを収集し、患者の健康状態を分析し、特定の病気に苦しむ患者の割合などの可視化を生成することが挙げられます。

インストール

ライブラリを使用する前に、インストールする必要があります。Polarsライブラリは次のようにpipコマンドを使用してインストールできます:

pip install polars

インストールされているかどうかを確認するために、以下のコマンドを実行してください

import polars as pl
print(pl.__version__)

0.17.3

新しいデータフレームの作成

Polarsライブラリを使用する前に、インポートする必要があります。これはPandasでデータフレームを作成するのと似ています。

import polars as pl

# 新しいデータフレームの作成

df = pl.DataFrame(
     {
    'name': ['Alice', 'Bob', 'Charlie','John','Tim'],
    'age': [25, 30, 35,27,39],
    'city': ['New York', 'London', 'Paris','UAE','India']
     }
)
df

データセットの読み込み

Polarsライブラリは、複数のソースからデータを読み込むためのさまざまなメソッドを提供しています。CSVファイルを読み込む例を見てみましょう。

df=pl.read_csv('/content/sample_data/california_housing_test.csv')
df

PandasとPolarsの読み込み時間の比較

ポラーズライブラリがどれだけ速いかを知るために、両ライブラリの読み込み時間を比較しましょう。そのために、Pythonの「time」モジュールを使用します。たとえば、上記でロードしたCSVファイルをPandasとPolarsで読み込みます。

import time
import pandas as pd
import polars as pl

# Pandasで読み込み時間を計測
start_time = time.time()
pandas_df = pd.read_csv('/content/sample_data/california_housing_test.csv')
pandas_read_time = time.time() - start_time

# Polarsで読み込み時間を計測
start_time = time.time()
polars_df = pl.read_csv('/content/sample_data/california_housing_test.csv')
polars_read_time = time.time() - start_time

print("Pandasの読み込み時間:", pandas_read_time)
print("Polarsの読み込み時間:", polars_read_time)

Pandasの読み込み時間: 0.014296293258666992

Polarsの読み込み時間: 0.002387523651123047

上記の出力からわかるように、Polarsライブラリの読み込み時間はPandasライブラリよりも短いことが明らかです。コードで見るように、読み込み時間は開始時間と読み込み操作後の時間の差を計算することで得られます。

PandasとPolarsの両方を使用して、同じデータフレームでのシンプルなフィルタリング操作の別の例を見てみましょう。

start_time = time.time()
res1 = pandas_df[pandas_df['total_rooms']<20]['population'].mean()
pandas_exec_time = time.time() - start_time

# Polarsで読み込み時間を計測
start_time = time.time()
res2 = polars_df.filter(pl.col('total_rooms')<20).select(pl.col('population').mean())
polars_exec_time = time.time() - start_time

print("Pandasの実行時間:", pandas_exec_time)
print("Polarsの実行時間:", polars_exec_time)

出力:

Pandasの実行時間: 0.0010499954223632812
Polarsの実行時間: 0.0007154941558837891

データの探索

「describe」メソッドを使用して、データの要約統計情報(件数、平均、最小値、最大値など)を表示できます。

df.describe()

shapeメソッドは、データフレームの形状(総行数と総列数)を返します。

print(df.shape)

(3000, 9)

head()関数は、データセットの最初の5行をデフォルトで返します。

df.head()

sample()関数は、データの印象を与えます。データセットからn個のランダムな行を取得できます。ここでは、データセットから3つのランダムな行を取得しています。

df.sample(3)

同様に、rowsは行の詳細、columnsは列の詳細を返します。

df.rows

df.columns

データの選択とフィルタリング

select関数は、列に選択式を適用します。

例:

df.select('latitude')

複数の列を選択する

df.select('longitude','latitude')

df.select(pl.sum('median_house_value'),
          pl.col("latitude").sort(),
    )

同様に、フィルタ関数を使用して特定の条件に基づいて行をフィルタリングすることもできます。

例:

df.filter(pl.col("total_bedrooms")==200)

df.filter(pl.col("total_bedrooms").is_between(200,500))

Groupby / Aggregation

「groupby」関数を使用して特定の列に基づいてデータをグループ化することができます。

例:

df.groupby(by='housing_median_age').
agg(pl.col('median_house_value').mean().
alias('avg_house_value'))

ここでは、データを「housing_median_age」列でグループ化し、各グループの平均「median_house_value」を計算し、「avg_house_value」という名前の列を作成しています。

2つのデータフレームの結合または連結

Polarsが提供するさまざまな関数を使用して、2つのデータフレームを結合または連結することができます。

結合: 2つのデータフレームに対して内部結合を行う例を見てみましょう。内部結合では、結合キーが存在する行のみで構成される結果のデータフレームが生成されます。

例1:

import polars as pl


# 最初のデータフレームを作成する
df1 = pl.DataFrame({
    'id': [1, 2, 3, 4],
    'emp_name': ['John', 'Bob', 'Khan', 'Mary']
})


# 2番目のデータフレームを作成する
df2 = pl.DataFrame({
    'id': [2, 4, 5,7],
    'emp_age': [35, 20, 25,32]
})

df3=df1.join(df2, on="id")
df3

上記の例では、異なる2つのデータフレームに対して結合操作を行い、結合キーを「id」列として指定しています。他のタイプの結合操作には、左結合、外部結合、クロス結合などがあります。

連結: 

2つのデータフレームの連結を行うには、Polarsのconcat()関数を使用します。

import polars as pl


# 最初のデータフレームを作成する
df1 = pl.DataFrame({
    'id': [1, 2, 3, 4],
    'name': ['John', 'Bob', 'Khan', 'Mary']
})


# 2番目のデータフレームを作成する
df2 = pl.DataFrame({
    'id': [2, 4, 5,7],
    'name': ['Anny', 'Lily', 'Sana','Jim']
})

df3=pl.concat([df2,df1] )
df3

‘concat()’関数は、データフレームを垂直に連結し、’df2’の行の後に’df1’の行が続く結果のデータフレームを生成します。ただし、2つのデータフレームに対して連結操作を行う際には、列名とデータ型が一致している必要があります。

遅延評価

Polarsライブラリを使用する主な利点は、遅延実行をサポートしていることです。計算を必要な時まで延期することができます。これにより、不要な操作を実行せず、必要な操作のみを実行できます。以下に例を示します:

lazy_plan = df.lazy().
filter(pl.col('housing_median_age') > 2).
select(pl.col('median_house_value') * 2)
result = lazy_plan.collect()

print(result)

上記の例では、lazy()メソッドを使用して遅延計算プランを定義しています。この計算プランでは、’housing_median_age’の値が2より大きい場合にフィルタリングし、その後に’median_house_value’の値を2倍にして選択します。さらに、このプランを実行するために’collect’メソッドを使用し、結果をresult変数に格納しています。

結論

PythonのPolarsデータ操作ライブラリは、大規模なデータセットに対して効率的で強力なツールキットです。PolarsライブラリはPythonをプログラミング言語として完全に活用し、NumPy、Pandas、Matplotlibなどの広範なライブラリと効率的に連携します。この相互運用性により、さまざまな分野で簡素なデータの組み合わせと検査が可能となり、多くの用途に適応可能なリソースが生まれます。データのフィルタリング、集計、グループ化、マージなどのライブラリのコア機能により、ユーザーはスケールでデータを処理し、価値ある洞察を生成する能力を持つようになります。

キーポイント

  • Polarsデータ操作ライブラリは、データ処理において信頼性のある多目的なソリューションです。
  • pip install polarsコマンドを使用してインストールします。
  • データフレームの作成方法。
  • 「select」関数を使用して選択操作を実行し、「filter」関数を使用して特定の条件に基づいてデータをフィルタリングする方法を学びました。
  • 「join」と「concat」を使用して2つのデータフレームをマージする方法も学びました。
  • 「lazy」関数を使用して遅延プランを計算する方法も理解しました。

よくある質問

本記事で表示されているメディアはAnalytics Vidhyaの所有ではなく、著者の裁量で使用されています。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more