Tri et suppression de données

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

Miles François
Messages : 11
Enregistré le : 08 Mar 2019, 12:41

Tri et suppression de données

Messagepar Miles François » 01 Avr 2019, 11:25

Bonjour,

je travaille actuellement sur des données volumineuses (plusieurs dizaines de millier de lignes).
Et je rencontre un problème.
J'aimerais pouvoir "ôter" des lignes de mon jeu de données.

Mes données sont représentées graphiquement de cette manière :
https://www.casimages.com/i/190401011333265901.png.html

Les données représente le fonctionnement d'une pompe à pression.
A première vue, on observe des pauses. S'il on zoome sur les données (par exemple sur les 2000 premières lignes), on observera de nouvelles pauses qui n'apparaissent pas forcément sur le graphique précédent.

Mon but est de pouvoir supprimer "ces pauses" de mon jeu de données.
Durant les pauses, les valeurs de la pression sont faibles mais pas nulles.

Je vous remercie par avance, en espérant trouver une solution à mon problème.

Jean-Emmanuel Longueville
Messages : 310
Enregistré le : 23 Fév 2011, 08:03

Re: Tri et suppression de données

Messagepar Jean-Emmanuel Longueville » 01 Avr 2019, 13:03

Vous chercher à éliminer du bruit en fait ?
Plusieurs solutions :
- bourrine et sale :
enlever la marge d'erreur de la machine à l'ensemble des valeurs (sans création de valeur négative).
si df est mon data frame et var1 ma valeur mesurée :

Code : Tout sélectionner

df$var2<- df$var1 - margeErreur


- déterminer un seuil et remplacer toute valeur inférieure à ce seuil par NA

Code : Tout sélectionner

df$var[df$var1>Seuil, "Var1"]<- NA
/!\ ce code supprime de l'information.
Jean-Emmanuel
Ingénieur d'étude LNEC

Miles François
Messages : 11
Enregistré le : 08 Mar 2019, 12:41

Re: Tri et suppression de données

Messagepar Miles François » 01 Avr 2019, 13:38

Merci pour votre réponse.
Oui on peut dire que je souhaite supprimer du bruit.
J'obterai d'avantage pour la deuxième solution que vous m'avez proposé.

Cependant, un problème se pose. En fixant un seuil et en supprimant les valeurs inférieures à ce seuil je risque d'ôter des valeurs "hors pause".
Je m'explique, la pression oscille et donc elle prend des valeurs faibles puis des valeurs fortes et ainsi de suite.
Et donc il y a certaines valeurs "hors pause" qui sont du même ordre que les valeurs durant les pauses.
Le graphique ci-dessous représente graphiquement la pression sur les 500 premières lignes (sur ces 500 premières lignes, la machine ne fait pas de pause) :
https://www.casimages.com/i/19040103264479764.png.html

On voit bien qu'entre les pics, la pression prend des valeurs faibles.

Je pense qu'il faudrait construire un algorithme de telle sorte qu'on puisse supprimer non pas toutes les valeurs faibles mais les "suites" de valeurs faibles. Mais je ne vois pas comment le coder.

Merci par avance pour votre réponse.

Miles François
Messages : 11
Enregistré le : 08 Mar 2019, 12:41

Re: Tri et suppression de données

Messagepar Miles François » 01 Avr 2019, 14:27

Je rectifie mon dernier message.
Votre solution est bonne. Peu importe si je supprime certaines valeurs faibles entre les "pics".

Une dernière question, quelle technique me suggérez-vous ? pour trouver le seuil ?

Merci par avance !

Ophélie Da Silva
Messages : 2
Enregistré le : 16 Fév 2016, 13:43

Re: Tri et suppression de données

Messagepar Ophélie Da Silva » 01 Avr 2019, 14:32

Bonjour,

Je procèderai de cette façon

Code : Tout sélectionner

df = data.frame(indice=seq(1,100),
   valeur=c(runif(25),rep(0,15),runif(20),rep(0,10),runif(30)))

s = .2 # Seuil défini
idx = c() # Indice des lignes où la valeur est inférieure au seuil défini
to_remove = c() # Indice des lignes à supprimer ("pauses")

X = 3 # Nombre de valeurs inférieures au seuil consécutives maximum

Pour chaque ligne du tableau, je regarde si la valeur est inférieure au seuil. Si c'est le cas, je conserve l'indice.
Quand je repasse à une valeur supérieure au seuil, je regarde le nombre de valeurs stockées. S'il y en a plus que le nombre de valeurs attendues (ici X), je conserve ces indices comme étant à supprimer.

Code : Tout sélectionner

for (i in 1:nrow(df)) {
  if (df$valeur[i] < s) {
    idx = c(idx,i) # ajout de l'indice à la liste courante
  }
  else {
    if (length(idx) > X) {
      to_remove = c(to_remove, idx)
    }
    idx = c()
  }
}
if (length(idx) > X) {
  to_remove = c(to_remove, idx)
}

df = df[-to_remove,]

Ophélie

Miles François
Messages : 11
Enregistré le : 08 Mar 2019, 12:41

Re: Tri et suppression de données

Messagepar Miles François » 01 Avr 2019, 15:15

Merci pour votre réponse !
Je vais tester le code.

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Re: Tri et suppression de données

Messagepar François Bonnot » 01 Avr 2019, 15:25

Bonjour,
Une idée à développer/améliorer selon vos objectifs :

Code : Tout sélectionner

x <- runif(1000)
x[100:200] <- x[100:200]/5
x[500:700] <- x[500:700]/5
par(mfrow=c(2,1))
plot(x,type='l')

seuil <- 0.2
longueur <- 80

x0 <- x<=seuil
r <- rle(x0)
c <- cumsum(r$lengths)
w <- which(r$lengths>longueur)
m <- cbind(c[w-1],c[w])
apply(m,1,function(i) x[i[1]:i[2]] <<- NA)
plot(x,type='l')
François


Retourner vers « Questions en cours »

Qui est en ligne

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