# 1) Introduction : notes, carnet de notes, indexation et gestion de version

3 technos de Notebook :
- jupyter
- RStudio
- Org-Mode

6 types de reproductibilité :
- Reproductibilité Computationnelle
  - obtentions de mêmes résultats finaux tels que rapportés
  - reproductibilité « absolue » envisageable et souhaitable
- Reproductibilité expérimentale ou « directe »
  - contrôle sur les conditions d’obtentions des données
  - les attentes sont sur les motifs de données résultant de l’expérience
  - utilisation de statistiques pour la validation de reproduction des motifs
- Reproductibilité indirecte ou hypothétique
  - relatif aux recherches et activités scientifiques qui ont en commun d'être impossibles à standardiser complètement
- Reproductibilité par expertise (expériences non-standard et objets de recherche rares
  - « l'expertise reproductible se définit comme la compréhension qu'un expérimentateur qualifié travaillant avec des\
  méthodes similaires sur les mêmes matériaux à ce moment et cet endroit précis produirait des résultats similaires »
- Observation Reproductible: Études de Cas Non-expérimentales
  - domaine des sciences de l’observation (ex. sociologie, radiologie)
  - expertise est clé dans l’observation « reproductible »
- Recherche Non-Reproductible: Observation Participante
  - activités scientifiques où "l'idée même de reproductibilité est écartée au profit de la subjectivité, et d'une\
  dépendance inévitable du contexte pour les résultats de recherche"


**Les étiquettes et outils d’indexation :**

Outils :
- DocFetcher (logiciel d’indexation et de recherche) --> moteur de recherche de bureau
- OrgMode --> possède des fonctionnalités d’étiquetage
- Markdown --> possède une fonctionnalité de commentaire comme le XML
- ExifTool --> utilitaire permettant d’accéder aux métadonnées des images

**Aide markdown du mooc:**\
[Md rr-mooc cheat sheet](https://lms.fun-mooc.fr/courses/course-v1:inria+41016+self-paced/courseware/2bfe60a86fed4994b5493a220c38eb69/13f6fd96266746a0bd9d717a12f1f835/4?activate_block_id=block-v1%3Ainria%2B41016%2Bself-paced%2Btype%40vertical%2Bblock%4089c7893cb5aa4644b06569c65945d4d9)

# 2) La vitrine et l'envers du décor: le document computationnel

[Retranscription des vidéos du module 2](https://lms.fun-mooc.fr/asset-v1:inria+41016+self-paced+type@asset+block/Module2_Transcription_VF.pdf)
[Supports des vidéos du module 2](https://lms.fun-mooc.fr/asset-v1:inria+41016+self-paced+type@asset+block/C028AL_slides_module2-fr-gz.pdf)

## 2.1) Exemples d'études récentes "discutées"

RAS

## 2.2) Difficultés de reproduction des travaux de recherches

### Manque d'informations

**sources et données**

données non disponibles --> résultats difficiles à vérifier

**choix**

choix non expliqués --> choix suspicieux

### L'ordinateur, source d'erreurs

**Logiciel "point&clic"**

Les logiciels "point&clic" qui sont faciles d'utilisation mais dont le détail des calculs, des paramètres etc\
ne sont pas accessibles, où se qui se passe derrière est caché. Ces logiciels dont l'usage premier peut être détourné,\
ce qui crée de potentiels postes d'erreurs.

**Tableurs, erreurs de programmation et de manipulation des données**

Un exemple typique sont les tableurs excel et en particulier ceux, utilisant des macros. De plus, pour certaines valeurs,\
le comportement par défaut du logiciel peut les interprêter de mauvaise manière.\
Par exemple:
- le nom commun d'un gêne MARCH1 interprêtée comme une date,
- un identifiant de gêne interpêter comme un chiffre

**Pile logicielle complexe**

logiciels propriétaires ("boîte noire") dont on ne maîtrise pas le contenu et qui applique aveuglément des procédures de calcul\
et de transformation de données.

**Bugs de programmation**

Erreurs peuvent venir de programmes "maison"

**Manque de rigueur et d'organisation**

1. Pas de Backup

Stockage ne coûte plus rien, mais cela n'empêche que la sauvegarde des données est souvent mal assurée.

2. Pas d'historique

En l'absence de mécanismes de gestion version,  il est courant de remplacer par inadvertance d'anciennes données par de nouvelles.\
--> plus d'accès aux anciennes observations.

3. Pas de contrôle qualité

Utilisation de plans d'expériences randomisées ou pré-étude pas systématiques\
Bonnes pratiques de revue de code, l'intégration continue rarement appliquées

4. Dimension culturelle et sociale

Un article est une version simplifié et intelligible des résultats : "publicité"\
Une description haut-niveau est essentielle (permet de prendre du recul) mais elle est devenue la norme alors que le niveau\
de technicité de la recherche actuelle est bien trop élevé pour qu'il soit possible de donner dans un doc de 8 à 10 pages\
toutes les informations permettant de refaire les expériences et analyses.

  * Description du protocole expérimental souvent assez succinte,
  * Données généralement trop nombreuses pour être données in extinso.\
Elles sont souvent résumées au travers de quelques courbes. 
  * Les traitements statistiques pour parvenir à ces courbes ne sont décrits \
que brièvement.

Tracer toutes les informations et les rendre accessible --> investissement conséquent\
Si personne ne l'exige à quoi bon?\
Donner l'accès --> tout rendre public? N'est-ce pas risqué?
Idées reçues

* Faiblesses deviendraient évidentes

Si je donne accès à tout --> résultats n'apparaîtront pas aussi parfaits que ce qu'ils étaient prétendus être. Risque d'être considéré\
comme un peu sale, pas assez rigoureux, que l'on dise que les résultats présentés ont été sélectionnés mais c'est la réalité \
et ce n'est pas un cas isolé. Dans un domaine où la réputation est essentielle --> plus d'intérêt à le montrer.\
Le cacher finira par paraître suspicieux et pourra nuire à la réputation.

* Quelqu'un pourrait trouver une erreur

Si je révèle tout, quelqu'un peut potentiellement trouver une erreur. --> tout le monde fait des erreurs mêmes des chercheurs de renom.\
Mieux vaut trouver une erreur afin de rendre les travaux correctes.

* Quelqu'un pourrait en tirer un avantage à ma place

Si je rends public mes données ou mon code, un risque est qu'un autre chercheur utilise mes données ou mon code pour écrire plusieurs\
articles alors que j'en aurais publier qu'un. --> si réutilisation, citation de votre travail est obligatoire.

Article les plus cités : présentation de contributions méthodologique ou logiciels devenus essentiels dans un domaine.\
--> il ne faut pas négliger l'intérêt de donner l'accès à sa communauté.\
GitHub (à mi-chemin entre plateforme de dév et réseau social) --> sorte de \
carte de visite pour un développeur.

Travaux avec une dimension éthique.\
Données potentiellement sensibles --> définitions des personnes habilitées\
à avoir accès à ces données et utilisation de techniques cryptographiques.

## 2.3) Le document computationnel

Un tel document (comble le fossé entre l'auteur et le lecteur)\
permet de garder une trace afin :\
* __d'inspecter__ :
  * justifier pourquoi tel ou tel code est utilisé (auteur)
  * comprendre ce qui a été fait (lecteur)
* __de refaire__ : permet de refaire les calculs et les analyses le plus simplement possible
  * 1er point : permet au lecteur de vérifier que les calculs sont corrects
  * 2ème point : permet de corriger des erreurs s'il y en a
  * 3ème point : permet à d'autres de réutiliser les travaux dans un autre contexte

3 outils possibles:
* Jupyter
* Rstudio/knitR
* Org mode 

1 seul document pour explications, code et résultats.
Possibilité d'export.

Jupyter --> plusieurs langages mais pas dans un même notebook (en fait c'est faisable mais compliqué) 
Rstudio --> dédié au langage R, possibilité de faire du python mais pas très ergonomique
Org mode --> on peut faire cohabité différents langages mais la courbe d'apprentissage est plus élevé que pour les deux autres outils.

Jupyter et Rstudio s'appuient sur le markdown et donc sur Pandoc et le style par défaut est très bien\
si l'on veut générer du html. Mais si besoin de générer un pdf avec un style particulier, pas forcément évident de configure Pandoc\
pour qu'il applique le style voulu.

Avec OrgMode capacité à écrire directement du Latex.

### 2.4) Prise en main des outils Jupyter, Rstudio/knitr, Emacs/Org mode

#### a) Jupyter

```
%matplotlib inline
```
--> permet de faire en sorte qu'un graphique soit directement afficher dans le notebook

```
%lsmagic
```
--> permet de connaître plein de commandes très utiles

**Pour exécuter des fragments de code R**

D'abord chargement d'un module python permettant d'interpréter du code R
```
%load_ext rp2.ipython
```
et ensuite
```
%%R
```
D'autres langages sont possibles shell, perl (%%sh, %%perl)

**Partage**

--> possible en utilisant GitLab/Github\
--> sauvegarde au formt html, facilement transférable par mail par exemple

**Exporter vers un docuement pour un article**

Pour l'export, on peut contrôler la vsibilité de chaque cellule via l'utilisation du plugin Hide-code\
Si on veut un contrôle fin, il est possible:
* d'insérer directement des commandes latex ou html (%%latex,%%html)
* Personnaliser les feuilles de styles, les export de NBConvert via des commandes appropriées\
jupyter nbconvert --to mypackage.MyExporter notebook.ipynb

#### b) Rstudio/knitr

#### c) Emacs/Org mode

## 2.5) Travailler avec les autres

Aides pour la préparation d'un document pour un journal ou pour une conférence\
[help_gen_doc_journal_or_conf](https://lms.fun-mooc.fr/courses/course-v1:inria+41016+self-paced/courseware/66bc811404b8481da5f794de54681c5e/358158d052744d239c7f43bd7bcc16b4/)

## 2.6) Analyse comparée des différents outils

**Pour un cours ou un tutoriel**\
--> un notebook est parfaitement adapté, c'est un document facile à prendre en main et dynamique.

**Pour un journal**\
Org mode est très intéressant, il permet d'avoir une organisation chronologique, d'utiliser des étiquettes.\
Les recherches sont facilitées grâce au mécanisme des étiquettes (permet de mettre des notes, des liens, du code)

**Pour un cahier de Laboratoire**\
Org mode est également intéressant.\
L'organisation est cette fois sémantique. C'est un document dans lequel on indique les conventions d'organisation.\
1ère section:\
* Explication d'accès aux informations sur telle ou telle machine
* Scripts de conversion d'un format à un autre
* Scripts de traitement
* Fonctions les plus courantes, communes et facilement accessibles\
Section expériences, section analyses dans lesquelles on peut trouver une organisation plus chronologique.

**Pour un article reproductible**\
Org mode est aussi puissant et permet de regrouper :
* les codes sources, que l'on peut mettre à jour pour mettre à jour les figures du document,
* du code latex, qui permet de maîtriser finement l'apparence de l'article généré

# 3) La main à la pâte : une analyse réplicable

## 3.1) Qu'est-ce qu'une analyse réplicable
**Analyse de données traditionnelle:**\
On se concentre sur les réultats et on met seulement un résumé méthodologique des calculs qui ont permis de les obtenir.\
On termine avec une discussion pour exposer les conclusions tirées de l'analyse.

**Analyse de données replicable**\
On remplace le résumé méthodologique par l'ensemble des codes qui ont permis de faire les caculs ainsi qu'une explication\
détaillée des choix qui ont été faits à chaque étape.
C'est donc plus de travail mais qu'est-ce qui justifie ce travail supplémentaire?
* Analyse plus facile à refaire si des données changent à l'avenir
* Analyse plus facile à modifier si d'autres questions se posent.
* Analyse plus facile à inspecter et à vérifier --> meilleur confiance dans l'analyse

## 3.2) L'incidence de syndrome grippaux

[Notebook Jupyter complet](https://gitlab.inria.fr/learninglab/mooc-rr/mooc-rr-ressources/blob/master/module3/ressources/analyse-syndrome-grippal-jupyter.ipynb)

## 3.3) Importer des données

Données manipulées:
Incidence hebdomadaire du syndrome grippal téléchargée sur le site du réseau de médecin Sentinelles pour l'intervalle de temps\
[1985-week1,2017-week39]

### a) Avec Jupyter

cf. lien vers Notebook, chapitre 3.2

## 3.4) Vérification et inspection

### a) Avec Jupyter

Points clés à retenir:
- Pré-traitement des données
  - Adapter aux conventions de logiciels
  - Faciliter l'analyse
- Vérifier autant que possible
  - Inspection visuelle
  - Code de validation

## 3.5 Questions et réponses

Une analyse réplicable doit contenir **toutes** les étapes de traitement des données sous une forme **exécutable**.

Il est important d'**expliquer _tous_** les choix qui peuvent influencer les résultats.

Ceci nécessite d'exposer beaucoup de **détails techniques**, car c'est à ce niveau que l'on commet le plus d'**erreurs**.

### a) Avec Jupyter


# 4) Vers une étude reproductible : la réalité du terrain

[Retranscription des vidéos du module 4](https://lms.fun-mooc.fr/asset-v1:inria+41016+self-paced+type@asset+block/Module4_Transcription_VF.pdf)
[Supports des vidéos du module 4](https://lms.fun-mooc.fr/asset-v1:inria+41016+self-paced+type@asset+block/C028AL_slides_module4-fr-gz.pdf)

## 4.1) L'enfer des données

Les problèmes classiques:
- les données sont de natures diverses, elles sont non homogènes
  - souvent la forme de table doit être abandonnée:
    - les colonnes n'ont pas la même longueur
    - les données peuvent être des suites chronologiques, des images, etc
- les données peuvent occuper un grand espace mémoire
  - les données numériques ne peuvent être représentées sous format texte que jusqu'à un certain point
  - deux considérations poussent à adopter un format binaire:
    - les nombres stockés en format binaire occupent moins de place mémoire que sous format texte
    - les nombres stockés en format texte doivent obligatoirement être convertis en format binaire afin 
    de pouvoir réaliser des calculs et analyses

Deux formats binaires intéressants pour manipuler des données de nature différente et volumineuses.
--> FITS et HDF5

Pour l'archivage de données (GitLab et GitHub non adaptés):
--> plateformes Zenodo et Figshare

## 4.2) L'enfer du logiciel

### 4.2.1) Le passage à l'échelle : les codes complexes

Code utilisé pour de petits exemples devient vite inadéquat dès lors que le code devient plus complexe ou\
que le volume de données grandit.

L'utilisation d'un workflow est une solution.

Un notebook est une version à la fois appauvrie et plus riche d'un workflow.

Exemples de workflows:
- Galaxy, Kepler, Taverna, Pegasus, Collective Knowledge, Vis Trails...
- Légers: dask, drake, swift, snakemake, ...
- Hybrides: SOS-notebook, ...

Traitement de données volumineuses:

Utilisation de checkpoints dans les calculs (mécanismes éventuels de cache) afin d'éviter de repasser par\
des étapes coûteuses de calcul.

### 4.2.2) Le passage à l'échelle : les environnements complexes

Derrière un simple import de matplotlib, un réseau complexe de dépendances se cache.

Pas de standard :
- Linux (apt, rpm, yum), MacOS X (brew, McPorts, Fink), Windows ( ?)
- Ni pour l'installation ni pour récupérer les informations. . .

Outils de capture des bibliothèques utilisées et des fichiers ouverts lors d'une exécution, pour ensuite les packager,\
par exemple, dans un conteneur Docker:
- CDE, ReproZip, CARE, ...

### 4.2.3) Le passage à l'échelle : l'épreuve du temps

Utilisation de plateformes pérennes telles que les plateformes étatiques.

## 4.3) L'enfer du calcul : la réalité du terrain

Attention aux calculs en flottants (opérations d'arrondi cachées, accumulation d'erreurs)






