1-Introduction R

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 76

Introduction au logiciel R

Emile Provendier

Semaine du 21/09/2020
1 - Présentation et installation du logiciel R
Au cours de l’année vous allez utiliser R et python. Quand on fait de la
datascience c’est important de pouvoir faire les deux
Avantage de R :
- Interface instinctive
- Plus d’outils pour faire de la statistique
- Plus de packages de manière générale
- Gestion des dataframes est native
Avantage de Python :
- Plus adapté à des gros jeux de données
- Plus adapté pour le deeplearning
- Plus généraliste (permet aussi de développer des applis)
Quelques caractéristiques :

▶ Marqué par le principe de l’Open Source


▶ Gratuit
▶ Plusieurs distributions : CRAN (Compréhensive R Archives
Network), R-project ou encore Microsoft
▶ Possibilité d’intégrer d’autres langages de programmation, comme
Python, Ruby ou encore PERL
▶ Globalement, très malléable
Installation de R et Rstudio
Installer R
Installable sur tous types de systèmes : Windows, Mac, Linux
https://cran.r-project.org/
Pour Windows :
Cliquer sur “Download R for Windows” puis “Install R for the first time”
puis télécharger la dernière version de R
Pour Mac :
Cliquer sur “Download R for Mac OS X” puis sélectionner la dernière
version
Pour Ubuntu :
# Installation de R
# bionic = version 18.04, si autre version remplacer xenial
# (trusty = 14.04, vivid = 15.04, xenial = 16.04,
# zesty = 17.04)
echo "deb http://www.stats.bris.ac.uk/R/bin/linux/ubuntu bionic/" >> /etc/apt/sources.list
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E084DAB9
sudo apt update
sudo apt install r-base r-base-core r-base-dev
Installation de l’interface Rstudio
R en tant que tel ne se présente pas comme un logiciel très instinctif

Figure 1: Logiciel R brut


Heureusement, il existe des interfaces pour le rendre plus accessible,
comme RStudio :
https://www.rstudio.com/products/rstudio/download/
Choisir le fichier de Téléchargement adéquat
L’interface Rstudio
Quatre zones dans l’interface :

▶ En haut à droite, une zone qui liste les objets ouverts ou créés
(variables, tables, programmes, etc.)
▶ En bas à droite, une zone qui concerne des fonctionnalités générales
: packages, aide, graphiques…
▶ En bas à gauche, la console. Toutes les lignes de commandes sont
lancées par l’intermédiaire de la console et apparaissent dans celle-ci.
On y retrouve aussi les messages d’erreur et les avertissements
▶ En haut à gauche, une grande zone est consacrée au scripts (y
apparaissent aussi les bases de données qu’on visualise)
Visuellement

Figure 2: Interface Rstudio


Quelques précisions sur l’utilisation
Les scripts

▶ Les scripts dans R sont au format .R (en fait ce n’est qu’un fichier
texte avec une extension)
▶ Les scripts servent à stocker plusieurs commandes et ses lignes sont
numérotées
▶ Utiliser R, c’est le plus souvent écrire (ou copier/coller) des scripts
▶ Les scripts permettent donc de sauvegarder nos commandes
▶ Pour créer un nouveau script il suffit de cliquer sur le + en dessous
de “file” en haut à gauche
Executer les commandes

▶ Contrairement à des langages comme Python, l’exécution des


commandes fonctionne ligne par ligne, ou groupe de lignes par
groupe de ligne
▶ Pour exécuter une ligne, il faut placer le curseur dessus et appuyer
sur “Ctrl + Entrée”, ou “Cmd + Entrée” pour les Mac
▶ Pour mettre une ligne en commentaire, il faut ajouter un croisillon
devant : “#”
Les commentaires apparaissent dans le code mais ne sont pas considérés
comme des morceaux à éxecuter.
Exemple :

# La commande suivante permet d'afficher le résultat


# de 2+2
print(2+2)

## [1] 4

print(3*3) # Commentaire après la formule

## [1] 9
Aide dans R
Si besoin d’une précision sur une commande, on peut utiliser la fonction
help() ou encore “?fonction”
Exemple :

help("print")
# Ou alors
?print

L’aide s’affiche alors dans la zone en bas à droite de RStudio


Les opérateurs
La plupart des éléments se rapprochent d’autres langages comme python :
Opérations logiques
Renvoient TRUE ou FALSE, objets de type logical
- Et : “&”
- Ou : “|”
- Non (négation) : “!”
Test d’égalité:
- Égal : “==”
- Différent : “!=”
Tests de comparaison :
- Plus petit que : “<”
- Plus petit ou égal à : “<=”
- Plus grand que : “>”
- Plus grand ou égal à : “>=”
Exemple :

