From d81a02c3762a6557c606efe0100410271cba7682 Mon Sep 17 00:00:00 2001 From: Arnaud Legrand Date: Wed, 27 Mar 2019 12:50:33 +0100 Subject: [PATCH] Merge Marie-Gabrielle's documentation into ours. --- module2/ressources/jupyter.org | 77 ++++++++++++++---- module2/ressources/jupyter_fr.org | 55 +++++++++++-- .../jupyter_images/new_notebook.png | Bin 0 -> 3807 bytes .../ressources/jupyter_images/notebook_R.png | Bin 0 -> 21671 bytes 4 files changed, 109 insertions(+), 23 deletions(-) create mode 100755 module2/ressources/jupyter_images/new_notebook.png create mode 100755 module2/ressources/jupyter_images/notebook_R.png diff --git a/module2/ressources/jupyter.org b/module2/ressources/jupyter.org index 4ba6782..83aa702 100644 --- a/module2/ressources/jupyter.org +++ b/module2/ressources/jupyter.org @@ -55,7 +55,11 @@ situations however where you may want to play with other notebooks. 4. Open the freshly uploaded notebook through the Jupyter file manager. ** Running R and Python in the same notebook -=rpy2= package allows to use both languages in the same notebook by: +It used to be impossible with earlier versions of Jupyter but it is +now very easy thanks to the the =rpy2= package (see the details of the +installation procedurer in the corresponding section below) that +allows you to use both languages in the same notebook. Simply open a +new python notebook and follow these instructions: 1. Loading =rpy2=: #+begin_src python :results output :exports both %load_ext rpy2.ipython @@ -74,6 +78,9 @@ situations however where you may want to play with other notebooks. Note that this =%%R= notation indicates that R should be used for the whole cell but an other possibility is to use =%R= to have a single line of R within a python cell. + +[[https://gitlab.inria.fr/learninglab/mooc-rr/mooc-rr-ressources/blob/master/documents/notebooks/notebook_Jupyter_Python_R.ipynb][Here]] is an notebook example using both R et Python + ** Other languages Jupyter is not limited to Python and R. Many other languages are available: [[https://github.com/jupyter/jupyter/wiki/Jupyter-kernels][https://github.com/jupyter/jupyter/wiki/Jupyter-kernels]], including @@ -130,30 +137,60 @@ The environment described in the last section should include R, but if you proceeded otherwise and only have Python available in Jupyter, you may want to read the following section. *** • Installing [[https://github.com/IRkernel/IRkernel][IRKernel]] (R package) -Do the following in R console: +IRKernel will allow you to manage notebooks using natively R rather +than python. We assume in this section that you already have a working +installation of R -Install the =devtools= package: +*Windows* +On Windows, you are unlikely to have the tools allowing you to compile +and install the latest version of IRKernel and you should rather +install the binary version. In an R console (or in Rstudio), type the +following commands: #+begin_src R :results output :session *R* :exports both -install.packages('devtools',dep=TRUE) +install.packages('IRkernel',dep=TRUE) +IRkernel::installspec() # to register the kernel in the current R installation #+end_src -Define a proxy if needed: +Right below, you will find a few explanations on how to use an R +notebook. -#+begin_src R :results output :session *R* :exports both -library(httr) -set_config(use_proxy(url="proxy", port=80, username="username", password="password")) -#+end_src +*Linux or Mac* -Install the =IRkernel= package: +To install the latest version of IRkernel, open an R console or +Rstudio. +- Install the =devtools= package: + #+begin_src R :results output :session *R* :exports both + install.packages('devtools',dep=TRUE) + #+end_src +- Define a proxy if needed (this is important if you are working in a + company which limits the access to the Internet): + #+begin_src R :results output :session *R* :exports both + library(httr) + set_config(use_proxy(url="proxy", port=80, username="username", password="password")) + #+end_src -#+begin_src R :results output :session *R* :exports both -devtools::install_github('IRkernel/IRkernel') -IRkernel::installspec() # to register the kernel in the current R installation -#+end_src +- Install the =IRkernel= package: + #+begin_src R :results output :session *R* :exports both + devtools::install_github('IRkernel/IRkernel') + IRkernel::installspec() # to register the kernel in the current R installation + #+end_src + +You will then be able to create native R notebooks: +[[file:jupyter_images/new_notebook.png]] + +[[file:jupyter_images/notebook_R.png]] +Note the R icon in the top right corner. [[https://gitlab.inria.fr/learninglab/mooc-rr/mooc-rr-ressources/blob/master/documents/notebooks/notebook_Jupyter_R.ipynb][Here is an example of R +notebook]]. *** • Installing rpy2 (Python package) -On Linux, the rpy2 package is available in standard distributions +The =rpy2= package allows python to seamlessly call R and therefore to +have both languages in the same notebook. + +*Linux or Mac* + +On Linux, the rpy2 package is available in standard distributions. For +example on debian or ubuntu: #+begin_src shell :results output :exports both sudo apt-get install python3-rpy2 python3-tzlocal #+end_src @@ -167,7 +204,7 @@ pip3 install rpy2 Download the =rpy2= [[https://www.lfd.uci.edu/~gohlke/pythonlibs/#rpy2][binary file]] by choosing the right operating system. -Open a DOS console and type the following command: +Open a DOS console, move to the /download/ directory and type the following command: #+begin_src shell :results output :exports both python -m pip install rpy2‑2.9.4‑cp37‑cp37m‑win_amd64.whl # adapt filename #+end_src @@ -176,6 +213,14 @@ Install also =tzlocal=: #+begin_src shell :results output :exports both python -m pip install tzlocal #+end_src + +If you ever run into troubles, you may want to have a look on +[[https://stackoverflow.com/questions/14882477/rpy2-install-on-windows-7][StackOverflow]] (NB : when we tried it, there has been no need to define +the =R_HOME= and =R_USER= environnement variables). + +You should be able to run Jupyter and to create a python notebook that runs +R commands by following the instructions given in the beginning of +this document (look for =rpy2=). ** Additional tips *** • Exporting a notebook Here is what we had to install on a recent Debian computer to make sure diff --git a/module2/ressources/jupyter_fr.org b/module2/ressources/jupyter_fr.org index eac87d3..d95411a 100644 --- a/module2/ressources/jupyter_fr.org +++ b/module2/ressources/jupyter_fr.org @@ -66,7 +66,8 @@ ceux du MOOC. code correspondant. ** Exécuter du code R et du code Python dans le même notebook C'était impossible avec les premières versions de Jupyter mais c'est -désormais très facile grâce à la bibliothèque python =rpy2=. Il vous +désormais très facile grâce à la bibliothèque python =rpy2= (les détails +d'installation sont donnés plus bas dans ce document) Il vous faut tout d'abord ouvrir un notebook python. 1. Chargez la bibliothèque =rpy2=. Le =%load_ext= est une commande magique jupyter qui charge cette bibliothèque et vous donne accès à de @@ -91,6 +92,9 @@ python (=rpy2=) maintient une session R, lui passe le code de la cellule et récupère le résultat. Jupyter fait alors le nécessaire pour l'afficher correctement. Il est également possible d'utiliser =%R= pour avoir une seule ligne de R au sein d'une cellule python. + +Un exemple de notebook utilisant R et Python est donné [[https://gitlab.inria.fr/learninglab/mooc-rr/mooc-rr-ressources/blob/master/documents/notebooks/notebook_Jupyter_Python_R.ipynb][ici]]. + ** Autres langages que Python et R Jupyter tire son nom des langages Julia, Python, et R. Il ne se limite donc pas aux langages Python et R. De nombreux autres langages de @@ -168,7 +172,24 @@ certainement suivre les étapes suivantes *** • Installation de [[https://github.com/IRkernel/IRkernel][IRKernel]] (R package) IRKernel vous permettra de faire des notebooks utilisant le langage R plutôt que le langage Python. Nous supposons ici que R est déjà -installé et fonctionnel sur votre ordinateur. Dans une console R: +installé et fonctionnel sur votre ordinateur. + +*Windows* + +Pour windows, il ne sera probablement pas possible de compiler la +toute dernière version et il faudra installer la version binaire de la +façon suivante. Dans une console R ou bien dans Rstudio : +#+begin_src R :results output :session *R* :exports both +install.packages('IRkernel',dep=TRUE) +IRkernel::installspec() # to register the kernel in the current R installation +#+end_src + +Voir ce qui suit pour un exemple d'utilisation de notebook R. + +*Linux ou Mac* + +Pour installer la toute dernière version d'IRkernel, dans une console +R ou bien dans Rstudio : - Installer la bibliothèque =devtools=: #+begin_src R :results output :session *R* :exports both install.packages('devtools',dep=TRUE) @@ -185,11 +206,22 @@ installé et fonctionnel sur votre ordinateur. Dans une console R: devtools::install_github('IRkernel/IRkernel') IRkernel::installspec() # to register the kernel in the current R installation #+end_src + +Vous pourrez alors créer des notebooks utilisant directement R: +[[file:jupyter_images/new_notebook.png]] + +[[file:jupyter_images/notebook_R.png]] + +On remarque l'icône du logiciel R en haut à droite. Vous trouverez ici +[[https://gitlab.inria.fr/learninglab/mooc-rr/mooc-rr-ressources/blob/master/documents/notebooks/notebook_Jupyter_R.ipynb][un exemple de notebook R]]. *** • Installation de rpy2 (Python package) La bibliothèque =rpy2= permet à Python d'appeler R et donc de mélanger -les deux langages dans le même notebook. Cette bibliothèque est en -général disponible sur les distributions récentes. Par exemple sous -debian ou ubuntu: +les deux langages dans le même notebook. + +*Linux ou Mac* + +Cette bibliothèque est en général disponible sur les distributions +récentes. Par exemple sous debian ou ubuntu: #+begin_src shell :results output :exports both sudo apt-get install python3-rpy2 python3-tzlocal #+end_src @@ -205,15 +237,24 @@ pip3 install rpy2 Téléchargez le [[https://www.lfd.uci.edu/~gohlke/pythonlibs/#rpy2][fichier binaire]] =rpy2= en choisissant le bon système d'exploitation. -Ouvrez une console DOS et tapez les commandes suivantes: +Ouvrez une console DOS, placez vous dans le dossier de téléchargement, +et exécutez la commande suivante : #+begin_src shell :results output :exports both -python -m pip install rpy2‑2.9.4‑cp37‑cp37m‑win_amd64.whl # adapt filename +python -m pip install rpy2‑2.9.4‑cp37‑cp37m‑win_amd64.whl # adaptez le nom de fichier #+end_src Installez également =tzlocal=: #+begin_src shell :results output :exports both python -m pip install tzlocal #+end_src + +En cas de difficulté, vous pouvez vouloir vous référer à +[[https://stackoverflow.com/questions/14882477/rpy2-install-on-windows-7][StackOverflow]] (NB : quand nous avons essayé, nous n'avons pas eu +besoin de définir les variables d'environnement =R_HOME= et =R_USER=). + +Vous pouvez alors lancer Jupyter et créer un notebook python utilisant +R en suivant les instructions données au début de ce document +(cherchez =rpy2=). ** Conseils additionnels *** • Exporter un notebook Jupyter évolue rapidement et ces informations peuvent vite devenir diff --git a/module2/ressources/jupyter_images/new_notebook.png b/module2/ressources/jupyter_images/new_notebook.png new file mode 100755 index 0000000000000000000000000000000000000000..e8aa5d677a797aefdcb881a1327e5ae1c574fdb9 GIT binary patch literal 3807 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 literal 0 HcmV?d00001 diff --git a/module2/ressources/jupyter_images/notebook_R.png b/module2/ressources/jupyter_images/notebook_R.png new file mode 100755 index 0000000000000000000000000000000000000000..09c36db62592613596deef66f849a96a2e42a363 GIT binary patch literal 21671 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 literal 0 HcmV?d00001 -- 2.18.1