Calculs deltasJ'ai un ensemble de données avec des observations horaires des trois dernières années sur différents compteurs d'eau.
Le problème est que les observations montrent le compteur et non la consommation d’eau.
Je souhaite calculer/afficher un changement delta pour chaque heure, pour chaque compteur d'eau. Comment aborder cela ?
Une partie de l'analyse que je souhaite effectuer avec cet ensemble de données consiste à déterminer si un compteur a une utilisation négative à un moment donné (indiquant que l'eau coule dans le mauvais sens) ou si un compteur doit augmenter un delta indiquant une fuite.
Mon lieu de travail commence à travailler sur la qualité des données, donc en plus de ce qui précède, je voudrais également vérifier si les horodatages sont cohérents ou s'il y a un changement dans les horodatages (si les observations pour un compteur spécifique ne reviennent pas à la même minute). -numéro chaque heure).
Un outil d'analyse que j'ai hâte d'explorer est la qualité des processus.
Exploration et visualisation des donnéesIngénierie Qualité et ProcédésRe : Calculs DeltaMerci. Je peux l'essayer demain.
Mais cela permettra-t-il de différencier chaque mètre unique ?
(J'en ai 22 pour le moment, et plusieurs milliers plus tard).
J'ai les lignes : MeterNumber ; Dateheure ; Valeur de compteur;
Les données exportées du logiciel de mesure sont par défaut classées par dateheure (2023-09-17 13:09)
Re : Calculs DeltaN'ayez crainte,
if(:meter != lag(:meter,1)
s'en assurera - mais vous devez trier les données en conséquence :
Avec le compteur à gauche, sélectionnez les colonnes du compteur et de l'heure puis :

Re : Calculs DeltaPour faciliter la tâche :
C'est certainement un cas qui devrait être inclus dans le Interface graphique de normalisation 

Re : Calculs DeltaJe ne sais pas quel est le type de fichier d'entrée, mais s'il s'agit d'un fichier Excel ou d'un fichier .csv, vos valeurs DateTime doivent être lues dans JMP en tant que valeurs JMP Date/Heure.Sinon, vous devriez prendre le temps de les convertir.
Vous trouverez ci-dessous un exemple simple qui pourrait vous donner une longueur d'avance sur le calcul des données d'utilisation.
Names Default To Here( 1 );
dt = Current Data Table();
// Sort the data if not already sorted
dt << sort( by( :MeterNumber, :DateTime ), Replace table( 1 ) );
// Create the new Usage column
dt << New Column( "Usage",
formula(
//As Constant( Usage = 0 );
If( :MeterNumber != Lag( :MeterNumber ),
usage = 0,
:Usage = :CounterValue - Lag( :CounterValue )
);
)
);
Re : Calculs DeltaVous pouvez aussi utiliser Moyenne mobile du col() pour obtenir la valeur de la ligne précédente (peut faciliter la tâche lorsque vous travaillez avec des colonnes de groupe)
Names Default To Here(1);
// sample data
dt = New Table("Untitled",
Add Rows(6),
Compress File When Saved(1),
New Column("Meter", Character, "Nominal", Set Values({"A", "A", "A", "B", "B", "B"})),
New Column("Time", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3, 1, 2, 3])),
New Column("Value", Numeric, "Continuous", Format("Best", 12), Set Values([1, 0, 2, 0, 1, 2]))
);
// Data should be sorted by time
dt << New Column("D", Numeric, Continuous, Formula(
:Value - (Col Moving Average(:Value, 1, 1, 0, Meter) * 2 - :Value)
// 2 * :Value - (Col Moving Average(:Value, 1, 1, 0, Meter) * 2
));Re : Calculs DeltaVous pouvez trier les données par compteur et par heure, puis utiliser le décalage fonction ( décalage (:colonne, 1) = valeur de la ligne précédente ) pour calculer la consommation :
new table("test",add rows(100),
new column ("meter", Nominal, Set Each value (Step(row(),10*(0::11)+1,(0::11)))),
new column ("time",Format( "m/d/y h:m"), set each value(Date DMY( 17, 9, 2023 )+mod(row()-1,10)*3600)),
new column ("reading"));
new column("consumption", set each value(if(row()==1 |:meter != lag(:meter,1),0,random uniform(0,10))));
for each row( if(row()==1 |meter != lag(:meter,1), :reading =random uniform(0,10000),: reading = lag(:reading,1)+ :consumption));
new column("consumption-calc",Formula( if(row()==1 |:meter != lag(:meter,1),0, :reading - lag(:reading,1))));
Re : Calculs Deltacool!
beaucoup plus robuste et compact 
Re : Calculs DeltaBon conseil. Je commencerai ma journée demain en passant du temps avec le formatage datetime.
J'ai un peu de mal à comprendre la syntaxe de votre exemple et du précédent.
J'espère pouvoir utiliser la bibliothèque R/dplyr dans JMP ? Je pense que je peux écrire quelque chose qui fait l'affaireRe : Calculs DeltaJ'ai ce code R qui devrait faire l'affaire.
bibliothèque (dplyr)
vos_données <- vos_données %>%
organiser (MeterName, DateTime) %>%
group_by(MeterName) %>%
muter (DeltaMeterValue = MeterValue - lag (MeterValue, par défaut = first (MeterValue))) %>%
dissocier()
Re : Calculs DeltaVous pouvez utiliser R avec JMP, mais cette solution ressemble assez à la solution utilisant Décalage() dans JMP (vous pouvez également utiliser Dif() ). Ma solution avec Col Moving Average est plus difficile à comprendre mais l'idée est d'utiliser Col Moving Average pour obtenir la valeur de la ligne précédente.
Guide de script > Extension de JMP > Travailler avec R
Référence de syntaxe JSL > Fonctions, opérateurs et messages JSL > Fonctions d'intégration R
Re : Calculs DeltaLorsque j'essaie d'utiliser l'une des solutions ici, je n'obtiens que la première date (=0) et pas le reste. J'ai essayé de trier de différentes manières pour voir si c'est ici que je fais quelque chose de mal.

