Séries temporelles, précisions sur la fonction ts

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Céline Barrier
Messages : 14
Enregistré le : 30 Mai 2018, 11:49

Séries temporelles, précisions sur la fonction ts

Messagepar Céline Barrier » 22 Juin 2020, 14:31

Bonjour à tous,
J'aimerais préciser le plot de ma série temporelle, le script fonctionne mais ne me convient pas encore tout à fait pour la représentation graphique.
Pour cela j'aurais besoin d'aide et de conseils si cela est possible.
J'ai un tableau, 2 colonnes, la 1e avec des dates (2017-01-01 à 2017-12-31, avec un pas de temps journalier, class vector) et la seconde avec des températures (class numeric)
Mon objectif est d'obtenir une série temporelle en sélectionnant une période de temps à l'intérieur de mon tableau et de pouvoir le représenter avec un axe des abscisses gradué. Par exemple, je souhaite représenter le mois d'avril 2017, et sa série temporelle de T° jour après jour.

Mon code ci-dessous représente tout le cheminement vers ce résultat. C'est la fin qui importe, avec l'utilisation de la fonction ts pour les séries temporelles.

Comment dois-je la modifier pour partir par exemple du 2017-04-01 jusqu'au 2017-04-30, avec une graduation journalière ? Lorsque j'ajoute l'argument end pour la date, j'ai des messages d'erreur.

Merci pour vos conseils !

Code : Tout sélectionner


#Repertoire de travail
setwd("C:/XXX")

#Packages nécessaires
library(ncdf4)
library(stringr)
library(Rcpp)
library(plyr)
library(lubridate)
library(ggplot2)

#Ouverture du fichier
nc <-nc_open("NOAA_SST_2017_Corse.nc")

print(nc)

#Variables
lon <- ncvar_get(nc, "lon")
dim(lon)
lat <- ncvar_get(nc, "lat")
dim(lat)
time1 = ncvar_get(nc, "time")
time = as_date(time1,tz="UTC",origin = "1800-01-01")
dim(time)

#Zoom géographique
lonIdx <- which( lon >= 8.4 & lon <= 9.7)
latIdx <- which( lat >= 41.3 & lat <= 43.1)
levelIdx <- 1:length(time)

#Construction du dataframe
data_temp<-ncvar_get(nc, "sst")[lonIdx, latIdx, levelIdx]
indices <- expand.grid(lon[lonIdx], lat[latIdx], time[levelIdx])
df <- data.frame(cbind(indices, as.vector(data_temp)))
colnames(df)<-c("longitude","latitude","time","temperature")

#Verifier son tableau
View(df)

Final1 = df

write.table(df,"NOAA_SST_2017_Corse")


##enlever les NA
df2 = na.omit(df)

##moyenne par jour
Final1 <- tapply(df2$temperature,df2$time,mean)
Final1 = as.data.frame(Final1)
View(Final1)
colnames(Final1) = "temperature"
Final2 = as.data.frame(cbind("time"=rownames(Final1),"temperature"=Final1$temperature))
Final2
View(Final2)

> head(Final2)
        jour     temp
1 2017-01-01 15.88318
2 2017-01-02 15.81000
3 2017-01-03 15.85045
4 2017-01-04 15.86500
5 2017-01-05 15.73000
6 2017-01-06 15.45773

> tail(Final2)
          jour     temp
360 2017-12-26 14.02045
361 2017-12-27 13.89318
362 2017-12-28 13.81000
363 2017-12-29 13.89091
364 2017-12-30 13.96409
365 2017-12-31 14.04682

#verification du type de données
class(Final2$temperature)
class(Final2$time)

#modification de l'intitulé des variables
names(Final2)[1]<-"jour"
names(Final2)[2]<-"temp"

#changement du type de données (vers type chaine de caractères)
Final2$temp<-as.character(Final2$temp)

##changement du type de données (vers type numérique)
Final2$temp<-as.numeric(Final2$temp)

class(Final2$temp)
class(Final2$jour)
> class(Final2$temp)
[1] "numeric"
> class(Final2$jour)
[1] "factor"

#Création de la série temporelle (la fonction ts prend en compte la périodicité des données)
ts.stt<-ts(data = Final2$temp, start=c(2017,04),frequency = 365.25)

#representation graphique
install.packages("itsmr")
library(itsmr)
windows()
plotc(ts.stt)



Enfin, si j'essaie un autre type de plot (code ci-dessous), j'obtiens les erreurs ci-dessous et un graphe dont l'axe des abscisse ne va pas (pas de date, pas de graduation).

Error in del/by : argument non numérique pour un opérateur binaire
De plus : Warning message:
In Ops.factor(to, if (int) as.double(from) else from) :
‘-’ not meaningful for factors

Code : Tout sélectionner


plot(Final2$jour, Final2$temp, type = "l", xaxt = "n", xlab = "",
     ylab = "SST moyenne/jour", col = "royalblue3")
axis.POSIXct(1, at = seq(Final2$jour[1], tail(Final2$jour, 1), "date"),
             format = "%y/%m/%d", las = 2)

Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité