diff --git a/module3/exo3/compile.jl b/module3/exo3/compile.jl index 9b6efdcc2a3c162644993b74490896ed73a377d7..2eebec281814477dfb2ccc6370394463f0c45da7 100755 --- a/module3/exo3/compile.jl +++ b/module3/exo3/compile.jl @@ -1,6 +1,6 @@ #!/bin/bash #= -exec julia --color=yes --startup-file=no "${BASH_SOURCE[0]}" "$@" +exec julia --color=yes --startup-file=no --project "${BASH_SOURCE[0]}" "$@" =# using Pkg diff --git a/module3/exo3/exercice.html b/module3/exo3/exercice.html index aa50b8fbc845cb98529729f32aa960dd4910ef3c..a205ae70b44663cf7e9251cc2c0e873aad2afeac 100644 --- a/module3/exo3/exercice.html +++ b/module3/exo3/exercice.html @@ -714,12 +714,10 @@ Julia Version 1.4.0 Commit b8e9a9ecc6 (2020-03-21 16:36 UTC) Platform Info: OS: Linux (x86_64-pc-linux-gnu) - CPU: Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz + CPU: Intel(R) Core(TM) i5-9300H CPU @ 2.40GHz WORD_SIZE: 64 LIBM: libopenlibm LLVM: libLLVM-8.0.1 (ORCJIT, skylake) -Environment: - JULIA_PROJECT = @. @@ -737,7 +735,7 @@ Environment:
 Project Exercice v0.1.0
-Status `~/tmp/MOOC-RR/module3/exo3/Project.toml`
+Status `~/mooc/mooc-rr/module3/exo3/Project.toml`
   [336ed68f] CSV v0.6.1
   [a93c6f00] DataFrames v0.20.2
   [82cc6244] DataInterpolations v2.0.0
@@ -948,9 +946,9 @@ Missing data: 2012-09-29 - 2012-10-20  (21 days)
 

Une visualisation de l'ensemble des données semble montrer une augmentation tendancielle de la concentration en CO2, à laquelle se superpose une oscillation à plus haute fréquence.

