Traffine I/O

日本語

2023-03-10

TQDMを使って進捗状況バーを表示する

TQDMとは

TQDMは、コードに進行状況バーを追加する簡単な方法を提供するPythonの人気ライブラリです。これは、大規模なデータセットを扱う場合や、長時間かつ複雑な計算を実行する場合に特に役立ちます。

TQDMのインストール

TQDMのインストールは非常に簡単です。次のコマンドを実行することで、Pythonのパッケージマネージャーであるpipを使用してインストールできます。

bash
$ pip install tqdm

または、Anacondaパッケージマネージャーであるcondaを使用してインストールすることもできます。

bash
$ conda install tqdm

インストールが完了したら、Pythonスクリプトやノートブックにtqdmモジュールをインポートし、ループ、反復子、その他の反復可能なオブジェクトに進行状況バーを追加して使用を開始できます。

TQDMの基本的な使い方

Iterableなオブジェクト、ループなどにTQDMを使用する方法、進行状況バーの外観をカスタマイズする方法、TQDMでネストされた進行状況バーを使用する方法など、いくつかの基本的な使用例を紹介します。

イテラブルなオブジェクトとTQDM

TQDMのもっとも一般的な使用例の1つは、リスト、タプル、範囲などのイテラブルなオブジェクトに進行状況バーを追加することです。次の例のように、イテラブルなオブジェクトをtqdm関数に渡すことで実行できます。

python
from tqdm import tqdm

my_list = [1, 2, 3, 4, 5]

for item in tqdm(my_list): # do something with item

これにより、リストの要素を通過するループの進行状況を示す進行状況バーが作成されます。進行状況バーはリアルタイムに更新され、現在の進行状況、推定残り時間、ループの実行速度が表示されます。

ループとTQDM

TQDMは、イテラブルオブジェクトだけでなく通常のループでも使用できます。次の例のように、ループをtqdm関数の呼び出しでラップすることで実現できます。

python
from tqdm import tqdm

for i in tqdm(range(100)):
    # do something with i

これにより、0から99までの範囲の値をループする進捗バーが作成されます。進捗バーはリアルタイムで更新され、現在の進捗状況、推定残り時間、およびループの実行速度が表示されます。

TQDMバーのカスタマイズ

TQDMは、進捗バーの外観をカスタマイズするためのいくつかのオプションを提供しています。これらのオプションには、進捗バーの色を変更する、進捗バーの幅を設定する、カスタムメッセージを表示するなどがあります。次の例では、進捗バーの外観をカスタマイズする方法を示します。

python
from tqdm import tqdm

my_list = [1, 2, 3, 4, 5]

for item in tqdm(my_list, desc="Processing items", bar_format="{l_bar}{bar}| {n_fmt}/{total_fmt} [{elapsed}<{remaining}, {rate_fmt}]"):
    # do something with item

この例では、bar_formatパラメータにカスタムフォーマット文字列を渡しています。このフォーマット文字列は、進捗バーのレイアウトを定義し、現在の進捗状況、推定残り時間、およびループの実行速度などのさまざまな進捗バーのパラメータのプレースホルダを含みます。

TQDMのネストされた進捗状況バー

TQDMは、複数のイテレーションのレベルを持つ複雑な計算を扱う場合に役立つ、ネストされた進捗バーをサポートしています。次の例では、TQDMを使用して2つのネストされたループの進捗バーを作成する方法を示します。

python
from tqdm import tqdm

outer_list = [1, 2, 3, 4, 5]
inner_list = [10, 20, 30, 40, 50]

for outer_item in tqdm(outer_list, desc="Outer loop"):
    for inner_item in tqdm(inner_list, desc="Inner loop", leave=False):
        # do something with outer_item and inner_item

この例では、2つの入れ子になったループがあり、それらの両方に進捗バーを作成するためにTQDMを使用しています。また、内側のループのleaveパラメータをFalseに設定して、内側のループが実行されている間に外側のループの進捗バーが表示され続けるようにします。これにより、計算全体の進捗を追跡するのに役立ちます。

TQDMの高度な使い方

Pandas、Multiprocessing、Jupyter Notebooks、AsyncIOといったTQDMの高度な使用方法について説明します。

PandasとTQDM

Pandasはデータ分析のための人気のあるPythonライブラリであり、TQDMを使用して大規模なデータセットを含むPandas操作に進捗バーを追加することができます。次の例では、PandasとTQDMの使用方法を説明しています。

python
import pandas as pd
from tqdm import tqdm

df = pd.read_csv("my_large_dataset.csv")

for index, row in tqdm(df.iterrows(), total=len(df)):
    # do something with row

この例では、PandasのDataFrame.iterrows()メソッドを使用してDataFrameの行を反復処理し、TQDMを使用して反復処理の進捗状況を追跡する進捗バーを作成します。totalパラメータはDataFrameの長さに設定されており、反復処理の進捗状況を正確に反映するようになっています。

MultiprocessingとTQDM

Multiprocessingは、複数のプロセスを同時に実行できるPythonモジュールです。TQDMを使用してマルチプロセッシング操作に進捗バーを追加することができ、複雑な計算の進捗状況を把握するのに役立ちます。次の例では、MultiprocessingとTQDMの使用方法を説明しています。

python
import multiprocessing as mp
from tqdm import tqdm

def process_item(item):
    # do something with item

pool = mp.Pool(processes=4)

results = []

for item in tqdm(pool.imap(process_item, my_list), total=len(my_list)):
    results.append(item)

この例では、4つのプロセスを持つマルチプロセッシングプールを作成し、pool.imap()メソッドを使用してmy_list内の各アイテムにprocess_item()関数を適用します。TQDMを使用して、マルチプロセッシング操作の進捗状況を追跡する進捗バーを作成します。

Jupyter NotebooksとTQDM

Jupyter Notebooksは、Pythonでのデータ分析や科学計算において広く使われているツールです。TQDMを使用することで、長時間実行される計算の進捗を追跡するために進捗バーを追加することができます。次の例では、Jupyter NotebooksでTQDMを使用する方法を示します。

python
from tqdm.notebook import tqdm

for i in tqdm(range(100)):
    # do something with i

この例では、tqdm.notebookモジュールを使用して、Jupyter Notebooksに対応した進捗バーを作成しています。進捗バーはノートブックの出力と同じ行に表示され、ループが進行するにつれてリアルタイムで更新されます。

AsyncIOとTQDM

AsyncIOは、コルーチンとイベントループを使用して非同期コードを書くことができるPythonモジュールです。TQDMを使用することで、非同期計算の進捗を追跡するために進捗バーを追加することができます。次の例では、AsyncIOでTQDMを使用する方法を示します。

python
import asyncio
from tqdm.asyncio import tqdm

async def process_item(item):
    # do something with item

async def main():
    tasks = [asyncio.create_task(process_item(item)) for item in my_list]
    for task in tqdm(asyncio.as_completed(tasks), total=len(tasks)):
        await task

await main()

この例では、アイテムに対して非同期計算を実行するAsyncIOコルーチンprocess_item()を作成しています。asyncio.as_completed() 関数を使用して、実行するコルーチンのリストを作成し、TQDMを使用してコルーチンが完了するにつれて進捗バーを作成します。totalパラメータはtasksリストの長さに設定され、非同期計算の進捗を正確に反映するようにします。

参考

https://github.com/tqdm/tqdm
https://tqdm.github.io/

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!