はじめに
こんにちは。
現在東京大学で主にシステムデザインを学んでいる学生です。
授業で少し大きめのデータを扱った際に普段より長い処理時間に苦労したので、その時に試したちょっとした高速化の工夫をご紹介したいと思います。
用意したDataFrame
名前:Data
長さ:10**6
カラム:ITEM, NUM (適当に作った為、特に意味の無いデータです)
>>> Data.head()
ITEM NUM
0 02134 1
1 04137 1
2 03900 1
3 00792 1
4 03678 1
>>> print(len(Data))
1000000
メソッドごとの処理時間の比較
ただデータにアクセスするだけの処理を行い、掛かった時間を比較しています。
1. メソッドを用いない場合(カラム名、インデックスで直接指定)
t = time.time()
for i in range(len(Data)):
Data['NUM'][i]
print(time.time()-t)
# 54.22648358345032
2. .iloc
を用いた場合
t = time.time()
for i in range(len(Data)):
Data.iloc[i,1]
print(time.time()-t)
# 16.67137122154236
3. .iat
を用いた場合
t = time.time()
for i in range(len(Data)):
Data.iat[i,1]
print(time.time()-t)
# 10.457467794418335
結果
それぞれの処理時間をまとめると以下のようになりました。
メソッド | データ数 | 処理時間(s) |
---|---|---|
無 | 10^6 | 54.23 |
iloc | 10^6 | 16.67 |
iat | 10^6 | 10.46 |
感想
10^6 程の大きさのデータに対してもこれだけの差が出るとは思っていなかった為、少々驚きました。
大きめのデータを扱う際にはPythonのライブラリのメソッドを積極的に活用していきたいと思います。