# raccourci pour créer une flèche d'allocation : Alt+6


x <- 5
x+3 == 8 # Est ce que x + 3 est égal à 8

## [1] TRUE

!(x >= 8) # Est ce que c'est faux de dire que x est sup ou égal

## [1] TRUE

(x < 2) # Est ce que x est inférieur à 2

## [1] FALSE
Fonctions sur les chaînes de caractères :

mot <- "data-science"


nchar(mot) #nombre de caractères

## [1] 12

str(mot)

## chr "data-science"

# str est un bon moyen pour avoir une vision globale


# de la donnée, affiche le type et la valeur
Création de listes

age <- c(18, 27, 34, 18, 24, NA, 30, 28, 19, 19)
sexe <- c("F", "F", NA, "F", "M", "M", "M", "F", NA, "F")
# is pour connaitre la nature de la variable
is(age)

## [1] "numeric" "vector"

is(sexe)

## [1] "character" "vector" "data.frameRowLabels"


## [4] "SuperClassMethod"
À noter

▶ Une variable est appelé un vecteur


▶ Un vecteur est une liste de modalité
▶ Éviter de mettre des accents ou des caractères spéciaux dans les
noms de variables
En gros

▶ Guillemets pour les chaines de caractères et pas de guillemets pour


les chiffres
▶ Pour affilier une valeur à une variable, on utilise une flèche :
“variable <- valeur”
2 - Manipuler des données avec R
Explorer les données

variable1<-1
variable2<-10
# Si des variables sont identifiées par R comme numériques,
# on peut faire des opérations dessus directement avec leurs nom
variable3=variable1+variable2
print(variable3)

## [1] 11

# "mode" permet d'avoir le type de la donnée


mode(sexe)

## [1] "character"

mode(age)

## [1] "numeric"
# les crochets servent à appeler une modalité dans
# une variable
print(age[5])

## [1] 24

# On peut avoir la taille d'une liste :


length(age)

## [1] 10
Les packages
Open-source permet à chacun de développer des fonctions et de les
partager

▶ Les ajouts des contributeurs sont accessibles sous forme de


“packages”
▶ Installation d’un package nécessite une connexion internet
▶ Sur certains ordi (Windows 10 éventuellement), on ne peut installer
un package que si c’est lancé en tant qu’admin
Pour installer un package, on peut procéder de diverses manières :

▶ En utilisant le répertoire intégré dans Rstudio :

install.packages("nom_du_package")

▶ En téléchargeant depuis les archives du cran avec un lien internet


avec l’outil “devtool” :

