schedule2021-02-16

【Python】tqdmでforの進捗状況を表示する

printでずらっと出力していた進捗状況をプログレスバーで表示する方法を知ったのでメモします。

tqdmで進捗を可視化する

このモジュールを使うと▼のようなプログレスバーがforの進捗に応じて表示できます。 利用方法はtqdmをインポートして、配列などイテレータをtqdm(iterable)とするだけでOKです。

!pip install tqdm

from tqdm import tqdm
for i in tqdm(range(616435)):
    # 処理
出力
76%|████████████████████████        | 7568/10000 [00:33<00:10, 229.00it/s]

またコマンドとしても利用出来ます。 ▼のようにパイプラインで利用する方法もREADMEに載ってます。

$ seq 9999999 | tqdm --bytes | wc -l
75.2MB [00:00, 217MB/s]
9999999

$ tar -zcf - docs/ | tqdm --bytes --total `du -sb docs/ | cut -f1` \
    > backup.tgz
 32%|██████████▍                      | 8.89G/27.9G [00:42<01:31, 223MB/s]

▼アニメーション image

利用例①

インストール

$ pip install tqdm

# Google Colaboratory
!pip install tqdm

配列をtqdm()に入れるだけでプログレスバーを表示できる。

from tqdm import tqdm
from time import sleep

text = ""
for char in tqdm(["a", "b", "c", "d"]):
    sleep(0.25)
    text = text + char
出力
100%|██████████| 4/4 [00:01<00:00,  3.97it/s]

▼インデックスを使いたい時。

array = ["a", "b", "c", "d"]
for i in tqdm(range(len(array))):
  some_function(array[i])

利用例②

こちらの記事の一部の処理の時間が長くて、いつ終わるか不安だったのでtqdmで進捗を確認できるようにした。 captionsが文字列のリストになっていて順次文章ベクトルに変換している。

インポートとイテレータをtqdm()に入れるだけで使える。コメントした箇所が変更した部分。

import numpy as np
import spacy
import pkg_resources, imp
from tqdm import tqdm # 追加

imp.reload(pkg_resources)

nlp = spacy.load("ja_ginza")

vectors = []
# for caption in captions:
for caption in tqdm(captions): # tqdmを使ってループする
  doc = nlp(caption, disable=['ner']) 
  vectors.append(doc.vector)

del nlp
出力
87%|████████▋ | 538893/616435 [56:20<07:39, 168.71it/s]