Richでプログレスバーをととのう

tqdm

ニューラルネットワークの学習で進捗率をプログレスバーで表示することがある
電子の海での定番は tqdmをだと思われる

GitHub - tqdm/tqdm: :zap: A Fast, Extensible Progress Bar for Python and CLI
:zap: A Fast, Extensible Progress Bar for Python and CLI - GitHub - tqdm/tqdm: :zap: A Fast, Extensible Progress Bar for Python and CLI

簡単な使用例は

from tqdm import tqdm
import time

for i in tqdm(range(100)):
    time.sleep(1)
#100%|██████████| 100/100 [01:40<00:00,  1.00s/it]

update

update()を使うと自分で進捗率を設定できる

from tqdm import tqdm
import time

bar = tqdm(total = 1000)
for i in range(100):
    bar.update(10)
    time.sleep(1)
#100%|██████████| 1000/1000 [01:39<00:00,  9.96it/s]

説明文と状態

set_description()で説明をつけられる
機械学習などでは学習中のlossの値などを見たい, そういうときにはset_postfixset_postfix_strが便利
set_postfixdictを入力として

from tqdm import tqdm
import time

bar = tqdm(total = 10)
bar.set_description('training')
for i in range(10):
    bar.set_postfix(loss=i*0.1, accuracy=i+10)
    bar.update(1)
    time.sleep(1)
#training: 100%|█████████| 10/10 [00:10<00:00,  1.00s/it, accuracy=19, loss=0.9]

とうまい具合に見たい情報を表示してくれる

tqdmは簡単にプログレスバーをいい感じに出してくれてとれも便利なのだが, 使っているといくるか不満がでてくる

  • 複数のプログレスバーの扱い
  • 途中で時間のカウントを止めたり復帰したり
  • 色とか
    これらの不満点は機械学習の学習をしていると出てくる, 例えばtrainとvalidでバーを分けたい場合は上の不満点はもろにくらう

Rich

GitHub - Textualize/rich: Rich is a Python library for rich text and beautiful formatting in the terminal.
Rich is a Python library for rich text and beautiful formatting in the terminal. - GitHub - Textualize/rich: Rich is a Python library for rich text and beautiful formatting in the terminal.

Richは出力等をリッチにしてくれるライブラリ, たとえばテーブルを簡単につくれたり絵文字を出したり, マークダウンを出してくれたり...
できることが多すぎて自分でもすべての機能は理解できていない
Richでは, プログレスバーもサポートしていて, かなり直感的にきれいなプログレスバーを扱える

Richのプログレスバー

Progress Display — Rich 13.5.2 documentation

基本的な使い方はシンプルで

import time
from rich.progress import track

for i in track(range(20), description="Processing..."):
    time.sleep(1)  # Simulate work being done

これで幸せになれます

Richはプログレスバー以外にも様々な機能があり非常に有能です。
みなさんのpythonライフにサチアレ