Commit 62bcac45 authored by François Févotte's avatar François Févotte

Ex 03-3 : annexe de reproductibilité

parent 4ee2051c
#!/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
......
......@@ -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 = @.
</pre>
......@@ -737,7 +735,7 @@ Environment:
<pre class="output">
Project Exercice v0.1.0
Status &#96;~/tmp/MOOC-RR/module3/exo3/Project.toml&#96;
Status &#96;~/mooc/mooc-rr/module3/exo3/Project.toml&#96;
&#91;336ed68f&#93; CSV v0.6.1
&#91;a93c6f00&#93; DataFrames v0.20.2
&#91;82cc6244&#93; DataInterpolations v2.0.0
......@@ -948,9 +946,9 @@ Missing data: 2012-09-29 - 2012-10-20 &#40;21 days&#41;
<p>Une visualisation de l&#39;ensemble des données semble montrer une augmentation tendancielle de la concentration en CO2, à laquelle se superpose une oscillation à plus haute fréquence.</p>
<div id="03e5d5ec-455c-4108-b493-8a9c094bf1af" style="width:576px;height:384px;"></div>
<div id="77369a40-747c-4818-997c-823ab5935693" style="width:576px;height:384px;"></div>
<script>
PLOT = document.getElementById('03e5d5ec-455c-4108-b493-8a9c094bf1af');
PLOT = document.getElementById('77369a40-747c-4818-997c-823ab5935693');
Plotly.plot(PLOT, [
{
"xaxis": "x1",
......@@ -7425,9 +7423,9 @@ Missing data: 2012-09-29 - 2012-10-20 &#40;21 days&#41;
<p>Un zoom sur les dernières années laisse penser que le cycle court se produit sur une période annuelle, avec un minimum local atteint chaque année autour du mois d&#39;octobre.</p>
<div id="a0155b88-6422-49b2-9ef7-6b6686f2bad9" style="width:576px;height:384px;"></div>
<div id="b1b87124-caea-443a-a309-af267979fc5f" style="width:576px;height:384px;"></div>
<script>
PLOT = document.getElementById('a0155b88-6422-49b2-9ef7-6b6686f2bad9');
PLOT = document.getElementById('b1b87124-caea-443a-a309-af267979fc5f');
Plotly.plot(PLOT, [
{
"xaxis": "x1",
......@@ -8005,9 +8003,9 @@ Missing data: 2012-09-29 - 2012-10-20 &#40;21 days&#41;
<p>En zoomant sur les données interpolées autour de l&#39;une des périodes de données manquantes, on observe bien le résultat attendu : une interpolation linéaire journalière lorsque les données sont disponibles, mais aucune interpolation lorsque les données sont manquantes.</p>
<div id="96a0c70f-ae2a-4501-81bd-f3a273ac4ef2" style="width:576px;height:384px;"></div>
<div id="721b56d2-967a-4d06-89a8-0ad58d5e5f6c" style="width:576px;height:384px;"></div>
<script>
PLOT = document.getElementById('96a0c70f-ae2a-4501-81bd-f3a273ac4ef2');
PLOT = document.getElementById('721b56d2-967a-4d06-89a8-0ad58d5e5f6c');
Plotly.plot(PLOT, [
{
"xaxis": "x1",
......@@ -8293,9 +8291,9 @@ Missing data: 2012-09-29 - 2012-10-20 &#40;21 days&#41;
<p>Sur ces années complètes, la composante <code>day</code> de la date devrait être équirépartie entre 0 et 365, ce qui est globalement le cas. Les données manquantes n&#39;ont donc pas d&#39;impact significatif de ce point de vue là.</p>
<div id="93293cb8-6ed8-4a4f-877a-5b8c1d4ee683" style="width:576px;height:384px;"></div>
<div id="81c8d63b-b2cb-44e8-95db-0c1c93218680" style="width:576px;height:384px;"></div>
<script>
PLOT = document.getElementById('93293cb8-6ed8-4a4f-877a-5b8c1d4ee683');
PLOT = document.getElementById('81c8d63b-b2cb-44e8-95db-0c1c93218680');
Plotly.plot(PLOT, [
{
"xaxis": "x1",
......@@ -8842,9 +8840,9 @@ Missing data: 2012-09-29 - 2012-10-20 &#40;21 days&#41;
<p>Examinons par exemple l&#39;effet de ce traitement sur les données interpolées de l&#39;année 1982. On voit, sur la figure du haut, les mesures brutes ainsi que la tendance locale &#40;affine&#41;. Sur la figure du bas, la composante périodique locale vérifie bien les contraintes demandées, avec ses valeurs nulles aux bords.</p>
<div id="4eecb98e-6f0e-48fd-bedd-32a074be336c" style="width:576px;height:384px;"></div>
<div id="21cd3557-d0d2-4699-a99b-b690baeec269" style="width:576px;height:384px;"></div>
<script>
PLOT = document.getElementById('4eecb98e-6f0e-48fd-bedd-32a074be336c');
PLOT = document.getElementById('21cd3557-d0d2-4699-a99b-b690baeec269');
Plotly.plot(PLOT, [
{
"xaxis": "x1",
......@@ -11358,9 +11356,9 @@ Missing data: 2012-09-29 - 2012-10-20 &#40;21 days&#41;
<p>Et nous traçons l&#39;ensemble des composantes oscillantes locales aux côtés de cette moyenne.</p>
<div id="9b7298db-7571-4c62-a07b-0014c0e94338" style="width:576px;height:384px;"></div>
<div id="96bdfb6d-d341-4521-8615-c070e3b07c86" style="width:576px;height:384px;"></div>
<script>
PLOT = document.getElementById('9b7298db-7571-4c62-a07b-0014c0e94338');
PLOT = document.getElementById('96bdfb6d-d341-4521-8615-c070e3b07c86');
Plotly.plot(PLOT, [
{
"xaxis": "x1",
......@@ -54765,9 +54763,9 @@ Missing data: 2012-09-29 - 2012-10-20 &#40;21 days&#41;
<p>Même s&#39;il reste des oscillations locales, nous constatons tout de même que la composante tendancielle est devenue suffisamment lisse pour récupérer une forme de monotonie.</p>
<div id="863c996b-228c-479f-b454-f9a580d1f594" style="width:576px;height:384px;"></div>
<div id="8d83041b-d791-4cac-94e0-056dc3903729" style="width:576px;height:384px;"></div>
<script>
PLOT = document.getElementById('863c996b-228c-479f-b454-f9a580d1f594');
PLOT = document.getElementById('8d83041b-d791-4cac-94e0-056dc3903729');
Plotly.plot(PLOT, [
{
"xaxis": "x1",
......@@ -135400,9 +135398,9 @@ date_num ^ 2 9.10059e-8 2.66606e-9 34.135 &lt;1e-37 8.56585e-8
<p>Par ailleurs, s&#39;il est clair que la tendance est à l&#39;augmentation, on voit toutefois que l&#39;incertitude sur les paramètres n&#39;est pas complètement négligeable. L&#39;incertitude sur <span class="math">$\beta$</span> est en particulier de nature à engendrer une perte de prédictibilité du modèle en temps long.</p>
<div id="f204dbd4-c620-4553-b398-b428057eac09" style="width:576px;height:384px;"></div>
<div id="0104ecfb-4911-4f85-ae08-682b0cae2a5d" style="width:576px;height:384px;"></div>
<script>
PLOT = document.getElementById('f204dbd4-c620-4553-b398-b428057eac09');
PLOT = document.getElementById('0104ecfb-4911-4f85-ae08-682b0cae2a5d');
Plotly.plot(PLOT, [
{
"xaxis": "x1",
......@@ -262588,9 +262586,9 @@ date_num ^ 2 9.10059e-8 2.66606e-9 34.135 &lt;1e-37 8.56585e-8
<p>On voit que la forme annuelle semble bien reproduite sur les 5 premières années, pour lesquelles il est possible de comparer les prédictions avec les mesures réelles. En revanche, la tendance ne colle que sur les deux premières années d&#39;extrapolation ; on observe un décalage significatif et croissant ensuite.</p>
<div id="bc82139a-5dff-4fd5-809d-ad018cf33f9d" style="width:576px;height:384px;"></div>
<div id="483cf462-2f2f-43e8-8460-b93c6b24a85e" style="width:576px;height:384px;"></div>
<script>
PLOT = document.getElementById('bc82139a-5dff-4fd5-809d-ad018cf33f9d');
PLOT = document.getElementById('483cf462-2f2f-43e8-8460-b93c6b24a85e');
Plotly.plot(PLOT, [
{
"xaxis": "x1",
......@@ -265117,9 +265115,9 @@ date_num ^ 2 -8.3699e-16 1.52956e-16 -5.47208 &lt;1e-7 -1.13678e-15 -
<p>En reprenant l&#39;analyse précédente, ce nouveau modèle donne les prédictions suivantes, qui collent quasi-parfaitement aux mesures dans la période de test :</p>
<div id="aca285cf-e5c3-472c-8c6f-e77a81c687df" style="width:576px;height:384px;"></div>
<div id="f7ef88ea-a4c3-44f1-8d76-c2fc958453f5" style="width:576px;height:384px;"></div>
<script>
PLOT = document.getElementById('aca285cf-e5c3-472c-8c6f-e77a81c687df');
PLOT = document.getElementById('f7ef88ea-a4c3-44f1-8d76-c2fc958453f5');
Plotly.plot(PLOT, [
{
"xaxis": "x1",
......@@ -267629,7 +267627,7 @@ date_num ^ 2 -8.3699e-16 1.52956e-16 -5.47208 &lt;1e-7 -1.13678e-15 -
<div class="footer"><p>
Published from <a href="exercice.jmd">exercice.jmd</a> using
<a href="http://github.com/mpastell/Weave.jl">Weave.jl</a>
on 2020-04-13.
on 2020-04-15.
<p></div>
#+TITLE: Your title
#+AUTHOR: Your name
#+DATE: Today's date
#+LANGUAGE: en
# #+PROPERTY: header-args :eval never-export
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="http://www.pirilampo.org/styles/readtheorg/css/htmlize.css"/>
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="http://www.pirilampo.org/styles/readtheorg/css/readtheorg.css"/>
#+HTML_HEAD: <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
#+HTML_HEAD: <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="http://www.pirilampo.org/styles/lib/js/jquery.stickytableheaders.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="http://www.pirilampo.org/styles/readtheorg/js/readtheorg.js"></script>
* 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 ~<r~ or ~<R~ followed by
~Tab~.
Now it's your turn! You can delete all this information and replace it
by your computational document.
#+TITLE: Votre titre
#+AUTHOR: Votre nom
#+DATE: La date du jour
#+LANGUAGE: fr
# #+PROPERTY: header-args :eval never-export
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="http://www.pirilampo.org/styles/readtheorg/css/htmlize.css"/>
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="http://www.pirilampo.org/styles/readtheorg/css/readtheorg.css"/>
#+HTML_HEAD: <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
#+HTML_HEAD: <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="http://www.pirilampo.org/styles/lib/js/jquery.stickytableheaders.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="http://www.pirilampo.org/styles/readtheorg/js/readtheorg.js"></script>
* 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 ~<r~ ou ~<R~ suivi de ~Tab~).
Maintenant, à vous de jouer! Vous pouvez effacer toutes ces
informations et les remplacer par votre document computationnel.
---
title: "Your title"
author: "Your name"
date: "Today's date"
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
## Some explanations
This is an R Markdown document that you can easily export to HTML, PDF, and MS Word formats. For more information on R Markdown, see <http://rmarkdown.rstudio.com>.
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.
{
"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
}
---
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 <http://rmarkdown.rstudio.com>.
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.
{
"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
}
#+TITLE: Your title
#+AUTHOR: Your name
#+DATE: Today's date
#+LANGUAGE: en
# #+PROPERTY: header-args :eval never-export
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="http://www.pirilampo.org/styles/readtheorg/css/htmlize.css"/>
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="http://www.pirilampo.org/styles/readtheorg/css/readtheorg.css"/>
#+HTML_HEAD: <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
#+HTML_HEAD: <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="http://www.pirilampo.org/styles/lib/js/jquery.stickytableheaders.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="http://www.pirilampo.org/styles/readtheorg/js/readtheorg.js"></script>
* 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 ~<p~, ~<P~ or ~<PP~
followed by ~Tab~.
Now it's your turn! You can delete all this information and replace it
by your computational document.
#+TITLE: Votre titre
#+AUTHOR: Votre nom
#+DATE: La date du jour
#+LANGUAGE: fr
# #+PROPERTY: header-args :eval never-export
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="http://www.pirilampo.org/styles/readtheorg/css/htmlize.css"/>
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="http://www.pirilampo.org/styles/readtheorg/css/readtheorg.css"/>
#+HTML_HEAD: <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
#+HTML_HEAD: <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="http://www.pirilampo.org/styles/lib/js/jquery.stickytableheaders.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="http://www.pirilampo.org/styles/readtheorg/js/readtheorg.js"></script>
* 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 ~<p~, ~<P~ ou ~<PP~ suivi de ~Tab~).
Maintenant, à vous de jouer! Vous pouvez effacer toutes ces
informations et les remplacer par votre document computationnel.
#!/bin/bash
#=
OPTS="--color=yes --startup-file=no"
OPTS="--color=yes --startup-file=no --project -qi"
[ -f Exercice.so ] && OPTS="$OPTS -J Exercice.so"
exec julia ${OPTS} "${BASH_SOURCE[0]}" "$@"
=#
using Pkg
Pkg.activate(@__DIR__)
Pkg.instantiate()
using Weave
let srcfile = joinpath(@__DIR__, "exercice.jmd")
tangle(srcfile)
......
This diff is collapsed.
---
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)
```
<!-- Local Variables: --> <!-- mode: markdown --> <!-- ispell-local-dictionary:
"french" --> <!-- End: -->
#!/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:
# 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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment