1-Introduction R
1-Introduction R
1-Introduction 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 :
▶ 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
▶ 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
## [1] 4
## [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
## [1] TRUE
!(x >= 8) # Est ce que c'est faux de dire que x est sup ou égal
## [1] TRUE
## [1] FALSE
Fonctions sur les chaînes de caractères :
## [1] 12
str(mot)
## chr "data-science"
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)
is(sexe)
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
## [1] "character"
mode(age)
## [1] "numeric"
# les crochets servent à appeler une modalité dans
# une variable
print(age[5])
## [1] 24
## [1] 10
Les packages
Open-source permet à chacun de développer des fonctions et de les
partager
install.packages("nom_du_package")
install_url("https://cran.r-project.org/src/contrib/Archive/
nom_du_package/version")
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 :
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
## [1] 4
# et le nombre de colonnes
ncol(donnees)
## [1] 3
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)
colnames(tableau)
colnames(tableau)<-c("Date_naissance","Taille_population",
"Sexe_population")
write.csv(tableau,"C:/PATH")
write.csv2(tableau,"C:/PATH")
write.table(tableau,"C:/PATH",sep = "\t")
À noter
data<-read.csv("C:/PATH",header=TRUE,encoding = "UTF-8")
data<-read.csv2("C:/PATH",header=TRUE,encoding = "UTF-8")
data<-read.table("C:/fichier.txt",sep="\t",
header=TRUE,encoding = "UTF-8")
erreurs_exemple<-read.csv("data/exemple_erreurs.csv")
print(erreurs_exemple)
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)
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)
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")])
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)
## 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
## [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 :
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)
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)
levels(PlantGrowth$group)
unstack_df<-unstack(PlantGrowth)
View(unstack_df)