install_url("https://cran.r-project.org/src/contrib/Archive/
nom_du_package/version")

▶ En téléchargeant un projet depuis Github avec l’outil “devtool” :

install_github("nom_utilisateur/nom_package")
Une fois le package téléchargé, il faut le lancer à chaque nouvelle session
de R avec :

library("nom_du_package")

Fonction help() sert aussi à avoir des indications sur l’utilisation d’un
package :

help("nom_du_package")

Exemple :

# Installation du package "devtools"


install.packages("devtools")
# Puis on charge le package pour utiliser les fonctions
library(devtools)
Si on ne charge pas le package, les fonctions fournies avec seront
inutilisables

Figure 3: function not found

Si cette erreur apparait, il y a soit une faute de frappe dans la fonction


utilisée, soit un problème de chargement du package
3. Les dataframes
Créer des dataframes
Le logiciel R est adapté pour manipuler différents types de données,
notamment des tables et jeux de données
Créer son propre jeu de données
Un dataframe est un tableau de données comportant plusieurs entrées :

▶ des lignes, le plus souvent les “individus”


▶ des colonnes, le plus souvent les “variables”

On peut créer un jeu de données avec la commande suivante

donnees<-data.frame(naissance=c("03/06/2000","05/08/1999",
"29/03/1994","01/01/1997"),
Taille=c(178,180,167,175),
Genre=c("Femme", "Homme", "Femme", "Homme"),
row.names = c("sujet n°1","sujet n°2",
"sujet n°3","sujet n°4"))
Découpons la formule utilisée ici :
Tout d’abord, il faut systématiquement ranger le tableau que l’on crée
dans un nouvelle variable, que l’on appelle “donnees”
On utilise ensuite la fonction “data.frame()” pour créer le tableau
Le nombre d’argument que l’on ajoute dépend du nombre de colonnes
que l’on souhaite avoir, nous faisons ici 3 colonnes (année de naissance,
Taille, Genre)
Le “=c()” permet de remplir les colonnes avec les valeurs que l’on
souhaite, la fonction c() correspond dans R à une LISTE
Enfin, le dernier argument “row.names” est une manière de nommer les
lignes de notre tableau, ce n’est pas indispensable
Une fois notre tableau créé, si il n’y a pas d’erreur, on peut le visualiser
dans R avec la commande suivante :
# La fonction dim permet de connaitre le nombre de lignes
# et de colonnes
dim(donnees)

## [1] 4 3

# On peut voir juste le nombre de ligne


nrow(donnees)

## [1] 4

# et le nombre de colonnes
ncol(donnees)

## [1] 3

# La fonction print() sert à afficher le tableau


print(donnees)

## naissance Taille Genre


La fonction print renvoie les résultats dans le terminal en dessous et n’est
pas pratique pour les gros jeux de données. Pour avoir une version plus
lisible, on utilise la fonction View()

# Cette fonction est l'une des seules fonctions natives à R


# qui prend une majuscule, donc attention à cela
# View(donnees)
print(donnees)

naissance Taille Genre


sujet n°1 03/06/2000 178 Femme
sujet n°2 05/08/1999 180 Homme
sujet n°3 29/03/1994 167 Femme
sujet n°4 01/01/1997 175 Homme

De manière générale, préférez View pour avoir une vision plus large du
jeu de données
On peut aussi créer des tableaux de données de la façon suivante :

naissance=c("03/06/2000","05/08/1999","29/03/1994","01/01/1997")
taille=c(178,180,167,175)
sexe=c("Femme", "Homme", "Femme", "Homme")
noms_lignes=c("sujet n°1","sujet n°2","sujet n°3","sujet n°4")
# On nomme notre dataframe sous le nom "tableau"
tableau<-data.frame(naissance,taille,sexe,
row.names = noms_lignes)
# On crée donc un tableau de 4 lignes et 3 colonnes
dim(tableau)

## [1] 4 3
Affichage des tableaux
# La fonction "names" donne le même résultat que
# "colnames" car elle appelle le nom des colonnes
names(tableau)

## [1] "naissance" "taille" "sexe"

colnames(tableau)

## [1] "naissance" "taille" "sexe"

# La fonction "rownames" indique le nom des lignes


# si il y en a un, ou sinon, un identifiant
rownames(tableau)

## [1] "sujet n°1" "sujet n°2" "sujet n°3" "sujet n°4"

# On peut accéder à une variables avec "$"


print(tableau$naissance)

## [1] 03/06/2000 05/08/1999 29/03/1994 01/01/1997


## Levels: 01/01/1997 03/06/2000 05/08/1999 29/03/1994
Changer le nom des colonnes

colnames(tableau)<-c("Date_naissance","Taille_population",
"Sexe_population")

On utilise la fonction colnames() et on met en argument le nom du


tableau sur lequel on veut opérer
On lui affilie ensuite une nouvelle liste avec les noms des colonnes
Attention, si la nouvelle liste possède plus ou moins d’éléments qu’il n’y a
de colonne, le logiciel va vous renvoyer une erreur :

Figure 4: Erreur de dimension


Suppression des colonnes inutiles, plusieurs manières de faire

# si on n'a pas beaucoup de colonnes à virer on fait ça


tableau$Taille_population<-NULL
# Si on a beaucoup de colonnes, on peut créer une liste des
# colonnes à garder
liste_colonnes_a_garder<-c("Date_naissance","Sexe_population")
# Puis on crée un nouveau jeu de données en lui demandant
# de sélectionner seulement les colonnes de la liste
# "colonnes_a_garder"
data2<-tableau[,liste_colonnes_a_garder]
# on peut aussi le faire par les numéros, ici on lui demande
# de ne conserver que la colonne 1 et la colonne 2
data2<-tableau[,c(1,2)]

Les crochets servent à appeler des éléments d’un dataframe (à gauche de


la virgule on met les lignes et à droite les colonnes)
importation/exportation
les fonctions write et read :
Pour exporter un tableau, on peut utiliser les fonctions :
- write.csv qui exporte avec une virgule comme séparateur
- write.csv2 qui exporte avec un point-virgule comme séparateur
- write.table pour choisir son propre séparateur

write.csv(tableau,"C:/PATH")
write.csv2(tableau,"C:/PATH")
write.table(tableau,"C:/PATH",sep = "\t")
À noter

▶ Le schéma classique d’un chemin d’accès à un fichier pour Windows


commence par “C:/”
▶ Pour les systèmes Unix (Linux et MacOS), ce sera plutôt quelque
chose comme “/home/”
▶ On peut obtenir le chemin manuellement en cherchant dans les
propriétés d’un fichier
▶ le chemin à écrire est sensible à la CASSE donc attention à la
manière dont vous l’écrivez
Par exemple, le message d’erreur typique que l’on rencontre souvent
quand on a pas l’habitude de R :

Figure 5: Erreur de Chemin


À l’inverse, on peut aussi importer des fichier csv avec read.csv et
read.csv2 en veillant bien à ranger l’élément importé dans une variable :

data<-read.csv("C:/PATH",header=TRUE,encoding = "UTF-8")
data<-read.csv2("C:/PATH",header=TRUE,encoding = "UTF-8")

Liste des arguments :


- “data” = le nom de la variable dans laquelle on range le jeu de données
- “read.csv” = la fonction pour lire le fichier
- “C:/PATH” = Chemin dans l’ordinateur où est rangé le jeu de données
- “header=TRUE” = Indique si la première ligne du dataframe
correspond aux noms des variables. Si FALSE alors la première ligne est
traité comme des individus
- “encoding=‘UTF-8’ ” = Indique l’encodage choisit pour reconnaitre les
caractères spéciaux
Les formats spéciaux
Les tableaux de données ne sont pas toujours sous format csv, même si
c’est souvent le plus utilisé :

▶ formats propriétaires comme le format Excel (xls) :

library(xlsx) #Nécessite install.packages("xlsx")


data<-read.xlsx("C:/PATH",header=TRUE,encoding = "UTF-8")

▶ format de base de données :

library(sas7bdat) # Nécessite install.packages("sas7bdat")


data<-read.sas7bdat("C:/PATH",header=TRUE,encoding = "UTF-8")
▶ format txt avec tabulateur comme séparateur

data<-read.table("C:/fichier.txt",sep="\t",
header=TRUE,encoding = "UTF-8")

L’option “sep=” correspond au séparateur de notre fichier


Pour certains jeux de données, garder une virgule comme séparateur peut
créer des erreurs (par exemple si une modalité de texte possède des
virgules), du coup, on peut créer un fichier .txt et choisir le séparateur
que l’on souhaite
Conclusion :
Les possibilités avec R sont très larges, parce qu’il y a des packages pour
tout
Identifier et gérer les erreurs de données
Partie généralement la plus longue, mais indispensable pour une bonne
analyse
Le nettoyage ne se produit pas systématiquement avant l’analyse, bien
souvent il faut faire des allers et retours en fonction des erreurs que l’on
découvre petit à petit
Quand on découvre un jeu de données, il faut se poser plusieurs questions

▶ Quelle(s) colonne(s) contiennent des dates ?


▶ Quel est le format des dates ?
▶ Pour les nombres, le délimiteur des décimales est-il la virgule 3,24 ou
le point 3.24 ?
▶ Les colonnes sont-elles délimitées par le caractère virgule (“,”)
point-virgule (“;”) ou par une tabulation (“’�’) ?
▶ Le fichier contient-il un en-tête ?
R et les données d’entrainement
Comme R est un logiciel principalement tourné vers la statistique, il
existe un certain nombre de packages qui vous permettent d’obtenir des
données d’entrainement
Ça peut être pratique si vous vouler tester des techniques statistiques ou
des méthodes de recodage
Pour la majeure partie de ce cours, nous allons utiliser des données
d’entrainement où des données fictives
Différents types d’erreurs :

erreurs_exemple<-read.csv("data/exemple_erreurs.csv")
print(erreurs_exemple)

Prenom Email Date.de.naissance Pays Taille


Leila [email protected] 23/01/1990 France 1,49 m
Samuel [email protected] 20/09/2001 NA 1,67 m
Radia [email protected] 12 sept. 1984 Côte d’ivoire 153 cm
Marc [email protected], [email protected] 10/02/1978 France 1,65 m
Heri [email protected] 05/03/2008 Madagascar 1,34 m
Hanna [email protected] 01/01/1970 24 3,45 m
Samuel [email protected] NA Bénin 1,45 m
▶ Valeurs manquantes (le cas des NA)
▶ Erreurs lexicales (une réponse qui ne correspond pas à la question)
▶ Erreurs d’irrégularité (une valeur juste dans une unité différente)
▶ Erreur de formatage (formats de dates différents)
▶ Doublons (Des individus en double)
▶ “Valeurs singulière” (2 adresses mail au lieu d’une)
▶ Outlier/valeur atypique/valeur aberrante (valeurs qui sort du lot)
Il n’y a pas de règles systématiques, le nettoyage dépend du jeu de
donnée et de vos hypothèses
1. Ne rien faire
2. Oublier variable
3. Oublier individu
4. Imputation
La gestion des dates :
Toujours très compliqué car il y a plein de formats, de fuseaux horaires,
etc
Parfois on rencontre les Timestamp (ex : 1568592000)
Une formule qui permet la conversion des Timestamps :

as.Date(as.POSIXct(1568592000, origin="1970-01-01"))

## [1] "2019-09-16"
Lorsque vous avez identifié une colonne qui possède les dates

print(erreurs_exemple$Date.de.naissance)

## [1] 23/01/1990 20/09/2001 12 sept. 1984 10/02/1978 05/03/2


## [6] 01/01/1970 <NA>
## 6 Levels: 01/01/1970 05/03/2008 10/02/1978 12 sept. 1984 ... 23/0

Vous pouvez la formater avec :


erreurs_exemple$newdate <- strptime(as.character(erreurs_exemple$Date.de.naissance), "%d/%m/%Y")

erreurs_exemple$newdate <-
strptime(as.character(erreurs_exemple$Date.de.naissance),
“%d/%m/%Y”)
La valeur que l’on met entre guillemet à la fin correspond au format dans
laquelle la date est écrite, il faut le respecter

▶ %d = jours
▶ %m = mois
▶ %Y = années
▶ %H = heures
▶ %M = minutes
▶ %S = secondes
Figure 6: Formats de conversion des dates
Par exemple, certaines dates peuvent être écrites comme ça :
09/16/2019T10:00:00Z
Il faut alors mettre entre guillemet “%m/%d/%YT%H:%M:%SZ”
On voit que la variable a été convertie

print(erreurs_exemple$newdate)

## [1] "1990-01-23 CET" "2001-09-20 CEST" NA "1978-02-10


## [5] "2008-03-05 CET" "1970-01-01 CET" NA
Une fois que c’est fait, vous pouvez procéder à des manipulation sur les
dates
On utilise la fonction format pour transformer le format de la variable
newdate

erreurs_exemple$annee<-(format(erreurs_exemple$newdate,
format = "%Y"))
erreurs_exemple$mois<-(format(erreurs_exemple$newdate,
format = "%B"))
erreurs_exemple$jour<-(format(erreurs_exemple$newdate,
format = "%d"))
# Ou l'écrire au format que vous voulez
erreurs_exemple$date_complete<-(format(erreurs_exemple$newdate,
format = "%d-%m-%Y"))
print(erreurs_exemple[,c("annee","mois","jour","date_complete")])

Les nouvelles colonnes ont été créées

annee mois jour date_complete


1990 janvier 23 23-01-1990
2001 septembre 20 20-09-2001
NA NA NA NA
1978 février 10 10-02-1978
2008 mars 05 05-03-2008
1970 janvier 01 01-01-1970
NA NA NA NA
En revanche si vous avez différents format au sein même de votre dataset,
c’est plus compliqué
Il faut alors traiter les cas à la main, ou les supprimer
La gestion des Outlier
Valeur aberrante : on est sûr qu’elle est fausse
Valeur atypique : elle sort du lot, c’est un cas extrême mais possible
Il faut être capable de faire la différence, cela dépend du dataset
Une valeur aberrante doit souvent être supprimée, car elle fausse l’analyse
Exemple, dans notre jeu de donnée, Hanna a une taille de 3,45 mètres :

erreurs_exemple$Taille[which(erreurs_exemple$Prenom=="Hanna")]<-NA
print(erreurs_exemple[,c("Prenom","Taille")])

## Prenom Taille
## 1 Leila 1,49 m
## 2 Samuel 1,67 m
## 3 Radia 153 cm
## 4 Marc 1,65 m
## 5 Heri 1,34 m
## 6 Hanna <NA>
## 7 Samuel 1,45 m
Pour la valeur 153, il est difficile d’automatiser le nettoyage, il vaut
mieux donc la réécrire à la main

print(erreurs_exemple$Taille)

## [1] 1,49 m 1,67 m 153 cm 1,65 m 1,34 m <NA> 1,45 m


## Levels: 1,34 m 1,45 m 1,49 m 153 cm 1,65 m 1,67 m 3,45 m

# on converti en type character


erreurs_exemple$Taille<-as.character(erreurs_exemple$Taille)
# On réécrit la bonne valeur
erreurs_exemple$Taille[which(erreurs_exemple$Prenom=="Radia")]<-"1,53 m"
print(erreurs_exemple[,c("Prenom","Taille")])

## Prenom Taille
## 1 Leila 1,49 m
## 2 Samuel 1,67 m
## 3 Radia 1,53 m
## 4 Marc 1,65 m
## 5 Heri 1,34 m
## 6 Hanna <NA>
## 7 Samuel 1,45 m
Gestion des doublons
Pour les supprimer, il faut une valeur qui ne peut pas être la même pour
deux personnes différentes (dans l’idéal, un identifiant, ici, l’email fera
l’affaire)
Plusieurs solutions si il y en a, soit on supprime l’une des deux, soit on les
mélange
La fonction duplicated sert à identifier les doublons
On la combine avec la fonction which qui permet de mettre une
condition sur les valeurs à utiliser

nrow(erreurs_exemple[which(duplicated(erreurs_exemple$Email)),])

## [1] 1

sans_doublons<-erreurs_exemple[-which(duplicated(erreurs_exemple$Email)),]

dim(sans_doublons)

## [1] 6 10
Sauf que ici c’est plus compliqué car sur chacune des lignes on a des
informations
On complète à la main

# On choisi donc quelle valeur pour la taille on souhaite garder,


# Ici, nous décidons de faire la moyenne
sans_doublons$Taille[which(sans_doublons$Prenom=="Samuel")]<-"1,56 m"
sans_doublons$Pays[which(sans_doublons$Prenom=="Samuel")]<-"Bénin"
dim(sans_doublons)

## [1] 6 10

print(sans_doublons[,c("Prenom","Date.de.naissance","Pays")])

Prenom Email Date.de.naissance Pays Taille newdate annee mois jour date_complete
Leila [email protected] 23/01/1990 France 1,49 m 1990-01-23 1990 janvier 23 23-01-1990
Samuel [email protected] 20/09/2001 Bénin 1,56 m 2001-09-20 2001 septembre 20 20-09-2001
Radia [email protected] 12 sept. 1984 Côte d’ivoire 1,53 m NA NA NA NA NA
Marc [email protected], [email protected] 10/02/1978 France 1,65 m 1978-02-10 1978 février 10 10-02-1978
Heri [email protected] 05/03/2008 Madagascar 1,34 m 2008-03-05 2008 mars 05 05-03-2008
Hanna [email protected] 01/01/1970 24 NA 1970-01-01 1970 janvier 01 01-01-1970
Traiter des données sociales
Un exemple avec un jeu de données accessible via le package questionr :
- Étude “histoire de vie” datant de 2003
- Enquête réalisée par l’INSEE
- Porte sur la construction des identités des français
Le cas que nous étudions :

▶ Enquête nationale menée périodiquement


▶ Étude du cas de 2003
▶ Beaucoup de données qualitatives
-> niveau d’étude
-> qualification
-> religion ou non
-> satisfaction au travail
-> pratiques divertissement
▶ Quelques données quantitatives
-> âge
-> nombre de frères et soeur
-> nombre d’heures passées devant la télé
Plusieurs fonctions pour manipuler les dataframes :
subset : extraire un morceau de dataset

library(questionr)
data(hdv2003)
d <- hdv2003
# première méthode en utilisant subset()
extrait_femme<-subset(d,sexe=="Femme")

head(extrait_femme)

id age sexe nivetud poids occup qualif freres.soeurs clso relig trav.imp trav.satisf hard.rock lecture.bd peche.chasse cuisine bricol cinema sport heures.tv
1 1 28 Femme Enseignement superieur y compris technique superieur 2634.398 Exerce une profession Employe 8 Oui Ni croyance ni appartenance Peu important Insatisfaction Non Non Non Oui Non Non Non 0.0
2 2 23 Femme NA 9738.396 Etudiant, eleve NA 2 Oui Ni croyance ni appartenance NA NA Non Non Non Non Non Oui Oui 1.0
5 5 71 Femme Derniere annee d’etudes primaires 4329.094 Retraite Employe 0 Oui Pratiquant regulier NA NA Non Non Non Non Non Non Non 3.0
6 6 35 Femme Enseignement technique ou professionnel court 8674.699 Exerce une profession Employe 5 Non Ni croyance ni appartenance Le plus important Equilibre Non Non Non Non Non Oui Oui 2.0
7 7 60 Femme Derniere annee d’etudes primaires 6165.803 Au foyer Ouvrier qualifie 1 Oui Appartenance sans pratique NA NA Non Non Oui Oui Non Non Non 2.9
9 9 20 Femme NA 7808.872 Etudiant, eleve NA 4 Oui Appartenance sans pratique NA NA Non Non Non Non Non Oui Non 2.0
extrait_homme<-subset(d,sexe=="Homme")

head(extrait_homme)

id age sexe nivetud poids occup qualif freres.soeurs clso relig trav.imp trav.satisf hard.rock lecture.bd peche.chasse cuisine bricol cinema sport heures.tv
3 3 59 Homme Derniere annee d’etudes primaires 3994.102 Exerce une profession Technicien 2 Non Ni croyance ni appartenance Aussi important que le reste Equilibre Non Non Non Non Non Non Oui 0
4 4 34 Homme Enseignement superieur y compris technique superieur 5731.662 Exerce une profession Technicien 1 Non Appartenance sans pratique Moins important que le reste Satisfaction Non Non Non Oui Oui Oui Oui 2
8 8 47 Homme Enseignement technique ou professionnel court 12891.641 Exerce une profession Ouvrier qualifie 5 Non Ni croyance ni appartenance Peu important Insatisfaction Non Non Oui Oui Oui Non Non 1
10 10 28 Homme Enseignement technique ou professionnel long 2277.160 Exerce une profession Autre 2 Non Pratiquant occasionnel Moins important que le reste Satisfaction Non Non Non Non Non Oui Oui 2
12 12 47 Homme 2eme cycle 6697.868 Exerce une profession Ouvrier qualifie 4 Oui Appartenance sans pratique Moins important que le reste Satisfaction Non Non Non Non Oui Non Oui 0
17 17 62 Homme Enseignement superieur y compris technique superieur 4836.139 Retraite Cadre 4 Non Pratiquant regulier NA NA Non Non Non Oui Oui Oui Oui 1
# deuxième méthode en indexant directement
# La deuxième méthode permet de sélectionner aussi
# certaines colonnes
extrait_h<-d[which(d$sexe=="Homme"),c("age","sexe","nivetud")]

head(extrait_h)

age sexe nivetud


3 59 Homme Derniere annee d’etudes primaires
4 34 Homme Enseignement superieur y compris technique superieur
8 47 Homme Enseignement technique ou professionnel court
10 28 Homme Enseignement technique ou professionnel long
12 47 Homme 2eme cycle
17 62 Homme Enseignement superieur y compris technique superieur
rbind : ajouter des lignes
Cette instruction aura donc pour effet d’ajouter les lignes d’un dataset X
à un dataset Y Il est nécessaire que les deux datasets aient le même
nombre de colonnes et les mêmes noms de colonnes :

dim(extrait_femme)

## [1] 1101 20

dim(extrait_homme)

## [1] 899 20

dataset_bind<-rbind(extrait_femme,extrait_homme)
dim(dataset_bind)

## [1] 2000 20
cbind : ajouter des colonnes
Dans le cas ou nous avons 2 jeux de données avec des individus
correspondant, on peut les lier comme cbind
split : permet de séparer le jeu de données en fonction d’une catégorie
# Dans la variable "séparation", je sépare les âges
# en fonction du sexe des individus
separation<-split(d$age,d$sexe)
head(separation)

## $Homme
## [1] 59 34 47 28 47 62 70 30 74 35 35 30 54 29 49 59 53 56 35 40 77 6
## [24] 26 23 71 39 56 54 40 42 30 48 67 79 31 72 59 63 77 48 62 43 32
## [47] 33 47 25 52 71 56 66 70 54 73 68 55 71 36 81 41 58 37 49 55 51
## [70] 78 31 50 46 69 73 32 18 62 28 51 48 71 69 79 57 59 54 50 48 49
## [93] 54 64 38 19 66 48 18 72 26 77 29 55 92 37 66 53 70 72 72 39 43
## [116] 72 47 21 57 34 74 49 36 38 54 63 26 57 66 40 56 30 32 49 75 59
## [139] 73 50 25 36 72 56 44 74 20 73 52 57 23 45 20 19 50 52 32 20 52
## [162] 30 69 29 36 35 53 18 22 71 29 60 35 68 27 42 19 46 42 23 64 58
## [185] 73 57 57 19 24 44 35 72 54 34 64 32 19 28 64 57 56 47 38 38 39
## [208] 33 52 52 20 34 40 42 56 63 77 44 30 60 60 72 18 51 37 46 58 61
## [231] 88 45 58 39 56 53 38 59 69 31 61 41 43 53 41 77 60 35 39 68 46
## [254] 57 63 59 82 67 48 54 55 36 66 50 47 58 28 33 63 52 32 32 45 84
## [277] 38 48 66 50 30 49 74 70 63 61 53 42 31 18 51 37 39 65 78 69 30
## [300] 75 59 70 27 82 64 43 77 35 67 71 36 44 44 64 51 61 64 39 55 65
stack empiler des données en fonction d’une catégorie

dim(PlantGrowth)

## [1] 30 2

colnames(PlantGrowth)

## [1] "weight" "group"

levels(PlantGrowth$group)

## [1] "ctrl" "trt1" "trt2"


View(PlantGrowth)

weight group weight group


1 4.17 ctrl 16 3.83 trt1
2 5.58 ctrl 17 6.03 trt1
3 5.18 ctrl 18 4.89 trt1
4 6.11 ctrl 19 4.32 trt1
5 4.50 ctrl 20 4.69 trt1
6 4.61 ctrl 21 6.31 trt2
7 5.17 ctrl 22 5.12 trt2
8 4.53 ctrl 23 5.54 trt2
9 5.33 ctrl 24 5.50 trt2
10 5.14 ctrl 25 5.37 trt2
11 4.81 trt1 26 5.29 trt2
12 4.17 trt1 27 4.92 trt2
13 4.41 trt1 28 6.15 trt2
14 3.59 trt1 29 5.80 trt2
15 5.87 trt1 30 5.26 trt2
La commande unstack permet de transformer le jeu de donnée afin
d’obtenir une colonne par catégorie

unstack_df<-unstack(PlantGrowth)

View(unstack_df)

ctrl trt1 trt2


4.17 4.81 6.31
5.58 4.17 5.12
5.18 4.41 5.54
6.11 3.59 5.50
4.50 5.87 5.37
4.61 3.83 5.29
5.17 6.03 4.92
4.53 4.89 6.15
5.33 4.32 5.80
5.14 4.69 5.26

On peut faire la procédure inverse avec la fonction stack


Pour résumer :

▶ duplicated : identifier les doublons


▶ which : pour sélectionner une partie des données (à mettre entre
crochets)
▶ subset : isoler une partie des données
▶ rbind : ajouter des lignes qui ont les mêmes colonnes
▶ cbind : ajouter des colonnes qui ont les mêmes lignes
▶ split : séparer les données en fonction d’une variable spécifique
▶ stack/unstack : regrouper/dégrouper des données en fonction d’une
variable
lire un fichier
read.csv(…)
compter lignes/colonnes
nrow(…)
ncol(…)
dim(…)
afficher les colonnes
colnames(…)
vérifier si il y a des doublons
duplicated(…)
mettre une condition
which(…)
Indique que la variable suivante au format caratère correspond à
une date
strptime(as.character(…),“…”)
formater une valeur
format(…,format = “…”)
Extraire un jeu de donnée
subset(…)
réunir deux jeux de données par les lignes
rbind(…)
ACTIVITE 1 : charger et découvrir un jeu de données
▶ charger le jeu de données corpustweet.csv avec la bonne fonction et
identifier le nombre de colonnes, le nombre de lignes
▶ Ne conserver que les colonnes :
(“main”,“source_created”,“sentiment”,“author_gender”,“hashcode”,
“source_verified”)
▶ Compter doublons et les supprimer à partir de la colonne Hashcode
▶ Créer une colonne “annee” qui possède uniquement l’année à partir
de la colonne “source_created”
▶ Créer une colonne qui possède le jour et le mois écrit en toutes
lettres, avec un espace entre chaque (ex : 16 septembre 2019)
▶ Extraire un sous-ensemble qui ne regroupe que les comptes certifiés
(source_verified)
▶ Extraire un sous ensemble des comptes non-certifiés dont le
sentiment est POSITIVE
▶ Réunir ces deux sous ensemble dans un nouveau jeu de donnée
appelé “final”
▶ Afficher de la ligne 25 à la ligne 30 de la colonne “main” de ce jeu
final

Vous aimerez peut-être aussi