Création d'évènements sous conditions

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

Theo Boudard
Messages : 19
Enregistré le : 06 Jan 2021, 15:32

Création d'évènements sous conditions

Messagepar Theo Boudard » 04 Fév 2021, 16:51

Bonjour,
Je travaille sur des données de pluviométrie (colonne 1 : date (JJ/MM/AAAA HH:MM) ; colonne 2 : intensité pluie en mm/h) sur plusieurs années, et je cherche à partir de ces données à créer des événements pluvieux.

L'idée en sortie est d'obtenir un nouveau tableau où chaque ligne correspond a un évènement pluvieux défini par :
colonne 1 = une date de début de l'évènement
colonne 2 = une date de fin de l'évènement
colonne 3 = durée de l'évènement
colonne 4 = Intensité moyenne de l'évènement pluvieux

La première étape est donc de séparer ces données en événement selon la règle suivante : 10h de temps sec minimum (soit intensité pluie = 0 mm/h) pour dire que 2 pluies sont distinctes.

J'aimerais donc dire à R de créer un évènement (donc une ligne) qui aurait pour date de début : le moment où l'intensité de la pluie > 0 et comme date de fin : le moment ou l'intensité de la pluie = 0 et est suivi de 10h de temps sec.

Quelqu'un serait m'aiguiller sur la marche à suivre ? peut être me recommander un site ou me donner des pistes parce que je ne vois pas par ou commencer .. je suis conscient que je n'apporte pas beaucoup d'éléments de résolution mais je n'ai jamais fais tourné ce genre d'algo sur R, je suis plus habitué au traitement statistiques voir à de la mise en forme ..

Si vous désirez d'avantage d'informations ou explication sur les données n'hésitez pas.

Merci par avance,
Bien à vous,
Théo Boudard

jean lobry
Messages : 733
Enregistré le : 17 Jan 2008, 20:00
Contact :

Re: Création d'évènements sous conditions

Messagepar jean lobry » 04 Fév 2021, 17:11

Bonjour Théo,

ce lien http://forums.cirad.fr/logiciel-R/viewtopic.php?f=1&t=3302 devrait pouvoir t'aider à mieux formuler ta question.

Amicalement,

jean lobry

Serge Rapenne
Messages : 1426
Enregistré le : 20 Aoû 2007, 15:17
Contact :

Re: Création d'évènements sous conditions

Messagepar Serge Rapenne » 04 Fév 2021, 22:44

Bonjour,

une idée, tu ajoutes un colonne existe_pluie qui vaut 1 si la valeur de pluie est>0 ,0 sinon. Puis tu avec la fonction rle tu pourras trouver les événements secs et pluvieux puis remonter aux moyennes sur les événements pluvieux. Sans donnée, il est difficile d'en dire plus

Serge

Theo Boudard
Messages : 19
Enregistré le : 06 Jan 2021, 15:32

Re: Création d'évènements sous conditions

Messagepar Theo Boudard » 05 Fév 2021, 07:25

Bonjour,
Merci Jean en effet je vais pouvoir détailler un peu plus les données :

Code : Tout sélectionner

             Date_TU Pluviometrie_en_mm Pluvioméetrie_en_mm.h
1 2017-01-04 21:00:00                0,2                     2
2 2017-01-04 21:30:00                0,2                     2
3 2017-01-10 02:54:00                0,2                     2
4 2017-01-10 03:42:00                0,2                     2
5 2017-01-10 04:00:00                0,2                     2
6 2017-01-10 04:36:00                0,4                     4
...                         ...                ...
8012 2020-12-31 22:54:00           0,2                     2


Lorsqu'il pleut la pluviométrie (en mm) est enregistré sur un pas de temps de 6mn, l'intensité est calculé en mm/h (pluvio*10). Lorsqu'il ne pleut pas aucune ligne n'est créée.

Merci Serge, en effet sans les données c'est compliqué, comme vous pouvez le remarquer il n'y a pas de ligne ou la valeur de la pluie = 0 mais ça doit pouvoir se creer facilement si ça vous semble vraiment nécessaire.

Bonne journée,

Théo

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Création d'évènements sous conditions

