Jupyter Notebook Tips
Seeing python’s logging messages in a Jupyter Notebook
Originally answered in stackoverflow.
stderr
is the default stream for the logging module, so in IPython and Jupyter notebooks you
might not see anything unless you configure the stream to stdout
:
import logging
import sys
logging.basicConfig(format='%(asctime)s | %(levelname)s : %(message)s',
level=logging.INFO, stream=sys.stdout)
logging.info('Hello world!')
Truncating pandas float display
# changes default formatting of float to 3 decimal places
pd.options.display.float_format = '{:.3f}'.format
Changing Python’s path
It is possible to change the path Python uses to search for files so that you can import modules that otherwise would only be possible by having your notebook file in the same directory. This is useful when you want to have a specific folder for your notebooks in order to be more organized.
To do that, run the following code:
import sys
sys.path.insert(0, '/path/to/application/app/folder')
For more details see this answer.
Fix installed packages not being imported
Sometimes, when using conda, you may find that you’re not able to import installed packages into your notebook. One of the reasons may be because Jupyter is not using the correct kernel.
To find out what kernel is being used, run (within the notebook):
import sys
sys.path
sys.executable
If you find that this is the problem, a simple solution is simply installing jupyter within the conda environment you are using:
source activate [yourenvname]
conda install jupyter
Other alternative solutions to this problem can be found here.
Using git to version control jupyter notebooks
This post explains in a very nice way different ways we can combine jupyter notebook with git tracking only changes in code.
Tracking time
Jupyter and IPython make it really easy to track time in the cells you execute:
%time print('%time will output the time of running only this line')
%%time
print('Jupyter can also track')
print('the time that running an entire cell took')
print('when you use %%time')
For more accurate results you may also want to use timeit
instead of time
, which Jupyter also allows for. See this answer for more details on the difference between the two.
Saving the current notebook from code
It’s a bit of a hack, but you can save the current notebook you are running the code from using the following lines:
from IPython.display import display, Javascript
display(Javascript('IPython.notebook.save_checkpoint();'))
Converting a notebook from the command line
The command below will convert the notebook to html. It’s possible to define other formats as well (check the documentation).
%%bash
jupyter nbconvert --to html notebook_name.ipynb
Exporting history
It’s possible to export the history (each command that was issued) of your current notebook by using the %notebook
magic:
%notebook history.ipynb
Running bash commands
To run a bash command, the magic %%bash
at the first line of a cell will do it for you:
%%bash
mv history.ipynb ./results/
If you want to access a python variable within the script cell, use (see this answer):
%%bash -s "$myPythonVar" "$myOtherVar"
echo "This bash script knows about $1 and $2"
It is also possible to use the subprocess
module to run bash commands from python:
bash_command = "mv history.ipynb {}/".format(export_path)
import subprocess
process = subprocess.Popen(bash_command.split(), stdout=subprocess.PIPE)
output, error = process.communicate()
Remote access to another machine
Start the server on the remote machine:
$ jupyter notebook --no-browser --port=8889
Open an SSH tunnel (port forwarding) from your local machine to the remote one:
$ ssh -N -L localhost:8888:localhost:8889 remote_user@remote_host
You’ll then be able to access the remote kernel in your local browser by going to http://localhost:8888.
Setting up a password
Instead of a token, it’s possible to set up a default password that jupyter will use. Follow these instructions.
Module autoreload
These configurations will auto-reload modules (changes in the source code will not require manual reloading—see stackoverflow):
%load_ext autoreload
%autoreload 2
Other references
Other posts I found helpful that cover jupyter notebook hints: