Photoruction工事中!

Photoructionの開発ブログです!

【tqdm】Pythonでコードの進捗を可視化!

こんにちは、エンジニアとして株式会社Photoructionでアルバイト中の伊藤純平です!

秋も深まり、「学びの秋」とも言われるこの時期は学びを深める絶好のチャンスかもしれません。今回は、Python開発で役立つプログレスバーのライブラリ、tqdmを詳しくご紹介します。

私のチームではPDFを扱うことが多く、PDFの分析や可視化などにおいて一つの処理が長くなってしまいます。コードがいつ実行し終わるのか、わからないと不安になりますよね。。。そんなときに便利なのがtqdmです。このライブラリを使えば、進捗を簡単に確認できます。

この記事では、tqdmの基本から便利な使い方までを解説します。機械学習や統計など一つの処理に時間がかかるコードが必要なプロジェクトに取り組んでいる方、またこれから取り組む方も、ぜひお読みください!

tqdmとは

概要

tqdmアラビア語で"進捗"を意味する"taqaddum"から来ています)は、Pythonで使える簡単で拡張性のあるプログレスバーのライブラリです。Pythonファイルだけでなく、Jupyter Notebookやgoogle colabでの利用も可能です。また、tqdm.autoというモジュールを使えば、実行環境に合わせて最適なプログレスバーが自動で選択されます。

下準備

はじめに、tqdmをインストールしておきます。以下のコマンドでtqdmをインストールできます。

pip install tqdm

基本的な使い方

基本的にはforループにtqdm関数を適用するだけで、プログレスバーが表示されます。

さらにtqdm.autoをインポートすると、コードが動作する環境に応じて適切なプログレスバーが自動で表示されるため、手動で環境を指定する必要がありません。

# tqdmライブラリをインポート
from tqdm.auto import tqdm
import time

# tqdm関数でプログレスバーを表示
for i in tqdm(range(100)):
        # この部分に実際の処理が入る
    time.sleep(0.1)

プログレスバー

このコードでは、0から99までのループを行い、各ステップで0.1秒待機します。この間、進捗バーが表示されます。進捗バーは以下のように読むことができます。

  • 72**%**: 現在の進捗をパーセンテージで表示します。
  • ██████████████: 完了した進捗を表すバーです。
  • 72/100: 処理が何回完了したかと、全体で何回の処理があるかを表示します。(画像では: 72回完了、全体は100 回)
  • 00:07<00:02: 経過時間と推定残り時間を表示します。(画像では: 経過7秒、残り**2**秒)
  • 9**.88s/it**: 1ループ処理にかかる平均時間を表示します。

様々な使い方

ネストされたループ

tqdmはネストされたループでも使えます。以下の例では、外側と内側の2つのループがあります。descオプションを使って、各プログレスバーに説明文('外側のループ''内側のループ')を追加しています。

# tqdmライブラリをインポート
from tqdm.auto import tqdm
import time

# descオプションで説明文を設定。
for i in tqdm(range(3), desc='外側のループ'):
    # descオプションで説明文を設定。
    for j in tqdm(range(3), desc=' 内側のループ', leave=False):
                # この部分に実際の処理が入る
        time.sleep(0.5)

コード内情報の表示

プログレスバーにはコード内の情報も表示できます。進捗情報だけでなく、現在の処理に関する追加の情報を表示するのに便利です。

# tqdmライブラリをインポート
from tqdm.auto import tqdm
import time

# postfixで初期の「現在の値」を0に設定
with tqdm(total=100, postfix={'現在の値': 0}) as pbar:
    for i in range(100):
                # この部分に実際の処理が入る
        time.sleep(0.1)
        # プログレスバーを1進める
        pbar.update(1)
        # プログレスバーの「現在の値」を更新
        pbar.set_postfix({'現在の値': i+1})

処理速度と残り時間

デフォルトで処理速度や推定残り時間も表示されます。これで処理がいつ頃終わるのかがわかりますね。

終わりに

tqdmは、コードに数行追加するだけでプログレスバーを表示することができ便利です。

バーのデザインやコード内の情報の可視化も**tqdm**のライブラリを用いることで実装できます。

是非Python機械学習などの時間がかかる処理が必要な際には、このtqdmライブラリも試してみてください!

株式会社フォトラクションでは一緒に働く仲間を募集しています