🐕
Rayシリーズ:NumPyやpandasデータをRay Dataで取り込む
今回はRay Dataを利用して、NumPyとpandasのデータを読み込む方法をまとめます。
早速試してみる
内容はこちらを参考にしています。
環境構築
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形式になっていることが確認できました。また、スキーマとしてfoodとpriceがありそれぞれのデータ形式も検出されていることが確認できます。
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