Avant de commencer, assurez-vous que vous avez bien téléchargé tous les fichiers nécessaires pour la séance (pdf, code R et données) et que tout est sauvé dans un répertoire de votre ordinateur. Assurez-vous aussi que le code IntroR_part2.R est bien ouvert dans l’éditeur de RStudio. Finalement, vous devez avoir assimilé les notions de la 1e partie de l’introduction à R avant de commencer cette séance.
Dans ce document, nous allons couvrir les thèmes suivants:
Statistiques descriptives
Sélections de données
Graphiques de base
Données utilisées pendant la séance
Les données électricité
Nous allons illustrer les différentes commandes et concepts à l’aide d’un fichier de données contenant la consommation en électricité d’une maison entre janvier 1991 et décembre 2000. Chaque ligne du fichier représente un mois donné. Les données sont dans les fichiers electricbill.txt et electricbill.csv. Les variables fournies sont les suivantes:
NUM: identifiant de l’observation
YEAR: année
MONTH: mois
BILL: montant de la facture en dollars (incluant 5% de taxe de vente)
TEMP: température moyenne (en degrés Fahrenheit)
HDD: mesure quantifiant la quantité d’énergie nécessaire pour chauffer le batiment
CDD: mesure quantifiant la quantité d’énergie nécessaire pour refroidir le batiment
SIZE: nombre de personnes vivant dans la maison
METER: présence d’un nouveau compteur électrique (1=oui, 0=non)
PUMP1: présence d’une nouvelle pompe de chauffage (1=oui, 0=non)
PUMP2: présence d’une nouvelle pompe de chauffage pour la seconde fois (1=oui, 0=non)
RIDER TOTAL: charge totale (par kwh)
CONSUMPTION: consommation (en kwh)
Les données baby-boom
Vous aurez à pratiquer les notions vues en classe à l’aide du jeu de données babyboom.txt qui contient l’heure de naissance, le sexe et le poids à la naissance de 44 bébés nés dans une période de 24h à l’hopital de Brisbane, en Australie. Les variables sont les suivantes:
Time: heure de naissance
Sex: sexe du bébé (1 = fille, 2 = garçon)
Weight: poids à la naissance en grammes
Time.midnight: nombre de minutes après minuit passées au moment de la naissance
Statistiques descriptives
Voici ci-dessous une liste de fonctions pré-définies dans R qui sont applicables pour des vecteurs (ex: colonnes de jeu de données):
# Lecture des donnéesdonnees <-read.table("Data/electricbill.txt", header =TRUE) |>subset(select =c("BILL","YEAR", "MONTH", "CONSUMPTION"))BILL <- donnees$BILL# Quelques opérations usuelles sur les vecteurslength(BILL) # nombre d'entrées de l'objet
[1] 120
sum(BILL) # somme des éléments
[1] 12112.63
sum(BILL^2) # somme des éléments au carré
[1] 1539580
mean(BILL) # moyenne
[1] 100.9386
var(BILL) # variance
[1] 2663.434
sd(BILL) # écart-type (racine carrée de la variance)
[1] 51.60847
isTRUE(all.equal(sqrt(var(BILL)), sd(BILL)))
[1] TRUE
summary(BILL) # résumé
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.00 69.67 86.16 100.94 127.64 256.90
On peut aussi appliquer ces fonction à la table de données
summary(donnees)
BILL YEAR MONTH CONSUMPTION
Min. : 0.00 Min. :1991 Length:120 Min. : 264
1st Qu.: 69.67 1st Qu.:1993 Class :character 1st Qu.: 1796
Median : 86.16 Median :1996 Mode :character Median : 2602
Mean :100.94 Mean :1996 Mean : 3372
3rd Qu.:127.64 3rd Qu.:1998 3rd Qu.: 4500
Max. :256.90 Max. :2000 Max. :13784
Notez que la documentation de R est très bien faite. Pour obtenir de l’aide sur une fonction (ex: mean), tapez la commande help(mean) et le fichier d’aide s’affichera dans la fenêtre en bas à droite de RStudio.
Il existe aussi beaucoup de fonctions spécifiques qui sont dans des paquets R que vous devez avoir installé au préalable. Par exemple, la fonction mvrnorm, qui permet de générer des variables selon une loi normale multivariée, est disponible dans le paquet MASS qui ne fait pas partie des paquets de base. Une fois que vous avez installé ce paquet, elle va faire partie de façon permanente des paquets que vous avez à votre disposition. Cependant, vous devez charger ce paquet à chaque nouvelle session de travail, si vous en avez besoin. Voici un exemple:
# Spécifier les valeurs des arguments avec le signe =x <- MASS::mvrnorm(100, mu =1, Sigma =1)
Extraction de données
Il est très fréquent en analyse de données de devoir extraire un sous-ensemble de données pour faire des analyses plus spécifiques (ex: on veut extraire seulement les femmes, qui ont un emploi depuis plus de 10 ans). Nous avons déjà vu comment accéder à une ligne / colonne specifique d’un dataframe avec le symbole [ , ] et nous allons voir qu’il est possible de combiner ceci avec des conditions de type logique (FALSE / TRUE).
Voyons tout d’abord comment créer une variable de type logique, à partir d’une condition spécifique. Par exemple, dans l’exemple suivant, la variable condition prend la valeur TRUE si la condition YEAR=1991 est vraie (attention, la condition = se code == en R):
De façon similaire, on peut aussi extraire des valeurs d’une matrice ou data.frame, selon une certaine condition. Voici des exemples:
# Extrait des données les lignes correspondant à l'année 1991donnees[YEAR==1991,]
BILL YEAR MONTH CONSUMPTION
1 162.10 1991 Jan 5600
2 256.90 1991 Feb 9463
3 151.15 1991 Mar 5154
4 118.76 1991 Apr 3576
5 100.71 1991 May 2894
6 83.97 1991 Jun 2257
7 99.40 1991 Jul 2826
8 103.64 1991 Aug 2986
9 71.59 1991 Sep 1774
10 94.92 1991 Oct 2713
11 78.83 1991 Nov 2092
12 182.85 1991 Dec 6109
# Extrait des données les observations avec BILL>200donnees[BILL>200,]
BILL YEAR MONTH CONSUMPTION
2 256.90 1991 Feb 9463
26 222.99 1993 Feb 7864
27 214.45 1993 Mar 7526
61 218.67 1996 Jan 11644
62 256.02 1996 Feb 13784
63 222.21 1996 Mar 12544
On peut aussi combiner ensemble plusieurs opérations logiques à l’aide des opérateurs & (ET) ou bien | (OU). Voici quelques exemples:
# Dimensions d'une nouvelle base de données qui contient# seulement les mois de janvier et de février# dim(donnees[donnees$MONTH == 'Jan' | donnees$MONTH == 'Feb', ])sousbd <- donnees[donnees$MONTH %in%c('Jan','Feb'), ]dim(sousbd)
[1] 20 4
head(sousbd)
BILL YEAR MONTH CONSUMPTION
1 162.10 1991 Jan 5600
2 256.90 1991 Feb 9463
13 165.23 1992 Jan 5400
14 197.94 1992 Feb 6657
25 180.08 1993 Jan 6163
26 222.99 1993 Feb 7864
# Seulement les observations avec 100<BILL<200head(donnees[(BILL >100) & (BILL <200), ], nrow =5L)
BILL YEAR MONTH CONSUMPTION
1 162.10 1991 Jan 5600
3 151.15 1991 Mar 5154
4 118.76 1991 Apr 3576
5 100.71 1991 May 2894
8 103.64 1991 Aug 2986
12 182.85 1991 Dec 6109
Exercice 1
Créer une sous-base de données en extrayant de donnees seulement les mois de décembre à février, et les observations pour lesquelles BILL est supérieur à 100.
Pour ce jeu de données, calculer la moyenne, la valeur minimum et la valeur maximum de la variable BILL.
À l’aide de la fonction cor, calculer la corrélation entre les variables BILL et CONSUMPTION.
Pour terminer, nous allons voir comment extraire des données basées sur une séquence de ID que l’on veut extraire (par ex., extraire les 10 premières lignes d’un jeu de données). Voici tout d’abord comment créer en R une séquence de chiffres (ID):
# Séquence d'entiers de 5 à 105:10
[1] 5 6 7 8 9 10
# Séquence de 1 à 10 avec des sauts de 2seq(from =1L, to =10L, by =2L)
[1] 1 3 5 7 9
# Sequence de 0 à 10, de longueur 11seq(0, 10, length =11)
[1] 0 1 2 3 4 5 6 7 8 9 10
# par défaut, R assigne les valeurs aux arguments dans l'ordre d'apparation# Répétition du chiffre 1, 10 foisrep(1, length.out =10L)
[1] 1 1 1 1 1 1 1 1 1 1
# Répétition de la séquence 1-2-3, cinq foisrep(1:3, 5)
[1] 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
En utilisant la même logique que ce que nous avons vu jusqu’à présent, il est possible d’extraire des lignes d’un tableau de données d’un vecteur ou d’une matrice.
# Extrait de BILL les observation (1,3,6)BILL[c(1,3,6)]
[1] 162.10 151.15 83.97
# Extrait les 10 premières observations de BILLBILL[1:10]
Exercice 2 Extraire du dataframe données les colonnes YEAR et MONTH pour les lignes paires.
Graphiques
R peut produire une grande variété de graphiques de grande qualité et dans des formats variés (jpg, pdf, png, etc.). Il existe des paquets R telles que lattice et ggplot2 qui permettent de créer des graphiques et figures de qualité exceptionnelle. La syntaxe de ces fonctions n’est pas forcément évidente pour un débutant dans R, et nous n’allons pas les détailler ici. La fonction de base plot permet d’effectuer des graphiques, mais la syntaxe est parfois réhibitoire. Le paquet tinyplot permet de simplier les extensions sans introduire de dépendences additionnelles.
Voici le code qui utilise la fonction plot de base pour effectuer un simple nuage de points:
plot(BILL ~ CONSUMPTION, data = donnees)
Ajouter un titre et identifier les axes peut se faire facilement, de même que des couleurs ou des droites, ou des séparateurs verticaux ou horizontaux:
plot(BILL ~ CONSUMPTION, # formule sous forme y ~ xdata = donnees,type ="p", # "p" pour point, "l" pour ligne, etc.xlab ="Consommation d'électricité (en kw/h) ",main ="Facture en fonction de la consommation d'électricité", ylab ="Montant de la facture (en $)",pch =19) # type de point, cercle pleinabline(lm(BILL ~ CONSUMPTION, data = donnees), col ="green")
# abline(h = 6000, col = "green") #ligne horizontale# abline(v = 100, col = "red") #ligne verticale
Plusieurs autres graphiques sont disponibles: ils dépendent du type des variables à disposition. Par exemple, on montre ci-dessous un histogramme et une boîte à moustaches. On peut tracer des boîtes à moustaches pour une seule variable, ou comme ici en fonction d’une variable catégorielle (on spécifie explicitement l’ordre des niveaux pour que les mois soient dans l’ordre chronologique plutôt qu’en ordre alphabétique). On change les options des paramètres graphiques (par) pour enlever la boîte autour du graphique et mettre les deux graphiques côte-à-côte.
par(mfrow =c(1, 2)) # configuration de la grille, 1 ligne et 2 colonnes<# Histogrammehist(BILL, xlab ="montant de la facture (en $)",ylab ="fréquence",main ="")# Boîte à moustacheswith(donnees, boxplot(BILL ~factor(MONTH, levels =substr(month.name, 1, 3)), main ="Facture d'électricité en fonction du mois",ylab ="facture d'électricité (en $)",xlab ="mois"))
par(mfrow =c(1, 1)) # rétablir les graphiques
Les graphes peuvent être sauvés en format pdf, png, jpg (entre autres). Voici le code pour sauver une figure dans un fichier appelé “myplot.jpg”:
# créer un dossier pour stocker le graphiquedir.create(path ="figures", showWarnings =FALSE)# enregistrer au format pdf au format 8 po par 4 popdf("figures/mongraphique.pdf", width =8, height =4)plot(BILL ~ CONSUMPTION, data = donnees)dev.off() # fermer la console graphique
png
2
Si on exporte sous format PDF et que plusieurs graphiques sont créés, ils apparaîtront sur différentes pages.
Exercice 3
Faire un nuage de points de BILL versus YEAR séparément pour les mois de (1) janvier (2) mars (3) août et (4) octobre. Enregistrer ces 4 figures dans une seule page (2 lignes 2 colonnes) et le sauvegarder en format pdf.
À vous de jouer
À l’aide de Quarto, répondez aux questions suivantes:
Calculer les statistiques descriptives de la variable weight.
Calculer les statistiques descriptives de la variable weight séparément pour les filles et les garçons
Produire deux boîtes à moustaches du poids à la naissance en fonction du sexe
Rapporter la proportion de filles qui ont un poids inférieur à 3 kg? Comparer avec la proportion chez les garçons.
Afficher le poids de toutes les filles qui sont nées au moins 2h après minuit.
Obtenir l’identifiant de la fille qui a le poids le plus faible.
Produire un nuage de points du poids en fonction de la variable time.midnight.