本記事では、pythonで進捗表示を行うライブラリであるtqdm
の使い方を詳しく解説します。時間のかかる処理を行う際にプログレスバーがあると、作業の進行度合いをひと目で把握できて便利です。この記事を読めば、tqdm
の基本的な使い方からカスタマイズ方法、応用事例まで一通りマスターできます。使い方を説明します。
tqdmとは
tqdm
は、非常にシンプルな構文でプログレスバーを表示できるpythonのライブラリです。イテラブルオブジェクトをラップするだけで進捗バーが出力され、長時間の反復処理やバッチ処理の進行状況を可視化できます。
- 公式GitHub: https://github.com/tqdm/tqdm
基本的な使い方
インストール
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)
まとめ
- 簡単なループでの利用:
tqdm(range(n))
のようにラップするだけで進捗バーを表示。 - カスタマイズ性:
desc
,unit
,ncols
などで自由に調整可能。 - 応用力: ネストされたループや
pandas
との統合も可能。
tqdmはほんの数行のコードで使い始められるのに加え、きめ細やかなカスタマイズができる便利なライブラリです。大規模データの前処理やスクレイピングなど、pythonで長時間の処理を走らせる場面では、ぜひtqdm
のプログレスバーを活用してみてください。