From 2e1152ea8da4428d5283f58ef806c511a36fbc10 Mon Sep 17 00:00:00 2001 From: 5956bcdb06c2088a97b35e01dc67db8c <5956bcdb06c2088a97b35e01dc67db8c@app-learninglab.inria.fr> Date: Wed, 16 Jun 2021 07:18:51 +0000 Subject: [PATCH] Update Journal_de_Pierre.md --- Journal_Pierre_TIZE_MHA.md | 124 +++++++++++++++++++++++++++++++++++-- 1 file changed, 118 insertions(+), 6 deletions(-) diff --git a/Journal_Pierre_TIZE_MHA.md b/Journal_Pierre_TIZE_MHA.md index 92475cc..9fb8299 100644 --- a/Journal_Pierre_TIZE_MHA.md +++ b/Journal_Pierre_TIZE_MHA.md @@ -1,6 +1,118 @@ -## Mon journal de bord -- Ce que j'ai appris de l'introduction générale de ce mooc -- Ce que j'aprrends du module 1 -- Ce que j'apprends du module 2 -- Ce que j'apprends du module 3 -- Ce que j'apprends du module 4 \ No newline at end of file +--- +Titre : "Journal de bord" +Auteur : "Pierre TIZE MHA" +Date : "16/06/2021" +--- + +Début d'utilisation : fin de la semaine 2 + +## Module 3 + +1. Analyse de données réplicable + +Résultat méthodologique devient ensemble des codes ayant permis de faire les calculs accompagnés d'une explication détaillée + +2. Etude de cas : incidence des syndromes grippaux + +Format date selon la norme ISO 8601 des date : l'année commence par la 1ere semaine qui contient le 4 janvier ou celle qui a plus de la moitié des ces jours dans l'année en cours. + +Ne jamais faire des modications de données à la main : plutôt avec du code. + +3. Importer les données avec Rstudio / R + +environnement RStudio ; langage R ; bibliothèque parsedate pour la gestion des +dates en format iso + +Important de lire les données directement de la source et faire attention aux données manquantes. + +Pour charger un document d'un site web : insérer un chunk R dans le document markdown l'adresse +Dans le chunk data_url = "lien url" +Si première ligne à ignorer : écrire 'data = read.csv(data_url, skip=1)' + +Pour voir les premières lignes de données : 'head(data)' +Pour voir les dernière lignes de données : 'tail(data)' + +Recherche de données manquantes 'données_manquantes = apply(data, 1, function(x) any(is.na(x)))' +Le "1" fait passer la commande ligne par ligne et la fonction fait la recherche de données manquantes colonne par colonne. + +Pour inspecter le type de données : 'class(data$variable)'; +Ceci donne : interger (Nb entier); factor (V. qualitative); + +Pour transformer une donnée comme "-" ou "?" en valeur manquante, il faut relire les données en spécifiant les valeur à lire comme valeur manquante : +'data = read.csv(data_url, skip=1, na.string = "-"' + +4. Vérification et inspection des données + +date au format iso dans la librairie parsedate ; + +Exple : 'date = 199501' + conversion en chaine de caractères : 'ws = paste(date)' + attribution année et semaines : 'iso = paste0(substring(ws, 1, 4) "-W", substring(ws, 5 ,6)' + Le résultat : "1995-W01" correspondant semainte 7 de l'année 1982 + Ensuite faire appel à la fonction **parse_iso8601** soit parse_iso_8601(iso) + Ceci donne : "1995-01-02 UTC" soit la date du lundi de cette semaine. + + On transforme tout ce qui précède pour l'appliquer à une variable. + 'convert_week = fonction(date) { + ws = paste(date) + iso = paste0(substring(ws, 1, 4), "-W", sobstring(ws, 5, 6)) + parse_iso_8601(iso) + }' + Résultat à coller dans une nouvelle variable : sapply(data$week, convert_week) + Malheureusement 'sapply' va donner des nombres entiers dans la base. + Convertir alors la ligne parse_iso_8601 en chaine de caractère : 'as.character(parse_iso_9601(iso)) + Puis en date : 'data$date = as.Date (sapply(data$week, convert_week))' + +Deuxième étape : classer les données par ordre chronologique : 'data = data[order(data$date),]' + + Vérifier si distance entre 2 dates voisines = 1 semaine : 'all(diff(data$date)) == 7' + + appliquer un plot : 'with(data, plot(V1, V2, type="l"))' + Si trop serré, refaitre sur les 200 dernières lignes : 'with(tail(data, 200), plot(V1, V2, type="l"))' + +A la fin vérifier les données par l'inspection visuelle (plot par exple) et des code de validation (vérifier distance entre deux semaines par exple). + +5. Exercice + +## Module 4 + +1. L'enfer des données + +Deux formats binaires pour stocker les données avec les métadonnées : FITS (plus complexe et plus flexible) et HDFR +Archivage : zenodo et figshare pour archivage pérenne et accessible à tous + +2. L'enfer du logiciel + +- passage à l'chelle : les codes complexes + +Rentrer les données dans un workflow permettant de mieux structurer le documents. +Le moteur d'exécution du workflow permet l'exécution des commandes dans l'ordre cotrairement au notebook. +Cependant pas de description dans le workflow. +exple : Pegasus, collective knowledge, galaxy +autres léger (dask, swift, drake ...) et autres hybrides prototypes entre notebook et workflow. + +Faire de checkpoint pour les calculs trop longs qui deviennent rapidement interminables. + +- passage à l'chelle : les envrionnements complexes + +Conserver le bazar : capture automatique de l'environnement avec CDE, ReproZip, CARE ; le résultat ne peut être modiefier +Faire le ménage : partir d'un environnement vierge et installer uniquement le nécessaire ; plusieurs solutions : Docker/singularity, Guix/Nix + +- l'épreuve du temps + +Les mises à jour des logiciels de l'environnement interne ou externe (linux, windows) d'utilsation peut modifier les résultats. + +Software Heritage : hébergement de tous les logiciels du monde +HAL : autre solution d'archivage + +3. l'enfer du calcul + +Les compilateur peuvent inverser l'ordres des opération +Deux options pour un calcul reproductible : insister sur le respect de l'ordre des opération ou rendre la compilation reproductible (noter toutes les options et version du compilateur) + +Calcul parallèle : les calculs sont repartis sur différents processeurs d'où un risque de non reproductibilité + + calcul = plateforme + logiciel + données + +Les nombres aléatoires sont en réalité pseudo-aléatoires avec les logiciels car basé sur une logique (comme l'heure). +Avec un générateur de nombre aléatoire : reproduire la graine dans le code de l'application et vérifier les trois prémiers nombres générés. \ No newline at end of file -- 2.18.1