Manipuler des Séries Chronologiques

Ce matin en cours, on a vu un peu comment manipuler des séries temporelles, et en particulier comme jouer avec l’échelle de temps (passer de données hebdomadaire à de données mensuelles, par exemple).

Pour commencer, travaillons un peu sur les données extraites de google.fr/trends/ par exemple sur le mot clé fièvre,

report = read.csv(
"http://freakonometrics.free.fr/report-fievre.csv",
  skip=6,header=FALSE,nrows=626)
 X=report$V2
 plot(X,type="l")

Au lieu d’avoir un vecteur, on peut créer un format de série temporelle (hebdomadaire )

 X_h=ts(X,start=c(2004,3),frequency=52)
 plot(X_h)

On va essayer d’agréger les données pour les rendre mensuelles

 date1=substr(as.character(report$V1),1,10)
 date2=substr(as.character(report$V1),14,23) 
 d1=as.Date(date1,"%Y-%m-%d")
 d2=as.Date(date2,"%Y-%m-%d")
 d1[2]-d1[1]
 Vect_J=Vect_M=Vect_X=Vect_A= NULL
 for(i in 1:length(d1)){
   jours = seq(d1[i],d2[i],length=7)
   mois = as.POSIXlt(jours)$mon+1
   annees = as.POSIXlt(jours)$year+1900
   donnees = rep(X[i],7)
   Vect_J = c(Vect_J,jours)
   Vect_M = c(Vect_M,mois)
   Vect_A = c(Vect_A,annees)
   Vect_X = c(Vect_X,donnees)
 }
 base=data.frame(J=Vect_J,M=Vect_M,
                 A=Vect_A,X=Vect_X)
 head(base)
 base$AM = base$A*100+base$M
 head(base)
 Y=tapply(base$X,as.factor(base$AM),mean)
 Z=ts(as.numeric(Y[1:144]),
 start=c(2004,1),frequency=12)
 plot(Z)

On peut superposer les deux d’ailleurs (il y a peut être un léger décalage sur la série hebdomadaire)

plot(X_h,col="blue")
lines(as.numeric(time(Z)),as.numeric(Z),
col="red",lwd=2)

Sur ecad.eu on peut récupérer la pluviométrie, à Rennes, depuis 1927, en données journalière

pluie=read.table("RR_SOUID104924.txt",
skip=21,sep=',',header=TRUE)
 base=pluie[pluie$Q_RR==0,]
 date1=as.Date(
   as.character(base$DATE),"%Y%m%d")
 X=base$RR
 plot(date1,X,type="h")

Là encore, on peut agréger pour avoir des données mensuelles (de moyennes journalières, par mois)

 mois = as.POSIXlt(date1)$mon+1
 annees = as.POSIXlt(date1)$year+1900
 AM = annees*100+mois
 Y=tapply(X,as.factor(AM),mean)
 Z=ts(as.numeric(Y),start=c(1927,1),frequency=12)
 plot(Z)

On peut d’ailleurs regarder, ensuite, par mois, le niveau de pluie,

mois = time(Z)-trunc(time(Z))+1/24
plot(mois,as.numeric(Z))
Z_m=tapply(as.numeric(Z),as.factor(mois),mean)
lines(as.numeric(names(Z_m)),Z_m,lwd=2,col="red")


Leave a Reply

Your email address will not be published. Required fields are marked *