Calcoli deltaHo un set di dati con osservazioni orarie degli ultimi tre anni su diversi contatori dell'acqua.
Il problema è che le osservazioni mostrano il valore del contatore e non l'utilizzo dell'acqua.
Voglio calcolare/mostrare una variazione delta per ogni ora, per ogni contatore dell'acqua. Come posso affrontarlo?
Alcune delle analisi che voglio fare con questo set di dati mirano a scoprire se un contatore ha un utilizzo negativo in un punto (indicando che l'acqua scorre nella direzione sbagliata) o che un contatore ha un delta troppo grande che indica una perdita.
Il mio posto di lavoro sta iniziando a lavorare sulla qualità dei dati, quindi oltre a quanto sopra vorrò anche esaminare cose come se i timestamp sono coerenti o se ci sono cambiamenti nei timestamp (se le osservazioni per un contatore specifico non ritornano allo stesso minuto -numero ogni ora).
Uno strumento di analisi che non vedo l'ora di esplorare è la qualità del processo
Esplorazione e visualizzazione dei datiIngegneria della qualità e dei processiRi: Calcoli DeltaGrazie. Posso provarlo domani.
Ma questo sarà in grado di distinguere tra ogni contatore unico?
(Ne ho 22 al momento, scalando fino a diverse migliaia in seguito).
Ho le righe: MeterNumber; Appuntamento; Controvalore;
Per impostazione predefinita, i dati esportati dal software di misurazione sono ordinati per data/ora (2023-09-17 13:09)
Ri: Calcoli DeltaNon aver paura,
if(:meter != lag(:meter,1)
si assicurerà di ciò, ma devi ordinare i dati di conseguenza:
Con contatore a sinistra, seleziona le colonne per contatore e ora e poi:

Ri: Calcoli DeltaPer facilitare il compito:
Questo è sicuramente un caso che dovrebbe essere incluso nel GUI di normalizzazione 

Ri: Calcoli DeltaNon so quale sia il tipo di file di input, ma se si tratta di un file Excel o di un file .csv, i valori DateTime dovrebbero essere letti in JMP come valori Data/Ora JMP.In caso contrario, dovresti prenderti il tempo per convertirli.
Di seguito è riportato un semplice esempio che potrebbe darti un vantaggio nel calcolo dei dati di utilizzo
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 )
);
)
);
Ri: Calcoli DeltaPuoi anche usare Media mobile col.() per ottenere il valore dalla riga precedente (può semplificare quando si lavora con colonne di gruppo)
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
));Ri: Calcoli DeltaÈ possibile ordinare i dati per metro e ora e quindi utilizzare il file ritardo funzione ( ritardo (:colonna, 1) = valore della riga precedente ) per calcolare il consumo:
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))));
Ri: Calcoli DeltaFreddo!
molto più robusto e compatto 
Ri: Calcoli DeltaBuon Consiglio. Inizierò la mia giornata domani dedicando un po' di tempo alla formattazione della data e dell'ora.
Ho un po' di difficoltà nel ottenere la sintassi del tuo esempio e di quello precedente.
Spero di poter utilizzare la libreria R /dplyr in JMP? Penso di poter scrivere qualcosa che faccia al caso mioRi: Calcoli DeltaHo questo codice R che dovrebbe fare il trucco.
libreria(dplir)
i tuoi_dati <- i tuoi_dati %>%
organizzare(NomeContatore, DataOra) %>%
group_by(NomeContatore) %>%
mutate(DeltaMeterValue = MeterValue - lag(MeterValue, default = first(MeterValue))) %>%
separare()
Ri: Calcoli DeltaPuoi usare R con JMP, ma quella soluzione sembra abbastanza simile alla soluzione utilizzata Ritardo() in JMP (potresti anche usare Dif() ). La mia soluzione con Col Moving Average è più difficile da capire, ma l'idea è di utilizzare Col Moving Average per ottenere il valore della riga precedente.
Guida allo scripting > Estensione di JMP > Utilizzo di R
Riferimento alla sintassi JSL > Funzioni, operatori e messaggi JSL > Funzioni di integrazione R
Ri: Calcoli DeltaQuando provo a utilizzare una qualsiasi delle soluzioni qui, ottengo solo il primo appuntamento (=0) e non il resto -Ho provato a ordinare in diversi modi per vedere se è qui che sto facendo qualcosa di sbagliato

Ri: Calcoli DeltaI nomi delle tue colonne sembrano sbagliati, inizia correggendoli nella formula
Ri: Calcoli DeltaAh, vedo l'errore di ortografia.
Ri: Calcoli DeltaUna funzione integrata che calcola il delta all'interno dei gruppi sarebbe utile.
Sono riuscito a farlo funzionare ma ho difficoltà a comprendere il linguaggio di scripting e ho provato a trascinare/rilasciare la formula da zero ma semplicemente non riesco a posizionare correttamente tutte le parti come sono nello script che mi hai fornito qui
Ri: Calcoli DeltaEsiste una descrizione della funzione di media mobile col?
Quando guardo nella pagina di supporto, la descrizione non dice nulla su quanti valori accetta.
Media mobile col
Restituisce la media mobile su un dato intervallo in base alla riga corrente. I valori mancanti vengono ignorati
Ri: Calcoli DeltaC'è un modo per farlo in modo interattivo. Fai clic con il pulsante destro del mouse sulla colonna di raggruppamento e impostala sulla colonna Raggruppa per per le nuove formule (i dati devono essere ordinati per gruppi e molto probabilmente per ora o qualcosa di simile)

Successivamente fai clic con il pulsante destro del mouse sulla colonna di calcolo/valore e vai su Riga->Differenza

Con questo ottieni una formula del tipo

Ri: Calcoli DeltaHo fornito il collegamento alla documentazione in uno dei miei post: Riferimento alla sintassi JSL > Funzioni, operatori e messaggi JSL > Funzioni statistiche - Media mobile colonne . Secondo me la documentazione di Col Moving Average non è molto chiara e solitamente devo fare dei piccoli test per farlo funzionare correttamente (e ricordarmi come funziona).

Un altro posto dove trovare documentazione (a volte diversa...) è Scripting Index dal menu della guida di JMP

Ri: Calcoli DeltaProverò a caricare una nuova versione del file GUI di normalizzazione .
La nuova versione ha un'opzione per calcolare la differenza rispetto alla riga precedente, in base al trucco @jthi fornito qui.
Il codice di Jarmo (tramite Col Moving Average) è molto migliore di quello che ottieni facendo clic con il pulsante destro del mouse sul nuovo menu della colonna formula 
Dopo l'aggiornamento, sarà simile a questo.
Novità: "N-1"
