Facile à lire, par soi-même et par les autres (indentation, noms d’objets)
Organisé de façon logique (simplicité)
Explicite et montre les intentions du développeur (commentaires)
Bonnes pratiques pour écrire et documenter son code
Voici un graphique interactif réalisé avec plotly…
Bonnes pratiques pour écrire et documenter son code
… Et son code associé. Un commentaire ?
library(plotly)monjeudedonnees<-read.csv("data/don_del.csv",sep=";", dec=",")monjeudedonnees$part_ordi_2014<-monjeudedonnees$porta_2014/monjeudedonnees$popto_2014*100slope<-0.02;monjeudedonnees$size <-sqrt(monjeudedonnees$popco_2014 * slope)fig<-plot_ly(monjeudedonnees, x =~part_ordi_2014, y =~idr_2011, type ='scatter', mode ='markers', size =~size, color =~reg_nom, colors ='Paired', sizes =c(min(monjeudedonnees$size), max(monjeudedonnees$size)),marker=list(opacity=0.5, sizemode='diameter',line=list(width=1, color='#FFFFFF')),text=~paste('Délégation:', del_nom_fr, '/', del_nom_ar, '<br>IDR 2011 :', idr_2011, '<br>Ordi:', part_ordi_2014, '<br>Pop.:', popto_2014))fig<-fig %>%layout(title ='IDR et équipement en ordinateurs dans les délégations tunisiennes',xaxis=list(title="Part de la population équipée d'ordinateur 2014 (%)",range=c(15, 35)),yaxis =list(title="Indice de développement régional 2011",range=c(0, 1)))fig
Bonnes pratiques pour écrire et documenter son code
Mise en forme du code : indentation, une instruction par ligne, espaces entre les caractères
library(plotly)monjeudedonnees <-read.csv("data/don_del.csv", sep =";", dec =",")monjeudedonnees$part_ordi_2014 <- monjeudedonnees$porta_2014 / monjeudedonnees$popto_2014 *100slope <-0.02monjeudedonnees$size <-sqrt(monjeudedonnees$popco_2014 * slope)fig <-plot_ly(monjeudedonnees,x =~part_ordi_2014, y =~idr_2011, size =~size, color =~reg_nom, type ='scatter', mode ='markers', colors ='Paired', sizes =c(min(monjeudedonnees$size), max(monjeudedonnees$size)),marker =list(opacity =0.5, sizemode ='diameter',line =list(width =1, color ='#FFFFFF')),text =~paste('Délégation:', del_nom_fr, '/', del_nom_ar, '<br>IDR 2011 :', idr_2011, '<br>Ordi:', part_ordi_2014, '<br>Pop.:', popto_2014))fig <- fig %>%layout(title ='IDR et équipement en ordinateurs dans les délégations tunisiennes',xaxis =list(title ="Part de la population équipée d'ordinateur 2014 (%)",range =c(15, 35)),yaxis =list(title="Indice de développement régional 2011",range =c(0, 1)))fig
Bonnes pratiques pour écrire et documenter son code
Commenter son code : choix de conception, courts et explicites
# Package utilisélibrary(plotly)# Import des donnéesmonjeudedonnees <-read.csv("data/don_del.csv",sep=";", dec=",")# Création indicateurmonjeudedonnees$part_ordi_2014 <- monjeudedonnees$porta_2014 / monjeudedonnees$popto_2014 *100# Paramétrage taille des cerclesslope <-0.02monjeudedonnees$size <-sqrt(monjeudedonnees$popco_2014 * slope)# Création plot interactiffig <-plot_ly(monjeudedonnees, # Jeu de donnéesx =~part_ordi_2014, y =~idr_2011, size =~size, color =~reg_nom, # Variablestype ='scatter', mode ='markers', colors ='Paired', sizes =c(min(monjeudedonnees$size), max(monjeudedonnees$size)),marker =list(opacity =0.5, sizemode ='diameter',line =list(width =1, color ='#FFFFFF')),text =~paste('Délégation:', del_nom_fr, '/', del_nom_ar, '<br>IDR 2011 :', idr_2011, '<br>Ordi:', part_ordi_2014, '<br>Pop.:', popto_2014))# Labels (titre, axes)fig <- fig %>%layout(title ='IDR et équipement en ordinateurs dans les délégations tunisiennes',xaxis =list(title ="Part de la population équipée d'ordinateur 2014 (%)",range =c(15, 35)),yaxis =list(title="Indice de développement régional 2011",range =c(0, 1)))fig
Bonnes pratiques pour écrire et documenter son code
Optimiser les noms d’objet : courts. Ne pas utiliser des mots “réservés” (plot, sum…)
# Package utilisélibrary(plotly)# Import des donnéesdel <-read.csv("data/don_del.csv", sep=";", dec=",")# Création indicateurdel$part_ordi_2014 <- del$porta_2014 / del$popto_2014 *100# Paramétrage taille des cerclesslope <-0.02del$size <-sqrt(del$popco_2014 * slope)# Création plot interactiffig <-plot_ly(del, # Jeu de donnéesx =~part_ordi_2014, y =~idr_2011, size =~size, color =~reg_nom, # Variablestype ='scatter', mode ='markers', colors ='Paired', sizes =c(min(del$size), max(del$size)),marker =list(opacity =0.5, sizemode ='diameter',line =list(width =1, color ='#FFFFFF')),text =~paste('Délégation:', del_nom_fr, '/', del_nom_ar, '<br>IDR 2011 :', idr_2011, '<br>Ordi:', part_ordi_2014, '<br>Pop.:', popto_2014))# Labels (titre, axes)fig <- fig %>%layout(title ='IDR et équipement en ordinateurs dans les délégations tunisiennes',xaxis =list(title ="Part de la population équipée d'ordinateur 2014 (%)",range =c(15, 35)),yaxis =list(title="Indice de développement régional 2011",range =c(0, 1)))fig
Quarto et les notebooks
La réplication en question
Où sont stockées les données ?
Sur quoi reposent ces protocoles méthodologiques ?
Comment les documenter ?
Comment les restituer / mettre à jour / adapter ?
Qui pour reprendre ces programmes ?
Qui pour comprendre ce code et ses intentions ?
Recherche reproductible
Ouverture des protocoles de recherche dans l’objectif de confirmer et rendre répétable des résultats de recherche :
Mise à disposition des données et du code, exécutable
Documentation de l’environnement logiciel nécessaire à son exécution
Transparence dans la collecte de données, ses traitements, analyses et sorties graphiques
Réutilisable par d’autres : documentation du code, de ce qu’il produit et dans quel but
Ouvert aux retours, commentaires, suggestions, critiques, révisions
Jon Claerbout (sismologue, Univ. Stanford). Il utilise avec son groupe pour la première fois le terme de “recherche reproductible” lors du congrès de la Society of Exploration Geophysics en 1992
Programmation lettrée et notebooks
Paradigme de programmation qui consiste à associer code source (pour les ordinateurs) et documentation (pour les humains) :
Donner les informations suffisantes pour répliquer l’expérimentation, à la manière d’un essai
Vérifier que les conclusions sont valides
Améliorer les programmes / rendre les mauvaises décisions de conception plus évidentes
Utile pour reprendre les programmes ultérieurement
Transmettre et partager les connaissances sous des formes appropriées (tutoriels, manuels)
Un gain général en reproductibilité de la démarche et en ouverture des méthodes scientifiques.
Donald Knuth (mathématicien, Univ. Stanford). Pose les bases de la programmation lettrée dans un premier environnement de literate programming : le WEB qui combine du Pascal et du TeX, appliqué aux nombres premiers (1984)
Notebooks : Principes fondamentaux
Le Notebook est une solution opérationnelle et adaptée pour arriver à ces fins
Source : Pecout, 2022
Les Notebooks du moment en SHS
Source : Pecout, 2022
Quarto : un des derniers nés des notebooks (2022)
Une solution de référence dans l’univers RStudio : Maintenu par Posit, accessible dans RStudio, en développement actif (prise en main ++).
Permet d’exécuter différents langages de programmation : R, Python, Julia ou JavaScript (interactivité ++)
---title: "OpenStreetMap data and associated routing engine to produce novel data on rural areas in Europe"subtitle: "Review data and methods" author: - name: "Ronan Ysebaert, Marianne Guérois\n, Timothée Giraud, Nicolas Lambert, Matthieu Viry" affiliation: UAR RIATE (CNRS, Université Paris Cité) affiliation-url: https://riate.cnrs.fr/date: "2024-05-06"description: "This review of the literature and data availability aims at providing an overview of possible solutions and limitations for creating accessibility indicators at European context. Whatever the solution retained, computing accessibility indicators requires relevant origins / destination pairs and routing engines for computing travel-time indicators. It is afterward possible to propose a large set of indicators derived from these measures. The first part of the document presents at European scale the policy context and the main initiatives developed so far for proposing harmonized indicators on accessibility. The second one reminds the main issues to be considered when calculating accessibility indicators (origin-destination pairs, routing engines, accessibility indicators computation). The third section makes an overview of existing databases and possibilities that could be considered in a European context for the selection of origins / destinations pairs. The fourth part highlights existing solutions for routing engines according to several transportation modes (road, cycle, transport-transit). Finally, the last section discusses on possibilities offered in term of indicator creation when the travel time matrix is calculated with a case-study on hospitals in France. This case-study could be extended in a cross-border context to test this framework within GRANULAR activities. At the end, this report aims at providing a general research framework on the activities that will be held on task 3.3.1 of the GRANULAR project: Crowd-sources data based on OpenStreetMap."title-block-banner: "#27445C"bibliography: bib.bibformat: html: theme: sandstone embed-resources: true smooth-scroll: true fontsize: 0.9em code-tools: true code-fold: true toc: true toc-title: Summary toc-depth: 2 toc-location: left css: "styles.css" linkcolor: "#d52420"---
Paramétrer son document grâce au YAML
Ajouter des références bibliographiques ?
Un fichier .bib avec les entrées bibliographiques au format BibTeX…
… Appelé dans le YAML et le corps du document avec @x (identifiant biblio)
Les références seront ajoutées en fin de document lors de la compilation
Décrire simplement son cheminement en markdown
Permet de gérer les blocs de textes entre les blocs de code dans les notebooks Quarto
Un langage de balisage léger basé sur une syntaxe simple largement utilisé dans les blogs, forums et outils collaboratifs
Permet de gérer le formatage du texte, des en-têtes, importer simplement des images ou des URL, gérer des énumérations, des tables, etc.
Optimiser sa mise en page avec des classes préformatées
Ceci
::: columns::: {.column width="40%"}::: {.callout-tip}## 5 types de callouts disponibles`note`, `warning`, `important`, `tip`, and `caution`.:::::: {.callout-note appearance="simple"}## Pay AttentionUsing callouts is an effective way to highlight content that your reader give special consideration or attention.:::::: ::: {.column width="60%"}::::::
Optimiser sa mise en page avec des classes préformatées
Rend cela
Note
Note that there are five types of callouts, including: note, warning, important, tip, and caution.
Pay Attention
Using callouts is an effective way to highlight content that your reader give special consideration or attention.
Tip with Title
This is an example of a callout with a title.
Expand To Learn About Collapse
This is an example of a ‘folded’ caution callout that can be expanded by the user. You can use collapse="true" to collapse it by default or collapse="false" to make a collapsible callout that is expanded by default.
Paramétrer ses blocs de code grâce aux chunks
Le code est à placer dans des chunks (tronçons), délimités par des triples backticks (Code > Insert Chunk dans RStudio).
Un même document Quarto peut combiner plusieurs langages de programmation :
Voici un graphique créé avec la librairie python matplotlib.
```{python}import matplotlib.pyplot as pltplt.plot([1,2,3,4])plt.show()```
Et un graphique avec le package ggplot de R…
```{r}library(ggplot2)ggplot(airquality, aes(Temp, Ozone)) +geom_point() +geom_smooth(method ="loess", se =FALSE)```
Paramétrer ses blocs de code grâce aux chunks
En initiant le chunk par un hash pipe#| on peut paramétrer son exécution / affichage. Les arguments les plus usuels sont :
label: toto : nommer le chunk
eval: true/false : le bloc de code est joué ou non.
echo: true/false : le bloc de code s’affiche ou non dans le document de sortie.
cache: true/false : les résultats sont mis en cache et ne sont pas rejoués tant que le bloc de code reste inchangé.
warning: true/false : affiche les messages d’alerte ou non.
fig-height: 4 / fig-width: 6 : hauteur / largeur du plot de sortie, en pouces.
dpi: 150 : densité de pixels par pouce.
Paramétrer ses blocs de code grâce aux chunks
Ceci dans le .qmd
```{r}plot(1:10)```
Rendra cela dans le fichier de sortie
plot(1:10)
Paramétrer ses blocs de code grâce aux chunks
Ceci dans le .qmd
```{r}#| eval: false#| echo: falseplot(1:10)```
Ne rendra rien dans le fichier de sortie…
Et c’est bien normal :)
Paramétrer ses blocs de code grâce aux chunks
Ceci dans le .qmd
```{r}#| echo: falseplot(1:10)```
Rendra cela dans le fichier de sortie
Paramétrer ses blocs de code grâce aux chunks
Ceci dans le .qmd
```{r}#| fig-height: 4#| fig-width: 3#| fig-cap: Fig.1 - Un graphique très basique ! #| code-fold: trueplot(1:10)```
Rendra cela dans le fichier de sortie
Code
plot(1:10)
Fig.1 - Un graphique très basique !
Paramétrer ses blocs de code grâce aux chunks
À noter…
Générez (render) le document fréquemment pour veiller à la cohérence / bonne exécution de vos blocs de code.
Pour vous comme pour les autres, évitez les blocs de code trop volumineux ou longs.
Les paramètres des chunks peuvent aussi être spécifiés dans le YAML (setup chunk).
Téléchargez les données de l’exercice : https://bit.ly/4b8BUvw
Décompressez l’archive qui contient :
exo_proj : le fichier projet (chemins relatifs)
exo_script.R : un script R qui produit d’une carte interactive avec leaflet
exo_fig : un dossier qui contient une photo de l’hôtel
exo_bib.bib : un fichier BibTeX qui contient une référence bibliographique
Ouvrez le fichier exo_proj puis créez un document Quarto sous RStudio. Enregistrez le dans le dossier que vous venez de décompresser.
Adaptez le fichier :
YAML : Ajouter un titre, un sous-titre, un nom d’auteur, une table des matières, une bibliographie.
markdown : Ajouter des titres de niveau 2, mettre du texte en gras et en italique, ajouter une figure, un renvoi vers la bibliographie.
classes préformatées : une colonne pour la photo, une pour la carte.
code R / chunks : copier/coller le code R disponible dans le fichier script.R dans un chunk. Le paramétrer pour faire en sorte qu’on ne voit pas le code, les messages d’erreur. Faire en sorte que la photo et la carte interactive aient à peu près la même hauteur.
Solution
Téléchargez les données de l’exercice : https://bit.ly/4b8BUvw
Décompressez l’archive qui contient :
exo_proj : le fichier projet (chemins relatifs)
exo_script.R : un script R qui produit d’une carte interactive avec leaflet
exo_fig : un dossier qui contient une photo de l’hôtel
exo_bib.bib : un fichier BibTeX qui contient une référence bibliographique
Ouvrez le fichier exo_proj puis créez un document Quarto sous RStudio. Enregistrez le dans le dossier que vous venez de décompresser.
Adaptez le fichier :
YAML : Ajouter un titre, un sous-titre, un nom d’auteur, une table des matières, une bibliographie.
markdown : Ajouter des titres de niveau 2, mettre du texte en gras et en italique, ajouter une figure, un renvoi vers la bibliographie.
classes préformatées : une colonne pour la photo, une pour la carte.
code R / chunks : copier/coller le code R disponible dans le fichier script.R dans un chunk. Le paramétrer pour faire en sorte qu’on ne voit pas le code, les messages d’erreur. Faire en sorte que la photo et la carte interactive aient à peu près la même hauteur.