# Module 2 : documents computationnels
Rappel : c'est une question de communication
- collaboration scientifique pour produire
- traçabilité de ce qui est diffusé
- transparence sur le procédé calculatoire
## les mauvais exemples
1) Reinhart et Rogoff 2010 : growth in a time of debt
=> concluent que la dette réduit la croissance
On finit par leur demander leurs calculs, même si c'est des pointures...
"erreurs de programmation, exclusions de certaines données, pondérations stat non-conventionnelles"
(2013)
Malheureusement, ce genre de non-publication des calculs est courant en économie...
2) IRM fonctionnelles
2010 Benett et le saumon mort... détectent une activité cérébrale.
Une question de bruit dans ces machines, mais bon...
2016 : Eklund, Nichols, and Knutsson. "A bug in fmri software could invalidate 15 years of brain research"
Et bien sûr dans ce domaine, on ne peut pas se permettre de stocker trop de données...
(Heureusement, ils sont amenés à revoir à la baisse leur estimation, de 40k articles à 3600 articles potentiellement concernés.)
C'est un problème méthodologique, qui nuit à la vérifiabilité des calculs.
3) cristallographie
Geoffrey Chang étudie les protéines de bactéries résistantes aux antibiotiques (3 articles 2001-05)
Mais des résultats contradictoires arrivent d'autres chercheurs...
Il vérifie donc ses calculs et patatras, tout vient de 2 colonnes inversées dans son code.
(Erreur qui a eu le temps de se répandre...) -> rétractation de 5 articles !
Oncologie (1/2 d'études prestigieuses ne peuvent pas passer vers l'industrie),
psychologie (1/3 de repro ?)
=> Peu de domaines épargnés
Science : rigueur, transparence, remise en cause
(Première fois que je me plante sur des quizz !
Insiste sur la chronologie avec le politique/les lobbys : ils exploitent a posteriori,
leur influence n'est pas forcément primordiale.
Moins de transparence, c'est effectivement plus de lisibilité, vu la complexité des matières traitées.
)
## d'où vient la difficulté ?
manques d'info (source données, choix) => crée la suspicion
Le cahier de labo peut aider ??
Aussi, l'**ordinateur** est **source** de calculs plus rapides, mais aussi **d'erreurs** plus rapides...
Pb du manque de maîtrise des outils (calculs "cachés").
Pas facile de lire un tableur excel, souvent. (ERP= enterprise ressource planning, à préférer)
eg: traduction auto en nombre de trucs qui étaient des codes...
Faut-il tout recoder ? Il faut que chaque ligne soit de confiance...
Manque de backup ou d'historique.
Revue de code, Integration Continue...
Ajd, impossible d'être reproductible avec 8 pages d'articles.
Mettre à disposition ça, ça demande du temps... pq le faire si personne e demande ?
(Fait une défense de pourquoi tout rendre public... en débunkant les contre-arguments.)
"Banir les logiciels et formats propriétaires" -> pas de garanties de long terme...
(Le logiciel libre... ono a plus de chance de pvr récupéré des versions passées.)
- éviter excel, word, matlab, SAS, dropbox...
- éventuellement, stocker ces données sur plusieurs plateformes.
- moins d'outils "intuitifs", d'UI, et plus de logique.
Mais les données sensibles ? Pb éthique indépassable...
On doit définir qui a l'accès primaire, et utiliser un peu de cryptographie,
pour avoir un minimum de relecture.
## Principe du document computationnel
Critique le système de publication-storytelling.
(D'ailleurs son schéma est pas "hypothético-déductif" mais bien porté sur une analyse
relativement libre des données.)
Objectifs :
- inspecter la démarche
- permettre de refaire le calcul (corriger/réutiliser)
Ici, trois outils (jupyter, Rstudio, org mode), mais principe identique.
Un docmt, avec code, exlication et résultats, une session que l'on exporte (éventuellement en html).
(org mode n'utilise pas markdown, mais un truc qui ressemble)
Jupyer -> difficile d'intégrer différents lgg, contrairement à org mode.
Dans tous les cas, exporter dans un template donné pour du pdf, c'est dur...
(mais org mode lui permet de se raccrocher au latex... bref)
Questions : de nouvelles erreurs ! (trop de choix et ils me disent pas cb ils attendent !)
J'avais négligé l'aspect "commentaires" et "documentation" du code...
## Starting with Jupyter
On est censé indiqué quand on récupère un résultat "graphique matplotlib"
plutôt que texte, en commençant la cellule de code par`%matplotlib inline`.
Utiliser `%lsmagic` pour découvrir plus de commandes...
Il montre comment utiliser R, shell, perl... pas sûr que le reste fonctionne.
J'aii des petites surprises à l'usage (genre "clear" qui fait pas ce que je veux).
Pour l'affichage du code des cellules, je m'en sors...
__\/!\\__ appuyer sur ESC (depuis mon mac) pour faire les raccourcis clavier
(ESC+H montre les autres raccourcis).
Pour latex, [on ne peut pas embarquer les tabulars](https://stackoverflow.com/questions/42491512/display-latex-table-tabular-in-jupyter-with-latex-cell-magic)... :/
j'arrive pas à générer des nb aléatoires en R...
Il vaut mieux avoir un notebook distinct (changer de kernel) qu'appeler les commandes magiques,
sinon on pert l'autocomplétion, la colorisation, etc... mais sinon les deux sont aussi bien supportés.
On peut personnaliser ses "exporters" : voir NBConvert.
### tips
[lien FUN-MOOC](https://lms.fun-mooc.fr/courses/course-v1:inria+41016+self-paced/courseware/66bc811404b8481da5f794de54681c5e/f8608bfb261b4c289b35b2cd19d5baf3/1?activate_block_id=block-v1%3Ainria%2B41016%2Bself-paced%2Btype%40vertical%2Bblock%403817484c6768457f9d252954f162f851)
on peut passer les variables de python vers R
```
%%R -i df
plot(df)
```
"[De nombreux autres langages de programmation sont disponibles](https://github.com/jupyter/jupyter/wiki/Jupyter-kernels),
et en particulier des langages non libres comme SAS, Mathematica, Matlab…"
-> ils dvp, mais osef pour moi
Pour rendre mes notebooks plus lisibles, éventuellement utiliser des extensions de jupyter ?
Codefolding pour masquer un peu de code, Cell filter pour y ajouter des tags, avoir une table des matières,
Gist it pour limiter l'accès, nbTranslate pour traduire... et l'indispensable zenmmode.
voir https://github.com/kirbs-/hide_code et https://stackoverflow.com/questions/33159518/collapse-cell-in-jupyter-notebook
Apparamment, pour utiliser un env conda, il faut installer nb\_conda\_kernels,
et lancer 'jupyter lab' depuis l'environnement, activé.
Il y a des options pour le suivi de version avancée, mais là je vais laisser tomber pour le moment...
### Rstudio
Notre but est de créer des fichiers R-markdown, c-à-d .Rmd :
on peut voir facilement la console, il y a des cheatsheet intégrées, c'est beau...
Pas de "petits numéros" façon jupyter.
On peut nativement replier le code, et aussi le texte rapidement pour se mettre
juste en mode "table des matières".
\[
Pour 178Mo rien que pour R, avant Rstudio...
non, je ne l'installe pas maintenant, je me contente du lèche-vitrine.
Au pire : ou
peuvent faire l'affaire...
mais comment faire pour les données :/ \]
=> kaggle propose aussi de fire ses notebooks python, avec jusqu'à 20Go de RAM...
mais rappelons que ce n'est que de l'intrapreunariat de google :o)
Fait étrnge : on écrit dans l'en-tête le type d'output visé.
'output: pdf_document'
Pour contrôler le style... passer par la latex ?
Then, il faut plutôt créer un fichier R Sweave.
À savoir : on peut insérer du python, du bash, du SQL...
mais pas de persistance de variable, bien sûr.
=> passer par des fichiers...
Le code python est colorisé, mais ses sorties graphiques ne sont pas gérées...
TODO : je ne lis pas la fiche "installation/documentation"
je ne regarde pas la vidéo "utiliser git avec Rstudio"
## travailler avec les autres
Complexité *caché* quand on produit un pdf avec les outils précédent
(jupyter utilise pandoc ? mais je ne sais pas non plus comment pandoc fonctionne).
Souvent, il faut déjà un latex correctement installé...
(voir aussi knitr ou emacs/org-mode selon l'outil)
À la limite, préférer html quand c'est possible.
Tjrs besoin de cacher certaines cellules de notre document, et d'utiliser le bon **style**.
=> il faut un environnement bien configurer, quand on se dirige vers une impression.
Comment convaincre les co-auteurs ?
(enthousiastes^1, bienveillants (mais "c bcp")^2, et fermés^3.)
1. On doit assurer le SAV \[il fait de nous des freeware evangelists, tin\].
-> on doit s'assurer que le document fonctionne pareil sur toutes nos machines.
2. adopte le style de doc, mais ne gèrent pas le code
-> markdown maîtrisé (et jupyter sera plus facile car pas d'install à faire)
sans install des deux autres, ne peuvent refaire les calculs et exports.
3. Bon bah on sépare
* le "document computationnel" qui produit les résultats et figures
* le "document classique" qui les présente
Ainsi, tout est conservé, documenté, recalculable.
Pour partager du rstudio, Rpubs ça marche mais pas ultra-pérenne
(dropbox non plus : privé).
Gitlabl et github sont plus sûrs, notamment pour le contrôle d'accès...
mais on publie aussi l'historique (il faut avoir été très clean sous tous rapports...)
=> on peut faire le ménage dans le dépot, et archiver dans un **site compagnon**
kézaco ? Runmycode, certaines options éditeurs, hal, figshare ou zenodo (supported by CERN)
-> on met un document et ses annexes, dont code.
\[de l'humour dans les quizz, ça rend la "lecture" de la réponse attendue difficile...
=> ils ont fait deux questions où je devais tout cocher ! 5 et 4 réponses\]
Pour aller plus loin :
-
-
-
## Analyse comparée des outils
Pour créer un cours/tutoriel -> jupyterlab !
Un même environnement, on peut travailler ensemble...
Pour un journal de bord (longitudinal, un seul auteur)
lui fait une organisation chronologique de toutes ses productions,
avec des étiquettes (ne se pose plus la question du lieu de stockage :
le lieu, c'est la date, et la recherche ne se fait plus par lieu mais par balise).
=> org-mode a un bon outil de filtrage pour cela.
(Ce truc est une sorte de méta-git... j'apprécie.)
Ensemble très hétérogène... mais il s'y retrouve !
(Ressemble un peu à mes cahiers... ou à mon vrac.)
On peut aussi utiliser org-mode à plusieurs, pour tenir un cahier de laboratoire.
(Sépare les expériences et les analyses.)
Dernier cas d'usage : créer un article reproductible...
(Très convaincant dans son utilisation de org-mode... tout dans un même fichier !)
Rstudio est quand même un peu pensé pour créer des artilces, mais pas jupyter-lab.
"L'outil importe peu, ce qui compte c'est ce qu'on en fait."
**Collecter l'info, l'organiser (rendre exploitable), mettre à disposition.**
Jupyter stocke en json, orienté machine.
Ces concurrents utilisent des formats plus lisibles.
(Hey, ce tableau doit passer brut dans un bloc markdown de jupyter :
Sweden | 0.250
|
Canada | 0.326
|
Switzerland | 0.337
|
United States | 0.408
|
Chile | 0.521
|
South Africa | 0.631
|
)
### quelques exercices
J'ai rien à analyser, là... j'ai juste fait quelques stats sémantiques sur mes
documents textes, mais osef.
Pour l'histoire de Challenger, leur calcul m'a semblé bizarre à la fin, mais
le truc, c'est que je néglige trop les intervalles de confiance :
je ne saurais même pas l'afficher avec une régression logistique python...
Bref.