| Logiciel/Sytsème | Windows | MacOS | Linux | BSD | Autres Unix |
|---|---|---|---|---|---|
| R | oui | oui | oui | oui | oui |
Introduction au langage R
UMR8504 Géographie-Cités
Transversalité Données et protocoles dans les Humanités Numériques
Hugues Pecout
1. Pourquoi utiliser R ?
3. Mise en pratique
2. Introduction au langage
Il existe de nombreux logiciels d’analyse statistique. Mais depuis le début des années 2000, le langage R gagne en importance dans ce domaine et s’impose progressivement comme une référence, au même titre que les trois principaux logiciels d’analyse de données qui dominent le marché.
Plusieurs aspects peuvent nous laisser penser que de nombreux utilisateurs de logiciels statistiques devraient progressivement converger vers R…
Prix licence SPSS Base edition
Intéropérabilité des principaux logiciels :
| Logiciel/Système | Windows | MacOS | Linux | BSD | Autres Unix |
|---|---|---|---|---|---|
| SAS | oui | terminé | oui | non | oui |
| SPAD | oui | non | non | non | non |
| SPSS | oui | oui | non | non | non |
| Stata | oui | oui | oui | non | non |
C’est pour cela que l’on préfère R…
Mais pourquoi ce langage et pas un autre ?
Deux langages de programmation utilisés pour le traitement et l’analyse des données en SHS, et très souvent comparés pour leurs fonctionnalités semblables
L’utilisation de R ou de Python dépend surtout de :
Qui suis-je ? Qu’est-ce que je veux faire ? Avec qui ?
R a autant de cerveau…
→ Spécialisé dans l’analyse statistique
→ Pour utilisateu·rices moins avancés en progr.
…que Python a du muscle !
→ Spécialisé dans la science de données
→ Pour utilisateu·rices avancés en progr.
En 2008, au MIT, des chercheurs se rassemblent pour faire le point sur les outils disponibles pour le calcul scientifique et statistique. Principal constat, la communauté est éclatée :
il fallait un langage prenant tous les avantages de chaque langage et rajoutant un aspect de plus en plus pointé du doigt : la parallélisation massive (rapidité de calcul)… Le langage Julia est né !
Cependant, le langage Julia ne s’est toujours pas imposé dans la communauté SHS, où R et Python semble toujours les langages les plus utilisés pour l’analyse de données…
R se base sur le langage de programmation S, créé en 1988.
L’objectif était de créer le meilleur environnement d’analyse statistique.
| Logiciel/Sytsème | Windows | MacOS | Linux | BSD | Autres Unix |
|---|---|---|---|---|---|
| R | oui | oui | oui | oui | oui |
R propose 2996 fonctions statistiques et graphiques standard (primitives)
Sur ce socle commun peut s’ajouter de nombreux packages, mis à disposition sur le Comprehensive R Archive Network (CRAN). Ex :
R a une structure modulaire qui offre toute une gamme d’applications possibles. Son expansion n’est limitée que par les contributions !
Nombre de packages disponibles sur le CRAN
Les packages permettent d’opérer sur l’ensemble de la chaîne de traitement, de la collecte des données à la valorisation des résultats (diaporama, rapport statistique, site web…).
Cette polyvalence permet à R de compléter (et de concurrencer) toute une série de logiciels existants
Peut-on avoir confiance en un langage Open Source ?
L’information circule vite dans les communautés des logiciels OS !
R est le résultat de 30 années de recherche & développement. Aujourd’hui, plusieurs acteurs économiques importants financent le développement de R : Microsoft, Google, Oracle, Esri…
source : https://www.r-consortium.org/members
Seulement possible avec un langage Open Source spécialisé dans l’analyse statistique
Mais …
RStudio, qui se nomme désormais Posit, est une entreprise qui développe et publie des logiciels et des services basés sur le langage R. C’est l’acteur privé le plus important de la communauté R. Rstudio est à l’origine de nombreux packages de référence. Ex :
La majorité des packages de Rstudio sont regroupés dans un package “parapluie” : tidyverse
Posit propose également un Environnement de Développement Intégré qui facilite énormément la pratique du langage R : l’IDE Rstudio
Interface de R sur Windows
Pas d’interface sur Linux (terminal)
L’IDE Rstudio facilite l’apprentissage de R et son utilisation
Parce que c’est simple, complet, en constante évolution et développé par le principale acteur de la communauté, utilisez l’IDE RStudio pour vous lancer !
L’installation de R et de l’IDE Rstudio se fait comme n’importe quel autre logiciel.
Connectez-vous au CRAN pour télécharger R.
Téléchargez la version ‘Desktop’ sur le site de Rstudio
L’IR* Huma-Num met à disposition une instance Rstudio : https://r-tools.huma-num.fr/
⚠️ L’installation de certains packages
se fait à la demande
Comment accéder au service ?
→ Envoyer un courriel à cogrid@huma-num.fr, en précisant les éléments suivants :
Lancez Rstudio (pas R) pour commencer
Écrivez du code (ou formules mathématiques) dans la console :
Appuyez sur “Entrée” pour l’exécuter :
Le langage R offre les mêmes fonctionnalités qu’une calculatrice.
| Nom | Opérateurs arithmétiques | Exemple | Résultat |
|---|---|---|---|
| Addition | + | 5 + 3 | 8 |
| Soustraction | - | 5 - 1 | 4 |
| Multiplication | * | 5*5 | 25 |
| Division | / | 5/5 | 1 |
| Puissance | ^ | 5^5 | 3125 |
| Modulo | %% | 5 %% 5 | 0 |
| Quotient Décimal | %/% | 5 %/% 5 | 1 |
Exemples appliqués :
Plusieurs types d’opérateurs sont disponibles :
| Conditions | Opérateurs relationnels | Exemple | Résultat |
|---|---|---|---|
| plus petit que | < | 5 < 5 | FALSE |
| plus grand que | > | 5 > 5 | FALSE |
| plus petit ou égal à | <= | 5 <= 5 | TRUE |
| plus grand ou égal à | >= | 5 >= 5 | TRUE |
| égal à | == | 5 == 5 | TRUE |
| différent de | != | 5 != 5 | FALSE |
| présent dans | %in% | 5 %in% 1:5 | TRUE |
x égale à y ?
x différent de y ?
x présent dans y ?
| Condition | Opérateurs logiques |
|---|---|
| différent de | ! |
| et | & |
| ou | I |
| ou exclusif | xor() |
| valeur manquante | is.na() |
| valeur nulle | is.null() |
| vrai | isTRUE() |
| faux | isFALSE() |
Valeur manquante ?
Différent de ‘NA’ ?
Contrôle à deux conditions
Des milliers de fonctions pour manipuler, analyser et représenter ses données. Une fonction contient une série de commandes (code) qui effectuent une tâche prédéfinie. Elle prend des informations (arguments) en entrée et renvoie un résultat. Les fonctions s’utilisent toujours de la même façon : nom_fonction()
→ Fonction round() pour arrondir un nombre
→ Fonction nchar() pour calculer un nombre de caractères
→ Fonction strsplit() pour fractionner une chaine de caractère
→ Fonction plot() pour la représentation graphique
Le plus souvent, plusieurs arguments doivent être renseignés pour utiliser une fonction.
# Affichage graphique
plot(x = 1:20,
y = 11:30,
type = "p",
pch = 15,
cex = 2,
col= "deepskyblue3",
main = "Mon premier plot avec R",
cex.main = 2,
col.main = "darkgoldenrod4",
col.axis = "red4",
xlab = "Ma première variable",
ylab = "Ma seconde variable")Pour connaître tous les arguments d’une fonction : ?nom_fonction().
Les fonctions peuvent être :
Tout ce que l’on crée dans R sont des objets. Mais contrairement au langage Python, il ne s’agit pas d’un langage de POO.
La POO est un paradigme de programmation basé sur le concept d’objets, qui peuvent contenir des données et métadonnées (attributs), et qui sont associés à des procédures, souvent appelées méthodes.
Il est néanmoins possible de faire de la POO avec R
Pour créer un objet, choisissez un nom et assignez-lui un contenu avec le symbole <-
Le signe = fonctionne aussi. Mais comme ce symbole est également utilisé pour d’autres choses (comparaison de valeurs, valeur d’argument), on évite de l’utiliser pour la création d’objet.
Un objet peut-être réutilisé pour des calculs :
Le contenu d’un objet peut être modifié :
Un objet peut-être réutilisé dans une fonction
Il est possible de stocker différents types de données à un objet R. Les plus classiques :
| Type | définition | Exemple |
|---|---|---|
| numeric | nombre | 3 ou 4.23 |
| integer | nombre entier | 3 |
| double | nombre double | 4.23 |
| logical | logique ou booléen | TRUE ou FALSE |
| string | chaîne de caractères | “Hello” |
| factor | string (modalités prédéfinies) | “Hight” |
| date | date formatée | 2020-12-14 |
| NA | absence de valeur (tout type) | NA |
Exemples :
Les fonctions ne s’appliquent pas à tous les différents types de données (et d’objet). Exemple :
Le code saisie dans la console est gardé dans l’historique de Rstudio :
Les objets crées sont affichés dans l’Environnement :
Mais les lignes de code saisies ne sont en aucun cas sauvegardées pour une utilisation ultérieure.
Pour cela, créez un script.r (simple fichier texte) que vous pouvez enregistré sur votre machine :
Enregistrez-le sur votre machine :
Écrivez vos lignes de code directement dans ce fichier. N’oubliez pas de sauvegarder régulièrement.
Il est très important de commenter un script, que ce soit pour soit ou pour les autres. Utilisez le symbole # en début de ligne. Tout ce qui suivra ce symbole ne sera pas interprété par la machine.
Au delà des commentaires, n’hésitez pas à appliquer le paradigme de programmation lettrée. Cela revient à écrire du code comme un essayiste, en suivant la logique de sa pensée et non l’ordonnancement plus logique souhaité pour l’ordinateur.
Il existe différents types d’objets permettant de stocker différents formats et types de données.
De nombreux types d’objets sont également mis à disposition par différents packages. Ex :
Une fonction est un objet qui peut se construire avec la fonction function()
conversion_miles_to_km () devient est une fonction comme une autre.
Le vecteur est l’objet de base de R. Il permet de stocker plusieurs éléments du même type.
La fonction c() permet de construire un vecteur de plusieurs éléments
Quelque soit les valeurs en entrée, un vecteur ne stocke que des éléments de même type !
Pour naviguer dans cet objet unidimensionnel, utilisez les crochets.
→ Sélection du premier élément
→ Sélection des éléments 1 à 3
→ Sélection des éléments 2 et 4
Le data.frame correspond au tableau de données classique. il se compose de plusieurs colonnes pouvant contenir des données de nature différente. Chaque colonne d’un data.frame est un vecteur.
# Construction de plusieurs vecteurs de même longueur
name <- c("Paul Vidal de La Blache", "Julie Moschelesová", "Élisée Reclus", "Elina González Acha de Correa Morales")
birth <- c("1845-01-22", "1892-08-21", "1830-03-15", "1861-01-20")
age_death <- c(73, 63, 75, 81)
nat <- c("FR", "CS", "FR", "AR")
gender <- c(FALSE, TRUE, FALSE, TRUE)
Utilisez la fonction data.frame() pour construire un tableau
name birth age_death nat gender
1 Paul Vidal de La Blache 1845-01-22 73 FR FALSE
2 Julie Moschelesová 1892-08-21 63 CS TRUE
3 Élisée Reclus 1830-03-15 75 FR FALSE
4 Elina González Acha de Correa Morales 1861-01-20 81 AR TRUE
Utilisez les crochets pour naviguer dans un tableau : mon_tableau [ ligne , colonne ]
→ Sélection par index : première ligne et toutes les colonnes
→ Sélection par index : toutes les lignes et colonnes 1, 3 et 5
name birth nat
1 Paul Vidal de La Blache 1845-01-22 FR
2 Julie Moschelesová 1892-08-21 CS
3 Élisée Reclus 1830-03-15 FR
4 Elina González Acha de Correa Morales 1861-01-20 AR
→ Sélection par index : 2e ligne et colonnes 1 et 5
→ Sélection par index : 2e ligne et colonnes “name” et “gender”
Vous pouvez également utiliser le signe $ pour séléctionner une colonne : mon_tableau$date_naissance
→ Sélection colonne ‘name’
[1] "Paul Vidal de La Blache"
[2] "Julie Moschelesová"
[3] "Élisée Reclus"
[4] "Elina González Acha de Correa Morales"
→ Valeur de la seconde ligne dans la colonne ‘name’
Utilisez les différents opérateurs pour sélectionner par condition
→ Sélection par condition
Une liste permet de stocker plusieurs objets (peu importe le type) en un seul. Une liste est une collection d’objet. Utilisez la fonction list() pour construire une liste.
C’est un super objet très utile et puissant. Cet objet est utilisé par plusieurs packages de référence. Pour naviguer dans une liste, utilisez des doubles crochets : Ma_list[[ index ]]
→ Sélection du 2nd objet de Ma_list
→ Sélection au sein d’un objet d’une liste (2e ligne et 1ère colonne de mon objet 3)
Le langage R offre 2356 fonctions de base* stockées dans 7 packages standards, installés et chargés par défault.
640 fonctions supplémentaires sont également mises à disposition via 5 autres packages pré-installés (grid, splines, stats4, tcltk, tools), mais pas automatiquement chargés. (*le 2024-11-28)
Ce socle commun de fonctionnalité est couramment nommé le R-base
Les fonctionnalités standards (ou primitives) proposées par le R-base permettent de réaliser beaucoup de choses. Il est cependant nécessaire d’installer des packages pour profiter de certaines fonctionnalités, ex :
21729 packages sont disponibles sur le système officiel de stockage des packages : le Comprehensive R Archive Network.
Installation d’un package du CRAN en ligne de commande
Pour utiliser les fonctions du package, chargez la librairie :
→ Il est nécessaire de charger la librairie à chaque nouvelle session R
Il existe également d’autres sources de stockage :
Pour installer un package stocké sur GitHub, commencez par installer le package remotes :
Puis utilisez sa fonction install_github() :
il est nécessaire d’installer Rtools sur Windows pour réaliser cette opération.
Commencez par lire les messages que renvoie la console !
La fonctionnalité d’auto-complétion proposée par Rstudio peut être très efficace. Utilisez la touche tab.
Les packages (base et CRAN) sont obligatoirement accompagnés d’une documentation. Vous pouvez y accéder en ligne de commande ou en clic-bouton :
La majorité des packages de référence propose de la documentation plus digeste à travers différents formats comme une vignette, une cheatsheet, voire même un site web.
Vignette du package mapsf
Cheatsheet (antisèche) du package mapsf
Site web du package mapsf
Les fonctionnalités de certains packages se traduisent par l’utilisation d’une fenêtre graphique qui permet de faire du R en clic-bouton.
L’intérêt ? Récupérer le code générer par l’interface !
Pour commencer l’apprentissage de R en douceur, vous pouvez aussi utiliser des logiciels clic-bouton qui reposent sur le langage R et qui permettent de récupérer le code généré. Exemple :
La communauté R est très active et prolifique en matière de partage et de documentation. Des milliers de ressources sur la pratique de R sont accessibles sur le web. Ex :
Exemples de ressources pour démarrer :
Sans oublier ChatGPT…
Travailler dans le cadre d’un projet Rstudio est, comme avec QGIS, une très bonne pratique. Cela permet d’assurer la portabilité de votre travail. Pour créer un projet :
Cela créé un nouveau répertoire (dossier) contenant un fichier projet (.Rproj).
Pour ouvrir un projet, il vous suffit de double-cliquer sur le fichier Rproj. Pour vérifier que vous travaillez bien dans le projet, regardez le nom indiqué en haut à droite de la fenêtre Rstudio. Lorsque l’on travaille dans le cadre d’un projet, R pointe par défaut à la racine de celui-ci.
Ajoutez tous vos scripts, vos données et les sorties dans le répertoire (dossier) du projet. Vous pouvez ainsi déplacer et partager facilement votre travail.
https://gitlab.huma-num.fr/geographie-cites/formation/inititation-r/exercice_1
Téléchargez ce projet Rstudio
C’est génial !
Quelques exemples d’utilisation…
R version 4.4.1 (2024-06-14)
Diapositives libres (CC BY 4.0) :
Consultation : https://introduction-59e2f5.gitpages.huma-num.fr/
Code source : https://gitlab.huma-num.fr/geographie-cites/formation/inititation-r/introduction
Informations de session :
R version 4.4.1 (2024-06-14)
Platform: x86_64-pc-linux-gnu
Running under: Ubuntu 22.04.4 LTS
Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3
LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.20.so; LAPACK version 3.10.0
locale:
[1] LC_CTYPE=fr_FR.UTF-8 LC_NUMERIC=C
[3] LC_TIME=fr_FR.UTF-8 LC_COLLATE=fr_FR.UTF-8
[5] LC_MONETARY=fr_FR.UTF-8 LC_MESSAGES=fr_FR.UTF-8
[7] LC_PAPER=fr_FR.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=fr_FR.UTF-8 LC_IDENTIFICATION=C
time zone: Europe/Paris
tzcode source: system (glibc)
attached base packages:
[1] tools tcltk stats4 splines grid stats graphics
[8] grDevices utils datasets methods base
other attached packages:
[1] ggplot2_3.5.1 plyr_1.8.9 stringr_1.5.1 rvest_1.0.4
loaded via a namespace (and not attached):
[1] gtable_0.3.5 jsonlite_1.8.8 dplyr_1.1.4 compiler_4.4.1
[5] selectr_0.4-2 tidyselect_1.2.1 Rcpp_1.0.12 xml2_1.3.6
[9] textshaping_0.4.0 systemfonts_1.1.0 scales_1.3.0 yaml_2.3.8
[13] fastmap_1.1.1 R6_2.5.1 labeling_0.4.3 generics_0.1.3
[17] curl_5.2.1 knitr_1.46 tibble_3.2.1 munsell_0.5.1
[21] pillar_1.9.0 rlang_1.1.3 utf8_1.2.4 stringi_1.8.4
[25] xfun_0.43 cli_3.6.2 withr_3.0.0 magrittr_2.0.3
[29] digest_0.6.35 rstudioapi_0.16.0 lifecycle_1.0.4 vctrs_0.6.5
[33] evaluate_0.23 glue_1.7.0 farver_2.1.2 ragg_1.3.3
[37] fansi_1.0.6 colorspace_2.1-0 rmarkdown_2.26 httr_1.4.7
[41] pkgconfig_2.0.3 htmltools_0.5.8.1
Introduction au langage R - Formation interne, UMR8504 Géographie-Cités