概要
tqdm はプログレスバーを表示する Python ライブラリです。 プログレスバーを表示することで、長時間かかるタスクの進捗状況がどの程度完了したのかを視覚的に確認できます。
インストール
pip
コマンドでインストールできます。
基本的な使い方
for
でループするオブジェクトを tqdm()
でラップするだけで、簡単に使えます。
表示される情報は、デフォルトでは、<進捗率>|<プログレスバー>| <完了したイテレーション数>/<全体のイテレーション数> [<経過時刻><<推定残り時刻>, <イテレーション速度>]
となっています。
tqdm クラス
tqdm オブジェクトを作成する際のコンストラクタ引数で、プログレスバーの挙動を設定できます。 すべての引数の説明はドキュメントにありますが、よく使うものを一部紹介します。
プログレスバーの先頭、末尾に文字列を追加する
desc
でプログレスバーの先頭に文字列を追加できます。
postfix
でプログレスバーの末尾に文字を追加できます。
進捗状況に応じて、動的に変化する情報を表示したい場合は、set_postfix()
または set_postfix_str()
を使用します。
set_postfix()
に名前付き引数で値を渡すと、引数名=値
という形でプログレスバーの末尾に文字列を追加します。
例えば、set_postfix(a=1, b=2)
とすると、プログレスバーの末尾に a=1, b=2
と表示されます。
プログレスバーの末尾に文字列をそのまま追加したい場合は、代わりに set_postfix_str()
を使用します。
全体のイテレーション数を指定する
ジェネレーターなど len()
でオブジェクトの要素数が取得できない場合、全体のイテレーション数がわからないので、進捗率は表示できません。
全体のイテレーション数が予めわかっている場合、total
で指定することで、進捗率を表示できるようになります。
出力先を指定する
デフォルトでは、標準エラー出力にプログレスバーが出力されますが、file
で出力先を変更できます。
100%|██████████| 10/10 [00:00<00:00, 98922.26it/s]
プログレスバーの長さを指定する
ncols
でプログレスバーの長さを指定できます。
進捗率の単位を変更する
進捗率には、デフォルトでは、1秒あたりの反復回数が表示されますが、この単位を unit
で変更できます。
単位を調整する
unit_scale=True
の場合、イテレーション回数が大きい場合に SI 接頭辞をつけて、単位を自動で調整します。(例: 10000 → 10k)
プログレスバーを途中から始める
プログレスバーを途中から始めたい場合に、initial
で開始時点のイテレーション回数を指定します。
プログレスバーの書式を設定する
bar_format でプログレスバーの書式を変更できます。
- l_bar: プログレスバーの左側に表示する情報
- bar: プログレスバー
- r_bar: プログレスバーの右側に表示する情報
l_bar
、r_bar
の内容はさらに細かく調整できます。
- percentage: 進捗率
- desc:
desc
に指定した文字列 - postfix:
postfix
に指定した文字列
- n: 完了したイテレーション数
- total: 全体のイテレーション数
- n_fmt: 完了したイテレーション数 (フォーマット済み)
- total_fmt: 全体のイテレーション数 (フォーマット済み)
n_fmt
、total_fmt
は、unit_scale=True
が指定されている場合に、イテレーション回数が大きい場合に SI 接頭辞をつけて、単位を自動で調整します。(例: 10000 → 10k)
- elapsed: 経過時刻
- remaining: 推定残り時刻
- elapsed_s: 経過秒数
- remaining_s: 推定残り秒数
- rate: 単位あたりのイテレーション回数
- rate_noinv: 単位あたりのイテレーション回数
- rate_inv: 1イテレーションあたりの速度
- rate_fmt: 単位あたりのイテレーション回数 (フォーマット済み)
- rate_noinv_fmt: 1イテレーションあたりの速度 (フォーマット済み)
- rate_inv_fmt: 1イテレーションあたりの速度 (フォーマット済み)
- unit: イテレーション速度の単位
rate_fmt
、rate_noinv_fmt
、rate_inv_fmt
は、unit_scale=True
が指定されている場合に、イテレーション回数が大きい場合に SI 接頭辞をつけて、単位を自動で調整します。(例: 10000 → 10k)
enumerate() や range() を使う場合のヘルパー関数
enumerate()
を使う場合、tqdm(enumerate(iterable))
ではなく、enumerate(tqdm(iterable))
の順番で記述します。
また、代わりにヘルパー関数 tenumerate()
を使用することもできます。
range()
を使う場合、tqdm(range(n))
の代わりに、trange(n)
を使うことができます。
Jupyter Notebook で tqdm を使う
Jupyter Notebook で使用する場合は tqdm.tqdm
の代わりに tqdm.notebook.tqdm
を import して、使用します。
コメント