Messagepar Pierre-Yves Berrard » 05 Fév 2021, 09:51

Bonjour,

D'un point de vue algorithmique, j'ai l'impression qu'il faut juste calculer la différence de temps entre 2 lignes successives (s'il y a plus de 10 heures, c'est un nouvel évènement).
PY

jean lobry
Messages : 733
Enregistré le : 17 Jan 2008, 20:00
Contact :

Re: Création d'évènements sous conditions

Messagepar jean lobry » 05 Fév 2021, 10:57

Bonjour,

une piste pour pouvoir utiliser rle() comme suggéré par Serge :

Code : Tout sélectionner

pluie <- read.table(textConnection("
Date_TU;Pluviometrie_en_mm;Pluvioméetrie_en_mm.h
2017-01-04 21:00:00;0,2;2
2017-01-04 21:30:00;0,2;2
2017-01-10 02:54:00;0,2;2
2017-01-10 03:42:00;0,2;2
2017-01-10 04:00:00;0,2;2
2017-01-10 04:36:00;0,4;4
2020-12-31 22:54:00;0,2;2"
),
header = TRUE, dec = ",", sep = ";")
pluie$Date_TU <- as.POSIXct(pluie$Date_TU)

myts <- seq(from = as.POSIXct("2017-01-04 21:00:00"),  to = as.POSIXct("2020-12-31 22:54:00"), by = 6*60)
mydta <- as.data.frame(list(Date_TU = myts, ypleut = FALSE))
mydta[mydta$Date_TU %in% pluie$Date_TU, "ypleut"] <- TRUE

rle
(mydta$ypleut)
 


Amicalement,

jean lobry

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Création d'évènements sous conditions

Messagepar Pierre-Yves Berrard » 05 Fév 2021, 15:27

Pierre-Yves Berrard a écrit :Bonjour,

D'un point de vue algorithmique, j'ai l'impression qu'il faut juste calculer la différence de temps entre 2 lignes successives (s'il y a plus de 10 heures, c'est un nouvel évènement).


En partant du jeu de données `pluie` créé par Jean (merci !), une proposition pour donner un identifiant unique aux différentes plages de pluies :

Code : Tout sélectionner

library(dplyr)

pluie2 <-
  pluie %>%
  mutate(
    derniere_pluie = difftime(Date_TU, lag(Date_TU), units = "hours"),
    debut_pluie = coalesce(derniere_pluie > 10, TRUE),
    id_pluie = cumsum(debut_pluie)
  )

pluie2
#>               Date_TU Pluviometrie_en_mm Pluvioméetrie_en_mm.h derniere_pluie debut_pluie id_pluie
#> 1 2017-01-04 21:00:00                0.2                     2       NA hours        TRUE        1
#> 2 2017-01-04 21:30:00                0.2                     2      0.5 hours       FALSE        1
#> 3 2017-01-10 02:54:00                0.2                     2    125.4 hours        TRUE        2
#> 4 2017-01-10 03:42:00                0.2                     2      0.8 hours       FALSE        2
#> 5 2017-01-10 04:00:00                0.2                     2      0.3 hours       FALSE        2
#> 6 2017-01-10 04:36:00                0.4                     4      0.6 hours       FALSE        2
#> 7 2020-12-31 22:54:00                0.2                     2  34842.3 hours        TRUE        3     


Une fois cette étape réalisée, les statistiques par groupes devraient être relativement faciles.
PY

Theo Boudard
Messages : 19
Enregistré le : 06 Jan 2021, 15:32

Re: Création d'évènements sous conditions

Messagepar Theo Boudard » 08 Fév 2021, 07:58

Bonjour,
Super merci beaucoup pour votre aide. Je n'avais pas imaginé pouvoir faire comme cela, je pensais devoir passer par des exécutions conditionnelles et des boucles. Il ne me reste plus maintenant qu'a définir par ligne le début et la fin de chaque événement indexé et de calculer plusieurs stats pour chaque événement comme la hauteur total de la pluie ou encore l'intensité moyenne de l’événement.

Merci encore,
Bonne semaine,

Théo Boudard


Retourner vers « Questions en cours »

Qui est en ligne

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

cron