【tqdm】Pythonに進捗バーを簡単に導入する方法

Python

本記事では、pythonで進捗表示を行うライブラリであるtqdmの使い方を詳しく解説します。時間のかかる処理を行う際にプログレスバーがあると、作業の進行度合いをひと目で把握できて便利です。この記事を読めば、tqdmの基本的な使い方からカスタマイズ方法、応用事例まで一通りマスターできます。使い方を説明します。

tqdmとは

tqdmは、非常にシンプルな構文でプログレスバーを表示できるpythonのライブラリです。イテラブルオブジェクトをラップするだけで進捗バーが出力され、長時間の反復処理やバッチ処理の進行状況を可視化できます。

基本的な使い方

インストール

pip install tqdm

使いかた

tqdmはイテラブルをラップするだけでプログレスバーを表示してくれるので、for文で簡単に利用できます。

for文の詳しい説明はこちら

from tqdm import tqdm
import time  # 処理の時間をシミュレートするために使用

# tqdmで進捗状況を表示するループ
for i in tqdm(range(100)):
    # 処理のシミュレーション (ここでは0.001秒のスリープ)
    time.sleep(0.001)

"""    
プログレスバーの表示
48%|███████████████████████████▏                             | 4775/10000 [00:06<00:06, 789.34it/s]
"""

# strの配列を渡す例
text = ""
for char in tqdm(["a", "b", "c", "d"]):
    sleep(0.25)
    text = text + char

また、tqdm(range(i))trange(i)で代用できます。

from tqdm import trange

for i in trange(50):
    sleep(0.01)
    
# 以下と同じ
for i in tqdm(range(50)):
    sleep(0.01)

表示をカスタマイズ

以下の引数でプログレスバーの表示を変えることができます。(以下の引数はすべてOptionalです。)

desc: str

説明のテキストをバーの左端に表示できます。

for i in tqdm(range(100), desc="progress bar sample", ncols=100):
    time.sleep(0.001)
   
"""
progress bar sample: 100%|███████████████████████████████████████| 100/100 [00:00<00:00, 793.81it/s]
"""

unit: str

ループの単位を変更します。デフォルトはitですが、処理の内容に合わせてstepなど自由に指定できます。

for i in tqdm(range(100), unit="step"):
    time.sleep(0.001)
    
"""
右端にstep/sが表示されている
100%|██████████████████████████████████████████████████████████| 100/100 [00:00<00:00, 788.01step/s]
"""

ncols: int

プログレスバーの全体的な幅を調整します。デフォルトでは実行環境(ターミナルなど)の幅に合わせます。

for i in tqdm(range(100), ncols=50):
    time.sleep(0.001)

"""
ncols=50の例
100%|██████████| 100/100 [00:00<00:00, 792.32it/s]
"""

for i in tqdm(range(100), ncols=100):
    time.sleep(0.001)

"""
ncols=100の例
100%|████████████████████████████████████████████████████████████| 100/100 [00:00<00:00, 793.27it/s]
"""

応用例

ネストされたループ

tqdmはネストをサポートしているため、複数のループを同時に可視化することができます。leave=Falseを指定すると、内側のループ完了後にバーの表示を消去します。

for outer in tqdm(range(3), desc="Outer loop"):
    for inner in tqdm(range(5), desc="Inner loop", leave=False):
        time.sleep(0.2)

pandasとの統合

データ処理ライブラリであるpandasと統合可能です。

import pandas as pd
from tqdm import tqdm

# tqdm.pandas()を呼び出して統合を有効化
tqdm.pandas(desc="Pandas progress")

# サンプルデータ作成
data = pd.DataFrame({"numbers": range(100)})

# DataFrame.applyで進行状況を可視化。
# ここでは、applyの代わりにprogress_applyが使えるようになっている。
data["squared"] = data["numbers"].progress_apply(lambda x: x ** 2)

まとめ

  1. 簡単なループでの利用: tqdm(range(n))のようにラップするだけで進捗バーを表示。
  2. カスタマイズ性: desc, unit, ncolsなどで自由に調整可能。
  3. 応用力: ネストされたループやpandasとの統合も可能。

tqdmはほんの数行のコードで使い始められるのに加え、きめ細やかなカスタマイズができる便利なライブラリです。大規模データの前処理やスクレイピングなど、pythonで長時間の処理を走らせる場面では、ぜひtqdmのプログレスバーを活用してみてください。

タイトルとURLをコピーしました