Python で Excel ファイルと csv ファイルを読み込む
こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。
この記事の目次
背景・目的
Python で分析をするにあたって、データの読み込みは避けて通れません。
データの読み込みはやはり速いに越したことはありません。
そこで、 pandas と dask の使い方と読み込み速度を比べてみました。
動作環境
・Windows 7
・winpython 64bit 3.4.4
入力データ
読み込むデータは Excel で作成しました。
Excel の 10,48,576 行を全て使いました。
Data1 〜 Data4 は乱数で Data5 は Data1 〜 Data4 の合計です。
また、 Excel から csv 出力したファイルも作成しました。
プログラム
ソースコード
###############################################################################
# Excel ファイルと csv ファイルを読み込み時間を計測するプログラム
###############################################################################
# インポート
from time import time
import pandas as pd
import dask.dataframe as dd
# 時間計測関数
def calc_time(func):
start = time()
r = func()
return{'value':r, 'time':time()-start}
# 表題行 + 1,048,575 行のデータ
file_dir = 'C:\\Users\\UserName\\Desktop\\'
file_name = 'driven_test'
csv = calc_time(lambda:pd.read_csv(file_dir + file_name + '.csv'))
print( 'pd.read_csv で読込にかかった時間 : ' + str(csv['time']) + ' sec')
xls = calc_time(lambda:pd.ExcelFile(file_dir + file_name + '.xlsx', encoding='utf-8'))
print( 'pd.ExcelFile で読込にかかった時間 : ' + str(xls['time']) + ' sec')
csv = calc_time(lambda:dd.read_csv(file_dir + file_name + '.csv', header=0))
print( 'dd.read_csv で読込にかかった時間 : ' + str(csv['time']) + ' sec')
結果
3 回分の実行結果を表示します。
100万行程度であれば、 csv ファイルは pandas でも実用に耐えると思います。
Excel をそのまま読み込むのはやめたほうがいいですね。
dask が噂通りものすごく速いという結果になりました。
1,000 万行、 1 億行といったデータを扱いたいなら dask ですね!
In [1]: runfile('C:/WinPython-64bit-3.4.4.6Qt5/settings/.spyder-py3/split_file0.0.py', wdir='C:/WinPython-64bit-3.4.4.6Qt5/settings/.spyder-py3')
pd.read_csv で読込にかかった時間 : 1.8201038837432861 sec
pd.ExcelFile で読込にかかった時間 : 101.72981905937195 sec
dd.read_csv で読込にかかった時間 : 0.010999917984008789 sec
In [2]: runfile('C:/WinPython-64bit-3.4.4.6Qt5/settings/.spyder-py3/split_file0.0.py', wdir='C:/WinPython-64bit-3.4.4.6Qt5/settings/.spyder-py3')
pd.read_csv で読込にかかった時間 : 1.755100965499878 sec
pd.ExcelFile で読込にかかった時間 : 102.36885499954224 sec
dd.read_csv で読込にかかった時間 : 0.009999990463256836 sec
In [3]: runfile('C:/WinPython-64bit-3.4.4.6Qt5/settings/.spyder-py3/split_file0.0.py', wdir='C:/WinPython-64bit-3.4.4.6Qt5/settings/.spyder-py3')
pd.read_csv で読込にかかった時間 : 1.801103115081787 sec
pd.ExcelFile で読込にかかった時間 : 100.0787239074707 sec
dd.read_csv で読込にかかった時間 : 0.009999990463256836 sec
コメント
dask の速さは異常ですね。
読み込みがこれだけ速いと、処理は値の計算とグラフ出力の時間で決まる様なものですね。
グラフの出力の高速化について調べてみたくなりました。
以上