Une présentation inspirée d’un séminaire du Metsem (Séminaire Méthodologie de Sciences Po)
Hugues Pecout (Géographie Cités) présente une séance intitulée “De l’article de données à l’article de code, en passant par les méthodes”, elle concerne la pratique de publication de documents computationnels (Notebooks) dans le cadre du projet Rzine.
La programmation lettré :Méthode de code intéligible
Les documents computationnels :Rmarkdown/Quarto
Les forges logicielles :Github ou Gitlab
Literate Programming
Nous devons changer notre attitude traditionnelle envers la construction des programmes : au lieu de considérer que notre tâche principale est de dire à un ordinateur ce qu’il doit faire, appliquons-nous plutôt à expliquer à des êtres humains ce que nous voulons que l’ordinateur fasse…
Tel un auteur, il choisit, avec soin, le dictionnaire à la main, les noms de ses variables et en explique la signification pour chacune d’elles. Il cherche donc à obtenir un programme compréhensible parce que ses concepts sont présentés dans le meilleur ordre possible. Pour cela, il utilise un mélange de méthodes formelles et informelles qui se complètent.
— Donald Knuth, Literate Programming
On est à la recherche de lisibilité pas d’optimisation
base_efe %>%# filtre si le taux accès est superieur à 20 %filter(tx_acc >0.2) %>%# en fonction de la variable top1_c5group_by(top1_c5) %>%# La moyenne et la médianesummarise(moyenne =mean(tx_acc), médiane =median(tx_acc)) %>%head()
library(ggplot2)data("mpg")ggplot(data = mpg, aes(x =cut(displ, breaks =c(unname(quantile(displ,na.rm = T,probs =c(0,0.25,0.5,0.75,1)))), include.lowest =TRUE, labels =c("Très faible","Faible","Haute","Très haute")),fill=class) ) +geom_bar(position ="fill")+scale_fill_brewer(palette="Set1")+xlab("Cylindré en litre") +ylab("") +ggtitle("Cylindré en litre selon le type de vehicule")
Graphique en langage non lettré
Graphique en langage lettré
#-----------------------------------------------------------------# Représentation graphique # de la répartition de vehicules # discrétisés en quatre classes # en fonction de leur cylindré en litre##-----------------------------------------------------------------# Library de graphique et baselibrary(ggplot2)# Discrétisation la variable displ (données mpg)## Statistiques sur la série statistique displsummary(mpg$displ)## Histogramme de la distributionhist(mpg$displ)
Graphique en langage lettré
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.600 2.400 3.300 3.472 4.600 7.000
Graphique en langage lettré
## Choix des bornes de classes en quartilebornes_des_classes <-c(quantile(mpg$displ,na.rm = T,probs =c(0,0.25,0.5,0.75,1)))## Choix des noms de classesnom_des_classes <-c("Très faible","Faible","Haute","Très haute")## Discrétisation de la variable 'displ'mpg$displ_tranche <-cut(mpg$displ,breaks = bornes_des_classes,labels = nom_des_classes,include.lowest =TRUE)#---------------------------------------------------------------------# Représentation de la distribution selon la discrétisation## Représentation graphique de la distributionggplot(data = mpg, #data set mpgaes(x = displ_tranche, #axe des x variable displ_tranche discrétisation de displfill=class) # variable de type de véhicule (catégorisation au sein de chaque barre) ) +geom_bar(position ="fill") +#Type de graphique avec postion empiléescale_fill_brewer(palette="Set1") +# Choix de la palette de couleurxlab("Cylindré en litre") +# Titre de l'axe des abscissesylab("") +#suppression du titres de l'axe des ordonnésggtitle("Cylindré en litre selon le type de vehicule") # Titre du graphique
Graphique en langage lettré
Graphique en langage lettré encore mieux
graphique_1 <-ggplot(data = mpg, #data set mpgaes(x = displ_tranche, #axe des x variable displ_tranche discrétisation de displfill=class) # variable de type de véhicule (catégorisation au sein de chaque barre) ) #Type de graphique avec postion empiléegraphique_1<-graphique_1 +geom_bar(position ="fill") # Choix de la palette de couleurgraphique_1<-graphique_1 +scale_fill_brewer(palette="Set1") # Titre de l'axe des abscissesgraphique_1<- graphique_1 +xlab("Cylindré en litre") #suppression du titres de l'axe des ordonnésgraphique_1<- graphique_1 +ylab("") # Titre du graphique graphique_1<- graphique_1 +ggtitle("Cylindré en litre selon le type de vehicule") graphique_1
Graphique en langage lettré encore mieux
Note Book, Document computationnel
Interface de programmation qui combine langage naturel et langage de programmation
Du texte + du code
Le texte : Peut etre mis en forme, comptenir des images, des liens etc…
Le code : Peut s’executer par bloc
Note Book, Document computationnel
Le Note Book est l’outil parfait pour faire du literate programming (programmation lettrée)
Le Note Book aide a faire de la recherche reproductible
Note Book, Document computationnel, S. Jugnot et disque R
L’utilisation de notebook permetrait de partir d’une base brute d’enquête jusqu’a une base diffusable. On serait ainsi transparent sur les appurements, imputations, redressements, etc…
Un seul programme pour passer de production à diffusion
Structure Note Book :
Exemple de Note Book R :
Le Note Book permet different format de sorties
Du code
Des PDF
Des PPT
Latex
Des pages HTML
Des docs .qmd .rmd
Quarto est le meilleur outils de Note Book
Les Forges Logicielles
Répondent aux problématiques de :
Travail collaboratif (gestion de version/versionning)
Historique (retour en arrière)
Partage
Organisation interne et/ou externe
Mise a disposition
Et favorisent la science ouverte, la reproductibilité, la transparence
Les deux principales forges logicielles (GitHub et Gitlab)
Github
Gitlab
Le Cereq a fait le choix de Gitlab
Hébergement : GitLab Enterprise Edition, gratuit et auto-hébergé sur les serveurs du SUNI. Le serveur GitLab été créé par Jérémy pour une autre application dans le passé, mais n’a finalement jamais été utilisé.
Sécurité
Prix : Une mise à niveau vers une version payante devra être envisagée si la version gratuite ne correspond plus aux besoins du Céreq.
Github Desktop
Interface permettant de relier nos fichier en local et les fichier sur GIT (cloud)
Commit Push Pull Fetch
Commit : Commentaire sauvegarder dans le fichier .git
Push : Envoi du commit sur le GIT (cloud)
Pull : Récuparation en local du GIT (cloud)
Fetch : comparaison du cloud et du local
Les repos, Les branches
Un repo est un répertoire qui va contenir un ensemble de fichier.
Un repo peut avoir plusieurs branches qui évoluent en parrallèle et qui peuvent etre merger
Il est de bon usage que chaque intervenant travaille sur sa propre branche.
Il y a une branche principale qui fait office de référence : la branche main
Les indispensables d’un repo
Le Readme : fichier markdown explicatif du projet
Le dossier .git : enregistre l’historique via les commits
Le gitignore : permet d’exclure des dossier ou extension du l’envoi sur la Git (cloud)
Le dossier data : contient les bases et est exclu du cloud via le gitigniore