Help us understand the problem. What is going on with this article?

ループ処理の進捗を確認するためにプログレスバーを表示する

More than 1 year has passed since last update.

はじめに

先日、pythonでデータの整形をする際、for分を回す場面があったのですが、予想以上に処理が重く6分程度かかるforを回していました。長い処理をさせると、フリーズしているのでないか不安になりますので、プログレスバーを表示させたいと思いました。

参考

手順

tqdmモジュールを使用します。

from tqdm import tqdm
import time

for i in tqdm(range(365)):
    # ここに処理を書く

# 下記のようなプログレスバーが表示される
#  55%|█████▌    | 202/365 [04:57<04:03,  1.50s/it]

下記でも同じことが実現できます。

for i in trange(365):
    # ここに処理を書く

tarangetqdm(range(i))の最適化されたインスタンスです。

forループでは要素と同時にインデックスを取得したい場合があります。enumerateを使用する場合は、enumerate(tqdm(...))と書きます。tqdm(enumerate(...))ではないようです。

for i,j in enumerate(tqdm(range(100))): # iがenumerate、jがrange
    # ここに処理を書く

ネストのループにも対応しています。

from tqdm import trange
from time import sleep

for i in trange(10, desc='1st loop'):
    for j in trange(5, desc='2nd loop', leave=False):
        for k in trange(100, desc='3nd loop'):
            # ここに処理を書く

descはプログレスバーのプレフィックスです。leaveをTrueにするとループが終わるまでプログレスバーが進み続けます。

pandasのapplyにもプログレスバーを表示させることができます。

import pandas as pd
import numpy as np
from tqdm import tqdm

df = pd.DataFrame(np.random.randint(0, 100, (100000, 6)))

# Register `pandas.progress_apply` and `pandas.Series.map_apply` with `tqdm`
# (can use `tqdm_gui`, `tqdm_notebook`, optional kwargs, etc.)
tqdm.pandas(desc="my bar!")

# Now you can use `progress_apply` instead of `apply`
# and `progress_map` instead of `map`
df.progress_apply(lambda x: x**2)
# can also groupby:
# df.groupby(0).progress_apply(lambda x: x**2)

jupyter notebookを使用している場合は、グラフィカルなプログレスバーが表示されます。

from tqdm import tnrange, tqdm_notebook
from time import sleep

for i in tnrange(10, desc='1st loop'):
    for j in tqdm_notebook(xrange(100), desc='2nd loop'):
        sleep(0.01)
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away