28 mai 2024
L’encodage c’est une table de correspondance entre l’ordinateur et la langue humaine (français, anglais, etc.)
Il existe plusieurs encodages : ASCII, ISO 8859-15 (latin-9 ou Occidental (euro)), UTF-16, UTF-8, et bien d’autres encore
Suivant le système d’exploitation utilisé, l’encodage par défaut n’est pas le même
Si standards différents, problèmes lors d’échanges de fichiers (scripts ou données), qui deviennent illisibles !
L’encodage UTF-8 est celui qui permet, à l’heure actuelle, de convertir (vers et depuis) toutes les langues (ou presque)
Comment paramétrer sous RStudio ?
Aller dans Tools > Global Option > Code > Saving > Default text encoding et mettre UTF-8
Bonne pratique
Utiliser l’encodage UTF-8 pour vos scripts et vos données !
Les packages R peuvent dépendre d’une version spécifique de R (ou version minimale)
Les nouvelles versions de R peuvent apporter des corrections, éliminer les bugs… Il est donc intéressant de faire les MAJ “majeures” de printemps : 4.2.x \(\rightarrow\) 4.3.x
Les Breaking Changes
Certaines versions de R apportent des breaking changes qui peuvent casser le fonctionnement de code fonctionnant sur des versions précédentes (ex : stringAsFactor = FALSE
au lieu de TRUE
avant la version 4.0).
A l’inverse, des nouvelles fonctionnalités ne vont marcher que sur des versions récentes (ex : le pipe |>
à partir de R 4.1.0)
Cela place les fonctions du package sur votre PC.
Analogie : on achète un livre 📓 pour le mettre dans sa bibliothèque 📚
library
, le préfixageLa notation
Peut remplacer le code
Trois avantages
filter()
existe également dans le package {stats}
)tidyverse
proposent énormément de fonctionnalités pratiques, utiles, fonctionnelles par rapport aux fonctionnalités classiques de Rdeprecated
ou superseded
Bonne pratique
Un principe : on code pour les autres, en organisant son travail et en automatisant le plus possible
Bonnes pratiques
recod
en préfixe ou suffixe du nom des variables)#
en début de ligne (raccourci clavier CRTL + MAJ + C
)A noter
Ces grands principes ne sont pas exclusifs à R, ils sont valables quel que soit le langage de programmation
L’opérateur d’affectation est <-
Retour à la ligne régulièrement (la longueur maximale recommandée d’une ligne est 80 caractères) et après chaque pipe (%>%
ou |>
)
L’indentation se fait grâce à la touche TAB
. Le raccourci Ctrl+I
sert à réindenter les lignes de code sélectionnées
Les opérateurs qui lient les objets entre eux (=, +, -, <-, etc.)
sont entourés d’espaces
Les opérateurs qui modifient un objet ou sélectionnent une partie d’un objet (:, !!, $, @, [, ], [[, ]])
ne sont pas entourés d’espaces
On insère un espace après la virgule mais pas avant, comme en français !
On ne met pas d’espace avant ou après les parenthèses
En revanche, les opérateurs de comparaison doivent être entourés d’espace pour ne pas être mal interprétés par R
A noter
RStudio signale les erreurs dans la marge des scripts
Bonnes pratiques
# "à la main" lorsqu'on charge les packages
library(tidyverse) # v1.3.2
library(dplyr) # v1.1.0
# automatique
packages_utilises <- sessionInfo()
CTRL + MAJ + R
ou à l’addin strcode
Il existe des alternatives ‘clic-bouton’ :
le package/addin {esquisse} pour créer des graphiques en ggplot
le package {Factoshiny} pour améliorer facilement et de façon interactive les graphiques issus d’analyses factorielles (ACP, ACM, AFM, etc.) pour les rendre beaucoup plus lisibles
{R Commander}, une interface utilisateur graphique (GUI)
Bonne pratique
Penser à récupérer les lignes de codes générées par ces utilitaires et à les stocker dans des scripts !
allowercase
: tout en minuscule, sans séparateurperiod.separated
: tout en minuscule, mots séparés par des pointsunderscore_separated
: tout en minuscule, mots séparés par un underscore (_
)lowerCamelCase
: première lettre des mots en majuscule, à l’exception du premier mot ; et si nom simple, tout en minusculeUpperCamelCase
: première lettre des mots en majuscule, y compris le premier et même lorsque le nom est composé d’un seul motBonne pratique
Possibilité de mixer les conventions mais garder une cohérence afin de faciliter la compréhension des fichiers et du code
Mise en garde
R est sensible à la casse ce qui signifie que variable
et Variable
sont deux objets différents.
numero_nom_millesime.extension
, sans symboles spéciaux dans le nom-.,;:\/$
^`, caractères accentués, etc.Exemple : 01_import_donnees_20230606.R
Exemple : temperature_max
Exemple : create.map
serait une fonction qui permettrait de créer une carte
Bonne pratique
Pour les variables, comme pour les fonctions :
T
ou F
pour nommer des variables (ce sont les abréviations de TRUE
et FALSE
)Une aide pour écrire les scripts de façon cohérente Tidyverse Style Guide
Quels types de données peuvent être importés ?
Bonne pratique
Bien étudier son jeu de données à importer, en se posant les questions suivantes :
. , ; \t
)’
) ou de guillemets doubles ("
) ?Type | Base R | Tidyverse | Séparateur de colonnes | Séparateur décimal |
---|---|---|---|---|
Délimité | read.csv() |
readr::read_csv() |
, |
. |
read.csv2() |
readr::read_csv2() |
; |
, |
|
read.table() |
readr::read_table() |
. |
||
read.delim() |
readr::read_delim() |
\t |
. |
|
read.delim2() |
readr::read_delim2() |
\t |
, |
|
Excel | xlsx::read.xlsx() |
readxl::read_excel() |
||
SPSS | foreign::read.spss() |
haven::read_spss() ou haven::read_sav() |
||
Stata | foreign::read.dta() |
haven::read_stata() |
||
SAS | foreign::read.ssd() |
haven::read_sas() |
||
dBase | foreign::read.dbf() |
- |
Exemple pour un fichier .csv
tidy
Jeu de données “rangé” :
Source : Wickham & Grolemund (2017) R for Data Sciences: Visualize, Model, Transform, Tidy and Import Data
Mise en garde
On a des fichiers de données qui ne respectent pas toujours ces règles :
Solution pour ranger ses données = les verbes de tidyr
:
pivot_longer()
: transformer des colonnes en lignespivot_wider()
: transformer des lignes en colonnesseparate()
: séparer une colonne en plusieurs colonnesseparate_rows()
: séparer une colonne en plusieurs lignesunite()
: regrouper plusieurs colonnes en une seuleextract()
: créer de nouvelles colonnes à partir d’une colonne de textecomplete()
: compléter des combinaisons de variables manquantesUtilisez l’addin viewxl
pour exporter interactivement des data frame de l’environnement global vers Excel
Directement via l’onglet ‘Plots’ Cliquer sur ‘Export’ qui donne accès à trois options différentes :
Dans un script, avec les fonctions jpeg()
, png()
, bmp()
ou tiff()
ou pdf()
du package {grDevices}
ggsave
du package {ggplot2}Comme on importe divers formats de données, on peut exporter les données depuis R vers divers formats
Type de fichier | Base R | Tidyverse |
---|---|---|
.txt | write.table() |
readr::write_delim(delim = "\t") |
.csv | write.csv() |
readr::write_csv() |
.xlsx | openxlsx2::write_xlsx() OU writexl::write_xlsx() |
- |
.dbf | foreign::write.dbf() |
- |
.sav (SPSS) | foreign::write.foreign(package = "SPSS") |
haven::write_sav() |
.dta (Stata) | foreign::write.dta() |
haven::write_dta() |
À partir de l’icône dédiée en haut à droite de RStudio
Sélectionner l’option “New project”, puis l’option “New Directory” et enfin “Empty Project”
Exemples de structurations
(chacun s’organisera de la façon qu’il juge la plus adaptée à ses usages)
A noter
Le plus important, ce sont les données initiales et les scripts de traitements.
# install.packages("remotes")
remotes::install_github("davidcarayon/InraeThemes")
InraeThemes::new_analysis()
summary()
Sepal.Length Sepal.Width Petal.Length Petal.Width
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
Median :5.800 Median :3.000 Median :4.350 Median :1.300
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
Species
setosa :50
versicolor:50
virginica :50
glimpse()
du package {dplyr}Permet de visualiser de manière condensée le contenu d’un tableau de données
Rows: 150
Columns: 5
$ Sepal.Length <dbl> 5.1, 4.9, 4.7, 4.6, 5.0, 5.4, 4.6, 5.0, 4.4, 4.9, 5.4, 4.…
$ Sepal.Width <dbl> 3.5, 3.0, 3.2, 3.1, 3.6, 3.9, 3.4, 3.4, 2.9, 3.1, 3.7, 3.…
$ Petal.Length <dbl> 1.4, 1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5, 1.4, 1.5, 1.5, 1.…
$ Petal.Width <dbl> 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.3, 0.2, 0.2, 0.1, 0.2, 0.…
$ Species <fct> setosa, setosa, setosa, setosa, setosa, setosa, setosa, s…
describe()
du package {questionr}Décrit également les différentes variables d’un tableau de données
[150 obs. x 5 variables] tbl_df tbl data.frame
$Sepal.Length:
numeric: 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
min: 4.3 - max: 7.9 - NAs: 0 (0%) - 35 unique values
$Sepal.Width:
numeric: 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
min: 2 - max: 4.4 - NAs: 0 (0%) - 23 unique values
$Petal.Length:
numeric: 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
min: 1 - max: 6.9 - NAs: 0 (0%) - 43 unique values
$Petal.Width:
numeric: 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
min: 0.1 - max: 2.5 - NAs: 0 (0%) - 22 unique values
$Species:
nominal factor: "setosa" "setosa" "setosa" "setosa" "setosa" "setosa" "setosa" "setosa" "setosa" "setosa" ...
3 levels: setosa | versicolor | virginica
NAs: 0 (0%)
tbl_summary()
du package {gtsummary}Permet la production de tableaux croisés et autre tables complexes prêtes pour publication. S’appuie sur Great Tables ({gt})
dfSummary()
du package {summarytools}Présentation des résultats dans un tableau, pour variables QN & QL
Data Frame Summary
iris
Dimensions: 150 x 5
Duplicates: 1
-------------------------------------------------------------------------------------
No Variable Stats / Values Freqs (% of Valid) Valid Missing
---- -------------- ----------------------- -------------------- ---------- ---------
1 Sepal.Length Mean (sd) : 5.8 (0.8) 35 distinct values 150 0
[numeric] min < med < max: (100.0%) (0.0%)
4.3 < 5.8 < 7.9
IQR (CV) : 1.3 (0.1)
2 Sepal.Width Mean (sd) : 3.1 (0.4) 23 distinct values 150 0
[numeric] min < med < max: (100.0%) (0.0%)
2 < 3 < 4.4
IQR (CV) : 0.5 (0.1)
3 Petal.Length Mean (sd) : 3.8 (1.8) 43 distinct values 150 0
[numeric] min < med < max: (100.0%) (0.0%)
1 < 4.3 < 6.9
IQR (CV) : 3.5 (0.5)
4 Petal.Width Mean (sd) : 1.2 (0.8) 22 distinct values 150 0
[numeric] min < med < max: (100.0%) (0.0%)
0.1 < 1.3 < 2.5
IQR (CV) : 1.5 (0.6)
5 Species 1. setosa 50 (33.3%) 150 0
[factor] 2. versicolor 50 (33.3%) (100.0%) (0.0%)
3. virginica 50 (33.3%)
-------------------------------------------------------------------------------------
vis_miss()
du package {visdat}
plot_histogram()
, plot_bar()
, plot_density()
proposent des graphiques en sélectionnant les variables pertinentes à chaque cas
Rapport automatique, au format HTML avec create_report()
: Visualisations graphiques (distributions, analyses de corrélations, ACP), état des lieux du jeu de données, concernant notamment le type des variables ou les données manquantes
Bonus
{FactoInvestigate} pour quelque chose de similaire mais spécifique à des sorties d’analyses multivariées !
A noter
Fonctions utiles pour première exploration des données, sans autre programmation nécessaire.
Pour aller plus loin… programmation lettrée (Rmarkdown/Quarto) [session dédiée si nécessaire]
n % val% %cum val%cum
Employe 594 29.7 35.9 29.7 35.9
Ouvrier qualifie 292 14.6 17.7 44.3 53.6
Cadre 260 13.0 15.7 57.3 69.3
Ouvrier specialise 203 10.2 12.3 67.4 81.6
Profession intermediaire 160 8.0 9.7 75.4 91.3
Technicien 86 4.3 5.2 79.8 96.5
Autre 58 2.9 3.5 82.7 100.0
NA 347 17.3 NA 100.0 NA
Total 2000 100.0 100.0 100.0 100.0
lm
, glm
, randomForests
, xgboost
, etc.)Deux grandes écoles
Chavent, M., Kuentz-Simonet, V., Labenne, A., & Saracco, J. (2014). Multivariate analysis of mixed data: The R package PCAmixdata. arXiv preprint arXiv:1411.4911.
Police à installer ici
Plus d’informations sur Github
Sans {renv}
Les packages sont communs pour tous les projets
Avec {renv}
Le projet 1 peut utiliser dplyr 1.0.2 et le projet 2 dplyr 0.8.2
Pourquoi utiliser Git ?
Garder en mémoire chaque modification de chaque fichier, pourquoi elle a eu lieu, quand et par qui
Faciliter le développement collaboratif : fusion des différentes modifications
Revenir aux versions précédentes (+ sauvegarde du travail)
Déployer son travail en ligne (Pages)
Shiny est un package R qui permet de développer facilement des applications web interactives dans une syntaxe R très simple (pouvant être complétée par du HTML / CSS / JS pour les applications les plus abouties).
Outil principalement utilisé pour l’analyse et la visualisation de données, ou encore la mise à disposition de code R “complexe” en presse-bouton
Excellent outil de valorisation et diffusion des résultats de recherche
Slides consultables ici :
https://statire.github.io/bulledr/01-bonnes_pratiques/
Bulle d’R | Bonnes pratiques
Comment ça fonctionne ?
Cf. Présentation TWIX “Travailler sous R avec RStudio. Comment ça marche ?” disponible à ce lien :
https://statire.github.io/bulledr/00-TWIX/TWIX_2023_06_01