UMR 7619 Sisyphe Avril 2012 Alexandre Pryet Le langage une introduction pragmatique Prise en main, objets et commandes de base
Introduction au langage et à la syntaxe Arithmétique : + - * / ^ (puissance) Assignation : a <- 3 (ou a = 3, déconseillé) Logique : > = == (égal) != (différent) & (et) | (ou) ! (non) xor (ou exclusif) Conventions et opérations de base
Conventions pour les noms Conventions pour les noms de variables et fonctions : Jamais d’accents, ni d’espaces pas de caractères spéciaux : mais «. » si variables : minuscules, séparation par des «. » ex : volume_max, height.v1, pressure fonctions : majuscules ex : MyPlot(),AnalyseData() Les chaînes de caractères sont doivent toujours être entourées de " " Sinon, R cherche la variable… Exemple : a<- "string" ≠ a <- string
Les objets de base Objet = structure de donnée : Les données contenues dans les objets peuvent être de différents types : logical, integer, double, character Rq : souvent, la gestion des types est automatique sous R. ObjetDescription vector série de donnée factor série de données avec valeurs discretes list association d’objets divers array matrice de donnée de même type data.frame matrice de donnée de différent types connaître la structure de l’objet : str(nom_objet) connaître le type de donnée : typeof(nom_objet)
Les commandes de base FonctionDescription c(1,2,3) « concaténation », création un vecteur range() connnaître le min. et le max. d’un vecteur mean() moyenne arithmétique d’un vecteur plot(x,y) faire un graphique de x et y ?plot avoir de l’aide sur la fonction plot rm() supprimer une variable ls() faire la liste des objets dans l’espace de travail quit() quitter le logiciel Une commande est une fonction appelée avec des paramètres : nom_fonction ( paramètre1, paramètre2, …)
Calculatrice R : vos premiers pas avec R ! # calculs de base (ceci est un commentaire) a <- 5^(1/3) + sqrt(2)*2 b <- sin(pi/3)/2 # quelques tests a<-5^(1/2) ; b<-sqrt(5) a == b # visualiser, supprimer les données de l’espace de travail ls() rm(list=ls()) ls() # Ctrl-l pour nettoyer nettoyer la console # seq (start,end,step) génère une séquence a<-seq(1,4,0.1) b<-sqrt(a) # faire le graphique plot(a,b)
A l’aide !!! A tout moment, vous pouvez demander de l’aide depuis R: ?nom_fonction Chercher les fonctions par mot-clé dans l’aide R: ??mot_clé Si cela ne porte pas ces fruits, recherche R mon problème Nombreux forums d’utilisateurs Si pas de résultats probants, essayer en anglais
Générer des séquences (très utile ! ) Répliquer une valeur rep(val,n) : réplique val n fois > rep(2.5,5) [1] Séquence simple avec incrément de 1 min:max > 1:10 [1] Séquence de min à max avec incrément de step seq(min,max,step) > seq(2,10,2) [1] Séquence de min à max avec n éléments seq(from,to,length.out=l) > seq(2,10,length.out=6) [1]
Les tableau de données : « data frame » Un tableau de données est une structure contenant un ensemble de vecteurs de différents types, avec le même nombre d’éléments. Chaque colonne est caractériséè par un nom et un type de donnée > str(clim) 'data.frame':14682 obs. of 8 variables: $ RECORD : int $ SolRad : num … $ WindDir : num $ Temp : num $ RH : num $ Rain : num
Les tableau de données : importer, et décrire Importer les données read.csv(file.choose())-> clim Connaître la dimension dim(clim) dim(clim)[1] # nombre de ligne dim(clim)[2] # nombre de colonnes Décrire la structure str(clim) Editer et visualiser tableau de données (pas trop gros) edit(clim)
Les tableau de données : sélection de lignes et colonnes (1) clim[ 1:10, c(1,4,5)] Sélection des dix premières lignesSélection des colonnes 1, 4, et 5 Forme générale, sélection de multiples lignes et colonnes Note : Si un paramètre est laissé vide dans les [ -], alors toutes les lignes (resp. colonnes) sont considérées. Exemple : clim[, c(2,3) ] ou clim[ 1:10, ]
Les tableau de données : sélection de lignes et colonnes (2) Sélection de plusieurs colonnes : par numéro : clim[,c(1,2,5)]->clim_ss par nom : clim[, c("Temp","RH")]->clim_ss Note : Dans ce cas, la «, » n’est pas obligatoire. Lorsqu’il y a un seul paramètre entre les [], il s’agit de la sélection de colonne. Sélection d’une colonne, par son nom clim$Temp ou clim[,"Temp"]
Les tableau de données : sélection de lignes et colonnes (3) Sélections complexes : Définition d’un index à partir d’une condition: idx <- clim$Temp < 20 Sélection des lignes satisfaisant la condition: clim[idx, c("Temp","Solrad","WindDir")]
Les tableau de données : tri des données Le tri des données est souvent inutile, mais on peut le faire ! Le tri se base sur un index, puis une sélection avec [ ] # création de l’index (ici, la température) idx<-order(clim$Temp) # tri selon l’index clim.ordered<-clim[idx,]
Les tableau de données : modifier la structure Créer une nouvelle colonne : clim$tempK<-clim$temp Supprimer une colonne clim$TempK<-NULL Renommer une colonne names(clim)[9]<-temp.kelvin Joindre les lignes de deux tableaux à la suite rbind(clim1,clim2) Joindre les colonnes deux tableaux avec le même nombre de lignes cbind(clim1,clim2) Joindre des tableaux de données avec une colonne en commun merge(tab1, tab2, by="nom_colonne")
Quelques élements sur la gestion des dates Dans un fichier texte, les dates sont enregistrées en format chaîne de caractères. ex: " :00" ; "17/04/12" ; "17 avril 2012" Pour utiliser les fonctions de gestion de dates de R, il faut convertir les dates dans un format spécial : POSIXct : " :00:00" clim$date<-as.POSIXct(clim$TIMESTAMP) Par exemple, si la date est dans le format "04/17/12 10:23:00 AM" : as.POSIXct( as.character(clim$STRPTIME), format="%m/%d/%y %I:%M:%S %p" ) Si la chaîne de caractère est dans le format standard, tout va bien. Sinon, il faut détailler explicitement le format. Cf. ?strptime
Quelques élements sur la gestion des dates Connaître l’intervalle de temps couvert par un vecteur de date range(clim$date) Générer une séquence de date start.obs<-as.POSIXct(" :00") end.obs<-as.POSIXct(" :00") seq(start.obs,end.obs,3600) Calculer la durée entre deux dates end.obs - start.obs Modifier une date (unité par défaut = secondes ) start.obs <- start.obs
Les tableau de données : exercice 1 Importer le fichier de données clim_data.csv Décrire sa structure, quelles sont les noms et types des colonnes, combien de lignes et de colonnes ? Supprimer les colonnes WindSpeed et WindDir Convertir les dates en format POSIXct Quel est l’intervalle de temps où les données sont disponibles ? Quelle est la moyenne de la température, et la somme des pluies sur cette période ? read.csv(file.choose()) ; str() ; dim() ; names() as.POSIXct() range() ; mean ; Fonctions utiles :
Aggréger les données Comment calculer les moyennes ou sommes journalières, mensuelles ? # Etape indispensable : création d'un index cut(clim$date, "hour")->hours # Option 1 : Agrégation avec la fonction tapply # Avantage : plus souple pour faire somme/moyenne/… clim.h=data.frame( date=as.POSIXct(levels(days)), Temp=as.vector(tapply(clim$Temp,hours,mean)), Rain=as.vector(tapply(clim$Temp,hours,sum)),... ) # Option 2 : avec la fonction aggregate # Avantage : syntaxe plus légère pour les grandes tables clim.d <- aggregate(clim[c(3:7)], list(days),FUN= mean) clim.d[,1]<-as.POSIXct(clim.d[,1]) names(clim.d)[1]<-"date"
Gestion de l’absence de données : NA > # vecteur avec une valeur NA > tension_mV<-c(2.3,2.1,NA,2.5) > > # impossible de calculer la moyenne > mean(tension_mV) [1] NA > > # la fonction is.na() teste la présence de valeur NA > is.na(tension_mV) [1] FALSE FALSE TRUE FALSE > > # la fonction na.omit() retire les valeurs NA > mean(na.omit(tension_mV)) [1] 2.3 Les données expérimentales sont soumises aux aléas de l’instrumentation et de l’expérimentateur…donc les données sont parfois indisponibles ou erronnées. R permet une gestion optimale de ce type de problème, avec les types de données NA, pour « Not Available ».
Gestion de l’absence de données : NA # Option 1 : Agrégation avec la fonction tapply clim.d=data.frame( date=as.POSIXct(levels(days)), Temp=as.vector(tapply(clim$Temp,days,mean,na.rm=TRUE)), Rain=as.vector(tapply(clim$Temp,days,sum,na.rm=TRUE)),... ) # Option 2 : avec la fonction aggregate clim.d <- aggregate(clim[c(3:7)], list(days),FUN= mean, na.rm=TRUE) clim.d[,1]<-as.POSIXct(clim.d[,1]) names(clim.d)[1]<-"date" Il est possible d’utiliser tapply et aggregate avec l’option na.rm=TRUE les valeurs aggrégées (moyennes/sommes) peuvent ne plus avoir de sens !
Les tableau de données : exercice 2 Combien de valeurs NA dans les mesures de température ( Temp ) du tableau clim ? Les données du tableau clim sont actuellement à pas de temps de 15 min. Créer un tableau clim.d à pas de temps journalier des variables SolRad, WindSpeed, Temp, Rain. Représenter le graphique de la température journalière moyenne en fonction du temps is.na() ; tapply() ; data.frame() ; plot() Fonctions utiles :
Gestion de l’espace de travail save.image() enregistrer l’espace de travail load() ouvrir un espace de travail Pendant l’utilisation de R, les données sont enregistrées de manière provisoire dans un espace de travail. On peut visualiser le contenu de ce fichier avec ls () Cet espace de travail peut aussi être enregistré de manière permanente, puis être ré-ouvert : Exemple : setwd("c:\ma_super_these\data\") save.image("cours1.RData")
Exercice 3 : Assemblage des tables de données Importer les fichiers clim_extract.csv et clim_data_wind Assembler les fichier avec la fonction cbind, puis merge Importer les fichiers clim_data_april_july_2011.csv et clim_data_august_2011.csv Ajouter les valeurs du second fichier au premier avec rbind…