pythonでデータ分析を行うときにはcsvファイルからデータを読み込むことが多いです。
しかし、csvファイルのサイズが大きくなってくると、読み込み速度が遅くなります。
csvファイルの読み込み速度を高速化する2種類の方法について紹介します。
pickleファイル形式に変換する
csvファイルを読込み速度の速いpickleファイル形式に一度変換して利用する方法です。

import pandas as pd
name = '任意のファイル名'
df=pd.read_csv(name +'.csv') # 一度csvファイルを読込み
df.to_pickle(name + '.pickle') # pickle ファイルに変換
df1 = pd.read_pickle(name + '.pickle') # pickleファイルの読み込み
手元のデータで比較したところ、pickle形式で読込むことでcsvよりも6倍程度読み込みが高速化されました。
読込み時間の比較
csvファイルをread_csvで読込:6.4s
pickleファイルをread_pickleで読込:1.0s
datatableパッケージを利用する
pandasでなく、datatableというパッケージを利用するパターンもあります。
pipでinstallします。
pip install datatable
.fread()で読み込み可能です。
.to_pandas()でpandas形式に変換も可能です。
import datatable as dt
name = '任意のファイル名'
df = dt.fread(name +'.csv')
df1 = df.to_pandas()
読込み時間は以下の通りで、datatableを用いると10倍ほど高速化されます。
読込み時間の比較
csvファイルをread_csvで読込:6.4s
pickleファイルをread_pickleで読込:1.0s
csvファイルをfreadで読込:0.6s
pickleとdatatableの使い分け
pickle形式を用いる場合には、最初のpickleデータへの変換に時間がかかります。
一方で、datatableもpandas形式に変換する場合時間がかかります。
データ変換時間の比較
csvをpickleに変換:5.6s
datatable形式からpandas形式に変換:2s
しかし、pickleは一度データを変換してしまえば、2度目から変換の時間がかかりません。
従って、pickleとdatatableの使い分けは以下のような形が良いのではないかと考えます。
pickle : データベース(csv)の頻繁な更新がない場合
datatable : データベース(csv)が頻繁に更新される場合
コメント