#+TITLE: La vitrine et l'envers du décor : \newline Le document computationnel #+AUTHOR: @@latex:{\large Arnaud Legrand} \\ \vspace{0.2cm}LIG, Univ. Grenoble Alpes, CNRS, Inria\\ \vspace{0.2cm} \texttt{arnaud.legrand@imag.fr}@@ #+LATEX_CLASS: beamer #+LATEX_CLASS_OPTIONS: [presentation,bigger] #+STARTUP: beamer indent #+LANGUAGE: fr #+PROPERTY: header-args :eval no-export #+OPTIONS: H:2 tags:nil #+OPTIONS: num:t toc:nil \n:nil @:t ::t |:t ^:nil -:t f:t *:t <:t #+OPTIONS: TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc # #+OPTIONS: author:nil email:nil creator:nil timestamp:t #+TAGS: noexport(n) #+EXCLUDE_TAGS: noexport #+LATEX_HEADER: \usepackage[normalem]{ulem} #+LATEX_HEADER: \usepackage{svg} #+LATEX_HEADER: \setbeamercovered{invisible} #+LATEX_HEADER: \AtBeginSection[]{\begin{frame}\frametitle{Où en sommes nous ?}\tableofcontents[currentsection]\end{frame}} #+LATEX_HEADER: \beamertemplatenavigationsymbolsempty #+LATEX_HEADER: \usepackage{tikzsymbols} #+LATEX_HEADER: \def\smiley{\Smiley[1][green!80!white]} #+LATEX_HEADER: \def\frowny{\Sadey[1][red!80!white]} #+LATEX_HEADER: \def\winkey{\Winkey[1][yellow]} #+LATEX_HEADER: \usepackage{color,soul} #+LATEX_HEADER: \definecolor{lightblue}{rgb}{1,.9,.7} #+LATEX_HEADER: \sethlcolor{lightblue} #+LATEX_HEADER: \newcommand{\muuline}[1]{\SoulColor\hl{#1}} #+LATEX_HEADER: \makeatletter #+LATEX_HEADER: \newcommand\SoulColor{% #+LATEX_HEADER: \let\set@color\beamerorig@set@color #+LATEX_HEADER: \let\reset@color\beamerorig@reset@color} #+LATEX_HEADER: \makeatother #+LATEX_HEADER: \let\hrefold=\href #+LATEX_HEADER: \renewcommand{\href}[2]{\hrefold{#1}{\SoulColor\hl{#2}}} #+LaTeX: \let\alert=\structure % to make sure the org * * works #+LaTeX: \begin{frame}{Plan du cours}\tableofcontents\end{frame} * Test et informations :noexport: ** Images Origin of every image used in this series of slides: - PhD Comics: - [[file:img/phd010708.png][phd010708.png]]: http://phdcomics.com/comics/archive.php?comicid=961 c'est du fan art, là ;) je cite phdcomics dans la vidéo donc je pense qu'on est bon et je doute qu'il vienne nous embêter vu le sujet. - [[file:img/in_science_we_trust.jpg][in_science_we_trust.jpg]]: https://www.google.fr/search?client=firefox-b&dcr=0&biw=1450&bih=783&tbm=isch&sa=1&q=in+science+we+trust&oq=in+science+we+trust&gs_l=psy-ab.3..0i13k1j0i30k1l3.2692.5748.0.5946.6.5.0.0.0.0.694.1147.0j3j5-1.4.0....0...1.1.64.psy-ab..2.4.1144...0i7i30k1.0.JVlXKVLc9a4#imgrc=bt5vbb5C4e9fHM puis http://www.patheos.com/blogs/unreasonablefaith/2012/03/a-better-motto/in-science-we-trust-coin/ normalement - [[file:img/Researcher-test.jpg][Researcher-test.jpg]]: https://fr.wikipedia.org/wiki/Imagerie_par_r%C3%A9sonance_magn%C3%A9tique_fonctionnelle#/media/File:Researcher-test.jpg - [[file:img/flipping_fiasco.png][flipping_fiasco.png]]: https://people.ligo-wa.caltech.edu/~michael.landry/calibration/S5/getsignright.pdf - [[file:img/in_science_we_trust_small.jpg][in_science_we_trust_small.jpg]]: voir file:img/in_science_we_trust.jpg - [[file:img/box-she-s-told-not-to-open-in-it-the-gods-had-placed-all-the-evils-9vbl9q-clipart.jpg][box-she-s-told-not-to-open-in-it-the-gods-had-placed-all-the-evils-9vbl9q-clipart.jpg]]: trouvé à la base sur https://politicsinpinkdotcom.files.wordpress.com/2016/12/box-she-s-told-not-to-open-in-it-the-gods-had-placed-all-the-evils-9vbl9q-clipart.jpg mais visiblement achetable ici: http://www.istockphoto.com/fr/vectoriel/femme-laissant-d%C3%A9mons-de-la-poitrine-gm165517954-24325536 *à acheter*. - [[file:img/in_code_we_trust.jpg][in_code_we_trust.jpg]]: https://www.google.fr/url?sa=i&rct=j&q=&esrc=s&source=images&cd=&cad=rja&uact=8&ved=0ahUKEwiJ2ZfIi4fXAhUJVxQKHb-xCBoQjRwIBw&url=https%3A%2F%2Fwww.spreadshirt.com%2Fa%2Bprogrammer%2Blife-A14770086&psig=AOvVaw1ZDWatztzt2-ycU-7qy-Gh&ust=1508859944930121 - [[file:img/iceberg.jpg][iceberg.jpg]]: http://www.jdubuzz.com/files/2016/03/iceberg-principle.jpg - [[file:img/iceberg_publication-1.png][iceberg_publication-1.png]] and others alike: - Crédits Juliana Freire: slides 2 à 5 de http://catt.nyu.edu/sites/default/files/files/Provenance_In_Data_Exploration.pdf - https://en.wikipedia.org/wiki/Large_Hadron_Collider#/media/File:CERN_LHC.jpg - https://fr.wikipedia.org/wiki/T%C3%A9lescope#/media/File:Hubble_01.jpg - https://en.wikipedia.org/wiki/DNA_sequencer#/media/File:DNA-Sequencers_from_Flickr_57080968.jpg - https://cnet3.cbsistatic.com/img/Ly9WLBFBoWxby2UraBktS1ftx90=/2014/06/10/1bd4587d-63a5-4d1a-b2fe-c6b692daa9bb/plantsensors-1.jpg - http://www.cerfacs.fr/avbp7x/img/FULLSCREEN/explosion-masri_incite_1Md.png - https://fr.wikipedia.org/wiki/Treemap#/media/File:Carte-proportionnelle-france.png - https://fr.wikipedia.org/wiki/Repr%C3%A9sentation_graphique_de_donn%C3%A9es_statistiques - https://fr.wikipedia.org/wiki/Visualisation_d%27informations#/media/File:InteractionAandB.png - [[file:img/RStudio-Logo-Blue-Gradient.png and file:img//knitr.png][RStudio-Logo-Blue-Gradient.png and file:img//knitr.png]]: https://www.rstudio.com/about/logos/ - [[file:img/jumping_penguin.png][jumping_penguin.png]]: http://www.istockphoto.com/be/photo/saut-penguins-de-papou-sur-iceberg-gm466554153-33737494 *à acheter*. * Internal refs/notes :noexport: ** phdcomics - version control : http://phdcomics.com/comics/archive.php?comicid=1531 - http://r-bio.github.io/intro-git-rstudio/ - https://xkcd.com/1597/ - http://phdcomics.com/comics/archive.php?comicid=961 ** Pandoc - https://enacit1.epfl.ch/markdown-pandoc/ - https://www.markdowntutorial.com/ ** Jupyter *** Install #+begin_src sh :results output :exports both sudo apt-get install jupyter-notebook sudo apt-get install python3-pip sudo apt-get install python3-matplotlib python3-numpy #+end_src Then following https://github.com/kirbs-/hide_code (note sure this is as useful as I thought though :() #+begin_src sh :results output :exports both sudo pip3 install hide_code sudo jupyter-nbextension install --py hide_code jupyter-nbextension enable --py hide_code jupyter-serverextension enable --py hide_code #+end_src Pour que l'export via latex fonctionne: #+begin_src shell :results output :exports both sudo apt-get install wkhtmltopdf sudo apt-get install texlive-xetex #+end_src Pour avoir R: #+begin_src shell :results output :exports both sudo apt-get python3-rpy2 #+end_src Pour avoir le [[https://github.com/brospars/nb-git][git push/pull dans les notebooks]]: #+begin_src shell :results output :exports both jupyter nbextension install https://raw.githubusercontent.com/brospars/nb-git/master/nb-git.js jupyter nbextension enable nb-git #+end_src Autres extensions (code-folding): https://stackoverflow.com/questions/33159518/collapse-cell-in-jupyter-notebook #+begin_src shell :results output :exports both pip3 install jupyter_contrib_nbextensions # jupyter contrib nbextension install --user # not done yet #+end_src https://stackoverflow.com/questions/33159518/collapse-cell-in-jupyter-notebook (collapsible headings) Pour avoir le kernel R (from https://irkernel.github.io/installation/): #+begin_src R :results output graphics :file (org-babel-temp-file "figure" ".png") :exports both :width 600 :height 400 :session *R* install.packages(c('repr', 'IRdisplay', 'evaluate', 'crayon', 'pbdZMQ', 'devtools', 'uuid', 'digest')) devtools::install_github('IRkernel/IRkernel') # Don’t forget step 2/2! IRkernel::installspec() #+end_src *** Export http://markus-beuckelmann.de/blog/customizing-nbconvert-pdf.html https://nbconvert.readthedocs.io/en/latest/ #+begin_src sh :results output :exports both ipython3 nbconvert --to pdf Untitled.ipynb #+end_src *** Pour aller plus loin - https://www.dataquest.io/blog/jupyter-notebook-tips-tricks-shortcuts/ * M2-S0: Le document computationnel ** La vitrine et l'envers du décor: Le document computationnel \vspace{-1cm} \begin{flushright} \includegraphics[width=7cm]{img/phd010708.png} \end{flushright} \vspace{-1cm} 1. Exemples récents d'études assez discutées 2. Pourquoi est-ce difficile ? 3. Le document computationnel : principe 4. Prise en main de l'outil Au choix : - Jupyter - Rstudio - Org-Mode 5. Travailler avec les autres 6. Analyse comparée des différents outils # Note: # Pour vous convaincre de l'importance de cette traçabilité, je vais # commencer par vous présenter quelques exemples récents de travaux dont # les résultats ont été particulièrement controversés et discutés. Ils # illustrent à quel point la capacité à pouvoir inspecter les méthodes # utilisées pour produire tel ou tel résultat est essentielle. # Comme nous le verrons, la plupart des problèmes rencontrés sont liées # au calcul, qu'il s'agisse d'erreurs de programmations, de # transformations de données peu rigoureuses, ou bien de procédures # statistiques discutables. # Une fois les origines de tous ces problèmes identifiées, je vous # présenterai rapidement quelles bonnes pratiques mettre en oeuvre afin # de les éviter. # En particulier, je vous expliquerai ce que c'est que ce fameux # document computationnel: un document qui permet de présenter # agréablement des résultats à d'autres (ce que j'appelle la vitrine) # mais aussi d'accéder à l'ensemble des calculs sous-jacents (ce que # j'appelle l'envers du décor). # Il existe plusieurs formats de tels documents et nous vous proposons # trois environnements permettant d'en produire facilement. Ces trois # environnements se distinguent par le niveau de technicité nécessaire à # leur mise en oeuvre. À vous de choisir celui qui vous convient le # mieux quitte à en essayer un autre plus tard. # Jupyter, le premier, a été intégré au MOOC et au gitlab et ne # nécessite donc aucune installation de votre part. C'est donc le plus # simple à mettre en oeuvre. L'ensemble des données et des calculs sera # hébergé sur nos serveurs, mais vous pourrez y accéder et les récupérer # sur votre propre ordinateur à tout moment via le gitlab si vous le # souhaitez. Jupyter vous permettra de gérer des notebooks et d'utiliser # le langage python3 ou bien le langage R. # Rstudio, le second, est un environnement de développement spécifique # au langage R. Il vous faudra l'installer sur votre machine et # synchroniser vos productions avec le gitlab. C'est un logiciel très # bien maintenu, qui fonctionne aussi bien sous linux et mac que sous # windows et son installation ne devrait pas poser de difficulté # particulière. Si vous êtes déjà familier avec le langage R, c'est # l'option que je vous recommande. L'avantage de cette approche est que # vous aurez à la fin du MOOC sur votre machine un environnement de # travail directement prêt à l'emploi. Avec Rstudio, il est également # possible d'utiliser occasionnellement du code python mais si vous avez # l'intention de faire principalement du python, il vaut mieux utiliser # jupyter. # Enfin, OrgMode, est clairement celui qui est le plus délicat à mettre # en oeuvre mais c'est aussi celui que Konrad, Christophe et moi-même # utilisons quotidiennement aussi bien pour gérer notre cahier de # laboratoire que pour rédiger des articles ou des notes # techniques. Nous nous sommes donc dit qu'il pouvait être intéressant # de vous le présenter. OrgMode nécessite l'installation d'Emacs, un # éditeur de texte qui révèle toute sa puissance dans un environnement # linux ou mac. Il permet de combiner très efficacement différents # langages et est par certains aspects moins limité que les deux # précédents. Cette option est à réserver à un public averti mais le jeu # en vaut la chandelle. # Une fois familiarisé avec un de ces environnements, nous vous # proposerons une petite séance pratique dont l'objectif sera de # produire un petit document computationnel. # Les dernières séquences peuvent être visionnées indépendemment et # traitent de sujets un peu plus techniques, en particulier de comment # utiliser de tels outils avec vos co-auteurs qui peuvent avoir leurs # propres habitudes, ou de comment produire des documents avec un style # bien spécifique. # Nous concluons enfin ce module avec une comparaison de ces différents # outils et une présentation des bénéfices d'une utilisation # quotidienne. * M2-S1: Exemples récents d'études assez discutées ** Le document computationnel 1. *Exemples récents d'études assez discutées* 2. Pourquoi est-ce difficile ? 3. Le document computationnel : principe 4. Prise en main de l'outil. Aux choix : - Jupyter - Rstudio - Org-Mode 5. Travailler avec les autres 6. Analyse comparée des différents outils ** Exemples récents d'études assez discutées file:img/in_science_we_trust.jpg # Note: # Je vous avais promis quelques exemples récents de travaux dont les # résultats ont été particulièrement controversés et discutés. C'est ce # que je vais vous présenter dans cette séquence. ** Économie : politiques d'austérité (1/2) *** 2010 # - /gross debt [..] exceeding 90 percent of the economy has a # significant negative effect on economic growth/ #+BEGIN_QUOTE Lorsque la dette extérieure brute atteint 60 pourcents du PIB, la croissance annuelle d'un pays diminue de deux pourcents. [..] pour des niveaux de dette extérieure dépassant 90 pourcents du PIB, la croissance annuelle est à peu près divisée par deux. \flushright -- [[https://en.wikipedia.org/wiki/Growth_in_a_Time_of_Debt][Reinhart et Rogoff]]: /Growth in a Time of Debt/ #+END_QUOTE # - données non publiées mais disponibles sur demande # Note: # Commençons par des travaux en économie. 2007: crise des subprimes aux # États-Unis. De 2008 à 2009, deux économistes prestigieux, Carmen # Reinhart et Kenneth Rogoff présentent leurs travaux et annoncent que # la crise financière est loin d'avoir produite toutes ses # conséquences. En 2010, ils publient un article intitulé "Growth in a # Time of debt" qui étudie le lien entre dette et croissance. # Leurs principales conclusions sont que lorsque lorsque la dette # extérieure d'un pays dépasse 90% du PIB, les conséquences sur la # croissance sont dramatiques. # De nombreux politiciens, journalistes et activistes s'appuient sur cet # article pour soutenir la mise en place de politiques d'austérité # budgétaire. ** Économie : politiques d'austérité (2/2) *** 2013 # - Herndon, Ash and Pollin: /While using RR's working spreadsheet, we # identified *coding errors*, *selective exclusion* of/ /available data, # and *unconventional* weighting of summary *statistics*./ #+BEGIN_QUOTE En utilisant leurs feuilles Excel, nous avons identifié des *erreurs de programmation*, des *exclusions* de certaines données, et des pondérations *statistiques non conventionnelles*. \flushright -- Herndon, Ash et Pollin #+END_QUOTE # #+BEGIN_EXPORT html #
# #+END_EXPORT # - Wray: /combining data across centuries, exchange rate regimes, # public and private/ /debt, and debt denominated in foreign currency # as well as domestic currency/ #+BEGIN_QUOTE R&R combinent des données de siècles différents, des régimes de changes différents, des dettes privées et publiques, et des dettes exprimées en monnaies étrangères et nationales. \flushright -- Wray #+END_QUOTE # Note: # Ces seuils de 90% ainsi que l'ampleur des conséquences sont très # discutés, d'autant plus que certains chercheurs échouent à obtenir des # résultats similaires en utilisant les données disponibles # publiquement. Ils demandent donc à Reinhart et Rogoff l'ensemble des # données et des feuilles de calculs utilisées dans l'étude et ces # derniers finissent par leur fournir. # Dans ces feuilles, des erreurs de calcul évidentes apparaissent # rapidement ainsi que des traitement de données assez douteux # (exclusion de données, pondérations suspectes, etc.). # Reinhart et Rogoff répondent point par point en expliquant que ces # quelques erreurs ne changent rien au résultat final, que leur façon de # calculer les statistiques sont tout à fait standard. # En fait, une fois les détails révélés, pour beaucoup de chercheurs ces # calculs n'ont pas beaucoup de sens, les valeurs utilisées sont très # discutables, et il est malhonnête d'utiliser ces travaux pour # justifier une politique d'austérité budgétaire. # Mais le mal est fait. Pendant plus de trois ans, l'austérité n'est pas # présentée comme un choix mais comme une nécessité. Et quand bien même # l'article original est considéré comme non pertinent par les # économistes, ces idées ont fait leur chemin et sont difficiles à # détrôner. # Au delà du caractère idéologique de ce genre de travaux, une des # raisons pour lesquelles ce débat a mis autant de temps à avoir lieu # est lié à la non publication de l'ensemble des procédures de calcul et # des données utilisées, pratique courante en économie. Sous les feux # de la rampe, les auteurs ont bien été forcés de mettre à disposition # ce qui sous-tendait leur travaux mais sans pression médiatique # particulière, en général, rien ne se passe... ** IRM fonctionnelle # file:assets/img/Irmf.jpg&size=cover - 2010 : [[https://www.researchgate.net/publication/255651552_Neural_correlates_of_interspecies_perspective_taking_in_the_post-mortem_Atlantic_Salmon_an_argument_for_multiple_comparisons_correction][Bennett et al. et le saumon mort]] $\smiley$ - 2016 : [[http://www.pnas.org/content/113/28/7900.abstract][Eklund, Nichols, and Knutsson]]. [[http://www.sciencealert.com/a-bug-in-fmri-software-could-invalidate-decades-of-brain-research-scientists-discover][A bug in fmri software could invalidate 15 years of brain research]] (/40 000 articles/) - 2016 : Mais [[https://www.cogneurosociety.org/debunking-the-myth-that-fmri-studies-are-invalid/][c'est plus subtil que \c{c}a]]. [[http://blogs.warwick.ac.uk/nichols/entry/bibliometrics_of_cluster/][Nichols]]. /\approx 3 600 études concernées/ Des méthodes statistiques à améliorer mais pas de remise en cause fondamentale. file:img/Researcher-test.jpg # Note: # Continuons avec un autre exemple: l'imagerie cérébrale, qui permet # d'observer l'activité du cerveau d'un individu lorsqu'il effectue une # tâche cognitive et ainsi de mieux comprendre la structure et le # fonctionnement du cerveau. L'IRM fonctionnelle est l'une de ces # techniques et mesure de très faibles variations locales du taux # d'oxygénation du sang dans le cerveau. # En 2010, Craig Bennett et ses encadrants ont une idée saugrenue. Ils # placent un saumon mort dans un appareil d'IRM et lui présentent des # images. Étonnamment, ils observent des signes d'activité cérébrale, ce qui est # pour le moins surprenant puisque le saumon est bel et bien mort. Aussi # drôle que cela puisse paraître, Bennett et ses encadrants savent très # bien ce qu'ils font. Les données brutes obtenues lors d'une IRM sont # très bruitées et toute une série de calculs et de tests statistiques # sont appliqués pour transformer ces données en images # intelligibles. Mais il arrive que le bruit soit trop important, que la # machine soit mal calibrée, que la procédure de calcul soit inadaptée # et que des signaux apparaissent fortuitement. # Leur article rédigé avec un ton très humoristique fait sensation car # il met le doigt sur des faiblesses méthodologiques. # L'an dernier, des collègues me sachant intéressé par ces problèmes de # réplication me font suivre un article récent assez alarmant. Cet article présente un # problème dans les procédures statistiques utilisées dans les logiciels # d'analyse d'IRMf les plus courants, ce qui remet potentiellement en # cause les résultats obtenus ces quinze dernières années. Étant donnée # l'ampleur de l'erreur, les auteurs concluent que 40,000 articles # pourraient être concernés. De plus, les données étant très # volumineuses dans ce domaine, elles ne sont pas archivées et il ne # sera pas possible de simplement les réanalyser. L'ensemble des # expériences seraient à refaire... # En fait, suite aux retours qui leurs sont faits, les auteurs revoient # rapidement à la baisse leurs estimations assez alarmistes. # Au final, le problème méthodologique et la capacité à vérifier les # études suite à des erreurs de calcul reste entier même s'il ne remet # pas pour autant en cause l'ensemble des résultats obtenus ces # dernières années. ** Les fausses structures de protéines #+LaTeX: \begin{columns}\begin{column}{6.3cm} *Geoffrey Chang* : étude de la structure de protéines présentes dans des bactéries résistant aux antibiotiques. \small MsbA de Escherichia Coli (Science, 2001), Vibrio cholera (Mol. Biology, 2003), Salmonella typhimurium (Science, 2005) #+LaTeX: \end{column}\begin{column}{3.5cm} #+LaTeX: \hspace{-.3\linewidth}\includegraphics[width=1.2\linewidth]{img/flipping_fiasco.png} #+LaTeX: \end{column}\end{columns}\medskip *2006* : Incohérences, alertes, puis 5 rétractations #+BEGIN_QUOTE a homemade data-analysis program had flipped two columns of data, inverting the electron-density map from which his team had derived the protein structure. \flushright -- [[https://people.ligo-wa.caltech.edu/~michael.landry/calibration/S5/getsignright.pdf][une "erreur de programmation"]] #+END_QUOTE # Note: # Un dernier exemple, cette fois-ci en cristallographie. # Geoffray Chang est un chercheur à la trajectoire fulgurante, # récompensé par de nombreux prix. Son équipe, basée au Scripps # Institute à l'Université de Californie San Diego, a publié une série # d'articles dans des revues prestigieuses et détaillant la structure de # certaines protéines présentes dans les membranes de cellules. Ces # protéines jouent un rôle essentiel dans la résistance de ces bactéries # à certains médicaments et connaître leur structure est une étape # importante dans la compréhension de leur fonctionnement. # Hélas, peu de temps après, d'autres équipes de chercheurs qui étudient # des protéines très similaires rapportent des structures anormalement # différentes de celles publiées par Chang et son équipe. En lisant ces # travaux Chang, horrifié, remonte vite à la source du problème. # Un des codes d'analyse aurait inversé deux # colonnes de données et ainsi inversé la répartition de la densité # d'électrons à partir de laquelle la structure finale de la protéine # est calculée. D'après Chang, ce code aurait été hérité d'un autre # laboratoire et s'était également répandu depuis dans d'autres équipes. # Même si toute l'acquisition des données avait été faite soigneusement, # ce n'était pas le cas de l'analyse et ce petit grain de sable a # conduit à la rétractation immédiate de 5 articles par Chang et son # équipe. Ces publications ont eu un impact énorme sur la communauté, à # tel point que plusieurs années après la rétractation, les résultats # contradictoires avec ceux de Chang paraissaient suspects avaient du # mal à être publiés. ** Crise de foi ? #+LaTeX: \begin{columns}\begin{column}{6.3cm} - [[http://www.nature.com/nrd/journal/v10/n9/full/nrd3439-c1.html?foxtrotcallback=true][Oncologie]] : "/plus de la moitié des études publiées, même dans des journaux prestigieux, ne/ /peuvent être reproduites en laboratoire industriel/" - [[http://theconversation.com/we-found-only-one-third-of-published-psychology-research-is-reliable-now-what-46596][Psychologie]] : "réplication d'une centaine d'articles /seulement un tiers de résultats cohérents/" #+LaTeX: \end{column}\begin{column}{3.5cm} #+LaTeX: \hspace{-.1\linewidth}\includegraphics[width=1\linewidth]{img/in_science_we_trust_small.jpg} #+LaTeX: \end{column}\end{columns}\medskip #+BEGIN_CENTER *Lanceurs d'alerte* ou *institutions malades* ? #+END_CENTER *** La _remise en cause_ fait partie du processus scientifique\pause *** Tout comme la _rigueur_ et la _transparence_... # Note: # Il n'y a à ce jour pas un domaine des science qui ne soit épargné par # ces difficultés à reproduire les travaux publiés. En oncologie, un # article récemment publié rapporte que plus de la moitié des études # publiées ne peuvent être reproduites en laboratoire industriel, et ce # même si les études sont publiées dans des journaux prestigieux. # En psychologie, les capacités à reproduire les résultats publiés sont # également très basses. # Le problème est méthodologique mais également certainement # sociologique, lié à une pression productiviste trop importante. Mais # attention aussi à ne pas donner non plus trop d'importance aux signaux # d'alertes que nous venons de voir... # Le problème est compliqué mais il faut garder à l'esprit que la remise # en cause fait partie du processus scientifique. Il n'est donc pas # surprenant que de telles difficultés de reproduction de travaux # scientifiques soit présentes. # Cependant, deux autres caractéristiques essentielles du processus # scientifique sont la rigueur et la transparence et il est clair que # dans l'ensemble des cas que nous venons de voir il manquait souvent # l'un et l'autre... * M2-S2: Pourquoi est-ce difficile ? ** Le document computationnel 1. Exemples récents d'études assez discutées 2. *Pourquoi est-ce difficile ?* 3. Le document computationnel : principe 4. Prise en main de l'outil. Au choix : - Jupyter - Rstudio - Org-Mode 5. Travailler avec les autres 6. Analyse comparée des différents outils ** Pourquoi est-ce difficile ? file:img/box-she-s-told-not-to-open-in-it-the-gods-had-placed-all-the-evils-9vbl9q-clipart.jpg # Note: Comme nous l'avons vu, reproduire les travaux de recherche, même # publiés dans des revues prestigieuses est souvent assez # difficile. Dans cette séquence, nous allons identifier les difficultés # les plus communes. ** 1) Le manque d'informations Expliciter : + *Sources* et *données* #+BEGIN_CENTER /Données non disponibles = résultats difficiles à vérifier/ #+END_CENTER + *Choix* #+BEGIN_CENTER /Choix non expliqués = choix suspicieux/ #+END_CENTER #+LaTeX: \bigskip *** Le cahier de laboratoire peut vous aider # Note: La première source de difficultés rencontrées lors de tentatives # de reproduction est tout simplement le manque d'informations. # Si on ne prend pas soin d'expliciter comment on a obtenu nos données # et qu'on les garde secrètes, il est certain qu'il va être difficile # pour une tierce personne de vérifier si elle arrive aux mêmes # conclusions ou pas. # # C'est étrange car mettre les données utilisées à disposition permet au # # lecteur d'en évaluer la qualité (voire d'y trouver des erreurs). Sans # # cette évaluation, difficile pour le lecteur de savoir quelle confiance # # avoir dans les conclusions de l'article. # De même expliciter les choix effectués à chacune des étapes de l'étude # s'avère essentiel. Quel protocole expérimental a été choisi et # pourquoi ? Quelles données ont été conservées ? Quelles données ont # été soigneusement écartées et pourquoi ? Quelle procédure statistique # a été utilisée et les hypothèses sous-jacentes étaient elles # raisonnables ? Etc. # Après tout, on doit toujours faire des choix à un moment donné. Mais # ne pas expliquer ces choix, même en étant rigoureux et de bonne foi, # c'est prendre le risque que les lecteurs deviennent # suspicieux. D'autre part, être totalement transparent sur ces choix, # c'est permettre à d'autres (ou à vous-même) de décider s'il est # nécessaire de revenir dessus ou pas # Pour garder trace de tous ces choix et des informations sur ces # données, le cahier de laboratoire un outil essentiel. Encore faut-il # ensuite mettre ces informations à disposition, mais nous reviendrons # sur ce point par la suite. ** 2) L'ordinateur, [[http://theconversation.com/how-computers-broke-science-and-what-we-can-do-to-fix-it-49938][source d'erreurs]] - *Point and click* : - *Les tableurs* : [[https://qz.com/768334/years-of-genomics-research-is-riddled-with-errors-thanks-to-a-bunch-of-botched-excel-spreadsheets/][erreurs de programmation]] et de manipulation de données - ~Membrane-Associated Ring Finger (C3HC4) 1, E3 Ubiquitin Protein Ligase~ \to ~MARCH1~ \to 2016-03-01 \to 1456786800 - ~2310009E13~ \to 2.31E+19 - *Pile logicielle complexe* - *Bug* : /Programmer, c'est dur !/ # Note: # La deuxième source de difficultés rencontrées lors de tentatives # de reproduction de travaux est tout simplement les erreurs induites # par l'utilisation effrénée des ordinateurs. # Comme toute innovation technologique, les ordinateurs nous permettent # d'aller plus vite, plus loin mais aussi de faire des erreurs plus # facilement et plus rapidement... # Au premier plan des sources d'erreurs, ces logiciels intuitifs où # l'interaction se fait à la souris et qui ne permettent pas # d'expliciter ce qui est calculé et à partir de quoi. Leur simplicité # d'utilisation incite à les utiliser pour tout, même pour ce pour quoi # ça n'est pas vraiment prévu. # Il est par exemple très difficile de comprendre la logique du calcul # ayant lieu dans une feuille excel pleine de macros. Bien sûr, il est # possible de gérer des stocks et la comptabilité d'une entreprise avec # un tableur, mais ceux qui ont déjà eu à faire à ce genre # d'abominations savent qu'un ERP permet d'éviter bien des soucis. Et # bien de la même façon, un tableur n'est pas le bon outil pour faire # des statistiques ou du traitement de données ! # Tenez, quelques exemples d'anecdotes effroyables liées à l'utilisation # d'un tableur. En génomique, il est bien pratique de donner des petits # noms aux gènes tels que celui-ci. Celui-ci, c'est MARCH1. Seulement # pas mal de tableurs croient bien faire en l'interprétant # comme une date et par effet de bord comme le nombre de secondes # écoulées depuis le 1er janvier 1970... L'identifiant de gène 231 000 # 9E13 se retrouve lui aussi fréquemment convertit en nombre. Alors bien # sûr, il n'y a peut-être qu'une vingtaine de gènes concernés par ce # genre de problème sur les 30,000 du génome humain, mais c'est quand # même assez désagréable. # De manière générale, il est courant de se reposer sur une pile # logicielle complexe. Complexe et souvent mal maîtrisée. Combien # d'études reposent ainsi sur des logiciels propriétaires, sortes de # boites noires dont on ne maîtrise pas le contenu et qui appliquent # aveuglement des procédures de calculs et de transformations de # données? # # - l'utilisation de telle ou telle méthode plutôt qu'une autre est # # souvent discutable # Alors, je ne suis pas en train de dire qu'il faut tout reprogrammer # soi même. Ce n'est bien sûr par la meilleure façon d'échapper aux # bugs. Dans les cas de l'étude Reinhart et Rogoff ou des fausses # structures de protéines de Chang, les erreurs venaient de programmes # maisons. # Mais il me semble essentiel d'être en mesure de déterminer dans son # analyse si chacune des briques est digne de confiance ou pas. Et si # l'un des composants, par sa nature, l'interdit, il faut sérieusement # songer à le remplacer. ** L'informatique, seule responsable ? *Le manque de rigueur et d'organisation* - Pas de backup - Pas d'historique - Pas de contrôle qualité # Note: # Enfin, la dernière cause méthodologique de non-reproductibilité et # source d'erreurs est certainement le mangue de rigueur et # d'organisation. # Même si le stockage ne coûte plus rien de nos jours, la sauvegarde des # données est souvent mal assurée et il est courant d'en perdre suite à # une mauvaise manipulation, ou bien à la suppression de son compte # informatique lors du passage d'une institution à une autre. # En l'absence de mécanisme de gestion de version, il est courant # de remplacer par inadvertance d'anciennes données par de nouvelles et # de ne plus arriver à accéder à d'anciennes observations. # Dans un certain nombre de domaines, l'utilisation de plans # d'expériences randomisés ou de pré-études (study pre-registration), # n'est absolument pas systématique. De même les bonnes pratiques de # développement logiciel comme la revue de code ou l'intégration # continue sont encore rarement appliqués au logiciels utilisés dans la # recherche. ** Une dimension culturelle et sociale #+BEGIN_QUOTE \centering Article = version _simplifiée_ de la procédure #+END_QUOTE #+LaTeX: \bigskip #+BEGIN_QUOTE \centering *Tracer* toutes ces informations et les *rendre disponibles* = investissement conséquent #+END_QUOTE #+LaTeX: \bigskip Si personne n'exige/n'inspecte ces informations, à quoi bon s'embêter ? # Note: # Enfin, il serait naïf de ne pas évoquer la dimension culturelle et # sociale du problème. # Un article est une version simplifiée et intelligible des # résultats. Certains diraient même la publicité... Une description de # haut niveau est essentielle car elle permet de prendre du recul mais # elle est devenue la norme alors que la technicité de la recherche # actuelle est telle qu'il est clairement impossible de donner dans un # document de 8 à 10 pages toutes les informations permettant de refaire # les expériences et les analyses. # - La description du protocole expérimental est souvent succincte # - Les données sont généralement bien trop nombreuses pour être données # in extenso et sont résumées à travers quelques courbes. # - Les traitements statistiques appliqués pour parvenir à ces courbes # ne sont décrits que rapidement. # Alors, bien sûr il est possible de tracer toutes ces informations et # de les mettre à disposition. À ceci près que cela demande du temps, # voire beaucoup de temps si on ne dispose pas des bons outils. # # - sans compter que mettre à disposition toutes ces informations, alors # # qu'on a soi-même peiné à les obtenir, c'est permettre à d'autres de # # récupérer les fruits de notre travail sans efforts. # Mais si personne n'exige ces informations, à quoi bon s'embêter ? ** Tout rendre public ? #+LaTeX: \def\a{\`a } - Les /faiblesses/ deviendraient évidentes - Quelqu'un pourrait trouver une /erreur/ - Quelqu'un pourrait en [[http://www.nature.com/news/the-top-100-papers-1.16224][tirer avantage \a ma place]] - /Les données peuvent être sensibles/ # sécurité, machine learning pour la police Donnons nous les moyens que tout soit inspectable à la demande # Note: # Mais donner accès, mettre à disposition, cela veut dire tout rendre # public ? N'est-ce pas un peu radical ? Et risqué ? Démontons ensemble # quelques idées reçues. # Si je donne accès à tout ce que j'ai fait, il deviendra alors évident # que ce que j'ai fait n'est pas aussi parfait que ce que je prétends, # que c'est un peu sale et pas toujours très rigoureux, que j'ai # sélectionné les résultats que je présente. # - C'est sûr. En même temps, c'est la réalité et vous auriez tort de # croire que vous êtes le seul dans cette situation. Si ça se trouve, # vous travaillez mieux que les autres et dans un domaine où la # réputation est essentielle, vous avez probablement plutôt intérêt à # le montrer. Pire, si vous le cachez, cela finira par paraître # suspicieux. # Vous me direz qu'en révélant tout, je prend le risque que quelqu'un # trouve une erreur et de passer pour un imbécile. # - C'est certain, mais tout le monde fait des erreurs, même les plus # grands. Et en ce qui me concerne, je préfère que quelqu'un trouve # une erreur et m'aide à la corriger afin que mes travaux deviennent # corrects. # Oui, mais quelqu'un pourrait tirer parti, réanalyser ces données que # j'ai eu tant de mal à obtenir, ou simplement utiliser ce code que j'ai # eu tant de mal à écrire et faire trois ou quatre papiers là où je n'ai # eu le temps d'en faire qu'un. # - Alors d'abord, si quelqu'un réutilise votre travail, il se doit de # le citer correctement et de vous rendre le crédit qui vous est # dû. Ensuite les articles les plus cités de tous les temps sont des # articles présentant des contributions méthodologiques ou du logiciel # qui sont devenus essentiels dans un domaine. # Une petite parenthèse : ceux d'entre vous qui connaissent github, # savent que cette plate-forme est à mi-chemin entre la plate-forme de # développement logiciel et le réseau social. Les contributions d'un # développeur à différents projets sont visibles ainsi que la # fréquence de ses contributions, ce qui permet à un jeune développeur # de se faire une carte de visite infalsifiable et # ultra-visible. Montrer ce que l'on fait est une façon efficace # d'atteindre une certaine forme de reconnaissance par la # communauté. Mettre ses travaux à disposition de tous est # probablement la meilleure façon de démontrer sa propriété # intellectuelle. # Enfin, il est possible que les données soient sensibles et ne puissent # être divulguées sans prendre le risque de causer du tort à des # gens. Par exemple, s'il s'agit de données médicales, de données # judiciaires, d'informations sur des enfants ou sur des intentions de # vote, etc. # - Dans ce type de situation où les travaux ont une dimension éthique, # il convient de définir quelles personnes peuvent avoir accès aux # informations pour les vérifier ou les réutiliser. Ensuite, il existe # des techniques cryptographiques assez faciles d'accès permettant de # s'assurer que seulement les personnes habilitées peuvent accéder aux # données. # Dans tous les cas, même si au final ces informations sont # semi-publiques, il est essentiel de se donner les moyens de permettre # à autrui d'inspecter ce que nous avons fait. ** Outils à éviter et alternatives - *Outils, formats, et services propriétaires* 1. +Excel, Word, Evernote+ - Markdown, Org-mode, CSV, HDF5, ... 2. +SAS, Minitab, matlab, mathematica, ...+ - Scilab, R, Python, ... 3. +Dropbox, cahiers de labo en ligne propriétaires, ...+ - Framadrop, GitLab/GitHub, ... - *Outils "intuitifs" * - +tableurs, interfaces graphiques, exploration interactive+ - apprendre à se contrôler... $\smiley$ - R, Python, ... # Note: # Et pour permettre l'inspection, il faut utiliser les bons outils # Cela commence par banir autant que possible les logiciels et les # formats propriétaires. Bien sûr, ces outils sont bien faits et vous y # êtes habitués mais on en est également captif et les entreprises qui # les développement n'offrent aucune garantie sur le long terme. Je suis # sûr que ces mises à jours automatiques vous agacent vous aussi. :) # L'expérience montre qu'il est hélas très courant de perdre des données # et des informations lors de ces mises à jour. # Alors, soyons honnête, l'utilisation de logiciel libre ne vous protège # absolument pas de ce genre de mauvaises surprises. Mais comme vous # avez accès librement à l'ensemble des versions, les chances d'arriver # à récupérer vos données sont quand même bien plus élevées. De même # l'adoption de formats textes simples et ouverts augmente vos chances # d'arriver à les relire avec d'autres logiciels. # En ce qui me concerne, à chaque fois que j'ai utilisé un format # binaire ou pas bien ouvert, j'ai fini par perdre des données. Cela # fait donc 10 ans que je n'utilise plus que des formats texte ou des # standards binaires ouverts et le problème ne s'est plus jamais posé, # et ce malgré les mises à jours logicielles très régulières de ma # machine. # Donc règle numéro 1 : utiliser autant que possible du format texte # (markdown, orgmode pour vos notes, csv pour vos données). # Règle numéro 2 : utiliser autant que possible les logiciels et les # langages de programmation libres comme R ou python. # Et Règle numéro 3 : éviter de stocker vos données chez un hébergeur # dont vous pourriez être captif. # En effet, les services gratuits (ou pas) et très intégrés sont # tentants mais correspondent à un business plan particulier qui peut se # révéler incompatible avec vos besoins futurs, ne pas être pérenne et # ne vous donne pas forcément les garanties de confidentialité que vous # souhaiteriez. # Enfin, attention aux tableurs et outils graphiques qui peuvent vous # donner au premier abord l'impression d'une meilleur efficacité et # productivité mais qui sur le long terme ne vous permettent pas # d'atteindre la traçabilité et l'inspectabilité que vous souhaiteriez. # C'est plus difficile, en particulier au début, mais en utilisant des # langages comme R ou python, passé la première marche, on gagne # rapidement en puissance et en efficacité. ** Conséquences :noexport: - Des *erreurs*... - Des *difficultés* certaines à *réutiliser* le travail des autres, voire son propre travail - Un *doute* dommageable pour tout le monde (auteur, détracteurs, lecteur, décideur...) # Note: # C'est pour toutes ces raisons que les résultats de recherche # contiennent parfois des erreurs et sont si difficile à répliquer et à # réutiliser, même au sein d'une même équipe. # Les doutes que cela engendre sont dommageable pour tout le # monde. Lorsque l'on propose un résultat, il n'est pas agréable d'être # soupçonné de fraude ou d'incompétence. En même temps, les détracteurs # d'un résultat apparaissent comme de simples aigris ou au contraire # comme des lanceurs d'alertes selon le contexte alors qu'il est normal # de questionner un résultat et d'avoir un débat apaisé et rationnel à # son sujet. # Face à ces problèmes, il me semble que la meilleur attitude à avoir # est celle de la transparence : Expliciter augmente les chances de # trouver les erreurs et de les éliminer. # C'est d'ailleurs une demande de plus en plus pressante de la part # de la société civile afin d'éviter les dérives et d'améliorer # l'efficacité de nos travaux. ** Changement de paradigme 1. Manque d'information, problème d'accès aux données 2. Erreurs de calcul 3. Manque de rigueur scientifique et technique #+LaTeX: \begin{center}\includegraphics[height=2.5cm]{img/in_science_we_trust_small.jpg} #+LaTeX: \includegraphics[height=2.5cm]{img/in_code_we_trust.jpg}\end{center} *** Expliciter augmente les chances de trouver les erreurs et de les éliminer # Demande de *traçabilité* de plus en plus pressante de la société, des # institutions, de l'Europe, ... # Note: # Nous avons vu que la première cause d'échec de reproduction de # résultats scientifiques est tout simplement le manque d'information, # la non disponibilité des données ou des procédures appliquées. Cela ne # signifie pas que le résultat soit faux mais cela empêche de le # vérifier et de s'appuyer dessus. # La seconde cause d'échec est tout simplement l'erreur de calcul qui # peut se glisser n'importe où. # De manière générale, le manque de rigueur scientifique et technique # est souvent à l'origine de ces deux problèmes. # Il me semble que la meilleur attitude à avoir est celle de la # transparence : Expliciter augmente les chances de trouver les erreurs # et de les éliminer. C'est pour cela que nous assistons ces dernières # années à un changement de paradigme de recherche et que l'on exige un # accès à l'ensemble des données et des procédures de calcul. # C'est d'ailleurs une demande de plus en plus pressante de la part de # la société civile (en particulier le Conseil Européen) afin d'éviter # les dérives et d'améliorer l'efficacité de nos travaux. * M2-S3: Le document computationnel : principe ** Le document computationnel 1. Exemples récents d'études assez discutées 2. Pourquoi est-ce difficile ? 3. *Le document computationnel : principe* 4. Prise en main de l'outil. Au choix : - Jupyter - Rstudio - Org-Mode 5. Travailler avec les autres 6. Analyse comparée des différents outils ** Le document computationnel : principe file:img/iceberg.jpg # Note: # Dans cette séquence, je vais vous présenter ce qu'est un document # computationnel ainsi que les principes généraux que nous retrouverons # dans chacun des trois environnements dont je vous ai précédemment # parlé. L'intérêt de ce type de document est de permettre une # transparence la plus complète possible. ** La science moderne #+LaTeX: \includegraphics<1>[width=\linewidth]{img/iceberg_publication-1.png}% #+LaTeX: \includegraphics<2>[width=\linewidth]{img/iceberg_publication-2.png}% #+LaTeX: \includegraphics<3>[width=\linewidth]{img/iceberg_publication-3.png}% #+LaTeX: \includegraphics<4>[width=\linewidth]{img/iceberg_publication-4.png}% #+LaTeX: \includegraphics<5>[width=\linewidth]{img/iceberg_publication-5.png}% # Note: # # Data \to visualization/analysis \to article # Si une partie de l'activité scientifique nécessite des mesures sur le # terrain ou derrière une paillasse, la majeure partie se passe # maintenant derrière un ordinateur, les données provenant de machines # spécifiques : je pense par exemple à un accélérateur de particules, des # séquenceurs d'ADN, un téléscope, un réseau de capteur ou bien sûr des # simulations numériques s'exécutant sur des supercalculateurs. # Une fois ces données obtenues, elles sont transformées pour être # analysées, visualisées afin de mieux en comprendre la structure. Il # est courant de partager ces visualisations avec des collègues, # d'avoir un certain nombre d'itérations, de passer d'une vue à une # autre jusqu'à trouver celle qui explique le mieux les choses. On # utilise d'ailleurs souvent une multitude de logiciels spécifiques pour # obtenir ces visualisations. # Il arrive souvent qu'on soit déçu par les résultats, qu'on n'y # comprenne rien ou qu'on se rende compte que les données ne sont pas # intéressantes et qu'il faut se poser la poser la question sous un # angle différent. # Dans ce cas, retour à la case départ : acquisition de # données, visualisations, statistiques, nombreux échanges avec les # collègues... # Puis ça y est, on trouve enfin quelque chose d'intéressant. On prend # alors nos plus belles figures, on y ajoute les explications qui sont # finalement les bonnes, on tente de rendre tout cela intéressant et on # envoie l'ensemble à une conférence ou un journal. # Hélas, dans un pdf de 8 pages, le lecteur trouvera une jolie histoire, # des figures convaincantes mais n'aura aucune idée du réel travail # effectué. L'article, c'est la partie émergée de l'iceberg et il n'y a # alors plus aucun moyen de revenir sur les nombreuses tentatives et # échecs, ni sur les calculs et les données derrière chacune de ces # figures. # La recherche reproductible, c'est permettre de pouvoir naviguer dans # les deux sens et de combler le fossé séparant l'auteur du lecteur. ** Objectifs méthodologiques Garder trace afin de : - *Inspecter* : justifier/comprendre - *Refaire* : vérifier/corriger/réutiliser # Note: # Notre objectif est donc d'avoir un outil nous permettant : # - d'une part d'inspecter toute cette démarche, afin que l'auteur # puisse justifier pourquoi tel ou tel code est utilisé et que le # lecteur puisse comprendre ce qui a été fait; # - et d'autre part de refaire le calcul et l'analyse le plus # simplement possible, ce qui est essentiel # 1. pour permettre aux lecteurs de vérifier que ces calculs sont # corrects, # 2. pour permettre éventuellement de corriger des erreurs s'il y en a # 3. et enfin pour permettre à d'autres de réutiliser ces travaux, soit # sur un jeu de données différent, soit en réutilisant une partie de # la procédure d'analyse dans un autre contexte. ** La vitrine... et l'envers du décor \scriptsize #+LaTeX: \only<1>{\hfill\includesvg[width=.5\linewidth]{img/example_pi_full-1}}% #+LaTeX: \only<2>{\includesvg[width=\linewidth]{img/example_pi_full-2}}% #+LaTeX: \only<3>{\includesvg[width=\linewidth]{img/example_pi_full-3}}% #+LaTeX: \only<4>{\includesvg[width=\linewidth]{img/example_pi_full-4}}% #+LaTeX: \only<5>{\includesvg[width=\linewidth]{img/example_pi_full-5}}% #+LaTeX: \only<6>{\includesvg[width=\linewidth]{img/example_pi_full-6}}% # #+LaTeX: \includesvg<1>[width=\linewidth]{img/example_pi_full-2.svg}% # #+LaTeX: \includesvg<1>[width=\linewidth]{img/example_pi_full-3.svg}% # #+LaTeX: \includesvg<1>[width=\linewidth]{img/example_pi_full-4.svg}% # #+LaTeX: \includesvg<1>[width=\linewidth]{img/example_pi_full-5.svg}% # #+LaTeX: \includesvg<1>[width=\linewidth]{img/example_pi_full-6.svg}% # Note: # Voici la partie émergée du document computationnel. Au premier abord, # il s'agit d'un document tout à fait banal avec un titre, du texte, # éventuellement un petit morceau de code illustrant une procédure de # calcul, des résultats numériques, des formules de maths, des figures, # etc. Bref, un article classique au format pdf ou html. # Voici maintenant ce qui se cache derrière ce document : ici, un # notebook Jupyter tel que nous pouvons le voir dans un navigateur # web. C'est un document dynamique constitué de différentes parties sur # lesquelles on peut interagir. # Tout d'abord du texte au format markdown : ce sont les zones de texte # que j'ai surlignées en orange. Le formattage est assez simple, on peut # assez facilement y inclure des liens hypertextes ou des formules # mathématiques. # Entre ces zones de texte, on trouve des zones de code, que j'ai # surlignées en bleu. Ici il s'agit de fragments de code python # relativement simples. Dans cet environnement, il est possible d'éditer # directement ces fragments de code et les exécuter. En fait, un # notebook a en interne une console python ouverte et lorsque l'on # demande l'exécution d'un fragment de code, le code est directement # envoyé dans la console et le résultat est automatiquement récupéré. # Le résultat de chacun de ces différents codes est stocké juste en # dessous dans les zones que j'ai surlignées en jaune. Puisque cette # console reste "vivante" tout au long du document, les résultats # calculés dans un bloc sont visibles dans le bloc suivant, ce qui # encourage à ne pas écrire de longs blocs de code infâmes, mais au # contraire à écrire de petits fragments, à calculer les choses petit à # petit, tout en expliquant dans les zones de texte (en orange) comment # les différents fragments de code (en bleu) s'enchaînent et éventuellement # pourquoi, en fonction de ce que l'on vient de calculer (en jaune), on # décide d'appliquer tel nouveau fragment. # Une fois satisfait avec les calculs, on aime en général bien créer un # document classique en exportant vers du pdf ou du html. Chaque zone # (texte, code, résultat) est convertie et assemblée en un seul document # markdown qui est à son tour transformé vers le format désiré avec un # outil comme pandoc. # Bien sûr, dans le document final, on ne souhaite pas forcément rendre # tous les fragments de codes et tous les résultats visibles. C'est la # raison pour laquelle pour chacune de ces zones, il est possible de # spécifier si l'on souhaite la cacher ou pas. # Enfin, si les résultats intermédiaires sont stockés automatiquement # dans le notebook, l'environnement permet de ré-exécuter très # simplement l'ensemble du code du notebook et de mettre à jour les # résultats. # C'est donc à vous de décider, selon le contexte, si vous souhaitez # partager le document final, qui est souvent plus compact, ou le document # computationnel qui va permettre une inspection complète et une # réutilisation. ** Les différents outils 1. Jupyter 2. Rstudio/knitR 3. Org mode | *Principes identiques* | *Différences* | |----------------------------------------+--------------------| | • *1 seul document* | • Syntaxe | | \qquad (explications, code, resultats) | | | • Session | • Interopérabilité | | • Export | • Contrôle export | # Note: # Les trois environnements les plus matures permettant de créer de tels # documents sont Jupyter, que vous venez de voir, Rstudio/knitr, et # Org-mode. Ces trois environnements se distinguent par le niveau de # technicité nécessaire à leur mise en oeuvre. Je ferai une petite démo # de chacun de ces trois environnements dans les séquences suivantes. À # l'issue de ces démonstrations, vous pourrez choisir lequel vous # convient le mieux. # Vous verrez que le principe reste le même dans les trois environnements : # - Tout d'abord, avoir un seul document comprenant un entrelacs # d'explications au format markdown, de code exécutable simplement, et # les résultats de ces exécutions. # Cette organisation permet l'inspection et la réexécution que nous # nous étions fixés comme objectifs. # - En interne, une console python ou R est active et assure une # persistance des variables d'un fragment de code à l'autre. C'est la # notion de session sur laquelle nous reviendrons pendant les # démonstrations. # - Enfin, il est possible d'exporter le document computationnel vers un # format plus traditionnel éventuellement en masquant certaines # parties. # Les différences entre ces différents environnements sont relativement # mineures : # - Il y a quelques différences de syntaxe. Jupyter et Rstudio utilisent # du markdown alors que Org mode utilise le format org qui est # légèrement différent mais tout aussi lisible. La # façon d'indiquer les zones de code et les résultats est également un # peu différente mais c'est sans grande importance une fois dans # l'environnement correspondant. # - Plus important, peut-être l'interopérabilité entre différents # langages. Jupyter vous permet de faire du python, du R, du ruby ou # bien du julia mais pas vraiment d'utiliser plusieurs langages dans # un même notebook. /Enfin/, c'est possible mais ça demande un peu de # travail. # Rstudio est conçu spécifiquement autour du langage R. Même s'il est # possible d'utiliser du code python, vous verrez que ça n'est pas # aussi convivial que pour R. # Enfin, Org-mode permet une interaction entre les différents langages # relativement naturelle mais comme je le disais, la courbe # d'apprentissage est un peu plus raide. # - Enfin, ces outils diffèrent par le contrôle offert en terme de mise # en page lors de l'export. Jupyter et Rstudio se reposent sur # markdown et donc sur pandoc. Le style par défaut est très bien, # surtout si on souhaite produire du HTML. Mais si on doit produire un # document PDF respectant un style particulier, ça peut être peu # compliqué de demander à pandoc d'appliquer ce style. # Org-mode ne fait à peu près rien pour vous de ce point de vue là. Il # vous faudra donc de toutes façons configurer le style de votre # export. Ceci dit, un des points que j'apprécie particulièrement # lorsque je prépare un article en latex avec org-mode, c'est la # capacité à écrire directement du LaTeX qui sera passé tel quel lors # de l'export, ce qui me permet de faire exactement ce que je # souhaite. # Bien. Vous savez tout. Alors maintenant, Démo ! * M2-S4A: Prise en main de l'outil (Jupyter) ** Le document computationnel 1. Exemples récents d'études assez discutées 2. Pourquoi est-ce difficile ? 3. Le document computationnel : principe 4. *Prise en main de l'outil*. Au choix : - *Jupyter* - Rstudio - Org-Mode 5. Travailler avec les autres 6. Analyse comparée des différents outils ** Prise en main de l'outil : Jupyter #+ATTR_LATEX: :height 2cm :center nil file:img/jupyter-logo.png ** Lancement - Ouverture d'un document - Description rapide - Sauvegarde - Aide ** Exécution des blocs - Exécution et récupération des résultats - Ajout d'un bloc - Attention à l'ordre - Notion de session - Incohérences possibles - Tout réexécuter depuis le début ** Raccourcis clavier, auto-complétion, et Ipython magic - Raccourcis clavier == - Complétion Python (exemple de numpy) - =%matplotlib=, =%lsmagic= # =%run=, =%load=, =%load_ext= ** Utiliser d'autres langages - Exemple pour R : - =%load_ext rpy2.ipython= - =%%R %%sh %%perl= - Interaction entre =R= et =Python= possible - mais fragile... ** Production et partage du document final - Résultats stockés dans le document - $\to$ visibles dans gitlab - =git pull/push= - Export HTML/PDF classique ** Préparer un document # Contrôler la visibilité du code et des résultats - Hide-code plugin - =%%latex= et =%%html= - [[http://nbconvert.readthedocs.io/en/latest/external_exporters.html][Personnaliser les /exporters/ de NBConvert]] \small\href{-1cm} ~jupyter nbconvert --to mypackage.MyExporter notebook.ipynb~ ** Ce qu'il faut retenir - Beaucoup d'informations en peu de temps - Mettez en pratique ! * M2-S4B: Prise en main de l'outil (Rstudio) ** Le document computationnel 1. Exemples récents d'études assez discutées 2. Pourquoi est-ce difficile ? 3. Le document computationnel : principe 4. *Prise en main de l'outil*. Au choix : - Jupyter - *Rstudio* - Org-Mode 5. Travailler avec les autres 6. Analyse comparée des différents outils ** Prise en main de l'outil : Rstudio #+ATTR_LATEX: :height 2cm :center nil file:img/RStudio-Logo-Blue-Gradient.png #+ATTR_LATEX: :height 2cm :center nil file:img//knitr.png ** Lancement - Ouverture d'un document - Description rapide - Sauvegarde - Aide ** Exécution des blocs - Exécution et récupération des résultats - Ajout d'un bloc - Attention à l'ordre (notion de session, incohérences possibles) - Tout réexécuter depuis le début ** Raccourcis clavier et auto-complétion - Raccourcis claviers - Complétion R - Folding ** Production et partage du document final - Knit - Partage à peu de frais via rpubs ** Contrôler la visibilité du code et des résultats - Complétion (paramètres des blocs) ** Utiliser un style particulier - pdf, LaTeX - html - word/office Possibilité de faire du LaTeX (R Sweave : =Rnw=) ou du html (R html : =Rhtml=) directement pour avoir un contrôle parfait. ** Utiliser d'autres langages - Ajout et exécution d'un bloc Python - Attention, pas de session ! - Interaction uniquement via fichiers et dans de longs blocs ** Ce qu'il faut retenir - Beaucoup d'informations en peu de temps - Mettez en pratique ! * M2-S4C: Prise en main de l'outil (Org-Mode) ** Le document computationnel 1. Exemples récents d'études assez discutées 2. Pourquoi est-ce difficile ? 3. Le document computationnel : principe 4. *Prise en main de l'outil*. Au choix : - Jupyter - Rstudio - *Org-Mode* 5. Travailler avec les autres 6. Analyse comparée des différents outils ** Prise en main de l'outil : Org Mode #+ATTR_LATEX: :height 2cm :center nil file:img/600px-EmacsIcon.svg.png #+ATTR_LATEX: :height 2cm :center nil file:img/442px-Org-mode-unicorn.svg.png # Note: # Même plan que précédemment ** Lancement - Ouverture d'un document - Description rapide - Folding / Navigation - Restructuration - Sauvegarde - Aide ** Exécution des blocs - Ajout d'un bloc R - Exécution et récupération des résultats - Attention à l'ordre - Notion de session - Incohérences possibles - Tout réexécuter depuis le début ** Raccourcis clavier - Bloc expansion - R graphique - Python, Perl, ... - Shell session - Plusieurs sessions, plusieurs langages ! - Communication entre langages possible ** Navigation :noexport: - Folding - Restructuration # - Annotation (tags) ??? # - Sparse Tree ??? ** Production et partage du document final - Git Commit - Attention aux fichiers produits - Export # - Désactiver le recalcul - Visibilité du code et des résultats - Sections cachées ** Utiliser un style particulier - pdf, LaTeX - html - Possibilité de reprendre le contrôle ** Ce qu'il faut retenir - Beaucoup d'informations en peu de temps - Apprivoiser les raccourcis claviers avec la première entrée du journal - Mettez en pratique ! * M2-S5: Travailler avec les autres ** Le document computationnel 1. Exemples récents d'études assez discutées 2. Pourquoi est-ce difficile ? 3. Le document computationnel : principe 4. Prise en main de l'outil. Au choix : - Jupyter - Rstudio - Org-Mode 5. *Travailler avec les autres* 6. Analyse comparée des différents outils ** Travailler avec les autres file:img/jumping_penguin.png ** Préparer un document pour un journal Pré-requis pour faire un *pdf* : - Actuellement caché. En interne /pandoc/, /knitr/ ou /emacs/org-mode/ - /LaTeX/ installé Export *office/word* possible dans jupyter mais à configurer. Sinon export *html*... *** Dans tous les cas : - Besoin de cacher certaines cellules - Utiliser le bon style # Soyons honnêtes *** Produire un tel document demande d'avoir un environnement parfaitement configuré # Note: # Tout ces détails auront été expliqués avant pour chaque environnement. # - http://blog.juliusschulz.de/blog/ultimate-ipython-notebook # - https://github.com/kirbs-/hide_code is a must-have # - http://svmiller.com/blog/2016/02/svm-r-markdown-manuscript/ # - https://github.com/balouf/Kleinberg/blob/master/KleinbergsGridSimulator.ipynb # - Il y doit y avoir des choses équivalentes, mais plus simples pour # Rmd # - Et pour emacs, c'est d'une certaine façon plus simple car on est # habitué à bidouiller. ** Convaincre vos co-auteurs Face à cette complexité, plusieurs réactions : 1. Pas grave, c'est génial ! Je m'y mets ! 2. Euh... c'est bien. Mais je n'ai pas le temps d'apprendre... 3. Un nouvel outil ? Jamais ! $\leadsto$ différentes organisations possibles ** Option 1 : les co-auteurs enthousiastes Il faudra *assurer le service après-vente* : - Compatibilité avec les différents environnements - Gérer cette complexité (Jupyter/Rstudio/Emacs, Git, ...) C'est la meilleure façon de *s'assurer que tout est reproductible* et inspectable (et pas uniquement sur votre propre machine\dots)\hspace{-3em} ** Option 2 : investissement a minima Vos co-auteurs vous laissent gérer le code, les résultats mais adoptent votre style de document. *Ils peuvent :* - Éditer le texte de l'article (Markdown ou Org-Mode) *Ils ne peuvent pas :* - Recalculer - Exporter et voir le document final ** Option 3 : les co-auteurs "réfractaires" *Les co-auteurs ne changent pas leurs habitudes* - Un document /computationnel/ séparé produit tous les résultats et toutes les figures - Un autre document (/classique/) inclut les figures générées Mais tout est *conservé*, *documenté* et *recalculable* dans votre document computationnel ! ** Publier / partager votre document *Rpubs* - Parfait pour partage rapide, pas pérenne *Dropbox et autres* - +Pérénité+, accès ??, ... *Gitlab/Github/...* 1. Rendre public (tout l'historique !) 2. Faire le ménage et archiver l'état courant dans un site compagnon *Sites compagnons* - Runmycode, Éditeurs, ... - Article : *HAL* ; code et données : *Figshare / Zenodo* ** Conclusion Plusieurs modalités possibles en fonction de : - vos co-auteurs - vos contraintes techniques - vos contraintes de confidentialité/copyright * M2-S6: Analyse comparée des différents outils ** Le document computationnel 1. Exemples récents d'études assez discutées 2. Pourquoi est-ce difficile ? 3. Le document computationnel : principe 4. Prise en main de l'outil. Au choix : - Jupyter - Rstudio - Org-Mode 5. Travailler avec les autres 6. *Analyse comparée des différents outils* ** Analyse comparée des différents outils #+ATTR_LATEX: :height 2cm :center nil file:img/jupyter-logo.png #+ATTR_LATEX: :height 2cm :center nil file:img/RStudio-Logo-Blue-Gradient.png #+ATTR_LATEX: :height 2cm :center nil file:img/442px-Org-mode-unicorn.svg.png #+ATTR_LATEX: :height 2cm :center nil file:img/question_mark.png \bigskip Un document computationnel, mais pour quoi faire exactement ? # Note: # - Pour comparer ces différents outils, il est important de bien # identifier l'usage que l'on souhaite en faire. # - Nous allons regarder ensemble quelques cas d'usages ** Un cours ou un tutoriel Un notebook Jupyter - Facile à prendre en main - Document dynamique # Note: # - Super pratique. # - Téléchargement, exécution dynamique, résultats interactifs, # variations faciles, etc. # - C'est idéal pour un document à destination d'auto-formation. ** Un journal [[file:~/org/journal.org][Mon journal en org-mode]] - Un seul auteur - Organisation chronologique - Étiquettes - Notes, liens, code # Note: # - Structuration type: par date # - Mots-clés # - Navigation aisée # - Réexécution de code comme d'habitude ** Un cahier de laboratoire [[file:~/Work/Documents/Articles/2018/Alya-Perf/LabBook.org][Un cahier de laboratoire en org-mode]] - Organisation sémantique - Conventions - Plusieurs auteurs - Étiquettes pour auteurs, expériences, etc. # Note: # - Assez proche d'un journal mais avec un contenu bien plus technique # et fait pour être exploitable par des collègues. # - Exemple de structuration. ** Un article reproductible [[file:~/Work/Documents/Articles/2017/paper-hpl-at-scale/paper.org][Un article en cours]] - Plusieurs auteurs - Regénérer les figures - Revenir aux sources # Note: # - On voit la structure de l'article. # - Certaines sections sont cachées # - Elles pointent vers le cahier de laboratoire traçant les données # que je vais exploiter. # - Ici, je suis reparti de figure que Tom avait faites et je les ai # retravaillées et adaptées à ce dont j'avais besoin pour mon # article. # - Ici, c'est un peu "sale", il y a des liens vers des fichiers qui # sont sur mon disque dur mais c'est un article en cours de # préparation et vous voyez que j'ai bien accès à l'ensemble des # informations dont j'ai besoin. # - Plusieurs structurations sont possibles. En général, j'ai une # grosse section cachée au début de l'article où j'indique comment # récupérer l'ensemble des données (avec les commandes git ou les # URLs). Le reste du code d'analyse contenu dans l'article peut alors # être exécuté. # - Ici, comme on prépare un article, il est essentiel de pouvoir cacher # certaines sections et d'avoir un contrôle complet sur la typographie # car on n'a jamais assez de place. # - Dans tous les cas, tout ceci n'est possible que si on a suffisemment # de matière, c'est-à-dire que si on a pris régulièrement des notes # sur comment on a obtenu les données et sur comment on les a # analysées. C'est ce que vous mettrez en pratique dans le module 3 # avec l'outil de votre choix. ** Différences techniques #+LaTeX: \null\hspace{-1cm}\begin{overlayarea}{\linewidth}{2.4cm}\scalebox{.73}{ #+ATTR_LATEX: :center nil | | Origine | Technologie | Utilisation | Navigation | Format | Article? | |---------------+-----------+--------------------+---------------+------------+--------+-----------| | Jupyter | 2001 | Web App., Python | Facile | Limitée | JSON | Difficile | | Rstudio/knitr | 2011/2014 | IDE, Java/R | Facile | Limitée | Rmd | Oui | | Org-Mode | 1976/2008 | Editeur, EmacsLisp | Plus complexe | Puissante | Org | Oui | #+LaTeX: }\end{overlayarea} L'outil importe peu, ce qui importe, c'est : - collecter l'information - l'organiser et la rendre exploitable - la rendre disponible # Note: # - L'écosystème évolue mais vous pouvez déjà vous en saisir. ** Bonus : expériences vécues :noexport: - Complétion, introspection donc développement/composition pas si désagréable comparé à un IDE avancé. - Objectif atteint. Mois par mois : permet aux collègues d'aider, d'avancer ensemble, etc. Communication de "problèmes" (données manquantes par exemple) bien plus simple. - Un document dynamique et traçable, réexecutable, modifiable, réutilisable, ... Quand le reviewer 3 demande de refaire la figure 5 en noir et blanc et de changer les légendes. Ou bien de rajouter de la compléter. - Au jour le jour : meilleur réutilisation (par exemple entre l'article et le slide) Éléments clés lors du choix : - Simplicité de prise en main vs. vrai éditeur - Où sont fait les calculs - Multi-langage - http://carreau.github.io/posts/23-Cross-Language-Integration.html - Gestion des langages compilés - Notions de caches et d'état Les principaux outils actuels : - jupyter - rstudio - org-mode Limitations : - Longs calculs - Grands documents - Solutions wysiwyg pour jupyter Historique/diff un peu compliqué pour jupyter