# Journal de bord du Mooc Recherche Reproductible ## Jour 1 - Découverte la langage Markdown - J’ai découvert GitLab et le fonctionnement des dépôts Git. - J’ai appris la syntaxe de base du Markdown. - Je comprends mieux l’importance de la reproductibilité en recherche. - J’ai créé un fichier Markdown pour m’entraîner. - J’ai utilisé la fonction de recherche de GitLab pour retrouver une chaîne dans un dépôt. ## Jour 2 - Fondamentaux des environnements computationnels - **Traçabilité** : code, données et résultats réunis dans un même fichier. - **Reproductibilité** : possibilité de relancer le calcul et d’obtenir la même figure. - **Transparence** : le raisonnement est visible (code + explications en langage naturel). - **Partage / réutilisation** : collègues et lecteurs peuvent adapter ou vérifier le travail. ## Jour 3 - Trois grands outils : différences clés | Jupyter Notebook | RStudio (`.Rmd`) | Org-mode (`.org`) | |------------------|------------------|-------------------| | Installation plutôt simple via Anaconda / pip | Idéal pour R ; intégration Markdown + Pandoc | Repose sur Emacs, apprentissage plus long | | Fichiers **`.ipynb`** (JSON) | Fichiers **`.Rmd`** (Markdown + YAML) | Fichiers **`.org`** (texte pur) | | Noyaux multiples (Python, R, Julia…) | Focus R (Python via `reticulate`) | Exécution Babel pour **tous** langages | | Export HTML/PDF par nbconvert | Export HTML/PDF/Word via Pandoc | Export LaTeX/Beamer/HTML, styles personnalisés | ### Module2 Exo2 Exo3 import numpy as np donnees = [14.0, 7.6, 11.2, 12.8, 12.5, 9.9, 14.9, 9.4, 16.9, 10.2, 14.9, 18.1, 7.3, 9.8, 10.9, 12.2, 9.9, 2.9, 2.8, 15.4, 15.7, 9.7, 13.1, 13.2, 12.3, 11.7, 16.0, 12.4, 17.9, 12.2, 16.2, 18.7, 8.9, 11.9, 12.1, 14.6, 12.1, 4.7, 3.9, 16.9, 16.8, 11.3, 14.4, 15.7, 14.0, 13.6, 18.0, 13.6, 19.9, 13.7, 17.0, 20.5, 9.9, 12.5, 13.2, 16.1, 13.5, 6.3, 6.4, 17.6, 19.1, 12.8, 15.5, 16.3, 15.2, 14.6, 19.1, 14.4, 21.4, 15.1, 19.6, 21.7, 11.3, 15.0, 14.3, 16.8, 14.0, 6.8, 8.2, 19.9, 20.4, 14.6, 16.4, 18.7, 16.8, 15.8, 20.4, 15.8, 22.4, 16.2, 20.3, 23.4, 12.1, 15.5, 15.4, 18.4, 15.7, 10.2, 8.9, 21.0] print("Moyenne :", np.mean(donnees)) print("Écart-type :", np.std(donnees, ddof=1)) print("Minimum :", np.min(donnees)) print("Médiane :", np.median(donnees)) print("Maximum :", np.max(donnees)) import matplotlib.pyplot as plt % Affichage graphique : Séquence plot + histogramme fig, axs = plt.subplots(2, 1, figsize=(10, 8)) % Séquence plot axs[0].plot(donnees, marker='o', linestyle='-', color='blue') axs[0].set_title("Séquence plot des données") axs[0].set_xlabel("Index") axs[0].set_ylabel("Valeur") % Histogramme axs[1].hist(donnees, bins=15, color='skyblue', edgecolor='black') axs[1].set_title("Histogramme des données") axs[1].set_xlabel("Valeur") axs[1].set_ylabel("Fréquence") plt.tight_layout() plt.show() ## Jour 4 - Une analyse réplicable - Une analyse réplicable se distingue par le fait que tout le code utilisé est fourni, ce qui permet à d'autres de reproduire les résultats exactement. Cela assure plus de transparence que les analyses traditionnelles. - Une analyse réplicable est plus facile à modifier pour de nouveaux cas et plus simple à vérifier par d'autres chercheurs. Elle renforce la fiabilité et la reproductibilité des résultats. ### Module3 Exo1 #### Modification du code pour utiliser une copie locale des données Au lieu de télécharger les données du Réseau Sentinelles à chaque exécution, nous allons : - Vérifier si une copie locale existe déjà. - Si ce n’est pas le cas, télécharger le fichier CSV et le sauvegarder localement. - Charger les données à partir du fichier local. python import pathlib import requests import pandas as pd #### URL d’origine data_url = "http://www.sentiweb.fr/datasets/incidence-PAY-3.csv" local_file = pathlib.Path("data/incidence_grippal.csv") #### Faut changer par : local_file.parent.mkdir(parents=True, exist_ok=True) if not local_file.exists(): print("Téléchargement du fichier depuis le Réseau Sentinelles…") response = requests.get(data_url, timeout=30) response.raise_for_status() local_file.write_bytes(response.content) print(f"✅ Données sauvegardées dans : {local_file}") else: print(f"✅ Données locales déjà présentes : {local_file}") raw_data = pd.read_csv(local_file, skiprows=1) ### Nettoyage et vérification des données avant l’analyse Avant de tracer les courbes, il faut : - Supprimer les espaces éventuels dans les noms de colonnes. - Convertir la colonne 'inc' en données numériques. - Vérifier que la colonne 'inc' contient bien des données valides. sorted_data.columns = sorted_data.columns.str.strip() sorted_data['inc'] = pd.to_numeric(sorted_data['inc'], errors='coerce') print("Valeurs manquantes dans 'inc' :", sorted_data['inc'].isnull().sum()) print("Valeurs valides dans 'inc' :", sorted_data['inc'].notnull().sum()) sorted_data['inc'].plot()