Abscisses données de type 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

Nicolas Lannes
Messages : 14
Enregistré le : 04 Oct 2015, 19:19

Abscisses données de type ts

Messagepar Nicolas Lannes » 21 Mar 2017, 07:27

Bonjour,
Je me permets de poster un message suite à des difficultés rencontrées avec des données.

# Ma première question #
- Disons que je possède un jeu de données x où x possède une variable "Date" au format "POSIXlt" "POSIXt" i.e. sous le format "%Y-%m-%d %H:%M:%S". Je peux obtenir le mois et le jour d'une telle date à l'aide des fonctions strftime, par exemple strftime(x$Date,"%m") pour accéder au mois. J'ai ainsi créé deux variables, "Mois" et "Jour" en utilisant les fonctions strftime.

Je possède plusieurs valeurs journalières, et je les moyenne pour obtenir une unique valeur quotidienne en utilisant la fonction aggregate : aggregate(Profondeur~Jour:Mois, data=x, FUN=function(x) mean=mean(x)) où Profondeur est une variable quantitative de x.

J'aimerais utiliser le vecteur obtenu (Profondeur) pour le mettre sous forme de série temporelle et le plotter. Mon problème, c'est que je ne sais pas comment paramétrer l'argument "start" pour faire en sorte que la date de début soit par exemple le 01/02/2017 et la date de fin soit le 06/03/2017 (c'est-à-dire qu'il y aurait 34 données, avec possiblement moins si je n'ai pas de valeur pour une journée donnée). Je ne sais pas s'il faut également toucher à l'option "frequency"... Je souhaite surtout arriver à indiquer en abscisses les dates considérées (elles n'ont pas besoin de toutes y figurer) afin de m'y retrouver.

# Ma seconde question #
- Grâce à l'approche précédente, je peux considérer une approche journalière. Est-ce que vous savez s'il est possible de considérer une approche bimensuelle, c'est-à-dire que j'obtiendrais une valeur numérique (Profondeur) tous les 15 jours ? Je ne vois pas trop comment mettre ceci en œuvre. Si vous avez des exemples, je suis également preneur :)

Je vous remercie par avance pour vos futures réponses.

Bien à vous,
Nicolas L.

Dominique Soudant
Messages : 758
Enregistré le : 23 Avr 2008, 11:12
Contact :

Re: Abscisses données de type ts

Messagepar Dominique Soudant » 21 Mar 2017, 14:47

Question 2
Si tu fais des agrégations pour des périodes données (1 mois, 15 jours) il faut que tu affectes ton résultat à une date représentative de ta période. Pour une agrégation par mois, le 15 du mois est une suggestion. Pour du bimensuel, le 8 et le 23 sont des suggestions également.

Dominique Soudant
Messages : 758
Enregistré le : 23 Avr 2008, 11:12
Contact :

Re: Abscisses données de type ts

Messagepar Dominique Soudant » 21 Mar 2017, 15:16

Problème de la fréquence journalière.
Pour chaque date tu peux récupérer le numéro du jour dans l'année :

Code : Tout sélectionner

DataOut00$YearDay <- as.POSIXlt(DataOut00$Passage...Date)$yday
Ainsi le premier février est le 32ième jour de l'année. Tu peux récupérer l'année aussi :

Code : Tout sélectionner

DataOut00$Year <- 1900+as.POSIXlt(DataOut00$Passage...Date)$year
Avec ça tu peux créer une variable

Code : Tout sélectionner

DataOut00$YearTS <- DataOut00$Year + (DataOut$YearDay-1)/365
soit une variable numérique constituée dans sa partie entière de l'année en cours et dans sa partie décimale de la fraction de la période de 365 jours écoulée à la date considérée (je soustrait 1 pour que le premier janvier soit le jour 0, YearTS = Year). A partir de ça je peux définir une série temporelle :

Code : Tout sélectionner

MaTS <- try(ts(DataIn$Résultat...Valeur.de.la.mesure
               ,start=min(DataIn$YearTS)
               ,deltat=1/365)
            )

Note que DataIn$Résultat...Valeur.de.la.mesure ne doit pas présenter de valeur manquante. Je veux dire ... Il peut y avoir des NA mais aucune date ne doit manquer dans les données parce que sinon ça va créer un décalage, il faut ajouter des NA pour les date manquantes si ce n'est pas le cas.

Pour en revenir à une fréquence non journalière. Mettons mensuelle.

Code : Tout sélectionner

   DataOut00$Month <- 1+as.POSIXlt(DataOut00$Passage...Date)$mon
Avec ça j'ai le mois. Y'en a 12 par an (!). On garde la logique précédente on remplace 365 par 12 et roule.

Pour le bimensuel

Code : Tout sélectionner

   DataOut00$HalfMonth <- DataOut00$Month*2-1+as.numeric(as.POSIXlt(DataOut00$Passage...Date)$mday > 15)
Y a 24 demi mois, tu remplaces 365 par 24 et roule.

?
@+

<on l'a perdu docteur ... >

Nicolas Lannes
Messages : 14
Enregistré le : 04 Oct 2015, 19:19

Re: Abscisses données de type ts

Messagepar Nicolas Lannes » 23 Mar 2017, 13:13

Bonjour,
Merci pour ta réponse Dominique.

C'est dommage que l'affichage soit toujours sous forme numérique, mais je m'en contenterai !

Dominique Soudant
Messages : 758
Enregistré le : 23 Avr 2008, 11:12
Contact :

Re: Abscisses données de type ts

Messagepar Dominique Soudant » 23 Mar 2017, 16:43

Code : Tout sélectionner

1> as.POSIXlt(60*60*24*3,origin="1970-01-01")
[1] "1970-01-04 01:00:00 CET"
La partie entière de YearTS te donne l'origine. La partie décimale de YearTS te donne le numéro du jour dans l'année (i.e. le 3 dans 60*60*24*3, il faut toujours prendre garde au problème du premier janvier, est-ce que c'est le jour 0 ou le jour 1 ...). Donc tu peux convertir tes YearTS en dates. Après tu peux utiliser tes dates en abscisse mais est-ce que le shmilblick a avancé ...

@+

Not so bad ...

Code : Tout sélectionner

i <- 1:30
date <- as.POSIXlt(60*60*24*i,origin="1970-01-15")
plot(date,rnorm(length(i)))


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité