L'objectif de ce TD est de vous familiariser avec
l'environnement R, un
environnement libre pour les statistiques, mais en réalité bien plus
que cela.
Ce TP est réalisé sous Linux. Sachez néanmoins que R fonctionne sous
Linux, Windows et MacOS d'une manière générale. Nous recommendons
néanmoins son utilisation sous Linux comme étant la plus fiable de
toute.
Table des matières :
Ouvrez une fenêtre terminal , tapez la commande R et voilà...
Les commandes essentielles sont indiquées dans le message qui vient de
s'afficher, en particulier comment quitter R. La dernière ligne qui
commence par un > est une invite pour que vous tapiez une
commande : c'est ce que l'on appelle un « prompt »,
c'est-à-dire, un signe qui vous indique que le logiciel attend que
tapiez quelque chose.
La dernière ligne du message d'accueil avant le prompt vous informe
que pour quitter R, il faut taper la commande q() suivie
d'un retour-chariot (= touche Entrée). Faites-le.
R vous demande si vous voulez :
Si vous demandez la sauvegarde de votre travail, R stocke dans deux fichiers le travail que vous avez réalisé. Ces deux fichiers sont situés dans votre répertoire de travail ; ils sont cachés ; vous pouvez les copier (sur une clé USB par exemple) ou vous les envoyer par email pour reprendre votre travail sur un autre ordinateur.
Lors du lancement de R, celui-ci charge le contenu de ces deux fichiers, s'ils existent dans le répertoire de travail.
Ces deux se nomment :
L'utilisation la plus simple de R est comme une
« simple » calculatrice. On verra que R est en fait une
calculatrice très sophistiquée.
Par exemple, tapez la commande suivante (tous les exemples doivent
être tapés ; le symbole > indique qu'il s'agît d'une commande
R : vous ne devez pas le taper, il est déjà affiché à l'écran) :
> 2+3
R vous répond immédiatement :
[1] 5
Si on laisse de côté le [1] qui sera expliqué plus loin, on
obtient bien le résultat attendu.
Naturellement, tous les opérateurs habituels sont disponibles, ainsi
que les fonctions logarithmiques, trigonométriques, et bien d'autres.
On peut affecter le résultat d'un calcul à une variable. Une variable
est une entité qui porte un nom et qui contient une valeur. Par
exemple, si on tape :
> a <- 2 * sqrt (5) + pi
R n'affiche rien, mais il a :
L'affectation se fait donc par l'opérateur <-. À sa
gauche, on indique le nom de la variable à laquelle il faut affecter
la valeur qui se trouve à sa droite.
En passant, vous aurez noté l'utilisation de
pi pour obtenir la valeur de π. pi est une
variable pré-définie dans R dont la valeur est celle de π.
On peut afficher la valeur d'une variable en tapant simplement son
nom :
a [1] 7.613729
Remarque : comme vous en avez probablement l'habitude, le nombre décimal est affiché avec la convention américaine, c'est-à-dire avec un point . décimal et non une virgule comme en France. Si on y tient vraiment, on peut dire à R d'utiliser une virgule et non un point, mais je ne dis pas comment faire ici et on en restera avec des points décimaux.
Naturellement, on peut utiliser la valeur d'une variable pour
effectuer des calculs, par exemple :
> b <- (a - 1) * (a + 1)
Remarque : pour simplifier la saisie des commandes, vous pouvez utiliser la touche flêchée ↑ pour retrouver les commandes que vous avez déjà tapées et pour les modifier. Ainsi, R garde l'historique des commandes que vous tapez. Vous pouvez remonter dans l'historique avec la touche ↑ et redescendre avec la touche ↓. Quand vous remontez dans l'historique, vous pouvez ensuite utiliser les touches flêchées ← et → pour éditer la commande. Ainsi, utilisez ces touches pour taper la commande suivante, qui diffère peu d'une commande que vous avez tapée plus haut :
> 3 * sqrt (5 + pi)
Prenez l'habitude d'utiliser ces touches flêchées : elles
permettent d'accélérer très sensiblement la saisie des commandes, et
ceci, même si l'on est déjà habile avec le clavier de son ordinateur.
La table suivante indique des opérateurs et des fonctions de R :
notation en R | valeur mathématique |
---|---|
a + b | somme de a et b |
a - b | b soustrait de a |
a * b | produit de a par b |
a / b | division réelle de a par b |
a %/% b | division euclidienne (entière) de a par b |
a %% b | reste de la division entière de a par b |
a ^ b | a à la puissance b |
sqrt (a) | racine carrée de a |
abs (a) | valeur absolue de a |
log (a) | logarithme naturel de de a |
exp (a) | exponentielle de a |
sin (a) | sinus de a (en radians) |
cos (a) | cosinus de a (en radians) |
tan (a) | tangente de a (en radians) |
Cette liste est loin d'être exhaustive !
À tout moment une aide en ligne est accessible avec la commande
?topic, où topic peut être remplacé par
n'importe-quelle commande. Essayez, par exemple
?sqrt. (Tapez 'q' pour quitter l'aide.) Il est très important d'apprendre à lire
l'aide. L'aide en-ligne contient énormément d'information : elle
est là, disponible, c'est à vous d'apprendre à l'utiliser. Les
pages d'aide ont toutes la même structure :
L'essentiel de ce qui est à connaître sur la syntaxe des commandes R est d'ors et déjà vu ; on voit ainsi que cette syntaxe est très simple. On la résume ci-dessous :
Après les simples nombres, un deuxième type fondamental d'entités dans R est le vecteur. Un vecteur peut-être créé de différentes manières. Par exemple, créons un vecteur dont les éléments sont 0, -1, π et 4,78 et mettons-le dans une variable dont le nom est v :
> v <- c (0, -1, pi, 4.78)
La fonction c construit un vecteur avec ces valeurs. On peut ensuite consulter la valeur des composantes du vecteur :
> v [1] 0.000000 -1.000000 3.141593 4.780000
On retrouve bien les valeurs avec lesquelles on a initialisé le
vecteur.
De nombreuses fonctions s'appliquent aux vecteurs. La table ci-dessous
en contient un certain nombre ; essayez-les toutes :
notation en R | valeur | résultat sur l'exemple |
---|---|---|
length (v) | nombre d'éléments de v | 4 |
min (v) | valeur de l'élément minimal de v | -1 |
max (v) | valeur de l'élément maximal de v | 4.78 |
range (v) | vecteur composé des deux valeurs précédentes (le min et le max de v) | -1.00 4.78 |
sum (v) | valeur de la somme des éléments de v : Σivi | 6.921593 |
prod (v) | valeur du produit des éléments de v : Πivi | 0 |
which.min (v) | indice de l'élément minimal de v (arg mini vi) | 2 |
which.max (v) | indice de l'élément maximal de v (arg maxi vi) | 4 |
R peut naturellement effectuer toutes les opérations habituelles sur les vecteurs. Les opérateurs vues plus haut sur les nombres (+, -, ...) et les fonctions (abs, log, ...) s'appliquent sur les vecteurs comme on s'y attend. Toutes ces opérations se font terme à terme : aussi, quand il y a deux vecteurs (comme pour une addition), il faut que les deux vecteurs aient le même nombre d'éléments.
Une opération très classique est de calculer le produit scalaire de
deux vecteurs. Rappelons que le produit scalaire des vecteurs v et w
est égal à la somme des produits Σ
Enfin, on peut ajouter un scalaire aux éléments d'un vecteur, la soustraire, la multiplier, ... par les opérateurs habituels (+, -, *, ...) en combinant un vecteur et un scalaire. Ainsi,
v + 3
produit un vecteur dont les composantes sont celles de v augmentées de 3.
On peut aussi demander la valeur du troisième élément du vecteur à l'aide de l'opérateur [ :
v [3] [1] 3.141593
On peut aussi demander la valeur des éléments 1 et 3 du vecteur en fournissant plusieurs indices, comme suit :
v [c (1, 3)] [1] 0.000000 3.141593
On voit que pour cela, on a spécifié un vecteur dont les composantes
sont les indices qui nous intéressent (c (1, 3) est un
vecteur de deux éléments, le premier vaut 1, le second vaut 3).
On vient donc de présenter une opération très utile et très importante
en R : accéder aux éléments d'un vecteur
en utilisant un autre vecteur (dénommé « vecteur d'index ») qui contient le numéro
des composantes que l'on veut sélectionner.
Une autre manière de spécifier les indices qui nous intéressent est la
suivante : 2:4 est un vecteur dont les éléments sont
2, 3 et 4.
Une autre notation pour la même chose consiste à utiliser la fonction
seq(). Ainsi,
> seq (2, 4)
(ou
> seq (from = 2, to = 4)
) produit un vecteur dont les éléments sont 2, 3 et 4.
L'intérêt de cette fonction seq()uence et que l'on peut lui
indiquer plus généralement la valeur du premier indice, du dernier
indice et de l'incrément pour passer de l'un à l'autre. Ainsi :
> seq (from = 1, to = 10, by = 2) [1] 1 3 5 7 9
l'incrément peut aussi être négatif :
> seq (from = 10, to = -5, by = -2) [1] 10 8 6 4 2 0 -2 -4
La fonction runif() génère des nombres pseudo-aléatoires selon une distribution de probabilité uniforme. On va l'utiliser pour générer des vecteurs aussi grands que l'on veut. Ainsi, tapez :
> vu <- runif (100)
et la variable vu contient un vecteur de 100 composantes dont la valeur a été tirée au hasard entre 0 et 1.
Les fonctions statistiques les plus simples sont résumées dans la table ci-dessous :
notation en R | valeur | résultat sur l'exemple |
---|---|---|
mean (v) | la moyenne des éléments de v | 1.730398 |
var (v) | la variance des éléments de v | 7.246964 |
sd (v) | l'écart-type des éléments de v | 2.692019 |
median (v) | la médiane des éléments de v | 1.570796 |
summary (v) | fournit plusieurs statistiques sur les éléments de v |
Min. 1st Qu. Median Mean 3rd Qu. Max. -1.000 -0.250 1.571 1.730 3.551 4.780 |
La fonction rnorm (100, mean = 3, sd = 5) génère 100 nombres pseudo-aléoires tirés selon une loi normale de moyenne égale à 3 et d'écart-type égal à 5.
En fouille de données, les données sont généralement disponibles sous la forme d'un tableau dans lequel une ligne représente une donnée, une colonne représente un attribut. Une feuille de tableur ne contenant que des données (pas de formule ni de graphique, ni ...) est donc un tableau de données.
Le tableau de données est très généralement disponible sous forme d'un fichier de tableur.
Le plus simple est de sauvegarder cette feuille au format CSV. R peut directement charger un fichier CSV.
On suppose ici que le fichier est déjà au format CSV (il est facile de sauvegarder une feuille de tableur dans ce format).
Dès lors, le chargement du tableau de données dans R se fait à l'aide d'une seule commande :
sommeil <- read.csv ("https://philippe-preux.github.io/ensg/ed/R/sommeil.csv")
Cette commande charge le fichier indiqué par l'url.
Le fichier peut également se trouver sur votre ordinateur ; il suffit de donner son nom à la place d'une url.
Les attributs de ce tableau de données ont le sens suivant :
Quelques fonctions utiles sur les data.frames (tapez-les et voyez le résultat) :
Appliquez chacune de ces fonctions à ce jeu de données.
L'accès à la valeur d'un attribut pour toutes les données se fait par la notation suivante : sommeil$Body.Weight est un vecteur dont les éléments sont les valeurs de cet attribut.
Les fonctions statistiques vues plus haut (mean(), var(), ...) s'appliquent aux colonnes
d'un data frame (puisque ce sont des vecteurs !).