Upload
asce-bo
View
102
Download
0
Embed Size (px)
Citation preview
UMR 7619 Sisyphe17-19 Avril 2012Alexandre 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’espacespas de caractères spéciaux : %*;/&@#?ù$€°ç§ mais « . » si
• variables : minuscules, séparation par des « . »ex : volume_max, height.v1, pressure
• fonctions : majusculesex : 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, characterRq : souvent, la gestion des types est automatique sous R.
Objet Description
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
Fonction Description
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)*2b <- sin(pi/3)/2
# quelques testsa<-5^(1/2) ; b<-sqrt(5)a == b
# visualiser, supprimer les données de l’espace de travaills()rm(list=ls())ls()
# Ctrl-l pour nettoyer nettoyer la console
# seq (start,end,step) génère une séquencea<-seq(1,4,0.1)b<-sqrt(a)
# faire le graphiqueplot(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] 2.5 2.5 2.5 2.5 2.5
Séquence simple avec incrément de 1min:max> 1:10 [1] 1 2 3 4 5 6 7 8 9 10 Séquence de min à max avec incrément de stepseq(min,max,step)> seq(2,10,2)[1] 2 4 6 8 10
Séquence de min à max avec n élémentsseq(from,to,length.out=l)> seq(2,10,length.out=6)[1] 2.0 3.6 5.2 6.8 8.4 10.0
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 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 ... $ SolRad : num 0 0 0 0 0 0 0 0 0 0 … $ WindDir : num 9.33 1.72 8.56 30.12 344.8 ... $ Temp : num 21.7 21.7 21.6 21.4 21.5 ... $ RH : num 100 100 100 100 100 100 100 100 99.9 100 ... $ Rain : num 0 0 0 0 0 0 0 0 0 0 ...
Les tableau de données : importer, et décrire
Importer les donnéesread.csv(file.choose())-> clim
Connaître la dimensiondim(clim)
dim(clim)[1] # nombre de ligne
dim(clim)[2] # nombre de colonnes
Décrire la structurestr(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 lignes Sé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_sspar 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’indexclim.ordered<-clim[idx,]
Les tableau de données : modifier la structure
Créer une nouvelle colonne : clim$tempK<-clim$temp+273.15
Supprimer une colonneclim$TempK<-NULL
Renommer une colonnenames(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 lignescbind(clim1,clim2)
Joindre des tableaux de données avec une colonne en communmerge(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: "2012-04-17 11: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 : "2012-04-17 11: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 datestart.obs<-as.POSIXct("2012-04-17 12:00")end.obs<-as.POSIXct("2012-04-19 12: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 + 3600
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 indexcut(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 tapplyclim.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…