Cálculos deltaTengo un conjunto de datos con observaciones horarias de los últimos tres años y diferentes medidores de agua.
El problema es que las observaciones muestran el contador y no el consumo de agua.
Quiero calcular/mostrar un cambio delta para cada hora, para cada medidor de agua. ¿Cómo abordo eso?
Parte del análisis que quiero hacer con este conjunto de datos es encontrar si un medidor tiene un uso negativo en un punto (lo que indica que el agua corre en sentido contrario) o si un medidor tiene un delta demasiado grande que indica una fuga.
Mi lugar de trabajo está empezando a trabajar en la calidad de los datos, por lo que, además de lo anterior, también querré ver cosas como si las marcas de tiempo son consistentes o si hay cambios en las marcas de tiempo (si las observaciones de un medidor específico no regresan en el mismo minuto). -número cada hora).
Una herramienta de análisis que espero explorar es la calidad del proceso.
Exploración y visualización de datosIngeniería de Calidad y ProcesosRe: Cálculos deltaGracias. Puedo probarlo mañana.
¿Pero esto podrá diferenciar entre cada medidor único?
(Tengo 22 en este momento, y después llegarán a varios miles).
Tengo las filas: MeterNumber; Fecha y hora; Valor del contador;
Los datos exportados desde el software de medición se ordenan de forma predeterminada por fecha y hora (2023-09-17 13:09)
Re: Cálculos deltaNo temáis,
if(:meter != lag(:meter,1)
se asegurará de eso, pero debe ordenar los datos en consecuencia:
Con el medidor a la izquierda, seleccione las columnas de medidor y tiempo y luego:

Re: Cálculos deltaPara facilitar la tarea:
Este es definitivamente un caso que debería incluirse en el GUI de normalización 

Re: Cálculos deltaNo sé cuál es el tipo de archivo de entrada, pero si es un archivo Excel o un archivo .csv, sus valores de Fecha y Hora deben leerse en JMP como valores de Fecha/Hora JMP.De lo contrario, deberías tomarte el tiempo para convertirlos.
A continuación se muestra un ejemplo sencillo que podría ayudarle a calcular los datos de uso.
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: Cálculos deltaTambién puedes usar Media móvil de columna() para obtener el valor de la fila anterior (puede hacerlo más fácil cuando se trabaja con columnas de grupo)
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: Cálculos deltaPodrías ordenar los datos por metro y tiempo y luego usar el retraso función ( retraso (:columna, 1) = valor de la fila anterior ) para calcular el 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))));
Re: Cálculos delta¡Frío!
mucho más robusto y compacto 
Re: Cálculos deltaBuen consejo. Mañana comenzaré mi día dedicando algo de tiempo al formato de fecha y hora.
Me cuesta un poco entender la sintaxis de tu ejemplo y del anterior.
Espero poder usar la biblioteca R /dplyr en JMP. Creo que puedo escribir algo que funcione.Re: Cálculos deltaTengo este código R que debería funcionar.
biblioteca (dplyr)
tus_datos <- tus_datos %>%
organizar (Nombre del medidor, Fecha y hora) %>%
group_by(Nombre del medidor) %>%
mutar(DeltaMeterValue = MeterValue - lag(MeterValue, predeterminado = primero(MeterValue))) %>%
desagrupar()
Re: Cálculos deltaPuede usar R con JMP, pero esa solución se parece bastante a la solución que usa Retraso() en JMP (también puedes usar diferencia() ). Mi solución con Col Moving Average es más difícil de entender, pero la idea es utilizar Col Moving Average para obtener el valor de la fila anterior.
Guía de secuencias de comandos > Ampliación de JMP > Trabajar con R
Referencia de sintaxis JSL > Funciones, operadores y mensajes JSL > Funciones de integración de R
Re: Cálculos deltaCuando intento usar cualquiera de las soluciones aquí, solo obtengo la primera fecha (=0) y no el resto. Intenté ordenar de diferentes maneras para ver si es aquí donde estoy haciendo algo mal.

Re: Cálculos deltaLos nombres de sus columnas parecen estar incorrectos, comience por corregirlos en la fórmula
Re: Cálculos deltaAh, veo el error de ortografía.
Re: Cálculos deltaSería buena una función integrada que calcule delta dentro de los grupos.
Lo hice funcionar, pero tengo dificultades para entender el lenguaje de secuencias de comandos, y traté de arrastrar y soltar para hacer la fórmula desde cero, pero simplemente no puedo colocar todas las partes correctamente como están en la secuencia de comandos que me diste aquí.
Re: Cálculos delta¿Existe una descripción de la función de media móvil col?
Cuando miro en la página de soporte, la descripción no dice nada sobre cuántos valores se necesitan.
Media móvil de columna
Devuelve la media móvil durante un intervalo determinado basado en la fila actual. Los valores faltantes se ignoran
Re: Cálculos deltaHay una manera de hacer esto de forma interactiva. Haga clic derecho en su columna de agrupación y conviértala en la columna Agrupar por para obtener nuevas fórmulas (los datos deben ordenarse por grupos y probablemente por tiempo o algo similar)

Luego haga clic derecho en su columna de cálculo/valor y vaya a Fila->Diferencia

Con esto obtienes una fórmula como

Re: Cálculos deltaProporcioné un enlace a la documentación en una de mis publicaciones: Referencia de sintaxis JSL > Funciones, operadores y mensajes JSL > Funciones estadísticas: media móvil de columnas . En mi opinión, la documentación de Col Moving Average no es muy clara y normalmente tengo que hacer algunas pequeñas pruebas para que funcione correctamente (y recordar cómo funciona).

Otro lugar para encontrar documentación (a veces diferente...) es Scripting Index en el menú de ayuda de JMP.

Re: Cálculos deltaIntentaré subir una nueva versión del GUI de normalización .
La nueva versión tiene una opción para calcular la diferencia con la fila anterior, según el truco que @jthi proporcionado aquí.
El código de Jarmo (a través de Col Moving Average) es mucho mejor que el que obtienes al hacer clic con el botón derecho en el menú de la nueva columna de fórmula 
Después de la actualización, se verá así.
Nuevo: "N-1"
