Pickleファイルの読み込み

サイズの大きなCSVをそのまま読み込むと4分とか時間がかかって困ることがあったので、pickleに変換保存して以降はそれを読み込むことで早くなった。pickleとはデータフレームに限らずクラスなどオブジェクトであればなんでもpickleとして保存できるみたい。

詳しいことはわからないけど、読み込むのは早くなる一方でファイルが壊れると直しようがないみたい。大事なデータはCSVでも持っておいた方がよさそう。あと、pickleだとファイルサイズが大きくなるみたい。

参考サイト

csvをpickleで保存して読み取りを速くする - Qiita

やってみた

Ubiquant Market Predictionのデータ読み込みについてやってみた。データ数は以下の通り300万ほど。

train.shape

(3141410, 304)

CSVをそのまま読み込むと7分かかった。

%%time

path = '../input/ubiquant-market-prediction/train.csv'
basecols = ['row_id', 'time_id', 'investment_id', 'target']
features = [f'f_{i}' for i in range(300)]

dtypes = {
    'row_id': 'str',
    'time_id': 'uint16',
    'investment_id': 'uint16',
    'target': 'float32',
}
for col in features:
    dtypes[col] = 'float32'

train = pd.read_csv(
    path,
    usecols= basecols+features,
    dtype=dtypes
)

CPU times: user 4min 20s, sys: 17.8 s, total: 4min 38s
Wall time: 7min 9s

pickleで保存してから読み込むと1分もかからず。これはこっちのがよいわ。

%%time
train_pkl = pd.read_pickle("./train.pkl")

CPU times: user 1.77 s, sys: 5.79 s, total: 7.56 s
Wall time: 43.7 s