Pythonでプログレスバーを使うには?実際のコードを図解!
thumb_pythonprogressbar_01
Pythonでプログレスバーを使うには?実際のコードを図解!
アンドエンジニア編集部
2024.02.09
この記事でわかること
大量データを扱うPythonでは、プログレスバー表示が有効です
専用のライブラリを使うほか、自作のコードでもプログレスバーの実装が可能です
プログレスバー利用することで大量のデータ分析時に実行完了までの予測が可能です

Pythonでプログレスバーを作成する

img_pythonprogressbar_01

Pythonでは、処理中に進捗を表示させたい場合が多くあります。データサイエンスで活用することが多いために、データの分析や機械学習など多くの場面が思い浮かびます。

ここでは、Pythonで比較的良く用いられる可視化ライブラリ、および自作のコードを用いた進捗表示のプログレスバーについて解説していきます。

Pythonによるデータ分析:入門情報から資格取得まで解説!

プログレスバーの構成要素

プログレスバーはそこまで複雑ではありませんが、以下の構成要素を覚えておくと良いでしょう。

プログレスバーの使用準備と初期設定 ライブラリを用いる場合は、その読み込み(import)と使用の宣言などを行います。プログレスバーは決まった回数回す場合はループ回数を設定しておきます。

プログレスバーの実行 ここでは、実際に行う処理を記述します。その後プログレスバーの表示を更新する処理を行い、進捗表示に反映させます。

プログレスバーの終了 ここでは、ライブラリ固有の終了処理を宣言します。必要に応じて進捗表示の時間を遅らせる場合は、終了処理の前に疑似的にSleepを入れて表示を維持することができます。

Pythonのプログレスバーを使ってみる

img_pythonprogressbar_02

Pythonでプログレスバーを使うには、tqdmやprogressbar2・PyPrindなどを使います。また自前でコードを作成したり、GUIではtkinterを用いたりすることもできます。ここでは、これら5つの方法を使って、プログレスバーを実際に作成・実行し、解説していきます。

GUIとは?CUIとの違いやメリット・デメリットをエンジニア向けに解説!

プログレスバーの出力の確認

プログレスバーを使うには、出力された表示にエスケープシーケンスを使用するのが一般的です。エスケープシーケンスは、ターミナル出力をエミュレーションする機能を用いて表示されます。そのため、使用する開発環境によっては、正しく表示されないことがあります。

次の図をご覧ください。これはPythonの標準IDE(統合開発環境)のIDLEを使用した例です。エディターウィンドウの「Run」「Run Module」のメニューからコードを実行できます(①)。

実行結果は、右のように表示されますが、先頭から表示するエスケープシーケンスが正しく表示されず、出力が時系列に表示されていることが分かります(②)。

img_pythonprogressbar_03
 【図】:IDLEでの実行結果

次の図は、Google Colabでの実行結果です。Colabでは、実行ボタンをクリックすると、実行結果が表示領域に1行のみ表示されプログレスバーが順次更新されています(①②)。

img_pythonprogressbar_04
 【図】:Colabでの実行結果

このように、プログレスバーが正しく表示できない場合は、別の実行環境で実行し出力結果を確認するのが良いでしょう。以降では、この表示の影響を考慮してPythonから直接実行した結果を用いて図解していきます。

IDLEを使ったPythonのプログラム開発!操作方法を解説

tqdm

tqdmは、良く用いられるプログレスバーのライブラリです。使用するには、ライブラリをインストールする必要があり、“pip install tqdm”であらかじめインストールしておきます。以下は、コード部分の構成要素です。

プログレスバーの使用準備と初期設定 ライブラリの読み込み(”import tqdm”)とtqdm()ライブラリをコールし、事前準備しておきます。ここではループ回数は10回にします。

プログレスバーの実行 ここでは、実際に行う処理の代わりに疑似的に1.0秒Sleepを行います。その後プログレスバーの表示を更新する処理として、tqdm.update()をコールします。

プログレスバーの終了 表示を1.0秒維持したのち、終了処理として、tqdm.close()をコールします。

実際のコードと実行結果は次の図をご覧ください(①②③④)。

img_pythonprogressbar_05
 【図】:tqdmのコード
img_pythonprogressbar_06
 【図】:tqdmの実行結果

この例では、進捗率と目盛りで進捗を表示しています。表示方法は、ライブラリコールで調整が可能です。

【参考】:tqdm

progressbar2

progressbar2も、良く用いられるプログレスバーのライブラリです。使用するには、ライブラリは、“pip install progressbar2”であらかじめインストールしておきます。以下は、コード部分の構成要素です。

プログレスバーの使用準備と初期設定 最初にライブラリの読み込み(”import progressbar”)を行い、progressbar()ライブラリをコールします。開始するには、progressbar.start()をコールします。ここでもループ回数を10回にします。

プログレスバーの実行 ここでは、実際に行う処理の代わりに疑似的に1.0秒Sleepを行います。その後プログレスバーの表示を更新する処理として、progressbar.update()をコールします。

プログレスバーの終了 表示を1.0秒維持したのち、終了処理として、progressbar.finish()をコールします。

実際のコードと実行結果は次の図をご覧ください(①②③④)。

img_pythonprogressbar_07
 【図】:progressbar2のコード
img_pythonprogressbar_08
 【図】:progressbar2の実行結果

