Nous avons vu dans le dernier cours les data frames, nous l'avions créée manuellement. Toutefois, nous allons souvent importer des données en pratique sous plusieurs formats. Ces fichiers que nous allons importer seront souvent dans des fichiers .csv
(Comma-separated values). Ces fichiers sont très populaires et ils sont générés par Excel .
options(repr.matrix.max.cols=8, repr.matrix.max.rows=8) #seulement pour afficher 8 lignes et 8 colonnes
On peut lire les fichiers .csv
localement en précisant le chemin exacte menant vers du fichier en question.
# test_csv <-read.csv("https://raw.githubusercontent.com/nmeraihi/data/master/exemple_1.csv")
test_csv <-read.csv("exemple_1.csv")
test_csv
Ou directement à partir du web:
test_csv <-read.csv("https://raw.githubusercontent.com/nmeraihi/data/master/exemple_1.csv")
test_csv
Lorsque nous écrivons read.csv
, R traite importe ce fichier sous format data frame
, il nous retourne les noms de colonnes, les lignes ainsi que la classe du df
attributes(test_csv)
Dans la méthode read.csv
, il existe un argument optionnel _header_
qui est par défaut header=T
. Cet argument spécifie si les données que nous voulons importer possèdent des noms de colonne (header=TRUE
~ header=T
.) ou pas (header=FALSE
~ header=F
.). Regardons ce que ça donnerait si nous changeons la valeur header=F
;
test_csv <-read.csv("exemple_1.csv", header = F)
test_csv
On remarque que R crée des noms de colonnes appelés V1, V2...etc.
exemple <-read.csv("exemple_1.csv", header = T)
exemple
Regardons la classe de la variable "Segment";
class(exemple$Segment)
Surprise!. En effet, il existe une autre option dans la méthode read.csv
qui permet de traiter les catégories en type caractère.
exemple <-read.csv("exemple_1.csv", header = T, stringsAsFactors=F)
exemple
Maintenant, regardons la classe de la variable "Segment"
class(exemple$Segment)
exemple <-read.csv("exemple_1.csv", header = T, stringsAsFactors=F)[,2:3]
exemple
exemple <-read.csv("exemple_1.csv", header = T, stringsAsFactors=F)[,c(1,3)]
exemple
read.table("exemple_1.txt", header=T)
On voit bien que les colonnes n'ont pas été séparées comme il faut. Nous devons spécifier les caractères qui séparent ces variables.
read.table("exemple_1.txt", header=T, sep = ",")
Il est possible d'utiliser la bibliothèque RCurl
qui offre plus d'options. Dans ce cours, nous nous limitons à l'utilisation de read.csv
. Pour plus d'informations sur cette bibliothèque, vous pouvez lire plus de détails la documentation de ce package.
install.packages("RCurl")
library(RCurl)
x <- getURL("https://raw.githubusercontent.com/aronlindberg/latent_growth_classes/master/LGC_data.csv")
y <- read.csv(text = x)
head(y)
read.table("https://raw.githubusercontent.com/nmeraihi/data/master/exemple_2_2.txt", header=T, sep = ",")
On peut appliquer un test booléen afin de vérifier l'existance des valeurs manquantes comme suit;
df<-read.table("https://raw.githubusercontent.com/nmeraihi/data/master/exemple_2_2.txt", header=T, sep = ",")
is.na(df)
Cette fonction nous retourne un data frame du même format que le df test. Le résultat obtrenu sont valeurs TRUE
sur les éléments manquants, et des FALSE
sur les valeurs existantes.
On peut faire le test sur une partie précise du df;
is.na(df[1,1])
is.na(df[2,1])
Mais pourquoi préocupe t-on tant des valeurs manquantes? Eh bien, les valeurs manquantes sont le cauchemar #1 de toute personne qui manipule les données, que ce soit en entreprise ou pour un utilisation personnelle.
Essayons de faire un calcul de la moyenne du nombre de km;
mean(df$km)
R
nous retourne NA
même si nous avons une seule observation qui est manquante
On peut régler ce problème avec la fonction na.omit()
mean(na.omit(df$km))
Le calcul de la moyenne a été fait sur les variables;
na.omit(df$km)
La fonction mean
possède un argument optionnel appelé na.rm =
qui ignore les valeurs manquantes;
mean(df$km,na.rm = T)
Lorsque nous utilisons la fonction ns.omit
, le df se réduit à un df qui ne possède aucune ligne contenant les valeurs manquantes;
na.omit(df)
On peut aller modifier directement la valeur de cet élément
df[2,1]<-4.84
df[4,4]<-125
df
df<-read.table("https://raw.githubusercontent.com/nmeraihi/data/master/exemple_2_2.txt", header=T, sep = ",")
df
Nous remplaçons alors les NA
par 0
ou par toute autre valeur comme suit;
df[is.na(df)] <- 0
df