Formation à la DESE
Romain Avouac, Thomas Faria, Lino Galiana, Tom Seimandi
29 Septembre 2022 et 3 octobre 2022
L’activité du statisticien / datascientist tend à se rapprocher de celle du développeur :

Source : Peng R., Reproducible Research in Computational Science, Science (2011)
Une reproductibilité parfaite est coûteuse
Git est un standard atteignable et efficient
pour en finir avec ça :
ou ça :
ou encore ça :
prior <- read_csv(prior_path)
prior <- prior %>%
select(id, proba_inter, proba_build, proba_rfl) %>%
separate(id, into = c('nidt', 'grid_id'), sep = ":") %>%
group_by(nidt) %>%
mutate(
proba_build = proba_build/sum(proba_build),
proba_rfl = proba_rfl/sum(proba_rfl),
) %>%
unite(col = "id", nidt, grid_id, sep = ":")
# Test
# prior_test <- prior %>%
# mutate(
# proba_inter = round(proba_inter, 4)
# proba_build = round(proba_build, 4)
# proba_rfl = round(proba_rfl, 4)
# )
write_csv(prior_round, "~/prior.csv")Pour arriver à ça :

Source : ThinkR
Un modèle distribué

Source : specbee.com
Qui permet l’expérimentation en toute sécurité
Source : lutece.paris.fr
Quel que soit l’environnement de travail

Avec des outils pour faciliter la collaboration

Une vitrine pour vous

GitL’utilisation de Git nécessite certaines notions préalables:
filesystemLinux
Mais
RStudio, Sublime Merge, VS Code) qui facilitent l’apprentissageGit, GitHub, GitLab… quelles différences ?
Git est un logiciel ;RStudio, VS Code…)Git, GitHub, GitLab… quelles différences ?
GitHub et GitLab sont des forges logiciellesTip
GitHub : utilisation pour les projets open-sourceGitLab : utilisation pour les projets internesDépôt local / dépôt distant (remote)
Source : Collaborative work with R
Workflow (version littéraire) :
Git que ces fichiers doivent être suivis (staging area)commit)push) après avoir récupéré la version collective (pull)Workflow (version imagée) :
Source : Git Documentation
Workflow (version imagée complète) :

| Action | Commande |
|---|---|
| Cloner un projet | git clone [url-to-git-repo] |
| Afficher les changements | git status |
| Retrouver l’URL du dépôt distant | git remote -v |
| Action | Commande |
|---|---|
Ajouter des changements à l’index de Git |
Un seul fichier : git add <file-name> Tous les fichiers déjà indexés : git add -u Tous les fichiers ⚠️ : git add -A |
Warning
La méthode git add -A peut amener à suivre les modifications de fichiers qui ne devraient pas l’être (par exemple, des données).
Il est recommandé de bien réfléchir avant de l’utiliser (ou d’avoir un bon .gitignore)
| Action | Commande |
|---|---|
Faire un commit |
git commit -m "message" |
Pousser les changements locaux (branche master) |
git push origin master |
Récupérer les changements distants (branche master) |
git pull origin master |
Préparation de l’environnement de travail
GitHubGitHubRStudio sur le Datalabterminal pour activer le stockage des identifiants :
git config --global credential.helper storeDatalab):
File → New project → Version Control → Git❓ Question : qu’est ce qui différencie le projet cloné d’un projet quelconque ?
Premiers commits
scriptsscript1.R et script2.R, chacun contenant quelques commandes R de votre choixRStudiocommit, auquel on donnera un message descriptif pertinentscript1.R et modifier le contenu du fichier script2.RRStudio❓ Question : à ce stade, le dépôt du projet sur GitHub (remote) a-t-il été modifié ?
Interactions avec le dépôt distant
push pour intégrer les changements locaux au projet distantGitHub
README.md via l’interface d’édition webcommit/push. Que se passe-t-il ?pull pour intégrer les changements distants au projet localpush des changements locaux❓ Question : comment s’assurer que notre projet local est toujours iso au projet distant ?
Que versionne-t-on ?
.html, .pdf, modèles…)Note
Pour définir des règles qui évitent de committer tel ou tel fichier, on utilise un fichier nommé .gitignore.
Si on mélange du code et des éléments annexes (output, données…) dans un même dossier, il faut consacrer du temps à ce fichier.
Le site gitignore.io peut vous fournir des modèles.
N’hésitez pas à y ajouter des règles conservatrices (par exemple *.csv), comme cela est expliqué dans la documentation utilitR.
Format des commits

