# Utilisez le symbole '#' afin de commenter votre script. # Les commentaires sont ignorés lorsque le script tourne. Vous pouvez ainsi laisser des notes pour vous-même ou vos collaborateurs. # Un script correctement commenté et annoté est la première étape vers la reproductibilité scientifique. # Il est recommendé d'utiliser des commentaires afin d'ajouter un en-tête au début de votre script # comprenant les informations essentielles : nom du projet, auteur, date et version de R. ## Atelier R du CSBQ ## ## Atelier 2 - Charger et manipuler les données ## Auteur : Centre de la Science de la Biodiversité du Québec ## Date : automne 2014 ## R version 2.15.0 # Nom de l'en-tête # Utilisez quatre # à la suite afin de créer l'en-tête d'une section. Cela vous aidera à organiser votre script. # Par exemple: #### Faire le ménage #### # remarquez la petite flèche à coté du numéro de ligne de l'en-tête créée. # Si vous cliquez dessus vous cacherez cette partie du script. # C'est une bonne habitude de nettoyer la mémoire de R à début d'un script. # Cela évite certaines erreurs, comme par exemple d'utiliser des données qui sont encore sur votre espace de travail. # la commande rm(list=ls()) se charge d'effacer la mémoire de R. rm(list=ls()) # Nettoie l'espace de travail ?rm ?ls # Souvenez-vous : R attend une commande lorsque vous voyez le chevron '>'. # Si ce chevron n'apparait pas, cela indique qu'une commande incomplète a été tapée. Appuyez sur "Echap" pour sortir et que R soit prêt pour une nouvelle commande. A<-"Test" # Ajouter des données dans l'espace de travail afin de voir comment rm(list=ls()) fonctionne A <- "Test" # Remarquez qu'un espace peut être ajouté avant ou après <- A = "Test" # <- ou = peuvent être utilisés indifféremment A rm(list=ls()) A # Souvenez-vous que R est sensible aux majuscules. i.e. "A" est un object différent de "a" a<-10 A<-5 a A rm(list=ls()) # Nettoie l'espace de travail à nouveau #### Charger les données #### getwd() # Cette commande montre le chemin du répertoire de travail actuel # Vous pouvez entrer ce chemin vous-même à l'aide de la fonction setwd(). setwd('/Users/vincentfugere/Desktop/QCBS_R_Workshop2') # exemple sur Mac setwd('C:/Users/Johanna/Documents/PhD/R_Workshop2') # Exemple sur Windows # ** Attention : ce chemin ne marchera PAS sur votre ordinateur! # Vous pouvez aussi utiliser choose.dir() qui fera apparaître une fenêtre afin de naviguer jusqu'à la direction souhaitée. setwd(choose.dir()) # Cela peut ne pas marcher sur Mac CO2<-read.csv("CO2_good.csv") # Création d'un objet nommé CO2 à partir du chargement des données depuis le fichier "CO2_good.csv" CO2<-read.csv(file.choose()) # Autrement, vous pouvez choisir le fichier de manière intéractive ?read.csv # Utilisez le point d'interrogation pour faire apparaître la page d'aide de la commande en question CO2<-read.csv("CO2_good.csv", header = TRUE) # Ajouter header = TRUE indique à R que la première ligne de la feuille contient le nom des colonnes et non des données # NOTE: avec un OS ou un tableur en français read.csv ne marche pas, utilisez read.csv2 à la place #### Examiner les données #### CO2 # Afficher l'ensemble du tableau de données head(CO2) # Afficher les premières lignes du tableau de données names(CO2) # Noms des colonnes du tableau de données attributes(CO2) # Caractéristiques du tableau de données ncol(CO2) # Nombre de colonnes dans le tableau de données nrow(CO2) # Nombre de lignes dans le tableau de données summary(CO2) # Résumé statistique du tableau de données str(CO2) # Structure du tableau de données # Utile afin de vérifier le mode de chaque colonne, i.e. afin de vérifier que les facteurs sont bien des facteurs ou que les données sont reconnues comme des nombres entiers ou numérique plot(CO2) # Représentation graphique de toutes les combinaisons entre les variables du tableau de données # Les variables réponses suivent-elles une distribution normale ? hist(CO2$uptake) # Souvenez-vous que le $ est utilisé pour se référer à une colonne spécifique du tableau de données conc_mean<-mean(CO2$conc) # Calcule la moyenne de la colonne "conc" de l'objet "CO2". Le résultat est sauvegardé dans "conc_mean" conc_mean # Affiche l'objet "conc_mean" # La concentration moyenne est 435. conc_sd<-sd(CO2$conc) # Calcule l'écart type de la colonne "conc" et sauvegarde le résultat dans "conc_sd" conc_sd # L'écart type de la concentration est 295.92. # Vous souhaitez calculer la moyenne ou l'écart type de toutes vos colonnes en même temps ? Essayez avec apply() ?apply apply(CO2[,4:5], MARGIN = 2, FUN = mean) # Calcule la moyenne des deux colonnes du tableau de données qui contiennent des données ## Sauvegarder votre espace de travail ## save.image(file="CO2_project_Data.RData") # Sauvegarde votre espace de travail rm(list=ls()) # Nettoie votre espace de travail load("CO2_project_Data.RData") # Charge à nouveau tout ce qui figurait dans votre espace de travail head(CO2) # Ca semble bon :) write.csv(CO2,file="CO2_new.csv") # Sauvegarde l'objet CO2 dans un fichier nommé "CO2_new.csv" #### Défi: réparer le jeu de données déffectueux #### # Chargez le fichier cvs déffectueux dans R et trouvez les problèmes CO2<-read.csv("CO2_broken.csv") # Ecrase l'ancien objet CO2 et le remplace par les données déffecteuses "CO2_broken.csv" ## Quels sont les problèmes? indice: il y en a 4! ## Quelques fonctions utiles # Note : pour ces fonctions vous devez rentrer le nom des objets à l'intérieur des parenthèses (i.e. head(CO2)). # Souvenez vous aussi qu'il est possible d'utiliser "?" afin d'obtenir de l'aide sur une fonction (i.e. ?str). ?read.csv head() str() class() unique() levels() which() droplevels() #### Les réponses sont ci-dessous -- Ne trichez pas ! ### # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ## Erreurs contenues dans le jeu de données CO2 ## ## Problème #1 : les données semblent être assemblées dans une seule colonne. # Importez à nouveau le jeu de données, mais spécifiez le type de séparation entre les observations. # L'argument "sep" de la fonction read.csv() informe R sur la nature du séparateur utilisé entre chaque observation au sein d'une même ligne. # Dans notre cas, "," était utilisé par défaut. Il faut spécifier que les observations sont séparées par une tabulation. CO2 <- read.csv("CO2_broken.csv",sep = "") ?read.csv ## Problème #2 : les données ne commencent qu'à la troisième ligne. Ainsi les notes contenues dans les deux premières lignes sont considérées comme l'en-tête de vos données. head(CO2) # La fonction head() permet de facilement voir si les données ont été chargées avec l'en-tête approprié # Pour résoudre ce problème vous pouvez dire à R de ne pas considérer les deux premières lignes grace à l'argument skip. CO2<-read.csv("CO2_broken.csv",sep = "",skip=2) # grace à l'argument skip de la fonction read.csv, R sait maintenant qu'il faut ne pas lire les deux premières lignes head(CO2) # Vous pouvez maintenant vérifier que l'objet CO2 à une en-tête appropriée ## Problème #3 : les variables "conc" and "uptake" sont considérées comme des facteurs et non comme des variables continues car il y a du texte au sein de ces colonnes. str(CO2) # La fonction str() montre que 'conc' and 'uptake' sont identifiés comme des facteurs class(CO2$conc) unique(CO2$conc) # En regardant les valeurs uniques contenus dans la colonne "conc", vous pouvez voir qu'elle contient "cannot_read_notes" unique(CO2$uptake) ?unique CO2 <- read.csv("CO2_broken.csv",sep = "",skip = 2,na.strings = c("NA","na","cannot_read_notes")) # Vous pouvez identifier "cannot_read_notes" comme étant des NA et alors R interprétera la colonne correctement. # NA signifie que l'observation n'est pas disponible ("Not Available"). head(CO2) str(CO2) # Vous pouvez constater que "conc" est maintenant interprétée comme une valeure entière et "uptake" comme une variable numérique ## Problème #4: Il n'y a que deux traitements (chilled and nonchilled) mais à cause de fautes de frappe R considère qu'il y en a quatre. str(CO2) # vous pouvez constater que quatre niveaux sont listés pour "Treatment" levels(CO2$Treatment) unique(CO2$Treatment) # Les 4 traitements sont "nonchilled", "nnchilled", "chilled", et "chiled" # Vous pouvez utiliser la fonction which() pour trouver les lignes contenant l'erreur "nnchilled". which(CO2$Treatment=="nnchilled") # ligne numéro 10 # Vous pouvez maintenant corriger l'erreur : CO2$Treatment[10]="nonchilled" # Vous pouvez aussi le faire en une seule ligne de commande : CO2$Treatment[which(CO2$Treatment=="nnchilled")]="nonchilled" # De même, corrigez l'erreur "chiled" : CO2$Treatment[which(CO2$Treatment=="chiled")]="chilled" # Tous les problèmes sont-ils résolus ? str(CO2) # Structure identifie toujours quatre niveaux dans le facteur "Treatment" unique(CO2$Treatment) # Mais unique indique que seulement deux niveaux sont utilisés CO2<-droplevels(CO2) # Cette commande permet de supprimer les niveaux non utilisés dans toutes les variables de type facteur dans l'objet de type dataframe CO2. str(CO2) # Problèmes résolus !