-
+
-#+HTML_HEAD: -#+HTML_HEAD: -#+HTML_HEAD: - -* Some explanations - -This is an org-mode document with code examples in R. Once opened in -Emacs, this document can easily be exported to HTML, PDF, and Office -formats. For more information on org-mode, see -https://orgmode.org/guide/. - -When you type the shortcut =C-c C-e h o=, this document will be -exported as HTML. All the code in it will be re-executed, and the -results will be retrieved and included into the exported document. If -you do not want to re-execute all code each time, you can delete the # -and the space before ~#+PROPERTY:~ in the header of this document. - -Like we showed in the video, R code is included as follows (and is -exxecuted by typing ~C-c C-c~): - -#+begin_src R :results output :exports both -print("Hello world!") -#+end_src - -#+RESULTS: -: [1] "Hello world!" - -And now the same but in an R session. This is the most frequent -situation, because R is really an interactive language. With a -session, R's state, i.e. the values of all the variables, remains -persistent from one code block to the next. The code is still executed -using ~C-c C-c~. - -#+begin_src R :results output :session *R* :exports both -summary(cars) -#+end_src - -#+RESULTS: -: speed dist -: Min. : 4.0 Min. : 2.00 -: 1st Qu.:12.0 1st Qu.: 26.00 -: Median :15.0 Median : 36.00 -: Mean :15.4 Mean : 42.98 -: 3rd Qu.:19.0 3rd Qu.: 56.00 -: Max. :25.0 Max. :120.00 - -Finally, an example for graphical output: -#+begin_src R :results output graphics :file "./cars.png" :exports results :width 600 :height 400 :session *R* -plot(cars) -#+end_src - -#+RESULTS: -[[file:./cars.png]] - -Note the parameter ~:exports results~, which indicates that the code -will not appear in the exported document. We recommend that in the -context of this MOOC, you always leave this parameter setting as -~:exports both~, because we want your analyses to be perfectly -transparent and reproducible. - -Watch out: the figure generated by the code block is /not/ stored in -the org document. It's a plain file, here named ~cars.png~. You have -to commit it explicitly if you want your analysis to be legible and -understandable on GitLab. - -Finally, don't forget that we provide in the resource section of this -MOOC a configuration with a few keyboard shortcuts that allow you to -quickly create code blocks in R by typing ~ -#+HTML_HEAD: -#+HTML_HEAD: -#+HTML_HEAD: -#+HTML_HEAD: -#+HTML_HEAD: - -* Quelques explications - -Ceci est un document org-mode avec quelques exemples de code -R. Une fois ouvert dans emacs, ce document peut aisément être -exporté au format HTML, PDF, et Office. Pour plus de détails sur -org-mode vous pouvez consulter https://orgmode.org/guide/. - -Lorsque vous utiliserez le raccourci =C-c C-e h o=, ce document sera -compilé en html. Tout le code contenu sera ré-exécuté, les résultats -récupérés et inclus dans un document final. Si vous ne souhaitez pas -ré-exécuter tout le code à chaque fois, il vous suffit de supprimer -le # et l'espace qui sont devant le ~#+PROPERTY:~ au début de ce -document. - -Comme nous vous l'avons montré dans la vidéo, on inclut du code -R de la façon suivante (et on l'exécute en faisant ~C-c C-c~): - -#+begin_src R :results output :exports both -print("Hello world!") -#+end_src - -#+RESULTS: -: [1] "Hello world!" - -Voici la même chose, mais avec une session R (c'est le cas le -plus courant, R étant vraiment un langage interactif), donc une -persistance d'un bloc à l'autre (et on l'exécute toujours en faisant -~C-c C-c~). - -#+begin_src R :results output :session *R* :exports both -summary(cars) -#+end_src - -#+RESULTS: -: speed dist -: Min. : 4.0 Min. : 2.00 -: 1st Qu.:12.0 1st Qu.: 26.00 -: Median :15.0 Median : 36.00 -: Mean :15.4 Mean : 42.98 -: 3rd Qu.:19.0 3rd Qu.: 56.00 -: Max. :25.0 Max. :120.00 - -Et enfin, voici un exemple de sortie graphique: -#+begin_src R :results output graphics :file "./cars.png" :exports results :width 600 :height 400 :session *R* -plot(cars) -#+end_src - -#+RESULTS: -[[file:./cars.png]] - -Vous remarquerez le paramètre ~:exports results~ qui indique que le code -ne doit pas apparaître dans la version finale du document. Nous vous -recommandons dans le cadre de ce MOOC de ne pas changer ce paramètre -(indiquer ~both~) car l'objectif est que vos analyses de données soient -parfaitement transparentes pour être reproductibles. - -Attention, la figure ainsi générée n'est pas stockée dans le document -org. C'est un fichier ordinaire, ici nommé ~cars.png~. N'oubliez pas -de le committer si vous voulez que votre analyse soit lisible et -compréhensible sur GitLab. - -Enfin, pour les prochains exercices, nous ne vous fournirons pas -forcément de fichier de départ, ça sera à vous de le créer, par -exemple en repartant de ce document et de le commiter vers -gitlab. N'oubliez pas que nous vous fournissons dans les ressources de -ce MOOC une configuration avec un certain nombre de raccourcis -claviers permettant de créer rapidement les blocs de code R (en -faisant ~. - -When you click on the button **Knit**, the document will be compiled in order to re-execute the R code and to include the results into the final document. As we have shown in the video, R code is inserted as follows: - -```{r cars} -summary(cars) -``` - -It is also straightforward to include figures. For example: - -```{r pressure, echo=FALSE} -plot(pressure) -``` - -Note the parameter `echo = FALSE` that indicates that the code will not appear in the final version of the document. We recommend not to use this parameter in the context of this MOOC, because we want your data analyses to be perfectly transparent and reproducible. - -Since the results are not stored in Rmd files, you should generate an HTML or PDF version of your exercises and commit them. Otherwise reading and checking your analysis will be difficult for anyone else but you. - -Now it's your turn! You can delete all this information and replace it by your computational document. diff --git a/module3/exo3/exercice_en.ipynb b/module3/exo3/exercice_en.ipynb deleted file mode 100644 index 0bbbe371b01e359e381e43239412d77bf53fb1fb..0000000000000000000000000000000000000000 --- a/module3/exo3/exercice_en.ipynb +++ /dev/null @@ -1,25 +0,0 @@ -{ - "cells": [], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.3" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} - diff --git a/module3/exo3/exercice_fr.Rmd b/module3/exo3/exercice_fr.Rmd deleted file mode 100644 index 7eece5e296bb586e88166aa8a263ca75b44c2b9e..0000000000000000000000000000000000000000 --- a/module3/exo3/exercice_fr.Rmd +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: "Votre titre" -author: "Votre nom" -date: "La date du jour" -output: html_document ---- - - -```{r setup, include=FALSE} -knitr::opts_chunk$set(echo = TRUE) -``` - -## Quelques explications - -Ceci est un document R markdown que vous pouvez aisément exporter au format HTML, PDF, et MS Word. Pour plus de détails sur R Markdown consultez . - -Lorsque vous cliquerez sur le bouton **Knit** ce document sera compilé afin de ré-exécuter le code R et d'inclure les résultats dans un document final. Comme nous vous l'avons montré dans la vidéo, on inclue du code R de la façon suivante: - -```{r cars} -summary(cars) -``` - -Et on peut aussi aisément inclure des figures. Par exemple: - -```{r pressure, echo=FALSE} -plot(pressure) -``` - -Vous remarquerez le paramètre `echo = FALSE` qui indique que le code ne doit pas apparaître dans la version finale du document. Nous vous recommandons dans le cadre de ce MOOC de ne pas utiliser ce paramètre car l'objectif est que vos analyses de données soient parfaitement transparentes pour être reproductibles. - -Comme les résultats ne sont pas stockés dans les fichiers Rmd, pour faciliter la relecture de vos analyses par d'autres personnes, vous aurez donc intérêt à générer un HTML ou un PDF et à le commiter. - -Maintenant, à vous de jouer! Vous pouvez effacer toutes ces informations et les remplacer par votre document computationnel. diff --git a/module3/exo3/exercice_fr.ipynb b/module3/exo3/exercice_fr.ipynb deleted file mode 100644 index 0bbbe371b01e359e381e43239412d77bf53fb1fb..0000000000000000000000000000000000000000 --- a/module3/exo3/exercice_fr.ipynb +++ /dev/null @@ -1,25 +0,0 @@ -{ - "cells": [], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.3" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} - diff --git a/module3/exo3/exercice_python_en.org b/module3/exo3/exercice_python_en.org deleted file mode 100644 index 5782f493934678ba782fb65634a4d86e5f3adefc..0000000000000000000000000000000000000000 --- a/module3/exo3/exercice_python_en.org +++ /dev/null @@ -1,94 +0,0 @@ -#+TITLE: Your title -#+AUTHOR: Your name -#+DATE: Today's date -#+LANGUAGE: en -# #+PROPERTY: header-args :eval never-export - -#+HTML_HEAD: -#+HTML_HEAD: -#+HTML_HEAD: -#+HTML_HEAD: -#+HTML_HEAD: -#+HTML_HEAD: - -* Some explanations - -This is an org-mode document with code examples in R. Once opened in -Emacs, this document can easily be exported to HTML, PDF, and Office -formats. For more information on org-mode, see -https://orgmode.org/guide/. - -When you type the shortcut =C-c C-e h o=, this document will be -exported as HTML. All the code in it will be re-executed, and the -results will be retrieved and included into the exported document. If -you do not want to re-execute all code each time, you can delete the # -and the space before ~#+PROPERTY:~ in the header of this document. - -Like we showed in the video, Python code is included as follows (and -is exxecuted by typing ~C-c C-c~): - -#+begin_src python :results output :exports both -print("Hello world!") -#+end_src - -#+RESULTS: -: Hello world! - -And now the same but in an Python session. With a session, Python's -state, i.e. the values of all the variables, remains persistent from -one code block to the next. The code is still executed using ~C-c -C-c~. - -#+begin_src python :results output :session :exports both -import numpy -x=numpy.linspace(-15,15) -print(x) -#+end_src - -#+RESULTS: -#+begin_example -[-15. -14.3877551 -13.7755102 -13.16326531 -12.55102041 - -11.93877551 -11.32653061 -10.71428571 -10.10204082 -9.48979592 - -8.87755102 -8.26530612 -7.65306122 -7.04081633 -6.42857143 - -5.81632653 -5.20408163 -4.59183673 -3.97959184 -3.36734694 - -2.75510204 -2.14285714 -1.53061224 -0.91836735 -0.30612245 - 0.30612245 0.91836735 1.53061224 2.14285714 2.75510204 - 3.36734694 3.97959184 4.59183673 5.20408163 5.81632653 - 6.42857143 7.04081633 7.65306122 8.26530612 8.87755102 - 9.48979592 10.10204082 10.71428571 11.32653061 11.93877551 - 12.55102041 13.16326531 13.7755102 14.3877551 15. ] -#+end_example - -Finally, an example for graphical output: -#+begin_src python :results output file :session :var matplot_lib_filename="./cosxsx.png" :exports results -import matplotlib.pyplot as plt - -plt.figure(figsize=(10,5)) -plt.plot(x,numpy.cos(x)/x) -plt.tight_layout() - -plt.savefig(matplot_lib_filename) -print(matplot_lib_filename) -#+end_src - -#+RESULTS: -[[file:./cosxsx.png]] - -Note the parameter ~:exports results~, which indicates that the code -will not appear in the exported document. We recommend that in the -context of this MOOC, you always leave this parameter setting as -~:exports both~, because we want your analyses to be perfectly -transparent and reproducible. - -Watch out: the figure generated by the code block is /not/ stored in -the org document. It's a plain file, here named ~cosxsx.png~. You have -to commit it explicitly if you want your analysis to be legible and -understandable on GitLab. - -Finally, don't forget that we provide in the resource section of this -MOOC a configuration with a few keyboard shortcuts that allow you to -quickly create code blocks in Python by typing ~ -#+HTML_HEAD: -#+HTML_HEAD: -#+HTML_HEAD: -#+HTML_HEAD: -#+HTML_HEAD: - -* Quelques explications - -Ceci est un document org-mode avec quelques exemples de code -python. Une fois ouvert dans emacs, ce document peut aisément être -exporté au format HTML, PDF, et Office. Pour plus de détails sur -org-mode vous pouvez consulter https://orgmode.org/guide/. - -Lorsque vous utiliserez le raccourci =C-c C-e h o=, ce document sera -compilé en html. Tout le code contenu sera ré-exécuté, les résultats -récupérés et inclus dans un document final. Si vous ne souhaitez pas -ré-exécuter tout le code à chaque fois, il vous suffit de supprimer -le # et l'espace qui sont devant le ~#+PROPERTY:~ au début de ce -document. - -Comme nous vous l'avons montré dans la vidéo, on inclue du code -python de la façon suivante (et on l'exécute en faisant ~C-c C-c~): - -#+begin_src python :results output :exports both -print("Hello world!") -#+end_src - -#+RESULTS: -: Hello world! - -Voici la même chose, mais avec une session python, donc une -persistance d'un bloc à l'autre (et on l'exécute toujours en faisant -~C-c C-c~). -#+begin_src python :results output :session :exports both -import numpy -x=numpy.linspace(-15,15) -print(x) -#+end_src - -#+RESULTS: -#+begin_example -[-15. -14.3877551 -13.7755102 -13.16326531 -12.55102041 - -11.93877551 -11.32653061 -10.71428571 -10.10204082 -9.48979592 - -8.87755102 -8.26530612 -7.65306122 -7.04081633 -6.42857143 - -5.81632653 -5.20408163 -4.59183673 -3.97959184 -3.36734694 - -2.75510204 -2.14285714 -1.53061224 -0.91836735 -0.30612245 - 0.30612245 0.91836735 1.53061224 2.14285714 2.75510204 - 3.36734694 3.97959184 4.59183673 5.20408163 5.81632653 - 6.42857143 7.04081633 7.65306122 8.26530612 8.87755102 - 9.48979592 10.10204082 10.71428571 11.32653061 11.93877551 - 12.55102041 13.16326531 13.7755102 14.3877551 15. ] -#+end_example - -Et enfin, voici un exemple de sortie graphique: -#+begin_src python :results output file :session :var matplot_lib_filename="./cosxsx.png" :exports results -import matplotlib.pyplot as plt - -plt.figure(figsize=(10,5)) -plt.plot(x,numpy.cos(x)/x) -plt.tight_layout() - -plt.savefig(matplot_lib_filename) -print(matplot_lib_filename) -#+end_src - -#+RESULTS: -[[file:./cosxsx.png]] - -Vous remarquerez le paramètre ~:exports results~ qui indique que le code -ne doit pas apparaître dans la version finale du document. Nous vous -recommandons dans le cadre de ce MOOC de ne pas changer ce paramètre -(indiquer ~both~) car l'objectif est que vos analyses de données soient -parfaitement transparentes pour être reproductibles. - -Attention, la figure ainsi générée n'est pas stockée dans le document -org. C'est un fichier ordinaire, ici nommé ~cosxsx.png~. N'oubliez pas -de le committer si vous voulez que votre analyse soit lisible et -compréhensible sur GitLab. - -Enfin, n'oubliez pas que nous vous fournissons dans les ressources de -ce MOOC une configuration avec un certain nombre de raccourcis -claviers permettant de créer rapidement les blocs de code python (en -faisant ~ + + + + + Annexe de reproductibilité + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+

