Contents
はじめに
Pythonにてcsvファイルを読み込んでデータ処理する場合の備忘録です。
データ処理するには主にpandas.dataframeかnumpy.ndarrayで扱うことがありますが、
kerasなど一部のライブラリではnumpy.ndarrayしか受け付けないものがあります。
numpy.ndarrayで扱うのであれば、csvファイル読み込みにnumpy.loadtxtを使うのがシンプルですが、
他の方法として、pandas.read_csvで読み込んだ後にnumpy.ndarrayに変換することもできます。
本記事では、csvファイルの読み込み時の速度おいて、
numpy.loadtxt か pandas.read_csv のどちらを使った方が速いのか検証します。
先に結果を言うと、
「pandas.read_csvで読み込んだ後にnumpy.ndarrayに変換」の方が速いです。
環境とテストデータ
- Windows 10 Home 64bit
- CPU Intel Core i5-8250U CPU@ 1.60GHz
- メモリ 8GB
- SSD 512GB
- python 3.6.5
テストデータは1000行1000列の乱数(0~1)で作成して使用します。
テストデータ作成のコード
import numpy as np
import pandas as pd
#乱数作成
testdata = np.random.rand(1000,1000) # 0〜1の乱数で 1000x1000 の行列を生成
df = pd.DataFrame(testdata) #dataframeに変換
df.to_csv('data.csv', index=False) #csvに保存
↓このようなCSVデータが作成されました。これをテストデータとします。
ちなみに、ファイルサイズは18 MB (19,273,791 バイト)です。
評価
csv読み込みコード
import time
import numpy as np
import pandas as pd
file = "data.csv"
#-------------------------
#numpyでcsv読み込み
#-------------------------
start = time.time()
data = np.loadtxt(file,delimiter=",")
process_time = time.time() - start
print('numpyでcsv読み込み時間:{:.3f}s'.format(process_time))
#-------------------------
#pandasでcsv読み込み後にndarray変換
#-------------------------
start = time.time()
df = pd.read_csv(file)
data = df.values
process_time = time.time() - start
print('pandasでcsv読み込み時間:{:.3f}s'.format(process_time))
実行結果
numpyでcsv読み込み時間:0.821s pandasでcsv読み込み時間:0.375s
pandasにてcsvを読み込む方がnumpyより2倍以上速い結果となりました。
まとめ
扱うデータ形式がpandas.dataframeかnumpy.ndarrayのどちらの場合でも、
pythonで速くcsvファイルを読み込むには、pandas.read_csvを使いましょう、とういうことでした。
メモ
csvファイルが数百MB以上の大きいサイズの場合は、pandas.read_csvではなく、daskライブラリを用いた方が速く読み込むことができます。
この検証は別記事で紹介しようと思います。