# A tibble: 6 Ă 6
country continent year lifeExp pop gdpPercap
<fct> <fct> <int> <dbl> <int> <dbl>
1 Afghanistan Asia 1952 28.8 8425333 779.
2 Afghanistan Asia 1957 30.3 9240934 821.
3 Afghanistan Asia 1962 32.0 10267083 853.
4 Afghanistan Asia 1967 34.0 11537966 836.
5 Afghanistan Asia 1972 36.1 13079460 740.
6 Afghanistan Asia 1977 38.4 14880372 786.
Outils pour une Science Reproductible, Ouverte & Diffusable
DiplĂŽme Universitaire Public Health Data Science
Avant-propos et instructions
âïž Configuration (avant dâentamer le cours)
Installez la derniĂšre version de â https://cran.r-project.org/
Installez la derniĂšre version de RStudio â https://posit.co/download/rstudio-desktop/
Exécuter ensuite les lignes ci-dessous dans votre console :
install.packages(c(
"tidyverse", # ggplot2, dplyr, readr, âŠ
"gapminder", # notre jeu de données principal
"renv", # gestion des dépendances
"here", # chemins de fichiers portables
"quarto", # rendu des .qmd depuis R
"knitr", # moteur de compilation
"sessioninfo" # documenter votre environnement
))VĂ©rifiez que Quarto est disponible : dans lâonglet Terminal de RStudio, tapez quarto --version.
Vous devez obtenir en retour un numéro de version si tout fonctionne correctement (par exemple ℠1.4).
Installez Python â„ 3.10 â https://www.python.org/downloads/
Installez VS Code â https://code.visualstudio.com/ (avec lâextension Python)
ou utilisez JupyterLab : pip install jupyterlab
Créez et activez un environnement virtuel, puis installez les packages nécessaires en executant les lignes de code ci-dessous:
# Créer le dossier du projet et l'environnement virtuel
mkdir repro-phds && cd repro-phds
python -m venv .venv
# Activer (choisissez la ligne correspondant Ă votre OS)
source .venv/bin/activate # pour macOS ou Linux
.venv\Scripts\activate # pour Windows (PowerShell)
# Installer les bibliothĂšques Python
pip install pandas matplotlib seaborn gapminder jupyterlab quartoVérifiez que Quarto est bien disponible en exécutant quarto --version dans votre terminal (vous devez obtenir en retour un numéro de version si tout fonctionne correctement).
Si vous rencontrez des erreurs dâinstallation, recherchez le message dâerreur sur le web : le dĂ©bogage est une compĂ©tence fondamentale en data science ! La plupart des erreurs trouve une solution sur Stack Overflow dĂšs le premier rĂ©sultat par exemple⊠Les chatbots dâIA gĂ©nĂ©rative, comme LeChat de Mistral AI par exemple, peuvent Ă©galement ĂȘtre trĂšs utiles.
1 ReproductibilitĂ© : quâest-ce que câest et pourquoi est-ce important ?
â± ~45 minutes1.1 đ Lectures : la crise de la reproductibilitĂ©
1.2 đĄ Lâensemble du spectre de la reproductibilitĂ©
Le terme « reproductible » est parfois utilisé de maniÚre vague, et plusieurs définitions coexistent dans différents domaines scientifiques. Dans ce cours, nous utiliserons la définition ci-dessous, centrée sur la reproductibilité computationnelle :
| MĂȘmes donnĂ©es ? | MĂȘme code/mĂ©thode ? | Ce qui est Ă©valuer | |
|---|---|---|---|
| Reproductible | â | â | Peut-on rĂ©-exĂ©cuter lâanalyse et obtenir exactement les mĂȘmes chiffres ? |
| RĂ©plicable | â | â | La mĂȘme mĂ©thode se gĂ©nĂ©ralise-t-elle Ă de nouvelles donnĂ©es ? |
| Robuste | â | â | Des choix analytiques diffĂ©rents aboutissent-ils Ă la mĂȘme conclusion ? |
| GĂ©nĂ©ralisable | â | â | Le rĂ©sultat tient-il au-delĂ du contexte original ? |
Le diagramme ci-dessous (extrait de The Turing Way) illustre ces 4 niveaux de définition :
1.3 đĄ Pourquoi la reproductibilitĂ© est-elle importante ?
Quelle est la valeur dâun article non reproductible ?
Si ce nâest pas reproductible, est-ce de la science ?
Devrait-on simplement se faire confiance mutuellement ?
Les acteurs de la recherche scientifique doivent ĂȘtre comptable de leurs propres rĂ©sultats. La crĂ©dibilitĂ© scientifique et le professionalisme de chacun repose sur cette capacitĂ© Ă rendre des comptes. Travailler de maniĂšre reproductible contribue Ă rĂ©pondre Ă ces enjeux.
- đ Les revues scientifiques exigent un certain niveau de reproductibilitĂ© : les pairs relecteurs vĂ©rifient dĂ©sormais le code, les donnĂ©es et les workflows/pipelines computationelles avant lâacceptation finale
- âïž La reproductibilitĂ© constitue un bouclier mĂ©thodologique : elle rĂ©duit la probabilitĂ© dâerreurs non dĂ©tectĂ©es et de rĂ©sultats fallacieux
- đȘđșđ«đ· Droit institutionnel : lâUE, lâANR et lâHCERES imposent tous un certain niveau de reproductibilitĂ© pour les recherches quâelles financent
- 𧱠Impact accru : les articles reproductibles sont davantage cités et repris (fondation plus fiable pour les travaux futurs).
En santĂ© publique, la reproductibilitĂ© revĂȘt une importance particuliĂšre : - Des dĂ©cisions politiques sont prises Ă partir de rĂ©sultats publiĂ©s. Un rĂ©sultat erronĂ© ou non-reproductible peut ainsi nuire Ă un grand nombre de patients ou de populations. - La recherche financĂ©e par des fonds publics doit rendre des comptes: si le public a financĂ© lâĂ©tude, le code et les donnĂ©es devraient (dans la mesure du possible) ĂȘtre accessibles au public. Cette idĂ©e est Ă©troitement liĂ©e Ă la science ouverte, un concept connexe Ă celui de la reproductibilitĂ©, mais distinct (âĄïžđ plus de dĂ©tails ici)
Obstacles, motivations et solutions
| Obstacle | Exemple concret | Solution pratique |
|---|---|---|
| Culturel | « Mon directeur de thÚse ne fait jamais ça » | Le présenter comme un investissement de carriÚre, non comme une contrainte supplémentaire |
| Technique | La simulation mets plus de 3 jours Ă tourner | Stocker des rĂ©sultats intermĂ©diaires prĂ©-calculĂ©s ; prĂ©voir un mode dâexĂ©cution rapide rĂ©duit |
| LĂ©gal | DonnĂ©es patients sous RGPD | GĂ©nĂ©rer des donnĂ©es synthĂ©tiques de mĂȘme structure ; accorder un accĂšs temporaire restreint Ă un auditeur |
| Temps | « Je nettoierai le code plus tard » | Commencer tÎt : cela représente plus de travail au départ, mais en économise énormément lors des révisions suivantes |
La reproductibilité est un atout protecteur, pas un inconvénient
La reproductibilitĂ© (et ses tĂ©moignages) donne de la confiance. En effet, les scientifiques qui font attention Ă la reproductibilitĂ© de leurs travaux sont plus efficaces sur le long terme : ils peuvent plus facilement sâappuyer sur leurs propres travaux passĂ©s.
La reproductibilité apporte des bénéfices à différentes échelles pour la science :
| đ Domaine scientifique | đ„ Groupe de recherche | đ§âđŹ Vous-mĂȘme |
|---|---|---|
| CrĂ©dibilitĂ© mĂ©thodologique renforcĂ©e | Transmission plus rapide aux collaborateurs | Finalisation & rĂ©visions dâarticles plus rapides |
| Connaissances cumulatives et extensibles | RĂ©duction de la dette technique | Transparent & fiable pour lâaudience |
| Risque rĂ©duit dâerreurs publiĂ©es | Archivage clair et opposable | CompĂ©tences techniques & workflow efficace |
| Plus de citations |
1.4 đ§âđ» Exercice 1 : CrĂ©er le squelette de votre projet reproductible
2 Programmation lettrée avec Quarto
â± ~45 minutes2.1 đ Lecture : Un document pour les gouverner tous
2.2 đĄ Anatomie dâun fichier .qmd
Un fichier Quarto possĂšde trois blocs constitutifs :
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â 1. En-tĂȘte YAML -> titre, auteur, type de sortie... â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â 2. Texte Markdown -> prose, titres, listes, liens â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â 3. Blocs de code -> code R ou Python + sa sortie â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
1. Lâen-tĂȘte YAML
Ce entĂȘte se place donc au tout dĂ©but de votre document: il se situe entre des dĂ©limiteurs, ---, tout en haut. Il dĂ©finit par dĂ©faut tout ce qui concerne la sortie et son format global, en utilisant le langage YAML. VOici un exemple ci-dessous.
Attention : lâindentation est importante en YAML.
---
title: "Tendances mondiales de santĂ© â DonnĂ©es Gapminder"
author: "Votre Nom"
date: today # remplit automatiquement la date du jour
format:
html:
toc: true # table des matiĂšres
code-fold: true # masquer le code par défaut (le lecteur peut le déplier)
embed-resources: true # fichier `HTML` autonome (portable)
execute:
echo: true # afficher le code dans la sortie par défaut
warning: true # continuer Ă afficher les avertissements
message: false # supprimer les messages (ex. lors du chargement des packages)
---2. Texte Markdown
Entre les blocs de code, le texte narratif utilise du Markdown (.md) qui est un format dâĂ©dition de texte lĂ©ger. Voici un exemple des outils de bases disponibles avec Markdown :
# Titre de niveau 1
## Titre de niveau 2
Un paragraphe. Mettez le texte en **gras**, *italique*, ou `style code`.
- ĂlĂ©ment de liste Ă puces 1
- ĂlĂ©ment de liste Ă puces 2
1. ĂlĂ©ment numĂ©rotĂ© 1
2. ĂlĂ©ment numĂ©rotĂ© 2
[Texte descriptif du lien](https://url.com)
{width=50%}3. Blocs de code
Ces blocs sont dĂ©limitĂ©s par des triples apostrophes inversĂ©es \``, suivies de{r}ou{python}(par exemple) pour spĂ©cifier l'interprĂ©teur du langage de programmation Ă utiliser. Les options spĂ©cifiques au bloc sont indiquĂ©es en attribuant des valeurs Ă des mots-clĂ©s spĂ©cifiques au dĂ©but du bloc avec la syntaxe suivante :#| mot-clĂ©: valeur` (pouvant changer les valeurs par dĂ©faut dĂ©finies en tĂȘte si besoin). Voici un exemple de bloc, suivi de sa sortie :
```{r}
#| label: summary-table-r
#| echo: true
#| eval: true
library(gapminder)
head(gapminder)
```Options clĂ©s du bloc (Ă©crites aprĂšs #| Ă lâintĂ©rieur du bloc) :
| Option | Défaut | Effet |
|---|---|---|
echo |
true |
Afficher le code dans la sortie |
eval |
true |
Exécuter le code |
include |
true |
Inclure la sortie du bloc |
message |
true |
Afficher les messages de chargement des packages |
warning |
true |
Afficher les avertissements |
cache |
false |
Mettre en cache les résultats (utile pour le code lent) |
label |
â | Nom pour le rĂ©fĂ©rencement croisĂ© des figures / tableaux |
fig-cap |
â | LĂ©gende de la figure |
fig-width / fig-height |
â | Dimensions de la figure (en pouces) |
2.2.1 Code inline
Vous pouvez également insérer des valeurs calculées directement au fil du texte en utilisant `r ` ou `{python}` :
Le jeu de données couvre
`r length(unique(gapminder$country))`pays de`r min(gapminder$year)`Ă`r max(gapminder$year)`
Une fois rendu, cela devient :
Le jeu de données couvre 142 pays de 1952 à 2007
âš Pas de copier-coller, pas de chiffres obsolĂštes, pas de mise Ă jour manuelle !
2.3 đ§âđ» Exercice 2 : Votre premier rapport reproductible en santĂ©
3 Visualisation des données
â± ~40 minutes3.1 đ Lecture â La grammaire des graphiques
3.2 đĄ Construire des graphiques couche par couche
Les sept couches
| Composant | Dans ggplot2 | Exemple |
|---|---|---|
| Données | ggplot(data = ...) |
gapminder |> filter(year == 2007) |
| Esthétiques | aes(x, y, colour, size, shape) |
aes(x = gdpPercap, y = lifeExp, colour = continent) |
| Géométrie | geom_*() |
geom_point(), geom_line(), geom_boxplot() |
| Ăchelles | scale_*() |
scale_x_log10(), scale_colour_viridis_d() |
| Facettes | facet_wrap() / facet_grid() |
facet_wrap(~ continent) |
| ThĂšme | theme_*() |
theme_minimal() |
| Ătiquettes | labs() |
labs(title = "...", x = "...", caption = "...") |
Exemple complet
library(ggplot2)
library(gapminder)
library(dplyr)
gap_2007 <- gapminder |> filter(year == 2007)
ggplot(
data = gap_2007,
aes(x = gdpPercap, y = lifeExp,
colour = continent,
size = pop) # taille des bulles = population
) +
geom_point(alpha = 0.7) +
scale_x_log10(labels = scales::dollar_format()) + # axe PIB en log
scale_colour_viridis_d(option = "plasma") + # palette accessible aux daltoniens
scale_size(range = c(2, 14), guide = "none") +
labs(
title = "Richesse et santé en 2007",
subtitle = "Chaque bulle est un pays ; taille â population",
x = "PIB par habitant (échelle log, USD)",
y = "Espérance de vie (années)",
colour = "Continent",
caption = "Source : Fondation Gapminder"
) +
theme_minimal(base_size = 13)import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
gap_2007 = gapminder[gapminder["year"] == 2007].copy()
# Tailles des bulles proportionnelles Ă la population
max_pop = gap_2007["pop"].max()
gap_2007["bubble_size"] = (gap_2007["pop"] / max_pop) * 1800 + 30
fig, ax = plt.subplots(figsize=(10, 6))
continents = gap_2007["continent"].unique()
palette = sns.color_palette("plasma", len(continents))
for i, cont in enumerate(sorted(continents)):
subset = gap_2007[gap_2007["continent"] == cont]
ax.scatter(
np.log10(subset["gdpPercap"]),
subset["lifeExp"],
s=subset["bubble_size"],
color=palette[i],
alpha=0.75,
label=cont
)
ax.set_xlabel("PIB par habitant (échelle log, USD)", fontsize=12)
ax.set_ylabel("Espérance de vie (années)", fontsize=12)
ax.set_title("Richesse et santé en 2007", fontsize=14, fontweight="bold")
ax.set_xticks([3, 4, 5])
ax.set_xticklabels(["1 000 $", "10 000 $", "100 000 $"])
ax.legend(title="Continent", loc="lower right")
plt.tight_layout()
plt.show()Sauvegarder les figures de maniĂšre programmatique
Sauvegarder une figure manuellement (par clic droit ou en cliquant sur « Export » dans le volet Plots) nâest pas reproductible. La taille, la rĂ©solution et le format varient Ă chaque fois, et câest une Ă©tape est invisible dans votre code.
Sauvegardez toujours les figures Ă lâintĂ©rieur de votre script, avec des dimensions et une rĂ©solution fixes.
# 1. Assigner votre graphique à une variable nommée
p <- ggplot(gap_2007, aes(...)) + ...
# 2. Sauvegarder â fournir un vecteur (par exemple `.PDF`) ou un raster (par exempke `.PNG`) selon la nature de votre graphique
ggsave(
filename = here::here("output", "figures", "fig01_richesse_sante_2007.pdf"),
plot = p,
width = 10, height = 6, units = "in"
)
ggsave(
filename = here::here("output", "figures", "fig01_richesse_sante_2007.png"),
plot = p,
width = 10, height = 6, units = "in",
dpi = 300 # 300 dpi = qualité publication
)fig, ax = plt.subplots(figsize=(10, 6))
# ... votre code de graphique ...
fig.savefig("output/figures/fig01_richesse_sante_2007.pdf", bbox_inches="tight")
fig.savefig("output/figures/fig01_richesse_sante_2007.png", dpi=300, bbox_inches="tight")
plt.close() # libĂ©rer la mĂ©moireConvention de nommage des fichiers : utilisez un prĂ©fixe numĂ©rique correspondant Ă votre manuscrit â fig01_, fig02_, âŠ, tab01_, tab02_, ⊠Câest souvent lâun des premiers points que vĂ©rifient les auditeurs.
Choisir des palettes de couleurs accessibles
Environ 8 % des hommes prĂ©sentent une forme de dĂ©ficience de la vision des couleurs. Voici quelques palettes conçues pour ĂȘtre perceptuellement uniformes et accessibles aux daltoniens :
| Palette | Package /library | Cas dâusage |
|---|---|---|
viridis, plasma, magma |
viridis (intégré dans ggplot2) |
Séquentiel / continu |
scale_colour_viridis_d() |
ggplot2 | Catégoriel discret |
scale_colour_brewer(palette = "Set2") |
ggplot2 | CatĂ©goriel (jusquâĂ 8 groupes) |
sns.set_palette("colorblind") |
seaborn | Tout graphique seaborn |
palette="viridis" |
seaborn | Mapping de couleur continu |
3.3 đ§âđ» Exercice 3 : Figures
4 Partage & check-liste de reproductibilité
â± ~35 minutes4.1 đ Lecture â Lâaudit de la revue
4.2 đĄ Outils pour partager et archiver
Une chaĂźne dâoutils complĂšte pour la reproductibilitĂ©
Passer de « ça fonctionne sur ma machine » à « nâimporte qui peut lâexĂ©cuter » nĂ©cessite dâempiler plusieurs couches de solutions :
đ Organisation du projet Projets RStudio / structure de dossiers standard
đ Gestion des dĂ©pendances renv (`<svg aria-hidden="true" role="img" viewBox="0 0 581 512" style="height:1em;width:1.13em;vertical-align:-0.125em;margin-left:auto;margin-right:auto;font-size:inherit;fill:currentColor;overflow:visible;position:relative;"><path d="M581 226.6C581 119.1 450.9 32 290.5 32S0 119.1 0 226.6C0 322.4 103.3 402 239.4 418.1V480h99.1v-61.5c24.3-2.7 47.6-7.4 69.4-13.9L448 480h112l-67.4-113.7c54.5-35.4 88.4-84.9 88.4-139.7zm-466.8 14.5c0-73.5 98.9-133 220.8-133s211.9 40.7 211.9 133c0 50.1-26.5 85-70.3 106.4-2.4-1.6-4.7-2.9-6.4-3.7-10.2-5.2-27.8-10.5-27.8-10.5s86.6-6.4 86.6-92.7-90.6-87.9-90.6-87.9h-199V361c-74.1-21.5-125.2-67.1-125.2-119.9zm225.1 38.3v-55.6c57.8 0 87.8-6.8 87.8 27.3 0 36.5-38.2 28.3-87.8 28.3zm-.9 72.5H365c10.8 0 18.9 11.7 24 19.2-16.1 1.9-33 2.8-50.6 2.9v-22.1z"/></svg>`{=html}) / venv + requirements.txt (`<svg aria-hidden="true" role="img" viewBox="0 0 448 512" style="height:1em;width:0.88em;vertical-align:-0.125em;margin-left:auto;margin-right:auto;font-size:inherit;fill:currentColor;overflow:visible;position:relative;"><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg>`{=html})
đ Document lettrĂ© Quarto (.qmd)
đČ Graines alĂ©atoires set.seed() / np.random.seed()
đïž ContrĂŽle de version Git
đ HĂ©bergement distant GitHub
đŠ Archivage permanent Zenodo â DOI citable dans un article
renv et environnements virtuels
renv crée une bibliothÚque locale au projet et enregistre les versions exactes des packages dans renv.lock.
renv::snapshot() # mettre Ă jour le fichier de verrouillage aprĂšs installation/modification de packages
renv::restore() # commande pour le collaborateur : installer exactement les mĂȘmes versions
renv::status() # vérifier si le fichier de verrouillage et l'état actuel concordentà la fin de votre rapport, enregistrez toujours votre environnement de session :
sessioninfo::session_info()Cela affiche la version de , le systĂšme dâexploitation, et la version exacte de chaque package chargĂ©.
Dans le terminal, comme mentionné dans Section 1
pip freeze > requirements.txt # sauvegarder les versions exactes
# Configuration pour le collaborateur
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtĂ la fin de votre notebook :
## Dépendances
```{python}
import sys, importlib.metadata
print(f"Python {sys.version}")
for pkg in ["pandas", "matplotlib", "seaborn", "numpy"]:
print(f" {pkg}: {importlib.metadata.version(pkg)}")
```Git et GitHub : lâessentiel
Pourquoi utiliser git et GitHub ?
đ Sauvegarde hors site : si votre ordinateur tombe en panne, rien nâest perdu
đ Historique complet : vous pouvez remonter dans le temps, jusquâĂ nâimporte quelle version prĂ©cĂ©dente, sans craindre dâavoir supprimĂ© par inadvertance du code que vous pourriez rĂ©utiliser plus tard
đ Collaboration : les autres peuvent contribuer facilement, sans sâenvoyer des fichiers par e-mail
đ IntĂ©gration avec Zenodo (pour des DOI citables)
gitest un systĂšme de contrĂŽle de version qui permet de suivre les modifications de tous les fichiers dâun projet, et de synchroniser ces modifications entre plusieurs ordinateurs et contributeurs.- GitHub est une plateforme web de Microsoft fournissant lâintĂ©gration de
gitavec lâhĂ©bergement cloud.
Vous nâavez pas besoin dâĂȘtre un expert git : trois commandes couvrent la majeure partie dââusage quotidien :
git add . # indexer toutes les modifications
git commit -m "Ajout analyse espérance de vie et figures" # messages décrivant les modifications indexées
git push # envoyer vers GitHubgit
git config --global user.name "Votre nom d'utilisateur"
git config --global user.email "vous@domaine.ext"Dans RStudio : Outils â Options globales â Git/SVN â pointez vers lâexĂ©cutable git . Pour tout problĂšme de configuration de git dans RStudio, vous pouvez consulter le livre en ligne Happy git with R.
Zenodo : un DOI permanent pour votre code (et optionnellement vos données)
Zenodo est un dĂ©pĂŽt hĂ©bergĂ© par le CERN qui attribue Ă votre code ou Ă vos donnĂ©es un DOI (qui signifie Digital Object Identifier), un identifiant permanent et citable. Câest ce qui figure dans la dĂ©claration de DisponibilitĂ© des donnĂ©es de votre article.
Comment ça fonctionne en trois étapes :
- Publiez votre projet dans un dépÎt GitHub public
- Connectez GitHub sur https://zenodo.org/account/settings/github
- Créez une release GitHub (ex.
v1.0) â Zenodo lâarchive automatiquement et Ă©met un DOI
Votre article cite ensuite :
> « Lâensemble du code dâanalyse est disponible sur https://doi.org/10.5281/zenodo.XXXXXXX »
Le fait quâil possĂšde un DOI et soit hĂ©bergĂ© par lâUE le rend beaucoup plus pĂ©renne quâun simple dĂ©pĂŽt GitHub (dâautant quâils ne sont pas exclusifs lâun de lâautre).
4.3 đ§âđ» Exercice 4 : Auto-audit et prĂ©paration au partage
đ RĂ©sumĂ© & conclusion
Ce que nous avons appris :
đ Adopter une structure propre et portable pour une navigation aisĂ©e dans votre projet
đ Tout exĂ©cuter de bout en bout avec une seule commande
đ Sauvegarder les figures de maniĂšre programmatique
đ Verrouiller vos dĂ©pendances, pour que lâenvironnement soit reproductible
đ IntĂ©grer des valeurs calculĂ©es inline
đ Satisfaire aux exigences dâune liste de contrĂŽle de reproductibilitĂ© de revue
La rĂšgle dâor
Commencez petit, commencez maintenant. La reproductibilité est un idéal ; chaque petit pas en avant vous en rapproche.
Outils clés
| Outil | ProblÚme résolu | Une commande à retenir |
|---|---|---|
| RStudio Project | Plus de chemins absolus ; espace de travail autonome |
Ouvrir .Rproj
|
| Quarto | Code + prose en un seul document ; pas de copier-coller de valeurs |
quarto render
|
| renv / venv | Versions exactes des packages â assurance « ça marchait lâannĂ©e derniĂšre » |
renv::snapshot()
|
| here | Chemins de fichiers portables fonctionnant sous tous les OS |
here::here(âoutputâ,âfig.pdfâ)
|
| ggplot2 / seaborn | Figures programmatiques, cohérentes et exportables |
ggsave() / fig.savefig()
|
| Git + GitHub | Historique des versions, collaboration, sauvegarde hors site |
git add . && git commit && git push
|
| Zenodo | DOI permanent pour citer le code dans les articles | Connecter GitHub dans les paramĂštres Zenodo |
Pour aller plus loin
| Ressource | à quoi ça sert |
|---|---|
| The Turing Way | Guide complet et maintenu par la communauté pour la recherche reproductible |
| R for Data Science (2e) | Tidyverse, ggplot2, Quarto â livre gratuit en ligne |
| What They Forgot to Teach You About R | Organisation des projets, nommage, chemins de fichiers |
| Documentation Quarto | Tout sur Quarto |
| ggplot2 book (3e) | Plongée approfondie dans la grammaire des graphiques |
| Python Data Science Handbook | NumPy, Pandas, Matplotlib, scikit-learn |
| Hejblum et al. (2020) | Recherche reproductible pour la biostatistique |
| Hornung et al. (2026) | Surmonter les obstacles à la reproductibilité computationnelle |
| Ouvrir la Science | Guides et passeports de science ouverte français (MESRI) |