Domande di iterazione: filtraggio dei dati e denominazione di salvataggio dei file<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ciao,
Mi chiedo come impostare un codice che esegua iterativamente un'analisi in base a un filtro dati specifico e quindi ripetere l'analisi per un nuovo filtro dati. Il filtro dati è impostato per escludere le righe in base alla presenza di 1 o 0 in una colonna e le colonne sono in ordine sequenziale. Ecco uno script di esempio:
dt = Aperto ( "Hyperspectral_DataCleanedOrdered.jmp" ) ;
dt << Filtro dati (
Modalità ( Includere ( 1 )) ,
Inverso ,
Aggiungi filtro (
colonne ( Rand001 ) ,
Dove ( : Rand001 > = 0.875 & : Rand001 <= 1 )
) ,
) ;
doDiscriminant =
expr (
da = dt << Discriminante (
X ( : Tipo di sito ) ,
Y (
:
: Nome ( "366" ) ,
: Nome ( "367" ) ,
: Nome ( "368" ) ,
: Nome ( "369" ) ,
: Nome ( "370" ) ,
: Nome ( "371" ) ,
: Nome ( "372" ) ,
: Nome ( "373" ) ,
: Nome ( "374" ) ,
: Nome ( "375" ) ,
: Nome ( "376" ) ,
: Nome ( "377" ) ,
: Nome ( "378" ) ,
: Nome ( "379" ) ,
: Nome ( "380" ) ,
: Nome ( "381" ) ,
: Nome ( "382" ) ,
)
) ;
per ( io = 1 , io <= 10 , io ++,
doDiscriminant ;
da << StepwiseVariableSelection ;
per ( K = 1 , K <= io , K ++, da << passo in avanti ) ;
da << applyThisModel ;
daRep = da << rapporto ;
daRep [ "Riepiloghi dei punteggi" ] << selezionare ;
daRep [ "Riepiloghi dei punteggi" ] << rivista ( "Test1" ) ;
Giornale corrente () << Aggiungere ( casella di testo ( "Test1" )) ;
daRep << chiudi la finestra ;
) ;
Giornale corrente () << Salva il diario ( "Rand001" ) [Idealmente, questo nome si aggiorna con ogni iterazione]
L'analisi discriminante è in loop per una certa quantità di iterazioni di selezione variabili stepwise (10): Quello che voglio è che ogni iterazione 1-10 dell'analisi discriminante si verifichi per ogni iterazione di un filtro dati. Il filtro dati è impostato per leggere una colonna (Rand001, Rand002, ... Rand100) e di escludere righe specifiche in base al contenuto della colonna.
Inoltre, non ero in grado di trovare un modo semplice per salvare i diari / file di testo in modo iterativo con un nome che aggiorna l'iterazione, quindi questo è un altro consiglio utile qui.
Grazie!
Ri: Domande di iterazione: filtraggio dei dati e denominazione di salvataggio dei fileNon sei sicuro di cosa miri alla fine, ma questo è un modo per aggiornare iterativamente il filtro dati:
dt = Aperto ( "$ SAMPLE_DATA \ big class.jmp" ) ;
dt << Nuova colonna ( "Rand001" , Formula ( Uniforme casuale ( 0 , 1 ))) ;
dt << Nuova colonna ( "Rand002" , Formula ( Uniforme casuale ( 0 , 1 ))) ;
dt << Nuova colonna ( "Rand003" , Formula ( Uniforme casuale ( 0 , 1 ))) ;
// Oggetto filtro dati "vuoto"
df = dt << Filtro dati ( Modalità ( Includere ( 1 )) , Inverso ) ;
Per ( io = 1 , io <= 3 , io ++,
col = Colonna ( "Rand00" || carbonizzare ( io )) ; // Variabile col dinamico
df << cancella tutto ; // Rimuovi vecchie colonne da df
df << aggiungi filtro ( colonne ( col ) , Dove ( col > 0.875 )) ; // Aggiungi la colonna corrente
Aspettare ( 2 ) ; // Ritarda solo per scopi dimostrativi
) ;
Ma l'approccio di Vince sopra, per includere una clausola where nella piattaforma di analisi invece di utilizzare un filtro dati può avere più senso qui.
Ri: Domande di iterazione: filtraggio dei dati e denominazione di salvataggio dei fileVince,
Grazie per queste informazioni, capisco che il mio attuale metodo probabilmente non è il più efficiente. Se il segmento Where del codice suggerito escluderà effettivamente le righe con valori cella di 1 per la rispettiva colonna Rand, qual è la sintassi? Questo risolverà il mio problema!
Ri: Domande di iterazione: filtraggio dei dati e denominazione di salvataggio dei fileImmagino allora qual è lo scopo di escludere? Se stai escludendo solo in modo da ottenere un grafico diverso ogni volta, puoi farlo con il Dove.
a parte questo, non dovresti colare la colonna col.
: col == {1} // non funzionerà
col == 1 // funzionerà
Ri: Domande di iterazione: filtraggio dei dati e denominazione di salvataggio dei fileGrazie per l'aiuto, mi ha dato un'idea dei miei prossimi passi. Però, quello che stavo cercando era applicare in modo iterativo un filtro dati, non eseguire in modo iterativo il DA. Esempio, ecco un codice di esempio:
dt = Tabella dei dati corrente () ;
col = Colonna ( "Rand00" || carbonizzare ( io )) ;
dt = Aperto ( "$ SAMPLE_DATA \ big class.jmp" ) ;
dt << Nuova colonna ( "Rand001" , Formula ( Numero intero casuale ( 0 , 1 ))) ;
dt << Nuova colonna ( "Rand002" , Formula ( Numero intero casuale ( 0 , 1 ))) ;
dt << Nuova colonna ( "Rand003" , Formula ( Numero intero casuale ( 0 , 1 ))) ;
doDataFilter =
col = Colonna ( "Rand00" || carbonizzare ( io )) ;
dt << Filtro dati (
Modalità ( Includere ( 1 )) ,
Inverso ,
Aggiungi filtro (
colonne ( "Rand00" || carbonizzare ( io )) ,
Dove ( : col == { 1 })
// Dove (: "Rand00" || char (i)> 0.875 &: "Rand00" || char (i) = 1)
) ,
) ;
per ( io = 1 , io <= 3 , io ++, doDataFilter ;
col = Colonna ( "Rand00" || carbonizzare ( io )) ; ) ;
Questo codice legge l'errore:
La clausola WHERE non è stata specificata correttamente. in accesso o valutazione di 'Uguale',: col == / * ### * / {1} / * ### * /
Come posso scrivere la clausola WHERE per includere il carattere "i", in modo che il filtro si sposti lungo le righe designate con ciascuna iterazione?
Ri: Domande di iterazione: filtraggio dei dati e denominazione di salvataggio dei fileNon penso di aver risposto a tutte le tue domande, ma questo potrebbe metterti sulla buona strada.
dt = Aperto ( "$ SAMPLE_DATA \ big class.jmp" ) ;
dt << Nuova colonna ( "Rand001" , Formula ( Numero intero casuale ( 0 , 1 ))) ;
dt << Nuova colonna ( "Rand002" , Formula ( Numero intero casuale ( 0 , 1 ))) ;
dt << Nuova colonna ( "Rand003" , Formula ( Numero intero casuale ( 0 , 1 ))) ;
per ( io = 1 , io <= 3 , io ++,
col = Colonna ( "Rand00" || carbonizzare ( io )) ;
da = dt << Discriminante (
X ( : sesso ) ,
Y ( : altezza ) ,
Dove ( col [ riga ()] == 1 ) ,
Mostra i conteggi di classificazione ( 1 ) ,
Biplot Ray Position ( [ 0 , 15,5914608488282 , 1.5 ] )
) ;
da << Titolo ( "Rand00" || carbonizzare ( io )) ;
da << Ridisegna ;
da << rivista ;
da << Chiudi la finestra () ;
)
Vorrei utilizzare l'istruzione where o il filtro locale dei dati.
spero che sia almeno in qualche modo utile.