Le fichier .gitignore
Lors de la création du projet via Rstudio un fichier .gitignore a été créé à la racine du projet.
.pdf et .htmldata à la racine du projet et l’ajouter au .gitignore.gitignore au projet Git❓ Question : que se passe-t-il lorsque l’on ajoute au .gitignore des fichiers qui ont déjà été commit sur le projet Git ?
Git facilite le travail collaboratif
Git : modèle des branchesGitHub / GitLab : Issues, Pull Requests, ForksSynchronisation des dépôts
Github. Il/Elle donne des droits au(x) développeur(s) du projetRStudio du Datalab<votre_nom>-<votre_prenom>.md. Écrire dedans trois phrases de son choix sans ponctuation ni majuscules, puis commit et push les modificationsÀ ce stade, une seule personne (la plus rapide) devrait ne pas avoir rencontré de rejet du push. C’est normal ! Avant d’accepter une modification, Git vérifie en premier lieu la cohérence de la branche avec le dépôt distant. Le premier ayant fait un push a modifié le dépôt commun ; les autres doivent intégrer ces modifications dans leur version locale (pull) avant d’avoir le droit de proposer un changement.
push a été refusé, effectuer un pull des modifications distantesRStudio, afficher l’historique du projet et regarder la manière dont ont été intégrées les modifications des collaborateurspush de vos modifications localespush les modifications locales❓ Question : que se serait-il passé si les différents membres du groupe avaient effectué leurs modifications sur un seul et même fichier ?
Résoudre les conflits
commit et push les modificationspull préalable, les développeurs modifient également le contenu du fichier du mainteneur, puis commit et push les modificationsLe push est rejeté pour la même raison que dans l’application précédente : les dépôts ne sont plus synchronisés, il faut pull les changements distants au préalable. Mais cette fois, le pull est également rejeté : il y a un conflit entre l’historique du projet distant et celui du projet local. Git nous indique qu’il faut résoudre le conflit avant de pouvoir modifier l’historique du projet.
RStudio pour résoudre le conflit, en choisissant la version du fichier que vous souhaitez conserver, puis commit/push les modificationspush. Les autres doivent répéter l’opération.❓ Question : comment limiter au maximum la survenue des conflits d’historique ?
Description plus détaillée : ici
Utilisation de branches
<votre_nom>-<votre_prénom>commit avec les modifications de votre choix, puis pousser les changements sur une nouvelle branche du dépôt distant (git push -u origin <votre_nom>-<votre_prénom>)Pull Request (PR) pour proposer d’intégrer vos changements sur la branche principale du dépôt distantIssue dans laquelle vous mentionnez la Pull Request précédemment ouverte❓ Question : quelle organisation pour merge dans la branche principale ?
Contribution à un projet open-source
GitHub, faire un fork du dépôt git-exo<votre_nom>-<votre_prénom>commit avec les modifications de votre choix, puis pousser les changements sur votre forkPull Request (PR) pour proposer d’intégrer vos changements sur la branche principale du dépôt git-exoIssue dans laquelle vous mentionnez la Pull Request précédemment ouverte❓ Question : pourquoi, avec un fork, est-il très important de toujours effectuer une Pull Request à partir d’une branche différente de la branche principale ?
RENSAEutilitR propose plusieurs chapitres sur GitBonnes pratiques pour les projets statistiques