umr 7619 sisyphe 17-19 avril 2012 alexandre pryet le langage une introduction pragmatique prise en...

24
UMR 7619 Sisyphe 17-19 Avril 2012 Alexandre Pryet Le langage une introduction pragmatique Prise en main , objets et commandes de base

Upload: asce-bo

Post on 05-Apr-2015

102 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: UMR 7619 Sisyphe 17-19 Avril 2012 Alexandre Pryet Le langage une introduction pragmatique Prise en main, objets et commandes de base

UMR 7619 Sisyphe17-19 Avril 2012Alexandre Pryet

Le langage

une introduction pragmatique

Prise en main , objets et commandes de base

Page 2: UMR 7619 Sisyphe 17-19 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

Page 3: UMR 7619 Sisyphe 17-19 Avril 2012 Alexandre Pryet Le langage une introduction pragmatique Prise en main, objets et commandes 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

Page 4: UMR 7619 Sisyphe 17-19 Avril 2012 Alexandre Pryet Le langage une introduction pragmatique Prise en main, objets et commandes de base

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)

Page 5: UMR 7619 Sisyphe 17-19 Avril 2012 Alexandre Pryet Le langage une introduction pragmatique Prise en main, objets et commandes de base

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, …)

Page 6: UMR 7619 Sisyphe 17-19 Avril 2012 Alexandre Pryet Le langage une introduction pragmatique Prise en main, objets et commandes de base

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)

Page 7: UMR 7619 Sisyphe 17-19 Avril 2012 Alexandre Pryet Le langage une introduction pragmatique Prise en main, objets et commandes de base

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

Page 8: UMR 7619 Sisyphe 17-19 Avril 2012 Alexandre Pryet Le langage une introduction pragmatique Prise en main, objets et commandes de base

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

Page 9: UMR 7619 Sisyphe 17-19 Avril 2012 Alexandre Pryet Le langage une introduction pragmatique Prise en main, objets et commandes de base

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 ...

Page 10: UMR 7619 Sisyphe 17-19 Avril 2012 Alexandre Pryet Le langage une introduction pragmatique Prise en main, objets et commandes de base

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)

Page 11: UMR 7619 Sisyphe 17-19 Avril 2012 Alexandre Pryet Le langage une introduction pragmatique Prise en main, objets et commandes de base

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 , ]

Page 12: UMR 7619 Sisyphe 17-19 Avril 2012 Alexandre Pryet Le langage une introduction pragmatique Prise en main, objets et commandes de base

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"]

Page 13: UMR 7619 Sisyphe 17-19 Avril 2012 Alexandre Pryet Le langage une introduction pragmatique Prise en main, objets et commandes de base

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")]

Page 14: UMR 7619 Sisyphe 17-19 Avril 2012 Alexandre Pryet Le langage une introduction pragmatique Prise en main, objets et commandes de base

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,]

Page 15: UMR 7619 Sisyphe 17-19 Avril 2012 Alexandre Pryet Le langage une introduction pragmatique Prise en main, objets et commandes de base

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")

Page 16: UMR 7619 Sisyphe 17-19 Avril 2012 Alexandre Pryet Le langage une introduction pragmatique Prise en main, objets et commandes de base

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

Page 17: UMR 7619 Sisyphe 17-19 Avril 2012 Alexandre Pryet Le langage une introduction pragmatique Prise en main, objets et commandes de base

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

Page 18: UMR 7619 Sisyphe 17-19 Avril 2012 Alexandre Pryet Le langage une introduction pragmatique Prise en main, objets et commandes de base

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 :

Page 19: UMR 7619 Sisyphe 17-19 Avril 2012 Alexandre Pryet Le langage une introduction pragmatique Prise en main, objets et commandes de base

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"

Page 20: UMR 7619 Sisyphe 17-19 Avril 2012 Alexandre Pryet Le langage une introduction pragmatique Prise en main, objets et commandes de base

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 ».

Page 21: UMR 7619 Sisyphe 17-19 Avril 2012 Alexandre Pryet Le langage une introduction pragmatique Prise en main, objets et commandes de base

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 !

Page 22: UMR 7619 Sisyphe 17-19 Avril 2012 Alexandre Pryet Le langage une introduction pragmatique Prise en main, objets et commandes de base

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 :

Page 23: UMR 7619 Sisyphe 17-19 Avril 2012 Alexandre Pryet Le langage une introduction pragmatique Prise en main, objets et commandes de base

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")

Page 24: UMR 7619 Sisyphe 17-19 Avril 2012 Alexandre Pryet Le langage une introduction pragmatique Prise en main, objets et commandes de base

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…