Last month I was working on a machine learning project. If you make use of grid search to find the optimum parameters, it is nice to know how much time an iterating process costs, so I do not waste my time. In this blog you’ll learn how to:
- Install the progress bar library in Windows
- The disadvantage of the progress bar library
- Write your own progress timer class in Python
- Use three lines of code to time your code progress
Install the progress bar library in Windows
Data Science life can be easy sometimes. If you make use of Anaconda (I strongly recommend) then it is the following line of code in de command line:
conda install progressbar
Otherwise you could you do the trick by:
pip install progressbar
The disadvantage of the progress bar library
The progress bar library is really nice, but the progress bar library has metrics that are easy to forget. Documentation can be found here. Each time I would like to time my code progress, I simply like to initialize, start and finish the job. Now you need for example to initialize the widgets of the progress bar and define the timer. The progress library works as follows:
#import libraries
import progressbar as pb
#initialize widgets
widgets = ['Time for loop of 1 000 000 iterations: ', pb.Percentage(), ' ',
pb.Bar(marker=pb.RotatingMarker()), ' ', pb.ETA()]
#initialize timer
timer = pb.ProgressBar(widgets=widgets, maxval=1000000).start()
#for loop example
for i in range(0,1000000):
#update
timer.update(i)
#finish
timer.finish()
Time for loop of 1 000 000 iterations: 100% |||||||||||||||||||||||| Time: 0:00:07
Write your own progress timer class in Python
Therefore it is easier to write your own class that you can easily use multiple times. First you initialize the progress timer. From now on, when you initialize you only need to give information how many iterations the code takes. You will also get the opportunity to add a description to the progress timer.
#import libraries
import progressbar as pb
#define progress timer class
class progress_timer:
def __init__(self, n_iter, description="Something"):
self.n_iter = n_iter
self.iter = 0
self.description = description + ': '
self.timer = None
self.initialize()
def initialize(self):
#initialize timer
widgets = [self.description, pb.Percentage(), ' ',
pb.Bar(marker=pb.RotatingMarker()), ' ', pb.ETA()]
self.timer = pb.ProgressBar(widgets=widgets, maxval=self.n_iter).start()
def update(self, q=1):
#update timer
self.timer.update(self.iter)
self.iter += q
def finish(self):
#end timer
self.timer.finish()
Three lines of code to time your code progress
Now it is simple to show the progress of your code. You only need three lines of code to initialize, update and finish the progress timer. In case of a for loop it works as follows:
#initialize
pt = progress_timer(description= 'For loop example', n_iter=1000000)
#for loop example
for i in range(0,1000000):
#update
pt.update()
#finish
pt.finish()
So you will receive feedback in how much time your function or for loop is finished.
Time for loop of 1 000 000 iterations: 37% |//////// | ETA: 0:00:04
And finally you will see how much time it took to do the job.
Time for loop of 1 000 000 iterations: 100% |||||||||||||||||||||||| Time: 0:00:07
I hope this will help you to perfectly time when to take a coffee. I’m sure there is a lot to improve in this approach, and maybe you got a better way to do execution time tracking. I’d like to hear your ideas!
Leave a Reply
You must be logged in to post a comment.