Annexe de reproductibilité

+
François Févotte
+
avril 2020
+
+ +

Ce document a été réalisé à l'occasion du MOOC "Recherche Reproductible". Il accompagne l'analyse de la concentration de CO2 dans l'atmosphère depuis 1958 et détaille les étapes nécessaires pour rejouer l'étude.

+

Un lecteur peut se contenter de lire le document généré par l'analyse, et devrait y trouver les détails suffisants pour comprendre ce qui a été fait. Pour les plus courageux, il est aussi possible d'aller plus loin en rejouant tous les calculs de l'analyse ; ce document détaille comment.

+

Cette analyse est développée en langage Julia et s'appuie sur un "environnement", c'est à dire un ensemble de paquets de l'écosystème Julia implémentant diverses fonctionnalités d'analyse de données. La première étape consistera donc à installer ces divers composants logiciels. Dans la deuxième partie de ce document, nous verrons comment re-jouer l'analyse. Le lecteur intéressé pourra alors re-jouer tous les calculs sur sa propre machine, voire tester l'effet de ses propres modifications dans le document computationnel exercice.jmd. Ce processus peut être long et frustrant ; aussi proposons nous dans une dernière partie une étape de compilation optionnelle que le lecteur intéressé pourrait suivre afin d'améliorer les performances du rendu de l'analyse, et ainsi rendre plus efficaces les cycles de modification / test du document computationnel.

