Hacer que el script JSL sea más eficiente para muestrear una 'ventana deslizante'Hola,
Estoy intentando crear un script que muestree una tabla de datos con una 'ventana deslizante' (muestreando un número determinado de filas de un conjunto de 'ancho', luego subiendo una fila para muestrear el siguiente conjunto, lo que da como resultado un conjunto de datos de filas 1-10, 2-11, 3-12 y así sucesivamente) muestreo de mi tabla de datos, creando un nuevo conjunto de datos que puedo usar para el análisis de patrones.
Mi script está operativo, pero no funciona bien para bases de datos más grandes, con análisis lentos (>1 h) o incluso con fallas de JMP. ¿Hay alguna sugerencia sobre cómo mejorarlo?
¡Gracias!
// Define the window size (number of rows) and the increment (how much the standardised time should increase by)
windowSize = 9;
increment = 91;
// Get the number of rows in the data table
dt = Open("$SAMPLE_DATA/Time Series/GNP.jmp");
dt << Add Rows(windowSize);
numRows = N Rows(dt);
// Create a list to store the subsets
subsets = {};
standTimeMatrix = J(windowSize, 1, 0); // Pre-allocate matrix for Stand Time
// Fill the Stand Time matrix
dt << begin data update;
For(j = 1, j <= windowSize, j++,
standTimeMatrix[j, 1] = 1 + (j - 1) * increment;
);
// Loop through the data table to create the sliding windows
For(i = 1, i <= numRows - windowSize + 1, i++,
// Get the subset of data for the current window
subset = dt << Subset(Rows(i::i + windowSize - 1));
// Add the window number to the subset
windowNumberColumn = Repeat(i, windowSize);
subset << New Column("Window Number", Numeric, Continuous, Set Values(windowNumberColumn));
// Add the "Standardised Time" column to the subset
subset << New Column("Standardised Time", Numeric, Continuous, Set Values(standTimeMatrix));
// Add the subset to the list
Insert Into(subsets, subset);
);
// Create a new table for concatenation
newTable = New Table("All Data");
// Run the concatenations using the subsets list
For(i = 1, i <= N Items(subsets), i++,
newTable << Concatenate(
subsets[i],
append to first table(1)
);
// Close the subset table after concatenation to free up memory
Close(subsets[i], No Save);
);
Automatización y secuencias de comandosRe: Hacer que el script JSL sea más eficiente para muestrear una 'ventana deslizante'No estoy seguro de si esto está haciendo lo que desea (tiene un resultado diferente al de su secuencia de comandos) o qué es una "base de datos grande", pero tal vez algo como esto funcione
Names Default To Here(1);
size = 10;
dt = Open("$SAMPLE_DATA/Time Series/GNP.jmp", Invisible);
dt_results = dt << Clone;
dt_results << Show Window(0);
dt_results << Delete Rows(1::N Rows(dt_results));
dt_results << New Column("Idx", Numeric, Ordinal);
dt_results << New Column("Rows", Numeric, Ordinal);
cols = dt << Get Column Names("String");
i = 0;
While(i + size <= N Rows(dt),
old_rows = (1+i)::(i+size);
dt_temp = dt << Subset(Rows(old_rows), Selected Columns(0), Invisible);
dt_temp << New Column("Idx", Numeric, Ordinal, Set Each Value(i + 1));
dt_temp << New Column("Rows", Numeric, Ordinal, Values(old_rows));
dt_results << Concatenate(dt_temp,
"Append to first table"
);
Close(dt_temp, no save);
i++;
);
dt_results << Show Window(1);Re: Hacer que el script JSL sea más eficiente para muestrear una 'ventana deslizante'¿Quizás no sea necesario crear la mesa auxiliar?
Col Moving Average proporciona algunas configuraciones para comparar valores dentro de una ventana deslizante:

¿Cuáles son tus siguientes pasos?