u++の備忘録

pd.read_csv()が高速化するmodin.pandas

はじめに

Twitterで見かけて、全く知らなかったので試してみました。


試してみた

インストール

GitHubに書いてある通り、pipで入れます。

pip install modin

自分の環境では「setproctitleがない」と警告が出たので、入れました。

pypi.org

anaconda.org

ライブラリの読み込み

普段は「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."

おわりに

本記事では、pd.read_csv()が高速化するmodin.pandasを試しました。

実装はGitHubで公開しました。

github.com