🐕

Rayシリーズ:NumPyやpandasデータをRay Dataで取り込む

に公開

今回はRay Dataを利用して、NumPyとpandasのデータを読み込む方法をまとめます。

早速試してみる

内容はこちらを参考にしています。

https://docs.ray.io/en/latest/data/loading-data.html#loading-data-from-other-libraries

環境構築

uvを利用して以下のように構築します。

uv init ray_data_numpy_pandas -p 3.12
cd ray_data_numpy_pandas
uv add "ray[data]" numpy pandas

NumPyからデータを読み込む

NumPyからデータを読むにはray.data.from_numpyを利用します。

from_numpy.py
import numpy as np
import ray

array = np.ones((3, 2, 2))
ds = ray.data.from_numpy(array)

print(ds)

(3, 2, 2)の形状で全てが1のテンソルを作り、それをRay Data形式に変換しています。こちらを実行すると以下のような結果になり、Ray Dataの形式に変換できていることが確認できます。

uv run from_numpy.py

# 結果
MaterializedDataset(
   num_blocks=1,
   num_rows=3,
   schema={data: ArrowTensorTypeV2(shape=(2, 2), dtype=double)}
)

pandasのDataFrameからデータを読み込む

次はpandasのDataFrameからデータを読み込みます。こちらの場合はray.data.from_pandas経由で読み込むことができます。

from_pandas.py
import pandas as pd
import ray

df = pd.DataFrame({
    "food": ["spam", "ham", "eggs"],
    "price": [9.34, 5.37, 0.94]
})
ds = ray.data.from_pandas(df)

print(ds)

こちらはfoodカラムとpriceカラムを持つDataFrameになっています。こちらも実行すると以下のようにMaterializeDataset形式になっていることが確認できました。また、スキーマとしてfoodpriceがありそれぞれのデータ形式も検出されていることが確認できます。

uv run from_pandas.py

# 結果
MaterializedDataset(
   num_blocks=1,
   num_rows=3,
   schema={food: object, price: float64}
)

まとめ

今回はRay DataでNumPyとpandasのデータを読み込ませる方法をみてみました。大規模なデータのやり取りもRayを利用すれば効率的に実行されるので、MLなどの大規模なワークロード向けのデータパイプライン構築にはぜひRay Dataを検討してみてください。

Discussion