# -*- mode: org -*-
#+TITLE:     Jupyter
#+AUTHOR:    Arnaud Legrand
#+DATE: June, 2018
#+STARTUP: overview indent
#+OPTIONS: num:nil toc:t
#+PROPERTY: header-args :eval never-export

* Additional Jupyter resources or tricks
** Tips and tricks
The following [[https://www.dataquest.io/blog/jupyter-notebook-tips-tricks-shortcuts/][webpage]] lists several Jupyter tricks (in particular, it
illustrates many =Ipython magic= commands) that should improve your
efficiency (note that this blog post is about two years old so some of
the tricks may have been integrated in the default behavior of jupyter
now).
** Running R and Python in the same notebook
The best solution to this is to install rpy2. On my machine, I have
installed the =python3-rpy2= debian package with =apt-get install=. E.g.,
#+begin_src shell :results output :exports both
sudo apt-get install python3-rpy2 python3-tzlocal
#+end_src
An other (not really recommanded) alternative consists in going
through the python package manager with
#+begin_src python :results output :exports both
pip3 install rpy2
#+end_src
Then you'll be able to use both languages in the same notebook by:
1. Loading =rpy2=: 
   #+begin_src python :results output :exports both
   %load_ext rpy2.ipython
   #+end_src
2. Using the =%R= Ipython magic:
   #+begin_src python :results output :exports both
   %R 
   summary(cars)
   #+end_src
   Python objects can then even be passed to R as follows (assuming =df=
   is a pandas dataframe):
   #+begin_src python :results output :exports both
   %%R -i df
   plot(df)
   #+end_src
** Exporting a notebook
Obviously, you can convert to html or pdf using the using the =File >
Download as > HTML= (or =PDF=) menu option.  This can also be done from
the command line with the following command:

#+begin_src sh :results output :exports both
ipython3 nbconvert --to pdf Untitled.ipynb
#+end_src

If you want to use a specific style, then the nbconvert exporter
should be customised. This is discussed and demoed [[http://markus-beuckelmann.de/blog/customizing-nbconvert-pdf.html][here]]. We encourage
you to simply read the [[https://nbconvert.readthedocs.io/en/latest/][doc of nbconvert]]. 

Instead of going directly through LaTeX and playing too much with the
nbconvert exporter, an other option consists in exporting to Markdown
and playing with [[https://pandoc.org/][pandoc]]. Both approaches work, it's rather a matter of
taste.
* Installing Jupyter on your own machine
** Installing jupyter
Follow these instructions if you wish to have a similar Jupyter environment on you own machine.

First, download and install [[https://conda.io/miniconda.html][Miniconda latest version]]. We use Miniconda version =4.5.4= and Python version =3.6= on our server .\\
Miniconda is a light version of Anaconda which includes Python, the Jupyter Notebook, and other commonly used packages for scientific computing and data science.

Then download the [[https://gist.github.com/brospars/4671d9013f0d99e1c961482dab533c57][mooc_rr environment file]] and create it using conda:
#+begin_src shell :results output :exports both
conda env create -f environment.yml

# Windows activate the environment
activate mooc_rr

# Linux and MacOS activate the environment
source activate mooc_rr

jupyter notebook
#+end_src

** Exporting your notebooks with latex
Here is what I had to install on my recent debian machine to make sure
the notebook export via latex works:
#+begin_src shell :results output :exports both
sudo apt-get install wkhtmltopdf
sudo apt-get install texlive-xetex
#+end_src

** Interesting extensions to improve notebook readability
Here are two interesting extensions that can improve readability:
- [[https://stackoverflow.com/questions/33159518/collapse-cell-in-jupyter-notebook][Code folding]]
  #+begin_src shell :results output :exports both
  pip3 install jupyter_contrib_nbextensions
  # jupyter contrib nbextension install --user # not done yet
  #+end_src
- [[https://github.com/kirbs-/hide_code][Hiding code]]
  #+begin_src sh :results output :exports both
  sudo pip3 install hide_code
  sudo jupyter-nbextension  install --py hide_code
  jupyter-nbextension  enable --py hide_code
  jupyter-serverextension enable --py hide_code
  #+end_src