+

Installation préalable

+

Les étapes listées dans cette partie n'ont vocation à être réalisées qu'une seule fois, pour installer les logiciels requis sur votre machine.

+

Julia

+
    +
  1. télécharger le langage Julia (version 1.4.0), dans sa variante appropriée en fonction de votre architecture matérielle et de votre système d'exploitation. Nous listons ci-dessous les liens directs vers le téléchargement pour les 3 OS majoritaires en architecture x86 à 64 bits, ce qui devrait couvrir la grande majorité des cas. Le dernier lien mène à la liste complète des variantes disponibles :

    + +
  2. +
  3. suivre les instructions spécifiques selon votre système d'exploitation.

    +
  4. +
  5. à l'issue de cette étape, vous devriez être en mesure d'ouvrir un terminal Julia : capture écran d'un terminal Julia

    +
  6. +
+

Environnement

+

L'ensemble des briques logicielles sur lesquelles s'appuie notre analyse constitue un "environnement", décrit de manière succincte dans le fichier Project.toml et plus détaillée dans le fichier Manifest.toml. Les paquets logiciels compris dans cet environnement peuvent être installés en tapant les deux commandes suivantes dans la console Julia :

+
julia> include(raw"C:\Users\francois\Desktop\mooc-rr\module3\exo3\utils.jl")
+
+julia> Exercice.setup()
+ Activating environment at `C:\Users\francois\Desktop\mooc-rr\module3\exo3\Project.toml`
+[ Info: Installing required packages
+...
+

Notes :

+
    +
  • Dans la commande include(raw("...utils.jl")), n'oubliez pas d'adapter le chemin du fichier utils.jl. Si vous êtes en train de visualiser ce document avec un navigateur web, vous pouvez probablement récupérer le chemin correspondant dans la barre d'URL et la copier-coller. Notez que dans la console Julia sous windows, on "colle" avec un clic droit de la souris.

    +
  • +
  • Cette étape nécessite une connexion Internet afin de télécharger les paquets requis. Elle peut durer quelques minutes.

    +
  • +
  • Vous pouvez garder votre console Julia ouverte pour la ré-utiliser pour les prochaines étapes.

    +
  • +
+

Génération du document computationnel

+

Le document computationnel de l'étude est constitué par le fichier exercice.jmd, qui entremêle commentaires (en langage Markdown) et code (en langage Julia).

+

Ce document computationnel peut être rendu au format HTML, pour générer la sortie exercice.html, dans laquelle le code julia a été exécuté et les résultats produits sont visualisés. Tout ceci est pris en charge par le paquet Julia Weave, qui fournit un service similaire à knitr pour le langage R ou Pweave pour Python.

+

Pour (re-)générer ce document HTML, les commandes suivantes doivent être entrées dans la console Julia :

+
julia> include(raw"C:\Users\francois\Desktop\mooc-rr\module3\exo3\utils.jl")
+
+julia> Exercice.weave()
+ Activating environment at `.../Project.toml`
+[ Info: Writing to file exercice.jl
+[ Info: Weaving chunk 1 from line 39
+[ Info: Weaving chunk 2 from line 67
+[ Info: * Instantiating project
+[ Info: Weaving chunk 3 from line 73
+...
+[ Info: Report weaved to exercice.html
+ 96.114542 seconds (253.72 M allocations: 12.975 GiB, 4.71% gc time)
+

Notes :

+
    +
  • Il est inutile de ré-exécuter la ligne include(...) si vous utilisez la même console que dans les étapes précédentes.

    +
  • +
  • Cette étape peut durer quelques minutes ; nous verrons dans la prochaine partie comment accélérer ce processus si vous prévoyez de réaliser et tester des modifications dans le document computationnel.

    +
  • +
  • Vous pouvez garder votre console ouverte pour la ré-utiliser ultérieurement si nécessaire.

    +
  • +
+

(Optionnellement) compilation des paquets de l'environnement

+

Vous pouvez tester dès maintenant vos idées en apportant des modifications au fichier exercice.jmd et en re-générant son rendu HTML selon les instructions de la partie précédente.

+

Nous voyons dans cette partie comment améliorer la productivité de ce genre de tests en compilant les paquets Julia utilisés dans l'étude pour rendre leur utilisation plus performante.

+
julia> include(raw"C:\Users\francois\Desktop\mooc-rr\module3\exo3\utils.jl")
+
+julia> Exercice.compile()
+...
+

A partir de maintenant, le processus de génération du rendu HTML devrait être accéléré de manière substantielle, pour ne prendre que quelques secondes :

+
julia> Exercice.weave()
+ Activating environment at `.../Project.toml`
+[ Info: Writing to file exercice.jl
+[ Info: Weaving chunk 1 from line 39
+[ Info: Weaving chunk 2 from line 67
+[ Info: * Instantiating project
+[ Info: Weaving chunk 3 from line 73
+...
+[ Info: Report weaved to exercice.html
+  7.262408 seconds (23.57 M allocations: 1.465 GiB, 12.50% gc time)
+ + + + + + + + + + + + + + + +
+ + + +
+
+
+ + diff --git a/module3/exo3/repro.jmd b/module3/exo3/repro.jmd new file mode 100644 index 0000000000000000000000000000000000000000..4a479f32244d2996c2bb14460c6f36084a39cc3d --- /dev/null +++ b/module3/exo3/repro.jmd @@ -0,0 +1,174 @@ +--- +title : Annexe de reproductibilité +author : François Févotte +date: avril 2020 +options: + css: skeleton_css.css + template: julia_html.tpl +--- + +Ce document a été réalisé à l'occasion du [MOOC "Recherche +Reproductible"](https://www.fun-mooc.fr/courses/course-v1:inria+41016+self-paced/info). Il +accompagne l'[analyse de la concentration de CO2 dans l'atmosphère depuis +1958](exercice.html) et détaille les étapes nécessaires pour rejouer l'étude. + +Un lecteur peut se contenter de lire le document généré par l'analyse, et +devrait y trouver les détails suffisants pour comprendre ce qui a été fait. Pour +les plus courageux, il est aussi possible d'aller plus loin en rejouant tous les +calculs de l'analyse ; ce document détaille comment. + +Cette analyse est développée en langage [Julia](http://julialang.org/) et +s'appuie sur un "environnement", c'est à dire un ensemble de paquets de +l'écosystème Julia implémentant diverses fonctionnalités d'analyse de +données. La première étape consistera donc à installer ces divers composants +logiciels. Dans la deuxième partie de ce document, nous verrons comment re-jouer +l'analyse. Le lecteur intéressé pourra alors re-jouer tous les calculs sur sa +propre machine, voire tester l'effet de ses propres modifications dans le +document computationnel [`exercice.jmd`](exercice.jmd). Ce processus peut être +long et frustrant ; aussi proposons nous dans une dernière partie une étape de +compilation optionnelle que le lecteur intéressé pourrait suivre afin +d'améliorer les performances du rendu de l'analyse, et ainsi rendre plus +efficaces les cycles de modification / test du document computationnel. + + +# Installation préalable + +Les étapes listées dans cette partie n'ont vocation à être réalisées qu'une +seule fois, pour installer les logiciels requis sur votre machine. + +## Julia + +1. télécharger le langage Julia (version 1.4.0), dans sa variante appropriée en + fonction de votre architecture matérielle et de votre système + d'exploitation. Nous listons ci-dessous les liens directs vers le + téléchargement pour les 3 OS majoritaires en architecture x86 à 64 bits, ce qui + devrait couvrir la grande majorité des cas. Le dernier lien mène à la liste + complète des variantes disponibles : + - [Windows, 64-bit](https://julialang-s3.julialang.org/bin/winnt/x64/1.4/julia-1.4.0-win64.exe) + - [macOS, 64-bit](https://julialang-s3.julialang.org/bin/mac/x64/1.4/julia-1.4.0-mac64.dmg) + - [Linux, x86-64](https://julialang-s3.julialang.org/bin/linux/x64/1.4/julia-1.4.0-linux-x86_64.tar.gz) + - [liste de toutes les variantes](https://julialang.org/downloads/) + +2. suivre les [instructions + spécifiques](https://julialang.org/downloads/platform/) selon votre système + d'exploitation. + +3. à l'issue de cette étape, vous devriez être en mesure d'ouvrir un terminal + Julia : + ![capture écran d'un terminal Julia](https://software.opensuse.org/images/thumbnails/julia.png) + + +## Environnement + +L'ensemble des briques logicielles sur lesquelles s'appuie notre analyse +constitue un "environnement", décrit de manière succincte dans le fichier +[`Project.toml`](Project.toml) et plus détaillée dans le fichier +[`Manifest.toml`](Manifest.toml). Les paquets logiciels compris dans cet +environnement peuvent être installés en tapant les deux commandes suivantes dans +la console Julia : + +``` +julia> include(raw"C:\Users\francois\Desktop\mooc-rr\module3\exo3\utils.jl") + +julia> Exercice.setup() + Activating environment at `C:\Users\francois\Desktop\mooc-rr\module3\exo3\Project.toml` +[ Info: Installing required packages +... +``` + +**Notes :** +- Dans la commande `include(raw("...utils.jl"))`, n'oubliez pas d'adapter le + chemin du fichier `utils.jl`. Si vous êtes en train de visualiser ce document + avec un navigateur web, vous pouvez probablement récupérer le chemin + correspondant dans la barre d'URL et la copier-coller. Notez que dans la + console Julia sous windows, on "colle" avec un clic droit de la souris. + +- Cette étape nécessite une connexion Internet afin de télécharger les paquets + requis. Elle peut durer quelques minutes. + +- Vous pouvez garder votre console Julia ouverte pour la ré-utiliser pour les + prochaines étapes. + + +# Génération du document computationnel + +Le document computationnel de l'étude est constitué par le fichier +[`exercice.jmd`](exercice.jmd), qui entremêle commentaires (en langage Markdown) +et code (en langage Julia). + +Ce document computationnel peut être rendu au format HTML, pour générer la +sortie [`exercice.html`](exercice.html), dans laquelle le code julia a été +exécuté et les résultats produits sont visualisés. Tout ceci est pris en charge +par le paquet Julia [Weave](https://github.com/JunoLab/Weave.jl), qui fournit un +service similaire à [knitr](https://yihui.org/knitr/) pour le langage R ou +[Pweave](http://mpastell.com/pweave) pour Python. + +Pour (re-)générer ce document HTML, les commandes suivantes doivent être entrées +dans la console Julia : + +``` +julia> include(raw"C:\Users\francois\Desktop\mooc-rr\module3\exo3\utils.jl") + +julia> Exercice.weave() + Activating environment at `.../Project.toml` +[ Info: Writing to file exercice.jl +[ Info: Weaving chunk 1 from line 39 +[ Info: Weaving chunk 2 from line 67 +[ Info: * Instantiating project +[ Info: Weaving chunk 3 from line 73 +... +[ Info: Report weaved to exercice.html + 96.114542 seconds (253.72 M allocations: 12.975 GiB, 4.71% gc time) +``` + +**Notes :** +- Il est inutile de ré-exécuter la ligne `include(...)` si vous utilisez la même + console que dans les étapes précédentes. + +- Cette étape peut durer quelques minutes ; nous verrons dans la prochaine + partie comment accélérer ce processus si vous prévoyez de réaliser et tester + des modifications dans le document computationnel. + +- Vous pouvez garder votre console ouverte pour la ré-utiliser ultérieurement si + nécessaire. + + +# (Optionnellement) compilation des paquets de l'environnement + +Vous pouvez tester dès maintenant vos idées en apportant des modifications au +fichier `exercice.jmd` et en re-générant son rendu HTML selon les instructions +de la partie précédente. + +Nous voyons dans cette partie comment améliorer la productivité de ce genre de +tests en compilant les paquets Julia utilisés dans l'étude pour rendre leur +utilisation plus performante. + + +``` +julia> include(raw"C:\Users\francois\Desktop\mooc-rr\module3\exo3\utils.jl") + +julia> Exercice.compile() +... +``` + +Cette phase de compilation devrait avoir généré un nouveau fichier `Exercice.so` +dans le répertoire de l'étude. A partir de maintenant, le processus de +génération du rendu HTML devrait être accéléré de manière substantielle, pour ne +prendre que quelques secondes : + +``` +julia> Exercice.weave() + Activating environment at `.../Project.toml` +[ Info: Writing to file exercice.jl +[ Info: Weaving chunk 1 from line 39 +[ Info: Weaving chunk 2 from line 67 +[ Info: * Instantiating project +[ Info: Weaving chunk 3 from line 73 +... +[ Info: Report weaved to exercice.html + 7.262408 seconds (23.57 M allocations: 1.465 GiB, 12.50% gc time) +``` + + + diff --git a/module3/exo3/setup.jl b/module3/exo3/setup.jl new file mode 100755 index 0000000000000000000000000000000000000000..7ed83c9d2e4af3ad1e6254f7b23d65da6446555b --- /dev/null +++ b/module3/exo3/setup.jl @@ -0,0 +1,14 @@ +#!/bin/bash +#= +exec julia --color=yes --startup-file=no --project "${BASH_SOURCE[0]}" "$@" +=# + +using Pkg +Pkg.activate(@__DIR__) + +@info "Installing required packages" +Pkg.instantiate() + +# Local Variables: +# mode: julia +# End: diff --git a/module3/exo3/utils.jl b/module3/exo3/utils.jl index 22fdc701dcf8370676bff2be9a6ea2fe70719919..b998954c6819b4ffc770d9f1bfdf9a2475cc89c9 100644 --- a/module3/exo3/utils.jl +++ b/module3/exo3/utils.jl @@ -1,11 +1,14 @@ # Permet de construire des durées avec une syntaxe comme : # 7Days +using Dates const Years = Year(1) const Days = Day(1) # Affichage des DataFrames dans la sortie HTML +using DataFrames +using Printf function info(df::DataFrame) try WEAVE_ARGS @@ -90,3 +93,28 @@ function disp() m.captures[1] end |> print end + + +module Exercice + +function run_julia(args...) + cd(@__DIR__) + julia = Base.julia_cmd()[1] + run(`$julia --color=yes --startup-file=no --project $args`) + nothing +end + +setup() = run_julia("setup.jl") + +compile() = run_julia("compile.jl") + +function weave() + cd(@__DIR__) + + opts = String[] + isfile("Exercice.so") && push!(opts, "-JExercice.so") + + run_julia(opts..., "make.jl") +end + +end