¿Cómo graficar los últimos N valores de una columna?Hola todos,
Todavía soy relativamente nuevo en JSL, por lo que construyo mis códigos de script a medida que avanzo.
Estoy tratando de agregar a una ventana de gráfico de control el gráfico de los últimos 25 puntos de datos en una columna de valores M, por ejemplo, columna (M-25) a (M).
Estoy pensando en modificar el script del generador de gráficos para hacer esto:
Control Chart Builder(
Size( 534, 454 ),
Show Two Shewhart Charts( 0 ),
Show Control Panel( 0 ),
Show Limit Summaries( 0 ),
Show Capability( 0 ),
Variables( Y( :Name( "MyColumn" ) ) ),
Chart(
Points( Statistic( "Individual" ) ),
Limits( Sigma( "Moving Range" ) ),
Warnings( Test Beyond Limits( 1 ) )
),
SendToReport(
Dispatch(
{},
"graph display 1 title",
TextEditBox,
{Set Text( "Last 25 Observations" )}
),
Dispatch( {}, "MyColumn Limit Summaries", OutlineBox, {Close( 1 )} )
)
)El problema que tengo es cómo elegir solo los últimos N valores para mostrar (N podría ser 25 o 30 o 100). Mi experiencia con otros lenguajes de programación como Igor o Matlab no se traduce en JSL para graficar solo un subconjunto de datos de una columna.
Si es posible, preferiría que graficara los datos frente al índice de fila, como en los gráficos de control, y sé que el gráfico Superpuesto puede hacer eso, pero también me gusta que aparezca el Promedio en el gráfico. Preferiría NO trazar los datos como Fit Y by X.
¡Gracias!
Re: ¿Cómo graficar los últimos N valores de una columna?Hola @Godwin ,
Cada situación particular es un poco diferente y puede requerir una ligera modificación del código para los detalles específicos en cuestión. Si puede compartir una tabla de datos y su código con el que está trabajando, eso podría ayudarme a mí y a otros en este hilo a abordar mejor los detalles de lo que está tratando de hacer.
¡Gracias!,
SD
Re: ¿Cómo graficar los últimos N valores de una columna?¿Puede compartir el código exacto que usó para controlar el gráfico de la última columna N, por favor? No estoy teniendo suerte para la modificación.
Re: ¿Cómo graficar los últimos N valores de una columna?¡Gracias!Re: ¿Cómo graficar los últimos N valores de una columna?Names DefaultToHere(1);
// Open a table and give it a table reference ('dt')
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// Select the data you do not want, and exclude them
dt << select where( :sex == "F" );
dt << hide and exclude;
// Clear the selections
dt << clear select;
// Create the chart, only none excluded/hidden rows will be displayed
dt << Graph Builder(
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 6 ) ), Smoother( X, Y, Legend( 7 ) ) )
);Re: ¿Cómo graficar los últimos N valores de una columna?¡Gracias! No estoy seguro de haber enviado mi pregunta correctamente. Quiero dibujar un gráfico de un gran conjunto de datos dado. Pero necesito verificar que una columna en particular cumpla con la condición y luego, si la condición se cumple, considere las filas correspondientes para trazar el gráfico. Me gustaría hacer esto a través del script jsl. ¿Me podría ayudar como soy muy principiante. ¡Gracias!
Re: ¿Cómo graficar los últimos N valores de una columna?Esta parece ser una pregunta diferente del tema del hilo, pero tal vez intente algo como esto:
Names DefaultToHere(1);
// Open a table and give it a table reference ('dt')
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// Get a list of all the columns in the table
cols = dt << getColumnNames("String");
// Define any logical condition that identifies one or more columns by its name
targetCols = {};
for(c=1, c<=NItems(cols), c++, if(Contains(cols[c], "gh"), InsertInto(targetCols, cols[c])));
// Make a plot using'taregtCols' as the y variables
biv = dt << OneWay(X(:sex), Y(Eval(targetCols)));Re: ¿Cómo graficar los últimos N valores de una columna?Hola señor, quiero dibujar un gráfico de un gran conjunto de datos dado. Pero necesito verificar que una columna en particular satisfaga la condición y luego considerar las filas correspondientes para trazar el gráfico. Me gustaría hacer esto a través del script jsl. ¿Me podría ayudar como soy muy principiante. ¡Gracias!Re: ¿Cómo graficar los últimos N valores de una columna?¿Cómo graficar los datos de la tabla de datos con una columna en particular satisface la condición dada?Re: ¿Cómo graficar los últimos N valores de una columna?Hola @txnelson , Gracias por la sugerencia. Terminé cambiando ligeramente el código para que buscara entradas vacías en lugar de solo entradas distintas de cero. Su método funcionó y solo necesitaba adaptarlo ligeramente a mi situación específica.
¡Gracias de nuevo!
lastNmiss = 0;
For( ii = N Rows( dt ), ii >= 1, ii--,
If( IsMissing(dt:weight[ii])!=1, lastNmiss++ );
If( lastnmiss == 8, Break() );
);
lastNmiss = N Row( dt ) - ii;
n = N Row( dt );
biv = dt << Bivariate(
Y( :weight ),
X( :height ),
Where( Row() > (n - lastnmiss) )
);
Re: ¿Cómo graficar los últimos N valores de una columna?Aquí hay una modificación simple al script que @Mark_Bailey escribió, que encuentra la fila que tiene el último número x de valores distintos de cero
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt:weight[38] = 0;
last n = 0;
For( i = N Rows( dt ), i >= 1, i--,
If( :weight[i] > 0, last n++ );
If( last n == 5, Break() );
);
last n = N Row( dt ) - i;
n = N Row( dt );
biv = dt << Bivariate(
Y( :weight ),
X( :height ),
Where( Row() > (n - last n) )
);
Re: ¿Cómo graficar los últimos N valores de una columna?@Mark_Bailey Gracias por la ayuda.
Ahora estoy tratando de modificar ese código para que grafique los últimos N valores distintos de cero. Tengo varias filas en una columna que pueden tener valores faltantes y quiero graficar solo aquellas filas que tienen una entrada. En este momento, si solo hay una o dos filas dentro del pasado N (en mi caso, 25) que no son cero, entonces solo grafica esas una o dos filas.
Su ayuda/retroalimentación es muy apreciada. ¡Gracias!
Re: ¿Cómo graficar los últimos N valores de una columna?¡Trabajó! Gracias.
Tuve que modificar un poco por los detalles, pero funcionó.
Re: ¿Cómo graficar los últimos N valores de una columna?Aquí hay un ejemplo con Bivariate y Big Class que podría adaptarse:
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
last n = 5;
n = N Row( dt );
biv = dt << Bivariate(
Y( :weight ),
X( :height ),
Where( Row() > (n - last n) )
)
Es simple.