はじめに
Twitterで見かけて、全く知らなかったので試してみました。
pandasのimportを置き換えるだけで、並列処理にしてくれる、modinプロジェクト(pandas on ray)
— 薺(なずな) (@Nazuna715) January 19, 2019
前よりはちゃんと動くようになった気がするけど、謎エラーで死ぬこともあるのでなかなか移行はできない。
試してみた
ライブラリの読み込み
普段は「import pandas as pd」としている部分で、次のように宣言するだけです。
import modin.pandas as pd
後は、いつものように「pd.read_csv()」などを使うことが可能です。
実験
比較的サイズの大きい模擬データを用意しました。420万行×256列の乱数データです。
import pandas as pandas import numpy as np frame_data = np.random.randint(0, 100, size=(2**22, 2**8)) df = pandas.DataFrame(frame_data) df.to_csv("df.csv") df.shape
(4194304, 256)
csv形式で保存し、以後はこのファイルの読み込み速度を調べていきます。
pandas
ここでは、違いを明示するため、意図的に通常のpandasを「pandas」として宣言します。
import pandas as pandas
%%time
df_pd = pandas.read_csv("df.csv")
CPU times: user 1min 45s, sys: 36.5 s, total: 2min 22s Wall time: 2min 40s
modin.pandas
次いで、modin.pandasです。2倍程度、読み込みが速くなっています。
import modin.pandas as pd
%%time
df_modin = pd.read_csv("df.csv")
CPU times: user 414 ms, sys: 199 ms, total: 613 ms Wall time: 1min 15s
未対応機能も
まだまだ並列化が未対応な機能もあるようで、例えば圧縮されたファイルを読み込んだ場合は警告が出ました。
df_compression = pd.read_csv("df.csv.zip")
/Users/username/.pyenv/versions/anaconda3-5.0.0/lib/python3.6/site-packages/modin/pandas/io.py:348: UserWarning: Compression detected. Defaulting to Pandas implementation. "Compression detected. Defaulting to Pandas implementation."