¿Tengo problemas para conseguir que Column Stats funcione en un bucle?Estoy tratando de escribir una secuencia de comandos para eliminar los valores atípicos de varias columnas en una tabla utilizando un bucle para ver el nombre de cada columna y pasarlo a una función que tenga la siguiente línea de código para calcular el percentil 99.
test_upper_quantile = Col Quantile (Column (Test_Number), 0.99);
Luego uso un bucle For Each Row para comparar los valores con el percentil calculado y eliminar las filas que queden fuera de este.
El código funciona bien si solo hago una columna; sin embargo, si configuro el bucle con varias columnas que leen los nombres de las columnas en la variable Test_Number, jmp siempre usa el valor del cuantil calculado primero para la primera columna, no se vuelve a calcular para cada columna . El ciclo parece estar configurado correctamente, ya que muestra la variable Test_Number en el registro y esto cambia para coincidir con la columna como se esperaba. Entonces, si hago 10 columnas, se muestran los 10 nombres de columna correctos, ¡¡¡pero solo el cuantil de la primera columna se repite 10 veces !!!
Además, cuando el script finaliza, si resalto la línea de código a continuación, calcula el valor de la última columna que encontró correctamente.
test_upper_quantile = Col Quantile (Column (Test_Number), 0.99);
He intentado borrar el test_upper_quantile global que mantiene el valor del cuantil al principio de la función, pero esto no hace ninguna diferencia.
¿Algunas ideas? Noté que cuando pasas el cursor sobre el comando de cuantiles de columna, dice que se almacena en caché. ¿Es este mi problema si es así, hay una manera de borrar el caché?
Se muestra la función completa.
remove_outliers = Function ({Test_Number},
show (número de prueba);
test_lower_quantile = Col Quantile (Column (Test_Number), 0.01);
test_upper_quantile = Col Quantile (Column (Test_Number), 0.99);
show (test_upper_quantile);
lower_cutoff = test_lower_quantile;
upper_cutoff = test_upper_quantile;
Por cada fila(
Si (Columna (número de prueba) [] Excluido (estado de fila ()) = 1
);
Si (Columna (número de prueba) []> upper_cutoff,
Excluido (estado de fila ()) = 1
);
);
);
El mensaje fue editado por: apedenRe: ¿Tengo problemas para conseguir que Column Stats funcione en un bucle?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Pruebe la función As Column () para convertir lo que obtiene del cuadro Col List Box () << get selected a una columna de referencia.
Nombres predeterminados aquí ( 1 ) ;
dt = Abierto ( "$ SAMPLE_DATA / solubility.jmp" ) ;
noroeste = Nueva ventana ( "Seleccionar columnas para cuantiles" ,
libra = Cuadro de lista col ( todos ) ,
Caja de botones ( "De acuerdo" ,
cols = libra << ser seleccionado ;
noroeste << Cerrar ventana ;
)
) ;
por ( yo = 1 , yo <= N artículos ( cols ) , yo ++,
Show ( Col Quantile ( Como columna ( cols El yo ] ) , .5 ) )
) ;
-Jeff
Re: ¿Tengo problemas para conseguir que Column Stats funcione en un bucle?Hola Jeff,
Tu código también funciona para mí. Es muy similar a mi código, la única diferencia que puedo ver es cómo se genera la lista de nombres de columna. Desde una ventana de cuadro de diálogo, uso:
| | | | Botonera ("Ok", |
| | | | | yParamNames = colListY << obtener elementos; |
que devuelve una lista de cadenas, cada nombre de columna entre comillas. colListY es un cuadro de lista de columnas que es llenado por el usuario.
He encontrado una solución regular. Agarra todo en la columna en lugar de dejar que JMP haga el trabajo. La desventaja de la solución que veo es que no ignora los datos ocultos y excluidos a menos que programe eso manualmente.
tempList1 = {} ; tempList1 = columna ( dtData , yParamList El yo ]) << obtener como matriz ; medal El yo ] = cuantil ( 0.5 , tempList1 ) ; q1Val El yo ] = cuantil ( 0.25 , tempList1 ) ; q3Val El yo ] = cuantil ( 0.75 , tempList1 ) ; // medVal = col cuantil (columna (dtData, yParamList ), 0.5); // q1Val = col cuantil (columna (dtData, yParamList ), 0,25); // q3Val = col cuantil (columna (dtData, yParamList ), 0,75); | |
Re: ¿Tengo problemas para conseguir que Column Stats funcione en un bucle?Quizás puedas publicar algún código que te cause dificultad.
Esto funciona para mí:
dt = abierto ( "$ SAMPLE_DATA / Solubility.jmp" ) ;
Carolina del Norte = dt << obtener nombres de columna ( Numérico ) ;
para ( yo = 1 , yo <= Nitems ( Carolina del Norte ) , yo ++,
espectáculo ( col cuantil ( columna ( Carolina del Norte El yo ]) , .5 )) ;
) ;
/ *:
Col cuantil (columna (nc ), 0.5) = 1.36;
Col cuantil (columna (nc ), 0.5) = 1.21;
Col cuantil (columna (nc ), 0.5) = 0.95;
Col cuantil (columna (nc ), 0.5) = 0.445;
Col cuantil (columna (nc ), 0.5) = -0.015;
Col cuantil (columna (nc ), 0.5) = -0.62;
Re: ¿Tengo problemas para conseguir que Column Stats funcione en un bucle?Sé que esta publicación tiene años, pero ¿hay una solución para este problema? Estoy viendo exactamente lo mismo. El uso de col quantile en un bucle dará como resultado que la primera iteración del bucle se almacene en mi lista.
¿Existe alguna solución para obtener datos de cuantiles que no impliquen la función de col cuantil ()? Realmente no quiero hacer tablas de resumen (resumen con datos de cuantiles) porque aumentará el tiempo de ejecución para varios miles de columnas.
Gracias