本記事は、Pythonの繰り返し処理for文で進捗状態を表示できる「tqdm」について紹介いたします。
私自身データサイエンティストとして業務を行なっていますが、Pythonでの処理が多く、かつデータ量も多かったりするので、そんなときにこの「tqdm」で進捗を表示しながら作業時間/処理時間の見立てを立てながら作業しています。
本記事も、tqdmで進捗が簡単に把握できるので、処理待ちの間に作成していたりします。
該当コード
まずはpip installを忘れずに
!pip install tqdm
# ノートブックでない場合は「!」を外してください
まずは初期設定関係
import pandas as pd
from tqdm import tqdm
df = pd.read_csv('data.csv')
シンプルな使い方
for index, row in tqdm(df.iterrows()): # 最も伝えたい行はこの行
if row["dummy"] == 0:
break
全体に対してどれくらいの進捗か把握したい時
for index, row in tqdm(df.iterrows(), total=len(df)): # 最も伝えたい行はこの行
if row["dummy"] == 0:
break
やむを得ずfor文の中にfor文を書く際に、変にならない方法
for some in tqdm(category_list, total=len(category_list)):
for index, row in tqdm(df.iterrows(), total=len(df), leave=False): # 最も伝えたい行はこの行
pass
解説
![](https://zizou-book-lab.com/wp-content/uploads/2023/01/24833042_s.jpg)
シンプルな処理、全体とそのうちどれだけ処理が進んだか、やむを得ずfor文の中にfor文を書く場合に汚くならないようにする書き方を紹介しました。
- シンプルな処理
一般的に、for文のinの後に続く変数(もしくは処理)をtqdm()で囲めば、基本的にOKです。長めのfor文を書く際は、tqdm()で囲む癖をつければ、意図せず時間がかかってしまうことが早くわかるようになります。そうすれば、処理を強制終了して、書き換えたりなどするのも良いでしょう。
とにかく、tqdm()で囲むように癖をつけると良いです。私自身の経験からもオススメします。
- tqdm()内に「total=len(df)」をつける
全体のlen(df)のうち、どれだけ処理をしたかを表示できます。注意点としては、totalが受け取れるのは数値です。そのため、本当に全体の数字でなくても受け取ってしまうことです。 totalに間違った数字を入れてしまうと、処理時間を読み違えてしまうので、注意が必要です。
- tqdmを使ったfor文を重ねる場合のテクニック
一番外側を除いて、内側のfor文のtqdmに「leave=False」を付けることで、内側の処理が1周したらそのプログレスバーが消えて、新たに進捗を表示するプログレスバーを表示します。
つまり、tqdmを使ったfor文を重ねた処理のプログレスバーを綺麗に表示することができるということです。
参照サイト
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9JUUzJTgyJUIwJUUzJTgzJUFDJUUzJTgzJUJDJUUzJTgzJTg4JUUzJTgxJUFBdHFkbSVFMyU4MSVBRSVFNCVCRCVCRiVFMyU4MSU4NCVFNiU5NiVCOSZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnR4dC1jbGlwPWVsbGlwc2lzJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9ZDBhNjcxNjc3MGUzYTA2NTY0NWZjZTAwOGQ2YjljNmI&mark-x=142&mark-y=112&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwU2VlTG9nJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz0zNmVlM2FlOThmYzAzYjA2ZWE4Zjk2NmU0Y2Y2ZmM4MQ&blend-x=142&blend-y=491&blend-mode=normal&s=68b3ca3d43c592e65e2649a37f894907)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9dHFkbSVFMyU4MSVBRSVFNCVCRCVCRiVFMyU4MSU4NCVFNiU5NiVCOSVFMyU4MiU5MiVFOCU4NyVBQSVFNSU4OCU4NiVFMyU4MSVBQSVFMyU4MiU4QSVFMyU4MSVBQiVFMyU4MSVCRSVFMyU4MSVBOCVFMyU4MiU4MSVFMyU4MSVBNiVFMyU4MSVCRiVFMyU4MSU5RiZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnR4dC1jbGlwPWVsbGlwc2lzJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9YjhiZjY3OTk2MmMxZmJjMWU2NTljYWU5NzMwNTIyMWU&mark-x=142&mark-y=112&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwa2F6dWtpX18wMDMmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPWE1NTFjZGQ1YmMwN2YyNTFjMmYwNDYxNDJhODdkOTFl&blend-x=142&blend-y=491&blend-mode=normal&s=f76444c105bc3ca2d3f7e2a7fe14724f)
まとめ
以上となります。
冒頭でも書きましたが、for文の処理の進捗を可視化して、作業時間や処理時間の見立てをつけることは非常に重要です。数万行を越えてくるようなデータフレームに対して処理をする場合などは、必ずtqdmをつけて処理したほうが良いです。これは経験上良いと感じています。
一つのルーティンとして、tqdm()をつけるのであれば、本記事にて紹介している、オプション程度をつける程度で、スッキリかつ見やすいプログレスバーになると思います。
進捗を把握するだけならアレンジしたプログレスバーにしなくても良いと思い、上記の紹介に留めています。もっとオシャレにということであれば、参照記事などから覗いてみてください!
サイト内関連記事
![](http://zizou-book-lab.com/wp-content/uploads/2021/08/19360-300x300-1.jpg)
転職・スキルアップはこちらからどうぞ
- 転職のリクルートエージェント:転職実績No.1
国内最大級の転職サイトです。まずは登録!
- 若手ハイクラス転職 VIEW:若手からの支持がアツい 高待遇案件多数!一見の価値有りです
- 未経験ならIT求人ナビ:未経験フルサポート
未経験支援が充実しています!
- 受講者国内最大級:オンライン資格講座スタディング
まずはここから探すのがオススメです
- エンジニアのスキルアップに特化:テックアカデミー プログラミングに興味ありなら
- オンライン完結型スクール:DMM WEBCAMP PRO 転職型スクールNo.1 オススメです
コメント