この例でも、進捗率と目盛りで進捗を表示しています。表示方法は、ライブラリコールで調整が可能です。

【参考】:PyPi progressbar2 【参考】:progressbar2

PyPrind

PyPrindも、良く用いられるプログレスバーのライブラリです。ライブラリは、“pip install pyprind”であらかじめインストールしておきます。以下は、コード部分の構成要素です。

プログレスバーの使用準備と初期設定 最初にライブラリの読み込み(”import pyprind”)を行い、pyprind.ProgBar()ライブラリをコールします。ここでもループ回数を10回にします。

プログレスバーの実行 ここでは、実際に行う処理の代わりに疑似的に1.0秒Sleepを行います。その後プログレスバーの表示を更新する処理として、pyprind.update()をコールします。

プログレスバーの終了 表示を1.0秒維持したのち、終了処理として、pyprind.atop()をコールします。

実際のコードと実行結果は次の図をご覧ください(①②③④)。

img_pythonprogressbar_09
 【図】:PyPrindのコード
img_pythonprogressbar_10
 【図】:PyPrindの実行結果

この場合も表示方法は、ライブラリコールで調整が可能です。

【参考】:PyPi PyPrind 【参考】:PyPrind

自分でコードを作成する

先に挙げた3種類のライブラリで、多くの表示に対応できますが、要件に応じてよりカスタマイズしたい場合は自分でコードを作成することもできます。自分でコードを記述するのでライブラリは不要となります。以下は、コード部分の構成要素です。

プログレスバーの使用準備と初期設定 自分でコードを作成するため、ライブラリの読み込みは不要です。ループ回数を10回にします。

プログレスバーの実行 ここでは、実際に行う処理の代わりに疑似的に1.0秒Sleepを行います。表示する文字列を作成する必要がありますが、要件に応じて決定することができます。

文字列はprint()で表示させますが、デフォルトでは現在の位置から表示して、改行されるようになっています。ここで重要なことは”\r”を出力して、行頭から表示させることです。end=””で、改行されずに表示させることができます。改行されても構わない場合は、”\r”やend=””を追加する必要はありません。

プログレスバーの終了 終了処理も、ライブラリを使用しないので特別なコールは不要です。

実際のコードと実行結果は次の図をご覧ください(①②③④)。

img_pythonprogressbar_11
 【図】:自作のコード
img_pythonprogressbar_12
 【図】:自作の実行結果

自分でコードを作る場合は、表示形式は自分で決められるメリットがあります。ここでは、”#”の個数で進捗を表しましたが、例えば”\”・”|”・”/”・”-”を順に表示し、処理中にぐるぐる回るような表示をさせることも可能です。

tkinter

tkinterは、Pythonの標準機能でGUIの構築や操作が可能なライブラリです。標準機能ですので、ライブラリの追加インストールは不要です。GUIのウィジェットとしてプログレスバーを表示させることができます。以下は、コード部分の構成要素です。

プログレスバーの使用準備と初期設定 ライブラリの読み込み(”import tkinter”、”inport ttk”)を行い、ウィンドウ作成を行っておきます。ttk.Progressbar()でプログレスバーをウィンドウに作成します。ここではループ回数は10回にします。

プログレスバーの実行 ここでは、実際に行う処理の代わりに疑似的に1.0秒Sleepを行います。その後プログレスバーの表示を更新する処理として、ttk.Progressbar()[]の値を更新後windows.update()をコールします。

プログレスバーの終了 ここではmainloop()で表示は維持されていますので、終了時にはウィジェットを閉じます。

実際のコードと実行結果は次の図をご覧ください(①②③④)。

img_pythonprogressbar_13
 【図】:tkinterのコード
img_pythonprogressbar_14
 【図】:tkinterの実行結果

こちらは、ウィジェットを用いて進捗度を表示しています。ウィジェットに何を表示させるかは、自由に決めることができます。個別に別ウィンドウを表示させて、進捗を表示することも可能です。

【参考】:Python Docs: tkinter --- Tcl/Tk の Python インターフェース

Tkinterのインストール手順から動作確認まで解説!

Pythonのプログレスバーは大量データの処理に効果的

img_pythonprogressbar_15

Pythonは、データサイエンス向けのライブラリが数多く公開されており、データ分析や機械学習などに利用されています。実行時間はデータ量に比例して処理量が増加しますので、完了予定時間や進捗度を表示することで、正しく動作していることも確認でき、有効です。

プログレスバーのライブラリや自作コードは、1度作成しておくと再利用できますので、大量データの分析などを予定する場合は、あらかじめ準備することをおすすめします。

Pythonと機械学習を学んでAI時代に対応できるエンジニアに
Pythonのおすすめ本21選!初心者・中級者・上級者別に解説
気になる人のXをフォローしよう!
アンドエンジニア公式LINEでは
新着記事やエンジニアに役立つ情報をお届け!
日々のキャッチアップをお手伝いします!
マイナビITエージェント

編集部オススメコンテンツ

Sponsored
【年収±診断】6つの質問に答えて、真の市場価値をチェック!
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

お問い合わせ・情報提供
はじめて転職される方へ
SE・システムエンジニア(IT/通信/インターネット) 求人一覧

編集部おすすめコンテンツ

Sponsored
【年収±診断】6つの質問に答えて、真の市場価値をチェック!
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

Powered by マイナビ AGENT