Re : Calculs DeltaVos noms de colonnes semblent erronés, commencez par corriger ceux dans la formule
Re : Calculs DeltaAh, je vois la faute d'orthographe.
Re : Calculs DeltaUne fonction intégrée qui calcule le delta au sein des groupes serait une bonne chose.
Je l'ai fait fonctionner mais j'ai du mal à comprendre le langage de script, et j'ai essayé de créer la formule par glisser-déposer à partir de zéro, mais je n'arrive tout simplement pas à placer correctement toutes les parties telles qu'elles sont dans le script que vous m'avez donné ici.
Re : Calculs DeltaExiste-t-il une description de la fonction de moyenne mobile col ?
Lorsque je regarde la page d'assistance, la description ne dit rien sur le nombre de valeurs nécessaires.
Moyenne mobile du col
Renvoie la moyenne mobile sur un intervalle donné en fonction de la ligne actuelle. Les valeurs manquantes sont ignorées
Re : Calculs DeltaIl existe un moyen de le faire de manière interactive. Faites un clic droit sur votre colonne de regroupement et créez-la dans la colonne Group By pour les nouvelles formules (les données doivent être triées par groupes et très probablement par temps ou quelque chose de similaire)

Ensuite, faites un clic droit sur votre colonne de calcul/valeur et allez dans Ligne->Différence

Avec cela, vous obtenez une formule comme

Re : Calculs DeltaJ'ai fourni un lien vers la documentation dans l'un de mes messages : Référence de syntaxe JSL > Fonctions, opérateurs et messages JSL > Fonctions statistiques - Moyenne mobile des colonnes . À mon avis, la documentation de Col Moving Average n'est pas très claire et je dois généralement faire quelques petits tests pour qu'elle fonctionne correctement (et me rappeler comment elle fonctionne).

Un autre endroit pour trouver de la documentation (parfois différente...) est Scripting Index dans le menu d'aide de JMP.

Re : Calculs DeltaJe vais essayer de télécharger une nouvelle version du Interface graphique de normalisation .
La nouvelle version a une option pour calculer la différence par rapport à la ligne précédente - en fonction de l'astuce qui @jthi fournis ici.
Le code de Jarmo (via Col Moving Average) est bien meilleur que ce que vous obtenez via le menu de la nouvelle colonne de formule en cliquant avec le bouton droit 
Après la mise à jour, cela ressemblera à ceci.
Nouveau : "N-1"
