Le but de cet enseignement est de se familiariser avec le logiciel RR et d’apprendre à utiliser les outils de gestion de données ainsi que les outils
Le but de cet enseignement est de se familiariser avec le logiciel et d’apprendre à utiliser les outils de gestion de données ainsi que les outils statistiques de base du logiciel .
Contenu des travaux pratiques
- Découverte du logiciel
- Études descriptives de données enregistrées dans un data frame
- Représentations graphiques
- Importation, exportation et manipulation de données
Approche et supports pédagogiques
L’enseignement est composé de 2 séances d’une heure de cours magistral et de 5 séances de travaux pratiques de 2h. Il n’y a pas de séances toutes les semaines, surveillez votre emploi du temps.
Les sujets de TP, ainsi que des corrections partielles, sont disponibles sur mon site perso (https:\juliescholler.gitlab.io) et via l’ENT sur la page Célène du cours.
Modalités d’évaluation
- Session 1 : contrôle continu
- Session 2 : examen sous forme d’un exercice sur ordinateur
La note de contrôle continu prendra en compte l’évaluation d’exercices à effectuer en dehors des heures de TP et d’une épreuve sur poste informatique en fin de semestre.
Présence
La présence en TP est obligatoire. En cas d’absence, vous devez présenter un justificatif ou une justification au chargé de TP dans les 8 jours.
Bibliographie
Il s’agit de lectures complémentaires aux travaux pratiques. On trouve également de nombreuses ressources sur internet.
- Statistiques avec , Cornillon Pierre-André et Autres (519.5 STA)
- Le logiciel , Lafaye de Micheaux Pierre et Autres (519.5 LAF)
- Comprendre et réaliser les tests statistiques à l’aide de , Millot (519.5 MIL)
- Initiation à la statistique avec , Frédéric Bertrand et Myriam Maumy-Bertrand (519.5 BER)
TP 1. Présentation générale du logiciel
Démarrage :
lancer avec ;
créer un script qui contiendra vos commandes ;
penser à structurer votre script en mettant les numéros des parties et des exercices en commentaire.
Principes généraux du logiciel
Commençons par reprendre les commandes vues en cours magistral et dans le polycopié de cours.
est une calculatrice
Effectuer les commandes suivantes :
2*4
3, 5 - 8
3.5 - 8
2.3 + 9 - 5.1
3*2 - 5*(2-4)/6.03
3^2
sqrt(2)
log(2)
round(pi, 2)
Si vous ne comprenez pas bien les commandes, utilisez l’aide en tapant help(sqrt)
, help(log)
ou help(round)
. Vous pouvez également accéder à l’aide par l’onglet help
de la partie en bas à droite de .
Mise en pratique 1.
Calculer avec l’expression .
Création d’objets
On peut stocker en mémoire des données, des résultats, etc. Pour cela, on définit des objets (on reviendra sur les différents types d’objets), à l’aide du symbole <-
qui permet d’assigner une valeur à un objet.
Par exemple, taper les commandes suivantes.
<- 5
a <- a+1
b
a b
Mise en pratique 2.
Affecter la valeur 27 à l’objet nomméx
.
Affecter la valeur 9 à l’objet nomméX
.
Visualiser les valeurs dex
et deX
.
Que constatez-vous ?
Affecter la valeur 5 à l’objetx
. Que constatez-vous ?
Certains objets existent déjà dans . Taper state.area
.
Pour comprendre ces données, utiliser l’aide help(state.area)
.
Les vecteurs
C’est un objet composé d’un ensemble de valeurs toutes du même mode (numérique, logique, etc.). Le nombre d’éléments constitue l’attribut longueur.
Construction
Différentes méthodes sont possibles.
- Construction par la fonction collecteur
c()
:
v <- c(10, 4, 5, 8, 3, 2.1, 15, 789, 63, -2
)c(v, 12)
c(TRUE, TRUE, FALSE)
c(1>0, 1 == 1, T, 1<0.5)
- Création par l’opérateur séquence
seq()
:
seq(1, 8, by = 0.5)
seq(1, 2, length = 5)
- Création par la fonction répétition
rep
:
rep(1, 4)
rep("A", 10)
- encore une :
1:5
Calculs
Voici quelques exemples de manipulation de vecteurs. Les effectuer.
<- 1:5
v0 > 4
v0 sqrt(v0)
sum(v0)
sum(v0 >= 4)
cumsum(v0)
<- c(-3, 1.2, NA, 5, NA)
v1 mode(v1)
is.na(v1)
sum(is.na(v1))
sum(v1)
^2
v1<- c(10, 8, 11, 7, 12)
v2 sort(v2)
+ v2
v0 + v2
v1 *v2 v0
Sélection d’une partie d’un vecteur
On peut sélectionner une partie des éléments d’un vecteur en spécifiant les indices des termes nous intéressant. Voici quelques exemples de sélection d’une partie d’un vecteur. Les exécuter et les commenter dans le script.
<- seq(0.1, 1, 0.1)
v3 6]
v3[6:8]
v3[c(1, 8, 3, 1)]
v3[-2]
v3[-c(2, 3, 5:8)] v3[
On peut également sélectionner une partie d’un vecteur à l’aide d’un vecteur de valeurs logiques.
>0.5]
v3[v3>0.5)&(v3<1)]
v3[(v3<0.5)|(v3 == 0.9)] v3[(v3
Autres manipulations
Recherche d’indice d’un élément :
<- c(5, 1, 9, 7, 3, 4, 2.5, 6.32, 8)
v4 which(v4 == 9)
which(v4 > 6)
which(is.na(v1))
Substitution :
1:2] <- -3
v0[
v0<0.5] <- 0
v3[v3
v3is.na(v1)] <- 1000
v1[
v1> = 10] <- v2[v2> = 10]/10
v2[v2 v2
Mise en pratique 3.
Dans le script, noter les commandes répondant aux questions.
- Créer le vecteur
u
composé de 5000 uns.- Créer le vecteur
v
suivant : .- Créer le vecteur que vous nommerez
vecA
, à l’aide de la commande:
.
Donner sa longueur directement à partir d’une commande sans calcul.- Créer le vecteur que vous nommerez
vecB
, à l’aide de la commandeseq()
.- Créer le vecteur à partir de
vecA
tel que si et si ,
Mise en pratique 4.
Dans le script, noter les commandes répondant aux questions. Pour la dernière question, répondre sous forme de commentaires.
- Créer un vecteur à 20 éléments, nommé
alea
, composé de nombres aléatoires extraits d’une loi normale d’espérance 3 et d’écart type 1, en tapant la commandernorm(20, mean = 3, sd = 1)
(consulter l’aidehelp(rnorm)
.- Afficher la valeur du cinquième élément.
- Afficher les valeurs des 5 derniers éléments.
- Afficher les valeurs des éléments 1, 4, 8, 12 et 18.
- Afficher les valeurs inférieures à 2.
- Créer un nouveau vecteur
aleabis
qui est une copie du vecteuralea
, puis affecter la valeur 0 aux éléments inférieurs à 3 et la valeur 1 aux éléments supérieurs à 3.- Proposer une autre façon de répondre à la question précédente à l’aide de la fonction
ifelse()
(utiliser l’aidehelp(ifelse)
).- Combien d’éléments de
alea
sont supérieurs à 3 ? Répéter la commande création du vecteuralea
. Avez-vous obtenu le même nombre d’éléments supérieurs à 3 ? Pourquoi ?
Les facteurs
Création :
- directement par la fonction
factor
:
factor(c(1, 22, 1, 1, 2, 2))
<- factor(c("m", "f", "f", "m", "m", NA, "f", "f"))
s s
- par conversion d’un vecteur :
as.factor(c(1, 22, 1, 1, 2, 2))
Un attribut des facteurs est level
.
Exemples de commandes :
levels(s)
table(s)
prop.table(table(s))
<- factor(c(1, 0, 0, 2, 1, 0, NA, 1, 1, 2))
s2 levels(s2)
nlevels(s2)
table(s2)
Mise en pratique 5.
On collecte la couleur des yeux de 12 personnes.
- Créer un facteur
couleurs
regroupant les 12 valeurs obtenues qui sont les suivantes : bleu, marron, vert, marron, marron, bleu, marron, marron, vert, vert, marron, vert.- Donner les commandes renvoyant le nombre de modalités de la variable étudiée et l’effectif total.
- Donner le tableau des effectifs correspondant aux données.
- Donner une commande renvoyant le tableau des fréquences, à l’aide des fonctions précédentes et d’un calcul.
- Donner la commande arrondissant le tableau des fréquences au centième.
Exercice à rendre
(inspiré de Kelly Bodwin)
Enregistrer chaque commande utilisée dans un script nommé qu’il faudra déposer sur Célène.
Très vite vous allez rencontrer des erreurs dans . Bien que ce soit frustrant, il ne faut pas en avoir peur. Vous devez juste apprendre dès le début à lire les messages d’erreurs renvoyés par et repérer les erreurs classiques (fautes de frappe, oubli de virgule, de parenthèse, de guillemets, etc.).
Attention ce n’est pas parce qu’une commande se déroule sans erreur qu’elle a effectué ce que vous souhaitiez. À l’aide de la sortie dans la console et de l’environnement, vérifiez régulièrement que vous avez accompli ce que vous souhaitiez (ce qui vous est demandé).
Chacun des groupes de commandes suivantes cause des erreurs ou ne fait pas ce qui est demandé. Corrigez-les afin qu’elles réalisent les actions demandées.
- Créer des vecteurs contenant les lettres capitales, minuscules, les lettres accentuées ou particulières et les signes de ponctuation.
<- c("a", "b", "c", "d", "e" "f", "g", "h", "i", "j", "k",
minuscules "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
"w", "x", "y", "z")
<- c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K",
capitales "L", "M", "N", "O", "P", "Q", "R", "S, "T", "U", "V",
"W", "X", "Y", "Z")
speciales <- c(é, è, ê, à, ù, â, î, ô, ç)
ponctuation <- c(".", ",", "!", "?", "'", '"', "(", ")", " ", "-", ";", ":"
- Créer un vecteur contenant les entiers consécutifs de 1 à 200.
<- 1;200 nombres
- Créer un long vecteur contenant tous les symboles.
<- c(minuscules, Capitales, spéciales, PONCTUATION) symboles
- Vérifier qu’il n’y a pas de valeurs manquantes dans le vecteur
symboles
créé.
sum(isna(symboles))
- J’ai codé un message dans le vecteur
mot_code
. Le décoder en corrigeant les commandes suivantes.
<- c(28, 9, 5, 14, 70, 10, 15, 21, 5, 70, 64)
mot_code paste(symboles(mot_code), collapse = "")
TP 2. Data frames et statistiques univariées quantitatives
Objectifs du TP :
découvrir la classe
data.frame
;réaliser des graphiques simples ;
soigner la présentation de graphiques ;
déterminer les paramètres d’une série statistique.
Exercice 1.
La création d’un data frame peut s’effectuer en combinant des vecteurs.
- Créer le data frame concernant 4 individus contenant leur sexe, leur taille en et leur poids en pounds avec les commandes suivantes :
<- c("M", "F", "F", "F")
s <- c(182, 165, 159, 171)
t <- c(164, 115, 140, 147)
p <- data.frame(sexe = s, taille = t, poids = p) df
- Observer le tableau de données construit avec les commandes suivantes :
dfstr(df)
dim(df)
nrow(df)
ncol(df)
colnames(df)
- Construire un tableau de données nommé
data
concernant les individus précédents contenant leur sexe, leur taille en , leur poids en et leur IMC (arrondi à un chiffre après la virgule). L’indice corporel s’obtient de la façon suivante :
Exercice 2.
On va travailler sur l’objet InsectSprays
déjà existant dans . Il contient une variable quantitative discrète que nous allons étudier.
- Avant de manipuler cet objet, consultons sa description dans l’aide fournie par . Pour cela, vous pouvez aller dans l’onglet Help de RStudio ou taper l’une des commandes suivantes (observez leurs différences).
??insectsprayhelp(InsectSprays)
?InsectSprays
- Observer l’objet
InsectSprays
avec les commandes suivantes:
<- InsectSprays
df str(df)
head(df)
Quelle est l’utilité de la commande head
?
- Effectuer les commandes suivantes.
count$count df
- Tableaux des effectifs, des fréquences et des fréquences cumulées de la variable quantitative discrète
count
.
- Réaliser le tableau des effectifs de la variable
count
avec la commande suivante.
table(df$count)
Réaliser le tableau des fréquences en consultant l’aide de la fonction
prop.table
. Pour plus de lisibilité, arrondir à 3 chiffres après la virgule.Construire le tableau des fréquences cumulées.
- Représentations graphiques.
- Réaliser un premier graphique grâce à la commande suivante.
plot(df$count)
Essayer la commande suivante. Que permet l’argument pch
?
plot(df$count, pch = 4)
- Représenter graphiquement les effectifs par modalité avec la commande suivante.
plot(table(df$count), main = "Effectifs", xlab = "Nombre d'insectes sur chaque parcelle",
ylab = "Nombre de parcelles")
Représenter la courbe des fréquences cumulées. Utiliser l’argument
type
afin d’obtenir le graphique approprié. Faire attention aux abcisses.On peut ajouter des droites et du texte sur un graphique. Essayer les commandes suivantes.
plot(df$count, pch = 4, main = "Nombre d'insectes sur chaque parcelle",
xlab = "Numéro de parcelle", ylab = "Effectif")
abline(h = 10, col = "red")
text(x = 30, y = 10, "seuil")
Consulter l’aide de la commande
text
et utiliser l’argument adéquat pour que le mot ne soit plus placé sur la droite sans modifier les coordonnées .(plus dur) On peut tracer plusieurs droites d’un coup avec la commande
abline
. Effectuer les commandes suivantes et essayer de les comprendre.
plot(df$count, pch = 4, main = "Nombre d'insectes sur chaque parcelle",
xlab = "Numéro de parcelle", ylab = "Effectif")
abline(h = 10, col = "red")
text(x = 30, y = 10, pos = 3, "seuil", col = "darkred")
abline(v = 12*1:5+0.5, col = "blue")
text(x = 12*0:5+5.25, y = rep(25, 6), c("A", "B", "C", "D", "E", "F"), col = "blue")
Exercice 3.
Dans cet exercice, nous allons travailler avec le tableau de données trees
concernant des cerisiers noirs. Il contient les informations suivantes : Girth
(circonférence), Height
(hauteur) et Volume
. Les unités sont anglo-saxonnes, mais cela n’a aucune incidence pour la suite.
Commencer par affecter
trees
dans un nouvel objet nommédata
et observer son contenu à l’aide de commandes déjà rencontrées.Effectuer les commandes ci-dessous et les décrire en commentaire.
summary(data)
mean(data)
mean(data$Height)
quantile(data$Height, 0.25)
IQR(data$Girth)
Trouver une commande permettant d’obtenir d’un coup tous les quartiles, puis une autre permettant d’obtenir tous les déciles.
Réaliser un histogramme avec la commande suivante.
hist(data$Height)
Mettre un titre principal et modifier les titres des axes.
- Observer les différentes informations contenues dans l’objet
Histo
.
<- hist(data$Height, plot = FALSE)
Histo Histo
Que contiennent Histo$breaks
et Histo$counts
?
- Déterminer la commande qui permet d’obtenir la représentation graphique ci-contre :
- Effectuer les commandes ci-dessous et ajouter le bon titre pour l’axe des ordonnées.
<- c(60, 70, 75, 80, 90)
bornes hist(data$Height, main = "Répartition des arbres \n en fonction de leur hauteur",
xlab = "Hauteur", ylab = "", breaks = bornes)
Exercice 4 (pour évaluation).
Enregistrer chaque commande utilisée dans un script nommé qu’il faudra déposer sur Célène. Les questions commençant par (*) sont un peu plus dures. Vous pouvez les laisser de côté lors du première tentative ou si vous avez des difficultées.
Vous allez travailler sur les données contenues dans la base de données ToothGrowth
, existante par défaut dans .
Dans cette base de données sont contenues des informations sur 60 cochons d’Inde ayant reçu de la vitamine C par administration journalière. Les variables présentes sont :
len
: la longueur de leurs odontoblastes (cellules responsables de la croissance des dents) ;dose
: la dose journalière reçue en mg/jour ;supp
: la méthode d’administration qui est soit via du jus d’orange codéOJ
, soit via de l’acide ascorbique, une forme de vitamine C, codéeVC
.
Affecter les données dans un objet nommé
data
.Donner l’étendue de la longueur des odontoblastes des cochons d’Inde.
Effectuer un histogramme de la longueur des odontoblastes des cochons d’Inde, soigné (titre, couleurs).
Réaliser un tableau des effectifs du dosage de vitamine C reçu.
Représenter graphiquement et de façon soignée et adaptée la courbe des fréquences cumulées du dosage de vitamine C reçu par jour.
(*) Travailler le graphique pour que l’on voit la courbe commencer à 0 et continuer après 1.Représenter graphiquement la longueur des ondoblastes en fonction du dosage journalier en vitamine C. Pour améliorer la lisibilité du graphique, changer le type de point.
(*) Vous pouvez aussi chercher comment faire pour les points soient colorés en fonction du type de supplémentation.Ajouter sur le graphique précédent deux droites horizontales une au niveau de la longueur moyenne des ondoblastes et l’autre au niveau de la valeur médiane des ondoblastes. Bien distinguer les droites par des couleurs différentes et du texte.
TP 3. Calcul matriciel et tableaux de contingence
Objectifs du TP :
découverte de la classe
matrix
;calcul matriciel ;
manipulation de tableaux de contingence ;
représentations graphiques de la distribution d’une variable qualitative.
Exercice 5.
Comme un vecteur, une matrice est un objet composé d’un ensemble de valeurs toutes du même mode (numérique, logique, etc.). Mais les éléments sont organisés en lignes et en colonnes.
- La création peut se faire à l’aide de la fonction
matrix
.
Créer et observer les matricesA
,B
etC
avec les commandes suivantes.
<- matrix(1:6, nrow = 2)
A
A<- matrix(1:6, ncol = 2)
B
B<- matrix(1:6, ncol = 2, byrow = T)
C C
- Tester les commandes suivantes. Que renvoient-elles ?
length(A)
dim(A)
length(B)
dim(B)
- On peut également construire des matrices en combinant des vecteurs.
Tester les commandes suivantes.
<- c(25, -12, 8)
v1 <- c(4.5, 87, -3.2)
v2 cbind(v1, v2)
Trouver la commande permettant de combiner
v1
etv2
afin d’obtenir la matrice .Réaliser les calculs suivants et noter en commentaire leurs actions.
+10
A-20
A*10
A/10
A+B
A+C
B*B
A*C
B%*%B
A%*%C
B%*%t(A)
A%*%A
A^2
Asqrt(A)
Exercice 6.
- Créer la matrice
A
à l’aide de la commande suivante.
<- matrix(c(23, 34, 31, 46), ncol = 2) A
Vérifier que la matrice
A
est inversible en calculant son déterminant. Calculer son inverse à l’aide de la commandesolve()
.Vérifier que le produit est égal à la matrice identité.
Créer la matrice
B
égale à et calculer le produit deB
avec son inverse. Commenter.À l’aide des commandes vues précédemment, résoudre le système suivant .
Résoudre directement l’équation de la question précédente en une seule commande à l’aide de la fonction
solve
(consulter l’aide).
Exercice 7.
On souhaite étudier le lien entre la couleur des cheveux et le sexe à partir d’un exemple historique dû à Fisher. Il a répertorié la couleur des cheveux de garçons et de filles d’un district écossais.
Blond | Roux | Châtain | Brun | Noir | |
---|---|---|---|---|---|
Garcon | 592 | 119 | 849 | 504 | 36 |
Fille | 544 | 97 | 677 | 451 | 14 |
- Construire une matrice, nommée
tab
, contenant les effectifs de la même forme que le tableau précédent. Puis ajouter des noms aux lignes et aux colonnes avec les commandes suivantes.
rownames(tab) <- c("Garcon", "Fille")
colnames(tab) <- c("Blond", "Roux", "Châtain", "Brun", "Noir")
- Sélection de parties.
- Tester les deux commandes suivantes.
2, 1]
tab[1, 2] tab[
- Extraire de
tab
un vecteur contant les effectifs des garçons roux et bruns et un autre contenant les effectifs des roux et des rousses.
- Utiliser la commande
margin.table
pour fournir les distributions marginales en effectifs.
2, 1]
tab[1, 2] tab[
Construire le tableau des fréquences arrondies à 3 chiffres après la virgule.
Ajouter les marges et changer les titres des marges deSum
enTotal
.Donner les fréquences conditionnelles des couleurs de cheveux pour chacun des sexes.
Représentations graphiques.
- Représenter la répartition des couleurs de cheveux des garçons avec la fonction
plot
en utilisant l’argumentlwd
pour élargir les bâtons. Utiliser également le vecteur défini ci-dessous pour colorer les différents bâtons.
<- c("Gold", "OrangeRed", "Goldenrod", "Brown", "Black") couleur
On peut également utiliser la commande
barplot
pour ce type de graphique. L’utiliser pour la répartition des couleurs de cheveux des filles, faire intervenir l’argumentspace
pour espacer un peu plus les rectangles produits.Quel est le principal avantage de la commande
barplot
?Une autre représentation graphique est le diagramme circulaire (il y a quasiment toujours mieux à faire qu’un diagramme circulaire mais il faut quand même savoir en faire un si on ne nous laisse pas le choix).
Essayer la commande suivante.
pie(tab[1, ])
Travailler ce graphique en modifiant les couleurs. Essayer de trouver une façon d’ajouter les pourcentage sur le graphique.
Exercice 8 (à rendre).
(inspiré de Kelly Bodwin)
L’objectif de cet exercice est de décoder un message codé que je vous adresse.
Commencer par charger le message codé avec cette ligne de code. Attention vous devez être connecté à internet pour que cette commande fonctionne.
<- read.csv("https://juliescholler.gitlab.io/publication/l2r1-2122/message_code.csv",
top_secret header = FALSE)$V1
Pour décoder le message, vous devez effectuer correctement les instructions ci-dessous.
- Ajouter 14 à chacun des nombres
- Multipler tous les nombres par 18, puis soustraire 257 à tous les nombres.
- Appliquer la fonction exponentielle à tous les nombres.
- Mettre tous les nombres au carré.
Vérification : à ce niveau vous devriez avoir 237 nombres strictement inférieurs à 20.
- Transformer votre vecteur en une matrice à 5 colonnes remplies colonne par colonne.
- Indépendamment du message codé, créer un vecteur nommé
pairs
contenant les entiers pairs compris entre 1 et2*(length(top_secret)/5)
. - Soustraire le vecteur
pairs
à la première colonne de la matrice. - Soustraire 100 à tous les nombres de la troisième colonne situés entre la 18ème et la 24ème lignes (comprises).
- Multiplier par 2 tous les nombres des colonnes 2 et 4.
- Retransformer votre matrice en vecteur en lisant les valeurs colonne par colonne.
Vérification : à ce moment, tous les nombres d’indice supérieur à 250 devraient être inférieurs à 80.
- Prendre la racine carrée de tous les nombres d’indice entre 57 et 240 (inclus).
- Arrondir tous les nombres à l’entier le plus proche.
- Remplacer toutes les occurrences du nombre 77 par 12.
Vous être presque prêt·e à décoder le message.
- Avant cela, créer le vecteur suivant contenant les symboles possibles.
<- c("à", "é", "è", "ê", "î", "ù", "À", "É", "È", "Ê", "Î", "Ù")
accents <- c(".", ",", "!", "?", "'", '"', "(", ")", " ", "-", ";", ":")
ponctuation <- c(letters, LETTERS, accents, ponctuation) symboles
- Et maintenant décoder avec la commande suivante.
<- paste(symboles[top_secret4], sep = "", collapse = "")
msg msg
TP 4. Importation de données et variables qualitatives
Objectifs du TP :
manipulation des objets de type
factor
;construction et exportation de graphiques adaptés aux données qualitatives.
Exercice 9.
- Créer et manipuler les facteurs suivants (levels, tableaux d’effectifs).
<- factor(c(1, 22, 1, 1, 2, 2))
f1 <- factor(c("m", "f", "f", "m", "m", NA, "f", "f")) f2
- On collecte l’information sur la couleur des yeux de 12 personnes.
Créer un facteur
couleurs
regroupant les 12 valeurs obtenues : bleu, marron, vert, marron, marron, bleu, marron, marron, vert, vert, marron, vert.Donner les commandes renvoyant le nombre de modalités de la variable étudiée et l’effectif total.
Construire le tableau des fréquences arrondies au centième.
Exercice 10.
Dans cet exercice, on va travailler les représentations graphiques adaptées aux situations où des variables qualitatives interviennent.
On va utiliser les données euc2
. Les données contiennent la hauteur (hauteur
) et la circonférence (circ
) de différents types d’eucalyptus (clone
) plantés dans différents sols (bloc
).
Importer les données dans une data frame nommé
df
.Donner la structure et un résumé (moyenne, etc.) des différentes données. Commenter.
Modifier la commande d’importation pour que la variable
clone
soit directement considérée comme un facteur.Représenter la hauteur en fonction du sol avec la commande
plot(df$hauteur~df$bloc)
. Que pensez-vous de cette représentation graphique ?Les variables type de sol et clone sont-elles qualitatives ou quantitatives ? Quel est leur mode dans ?
Quand on souhaite représenter une variable quantitative en fonction d’une variable qualitative, une série de diagrammes en boîte est bien adaptée. Cela se fait automatiquement avec la fonction
plot
quand la variable explicative est considérée comme un facteur.
Effectuer la commande suivante.
plot(df$hauteur~df$clone)
On peut forcer la représentation en diagramme en boîte avec la fonction boxplot
ou faire en sorte que considère la variable en tant que facteur.
Effectuer des diagrammes en boîte de la hauteur en fonction du type de sol à l’aide de la fonction
boxplot
.Rajouter à la commande
boxplot
précédente les options suivantes :range = 0
etboxwex = 0.5
.
Que font ces deux options ?Changer le type de la variable
bloc
denumeric
àfactor
avec la commande suivante.
$bloc <- as.factor(df$bloc) df
- Renommer les levels de la nouvelle variable
bloc
avec la commande suivante.
levels(df$bloc) <- c("sol_A", "sol_B", "sol_C")
- Représenter la circonférence en fonction du type de sol avec la commande
plot
.
Afin de visualiser la proportion de chaque clone et de chaque type de sol, réaliser deux diagrammes.
Comme les clones autres que
DH
ne sont pas beaucoup représentés, nous allons fusionner tous les levels de clones autres que le levelDH
avec les commandes suivantes.
levels(df$clone)
levels(df$clone) <- c("autres", "DH", "autres", "autres", "autres")
str(df$clone)
- Représenter uniquement les hauteurs pour les clones qui ne sont pas du type
DH
avec les commandes suivantes.
<- df$clone == "autres"
filtre_autre plot(df$hauteur[filtre_autre]~df$bloc[filtre_autre], xlab = "Type de sol",
ylab = "Hauteur des clones de type non DH")
Créer un nouveau data frame intitulé
eucAB
ne contenant que les individus des sols et et observer le nombre de levels de la variablebloc
ainsi que son tableau d’effectifs.Utiliser la commande
droplevels
pour améliorer la variablebloc
.Utiliser la commande
table
pour construire le tableau de contingence des types de sols en fonction des différents clones.
Exercice 11 (pour évaluation).
Vous allez travailler sur des données de dépenses de clients dans un supermarché. Elles sont contenues dans le fichier clients-supermarche.csv
sur Celene. Ce jeu de données contient les informations suivantes :
Gender
: le genre de l’individu ;Age
: son âge ;AnnualIncome
: son revenu annuel en millier de dollars ;SpendingScore
: son niveau de dépenses codé entre 0 et 100.
Importer les données dans un data frame intitulé
dep
, en faisant en sorte que la variableGender
soit considérée comme un facteur.Pour combien d’individus la variable
SpendingScore
est mal codée ? Supprimer ces individus de la base de données.Ajouter une nouvelle variable
NiveauDep
, au data famedep
qui vaut :
peu
si les dépenses du client correspondent à un score inférieur strictement à 25 ;moyen
si les dépenses du client correspondent à un score entre 25 et 70 ;beaucoup
si les dépenses du client correspondent à un score supérieur ou égal à 70.
Donner le tableau de contingence avec marges des niveaux de dépenses et du genre des individus.
Représenter sous forme de diagramme en bâtons la répartition des âges des clients.
Représenter trois graphiques, un en-dessous de l’autre,représentant pour le premier la distribution des revenus des clients de genre féminin, pour le second la distribution de revenus des clients de genre masculins et pour le dernier ces deux distributions mais sur un même graphique.
Enregistrer, via des lignes de commandes, l’ensemble de graphiques produit dans un document pdf au format A4 portrait, nomméVotreNom-genre.pdf
.
Utiliser un maximum de paramètres pour soigner l’image produite.Réaliser un nuage de points du niveau de dépenses en fonction du revenu.
Enregistrer, via des lignes de commandes, ce graphique produit dans un document jpeg, nomméVotreNom-revenu.jpg
.
Utiliser un maximum de paramètres pour soigner l’image produite.Créer un nouveau data frame intutilé
clientes
ne contenant que les données des clients s’étant déclarés de genre féminin et enlever les variables et modalités inutiles.Exporter le tableau de données ainsi créé dans un fichier nommé
clientes.csv
contenant les noms des variables, ne contenant pas les noms des individus et dont le séparateur de colonnes est la virgule.Déposer sur Célène –uniquement– le script, intitulé
VotreNom-TP4.R
contenant toutes les commandes, y compris celles de créations des fichiers pdf, jpeg et csv à exporter.
TP 5. Manipulations avancées de data frame
Objectifs du TP :
extraire des individus et/ou des variables ;
modifier/créer des variables ;
déterminer les paramètres de sous-groupes.
Exercice 12.
Les données étudiées sont issues d’une enquête réalisée au début des années 80, concernant les étudiants américains. Elles ont été utilisées pour étudier l’effet des universités communautaires sur le niveau scolaire. Les données sont contenues dans le fichier qui contient les informations suivantes :
female
: 1 = female / 0 = male ;black
: 1 = black / 0 = not black ;hispanic
: 1 = hispanic / 0 = not hispanic ;dadcoll
: 1 = père diplômé du supérieur / 0 = père non diplômé du supérieur ;momcoll
: 1 = mère diplômée du supérieur / 0 = mère non diplômée du supérieur ;ownhome
: 1 = famille propriétaire de son logement / 0 = famille non propriétaire ;urban
: 1 = école en zone urbaine / 0 = école en zone rurale ;dist
: distance université-domicile en dizaine de miles ;tuition
: frais de scolarité en milliers de $ ;ed
: nombre d’années de scolarisation ;incomehi
: 1 = revenu familial annuel > $25, 000 / 0 = revenu familial annuel $25, 000 ;county
: numéro de code du comté ;state
: numéro de code de l’état.
Importer les données du fichier dans un data frame intitulé
stu
et l’observer.Effectuer les commandes ci-dessous et les décrire.
mean(stu$tuition)
mean(stu$tuition[stu$female == 1])
mean(stu$tuition[stu$ed >= 14])
mean(stu$tuition[!(stu$ed < 14)])
quantile(stu$dist[stu$urban == 1], 0.25)
sd(stu$dist[stu$hispanic == 1&stu$tuition > 1])
Déterminer la médiane du nombre d’années d’étude des femmes dont la mère est diplômée du supérieur ainsi que le troisième quartile du nombre d’années d’étude des hispaniques dont les frais de scolarité sont supérieurs à 1000 $.
Créer une commande qui permet de vérifier qu’aucun étudiant n’ait été codé simultanément black et hispanic.
Effectuer les commandes suivantes et expliquer ce qu’elles produisent.
<- stu[, c(8:10)]
tab1 head(tab1)
<- stu[-c(1, 3), ]
tab2 head(tab2)
<- stu[stu$female == 1, ]
tab3 head(tab3)
<- tab3[, -1]
tab4 head(tab4)
<- stu[stu$female == 1, -1]
tab5 head(tab5)
<- stu[stu$county == 28 & stu$tuition >= 1.2, -(1:3)]
tab6 head(tab6)
Extraire dans un data frame intitulé
tab7
les étudiants hispaniques dont le revenu familial est supérieur à 25.000 $ et supprimer les variableshispanic
,black
etincomehi
. Combien y a-t-il d’individus ?Convertir la distance université-domicile en kilomètres.
On souhaite créer une variable simplifiée sous forme d’un facteur codant les frais de scolarité de la façon suivante :
faible
: si les frais de scolarité sont inférieurs ou égaux à 600 $ ;moyen
: s’ils sont compris strictement entre 600 $ et 1000 $ ;eleve
: s’ils sont supérieurs ou égaux à 1000 $.
Pour cela, commencer par créer un vecteur tuition.fees
, en répétant la modalité moyen
, puis corriger (en deux temps) les modalités correspondant aux autres situations.
Terminer en donnant le tableau des effectifs correspondant.
On souhaite ajouter au data frame les résultats de ces étudiants au Base Year Composite Test Score, un test évaluant le niveau de l’étudiant. Pour cela, importer les données du fichier et créer un nouveau data frame intitulé
stubis
contenant les données destu
et celle debytest
.Construire un vecteur intitulé
commu
permettant d’identifier la communauté à laquelle appartient l’étudiant, en codantHispanic
pour hispanic,Black
pour black etWhite
pour ni black, ni hispanic. L’ajouter au data frame.Pour chacune des communautés, déterminer la moyenne du bytest avec la commande suivante.
by(stubis$score, commu, mean)
En utilisant la commande
by
et son aide, renvoyer les quartiles des bytest par sexe.On souhaite obtenir les écarts type des bytest par sexe. Cependant la commande
sd
renvoie l’écart type corrigé. On peut créer la fonctionet
calculant l’écart type avec le commande suivante.
<- function(x) {sqrt( (length(x)-1)/length(x) )*sd(x)}
et et(stubis$score)
L’utiliser pour renvoyer les écarts type des bytest par sexe.
- Construire une nouvelle variable intitulée
par.sup
qui vaut 0 si aucun parent n’est diplômé du supérieur et 1 sinon. Renvoyer les déciles du bytest pour ces deux groupes.
Exercices d’annales
Voici quelques extraits de contrôle sur poste ou de session 2. Il n’y a et n’aura pas de correction. Par contre, vous avez bien sûr le droit de nous poser des questions et de nous montrer votre travail sur ces exercices d’annales pour voir si cela correspond bien à ce qui est attendu.
Exercice 13 (Extrait de l’examen de session 2 - 2014-2015)
Le fichier de données se nomme session2-1415.txt
et se trouve sur Celene. Il contient les données brutes d’un sondage réalisé auprès d’individus regardant quotidiennement la télévision. On a répertorié :
- le genre de l’individu
Genre
; - le nombre de personnes dans le foyer
Foyer
; - le diplôme obtenu
Diplome
(SupBac+2 signifie supérieur à Bac +2) ; - la durée moyenne quotidienne devant la télévision,
Duree
, en minutes.
Importer les données dans un data frame intitulé
data
.Déterminer la taille de l’échantillon et la structure de
data
. Préciser les types des variables.Donner un résumé des variables. Donner la liste des diplômes par une commande spécifique.
Effectuer l’histogramme représentant la durée quotidienne devant la télévision.
Calculer le nombre de personnes qui regardent 2h ou plus par jour en moyenne la télévision.
Extraire dans un data frame intitulé
dataF
les données concernant les femmes.Supprimer la colonne
Genre
dedataF
.Effectuer les diagrammes en boîte de la durée quotidienne devant la TV en fonction du nombre de personnes dans le foyer. Soigner le graphique.
Déterminer la moyenne arrondi au dixième de la durée quotidienne devant la TV pour les individus appartenant à un foyer comportant 4 personnes.
Créer un vecteur intitulé
Vec
qui prend la valeur 1 si l’individu possède le bac ou un diplôme supérieur, et qui prend 0 sinon.Calculer la proportion, arrondie au millième, d’hommes qui ont le bac ou plus dans l’échantillon .
Déterminer le tableau de contingence du couple de variables
Genre
etDiplome
.
Exercice 14 (Extrait de l’examen de session 2 - 2016-2017)
Vous allez travailler sur des données concernant des maladies cardiaques. Elles sont contenues dans le fichier maladiecardiaque_homme.csv
présent sur Celene. Ce tableau de données contient les variables suivantes :
age
: l’âge du patient ;chest_pain
: le type de douleur à la poitrine ;rest_bpress
: la pression sanguine au repos ;blood_sugar
: la présence d’un taux élevé de sucre dans le sang ;rest_electro
: les anormalités détectées lors de la réalisation d’un électrocardiogramme au repos ;max_heart_rate
: le rythme cardiaque maximal ;exercice_angina
: la présence d’une angine de poitrine suite à un effort ;disease
: présence d’une maladie cardiaque.
Importer les données dans un data frame intitulé
maladie
.Représenter graphiquement les proportions des différents types de douleurs à la poitrine.
Représenter graphiquement le rythme cardiaque maximal en fonction de l’âge.
Réaliser un histogramme des rythmes cardiaques maximums pour les patients ayant eu une angine de poitrine et un autre pour ceux n’en ayant pas eu.
Veiller à réaliser ces histogrammes de façon à ce qu’ils soient facilement comparable (échelles).Quel est le rythme cardiaque moyen des personnes malades ?
Donner en une unique commande les différents quartiles de la pression sanguine des personnes non malades.
Déterminer le nombre de patients ayant un taux de sucre dans le sang élevé.
Créer la variable
high_rate
valantoui
si le rythme cardiaque maximal est supérieur à 150 etnon
sinon.Extraire dans un data frame intitulé
malade
les données des individus malades (sans la variabledisease
).
Exercice 15 (Examen de session 1 - 2019-2020)
Vous allez travailler sur des données concernant des logements vendus, au cours de 8 années, dans Saragota County dans l’État de New York.
Elles sont contenues dans le fichier sur Celene. Dans ce fichier, on a les informations suivantes :
prix
: prix de vente en dollars ;bord_mer
s’il est ou non en bordure de mer ;age
: l’âge du logement au moment de la vente ;chauffage
: le type de chauffage ;superficie
: la superficie habitable en square foot ;chambres
: le nombre de chambres du logement ;cheminees
: le nombre de cheminées ;sdb
: le nombre de salle d’eau ou de bain ;pieces
: le nombre de pièces ;psce_cheminee
: la présence de cheminées.
- Importer les données du fichier dans un data frame intitulé .
- Quel est le prix moyen des logements vendus ?
- Transformer la surface habitable actuellement en square foot en mètre carré, arrondi à l’unité : mètre carré sq ft.
- Représenter par des diagrammes en boîte la répartition des âges des logements selon qu’ils soient en bordure de mer ou non, et ajouter sur le graphique une droite horizontale colorée au niveau de l’âge moyen de tous les logements ainsi qu’un texte de la même couleur spécifiant de quoi il s’agit.
- Ajouter au data frame une variable nommée
neuf
qui vautOui
si l’âge du logement est 0 etNon
sinon. - Donner le tableau de contingence entre la présence de cheminée et le fait que le logement soit neuf.
- Donner le premier quartile de la surface habitable des logements en bordure de mer.
- Vérifier que pour tous les logements, il y a plus de pièces que de chambres de renseignées, en donnant le nombre de logements qui ne vérifient pas cela.
- Créer un document , au format A4, intitulé , contenant deux histogrammes un au-dessus de l’autre de la répartition des prix des logements : un pour ceux possédant un chauffage électrique et le second pour ceux ne possédant pas un chauffage électrique. La comparaison des prix entre les deux graphiques doit être aisée.
- Combien de logements vendus à moins de 150 000 dollars ne possèdent pas de cheminée ?
- Vérifier que les variables concernant la présence de cheminée sont cohérentes, en donnant le nombre de logements pour lesquels le codage n’est éventuellement pas correct.
- Extraire un data frame ne contenant que les logements neufs et supprimer de ce data frame toutes les variables et/ou levels devenus inutiles.
- Sauvegarder ce data frame dans un fichier nommé . Ce document doit contenir les noms de variables mais non les numéros d’individus.
Exercice 16 (Extrait du contrôle sur poste de session 1 - 2017-2018)
Vous allez travailler sur les données des employés et services d’une entreprise. Elles sont contenues dans les fichiers company.csv
et info_unit.csv
sur Celene. Ces tableaux de données contient les informations suivantes.
Dans le fichier company.csv
, on a les informations suivantes concernant 14999 employés :
satisfaction_level
: niveau de satisfaction de l’employé ;last_evaluation
: dernière évaluation ;number_project
: nombre de projets ;average_monthly_hours
: nombre moyen d’heures par mois ;time_spent_company
: temps passé dans l’entreprise ;Work_accident
: s’il a déjà eu un accident de travail ;left
: si l’employé a quitté l’entreprise ;promotion_last_5years
: s’il a eu une promotion au cours des 5 dernières années ;unit
: département ;salary
: niveau de salaire.
Dans le fichier info_unit.csv
, on a des informations concernant les départements :
unit
: département ;effectif_serv
: effectif du département ;nb_accident_serv
: nombre de personnes du département ayant déjà eu des accidents de travail ;nb_left_serv
: nombre de personnes du service ayant quitté l’entreprise.
Importer les données du fichier
info_unit.csv
dans un data frame intituléunit
.Créer un vecteur contenant les taux de départ par département arrondis à 2 chiffres après la virgule.
Ajouter ce vecteur au data frame
unit
et en supprimer la variablenb_left_serv
.Importer les données du fichier
company.csv
dans un data frame intitulécomp
.Déterminer le nombre d’employés du département
IT
ayant déjà eu un accident du travail.Créer un document intitulé comprenant un histogramme des niveaux de satisfaction des employés ayant quitté l’entreprise.
Représenter par des diagrammes en boîte la répartition des niveaux de satisfaction selon que l’employé a quitté ou non l’entreprise.
Ajouter sur le graphique une droite horizontale colorée au niveau du troisième quartile des niveaux de satisfaction globaux ainsi qu’un texte de la même couleur spécifiant qu’elle correspond au troisième quartile.
Créer le tableau de contingence des variables
unit
etsalary
. Ajouter les marges et renommer les titres des colonnes et ligne de marges.Effectuer le tableau des proportions des différents départements arrondis à 3 chiffres après la virgule.
Modifier les levels de la variable
unit
afin de fusionner les départements dont les effectifs représentent moins de 7% des effectifs de l’entreprise en une modalitéautres
. Puis réaliser un graphique représentant les proportions des différents départements.