Preguntas de iteración: Filtrado de datos y nombre de archivo de ahorro<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola,
Me pregunto cómo configurar un código que ejecute iterativamente un análisis de acuerdo con un filtro de datos específico, y luego repita ese análisis para un nuevo filtro de datos. El filtro de datos está configurado para excluir filas en función de la presencia de un 1 o un 0 en una columna, y las columnas están en orden secuencial. Aquí hay un script de ejemplo:
dt = Abierto ( "Hyperspectral_DataCleanedOrdered.jmp" ) ;
dt << Filtro de datos (
Modo ( Incluir ( 1 )) ,
Inverso ,
Añadir filtro (
Columnas ( Rand001 ) ,
Dónde ( : Rand001 > = 0.875 Y : Rand001 <= 1 )
) ,
) ;
doDiscriminante =
Expr (
da = dt << Discriminante (
X ( : Tipo de sitio ) ,
Y (
:
: Nombre ( "366" ) ,
: Nombre ( "367" ) ,
: Nombre ( "368" ) ,
: Nombre ( "369" ) ,
: Nombre ( "370" ) ,
: Nombre ( "371" ) ,
: Nombre ( "372" ) ,
: Nombre ( "373" ) ,
: Nombre ( "374" ) ,
: Nombre ( "375" ) ,
: Nombre ( "376" ) ,
: Nombre ( "377" ) ,
: Nombre ( "378" ) ,
: Nombre ( "379" ) ,
: Nombre ( "380" ) ,
: Nombre ( "381" ) ,
: Nombre ( "382" ) ,
)
) ;
para ( yo = 1 , yo <= 10 , yo ++,
doDiscriminante ;
da << StepwiseVariableSelection ;
para ( k = 1 , k <= yo , k ++, da << un paso adelante ) ;
da << aplicar este modelo ;
daRep = da << Informe ;
daRep El "Sumarios de puntuación" ] << seleccionar ;
daRep El "Sumarios de puntuación" ] << diario ( "prueba1" ) ;
Diario actual () << Adjuntar ( caja de texto ( "Prueba1" )) ;
daRep << Cerrar ventana ;
) ;
Diario actual () << Guardar diario ( "Rand001" ) [Idealmente, este nombre se actualiza con cada iteración]
El análisis discriminante está en bucle para una cierta cantidad de iteraciones de selección de variables paso a paso (10): Lo que quiero es que se produzca cada iteración 1-10 del análisis discriminante para cada iteración de un filtro de datos. El filtro de datos está configurado para leer una columna (Rand001, Rand002, ... Rand100), y para excluir filas específicas en función del contenido de la columna.
Además, no pude encontrar una forma sencilla de guardar diarios / archivos de texto de forma iterativa con un nombre que se actualice por iteración, por lo que es otro consejo útil aquí.
¡Gracias!
Re: Preguntas de iteración: Filtrado de datos, y nombres de guardado de archivosNo estoy seguro de a qué apunta al final, pero esta es una forma de actualizar iterativamente el filtro de datos:
dt = Abierto ( "$ SAMPLE_DATA \ big class.jmp" ) ;
dt << Nueva Columna ( "Rand001" , Fórmula ( Uniforme al azar ( 0 , 1 ))) ;
dt << Nueva Columna ( "Rand002" , Fórmula ( Uniforme al azar ( 0 , 1 ))) ;
dt << Nueva Columna ( "Rand003" , Fórmula ( Uniforme al azar ( 0 , 1 ))) ;
// Objeto de filtro de datos "en blanco"
df = dt << Filtro de datos ( Modo ( Incluir ( 1 )) , Inverso ) ;
por ( yo = 1 , yo <= 3 , yo ++,
columna = Columna ( "Rand00" || Carbonizarse ( yo )) ; // Variable col dinámica
df << eliminar todos ; // Eliminar columnas antiguas de df
df << Añadir filtro ( Columnas ( columna ) , Dónde ( columna > 0.875 )) ; // Añadir columna actual
Espere ( 2 ) ; // Retraso solo para propósitos de demostración
) ;
Pero el enfoque de Vince anterior, incluir una cláusula where en la plataforma de análisis en lugar de usar un filtro de datos puede tener más sentido aquí.
Re: Preguntas de iteración: Filtrado de datos, y nombres de guardado de archivosVince
Gracias por esta información, entiendo que mi método actual probablemente no sea el más eficiente. Si el segmento Where de su código sugerido excluirá filas con valores de celda de 1 para la columna Rand respetada, ¿cuál es la sintaxis? ¡Esto resolverá mi problema!
Re: Preguntas de iteración: Filtrado de datos, y nombres de guardado de archivosSupongo que entonces ¿cuál es el propósito de excluir? Si solo estás excluyendo para obtener un gráfico diferente cada vez, puedes hacerlo con el Dónde.
Aparte de eso, no deberías columna col.
: col == {1} // no funcionará
col == 1 // funcionará
Re: Preguntas de iteración: Filtrado de datos, y nombres de guardado de archivosGracias por esa ayuda, me ha dado una idea de mis próximos pasos. Sin embargo, lo que estaba buscando era aplicar iterativamente un filtro de datos, no ejecutar iterativamente el DA. Ejemplo, aquí hay un código de ejemplo:
dt = Tabla de datos actual () ;
columna = Columna ( "Rand00" || carbonizarse ( yo )) ;
dt = abierto ( "$ SAMPLE_DATA \ big class.jmp" ) ;
dt << Nueva Columna ( "Rand001" , Fórmula ( Entero aleatorio ( 0 , 1 ))) ;
dt << Nueva Columna ( "Rand002" , Fórmula ( Entero aleatorio ( 0 , 1 ))) ;
dt << Nueva Columna ( "Rand003" , Fórmula ( Entero aleatorio ( 0 , 1 ))) ;
DoDataFilter =
columna = Columna ( "Rand00" || carbonizarse ( yo )) ;
dt << Filtro de datos (
Modo ( Incluir ( 1 )) ,
Inverso ,
Añadir filtro (
Columnas ( "Rand00" || carbonizarse ( yo )) ,
Dónde ( : columna == { 1 })
// Donde (: "Rand00" || char (i)> 0.875 &: "Rand00" || char (i) = 1)
) ,
) ;
para ( yo = 1 , yo <= 3 , yo ++, DoDataFilter ;
columna = Columna ( "Rand00" || carbonizarse ( yo )) ; ) ;
Este código lee el error:
La cláusula WHERE no se ha especificado correctamente. en el acceso o evaluación de 'Equal',: col == / * ### * / {1} / * ### * /
¿Cómo puedo escribir la cláusula WHERE para incluir el carácter 'i', de modo que el filtro se mueva a lo largo de las filas designadas con cada iteración?
Re: Preguntas de iteración: Filtrado de datos, y nombres de guardado de archivosNo creo haber respondido a todas sus preguntas, pero esto podría ponerlo en el camino correcto.
dt = abierto ( "$ SAMPLE_DATA \ big class.jmp" ) ;
dt << Nueva Columna ( "Rand001" , Fórmula ( Entero aleatorio ( 0 , 1 ))) ;
dt << Nueva Columna ( "Rand002" , Fórmula ( Entero aleatorio ( 0 , 1 ))) ;
dt << Nueva Columna ( "Rand003" , Fórmula ( Entero aleatorio ( 0 , 1 ))) ;
para ( yo = 1 , yo <= 3 , yo ++,
columna = Columna ( "Rand00" || carbonizarse ( yo )) ;
da = dt << Discriminante (
X ( : sexo ) ,
Y ( : altura ) ,
Dónde ( columna El fila ()] == 1 ) ,
Mostrar clasificación cuenta ( 1 ) ,
Posición de rayo biplot ( El 0 , 15.5914608488282 , 1.5 ] )
) ;
da << Título ( "Rand00" || carbonizarse ( yo )) ;
da << Redibujar ;
da << diario ;
da << Cerrar ventana () ;
)
Yo usaría la declaración where o el filtro de datos local.
Espero que sea al menos algo útil.