Iterationsfragen: Datenfilterung und Speichern von Dateien<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo,
Ich frage mich, wie Sie einen Code einrichten, der iterativ eine Analyse anhand eines bestimmten Datenfilters durchführt, und dann diese Analyse für einen neuen Datenfilter wiederholen. Der Datenfilter ist so eingestellt, dass Zeilen basierend auf der Anwesenheit einer 1 oder 0 in einer Spalte ausgeschlossen werden. Die Spalten sind in der sequenziellen Reihenfolge. Hier ist ein Beispielskript:
dt = Öffnen ( "Hyperspectral_DataCleanedOrdered.jmp" ) ;
dt << Datenfilter (
Modus ( Umfassen ( 1 )) .
Inverse .
Filter hinzufügen (
Säulen ( Rand001 ) .
Woher ( : Rand001 > = 0,875 & : Rand001 <= 1 )
) .
) ;
Verbrecher =
Ausdruck (
da = dt << Diskriminierung (
X ( : Site-Typ ) .
Y (
:
: Name ( "366" ) .
: Name ( "367" ) .
: Name ( "368" ) .
: Name ( "369" ) .
: Name ( "370" ) .
: Name ( "371" ) .
: Name ( "372" ) .
: Name ( "373" ) .
: Name ( 374 ) .
: Name ( 375 ) .
: Name ( "376" ) .
: Name ( "377" ) .
: Name ( "378" ) .
: Name ( "379" ) .
: Name ( "380" ) .
: Name ( "381" ) .
: Name ( "382" ) .
)
) ;
zum ( ich = 1 . ich <= 10 . ich ++
Verbrecher ;
da << StepwiseVariableSelection ;
zum ( k = 1 . k <= ich . k ++ da << Schritt vorwärts ) ;
da << applyThisModel ;
daRep = da << Bericht ;
daRep [ "Zusammenfassungen" ] << wählen ;
daRep [ "Zusammenfassungen" ] << Tagebuch ( "test1" ) ;
Aktuelle Zeitschrift () << Anhängen ( Textfeld ( "Test1" )) ;
daRep << Fenster schließen ;
) ;
Aktuelle Zeitschrift () << Journal speichern ( "Rand001" ) [Idealerweise wird dieser Name bei jeder Iteration aktualisiert.]
Die Diskriminanzanalyse befindet sich in einer Schleife für eine bestimmte Anzahl schrittweise variabler Iterationen (10): Ich möchte, dass jede 1-10-Iteration der Diskriminanzanalyse für jede Iteration eines Datenfilters auftritt. Der Datenfilter ist so eingestellt, dass er eine Spalte liest (Rand001, Rand002, ... Rand100) und dann bestimmte Zeilen basierend auf dem Inhalt der Spalte ausschließt.
Ich konnte auch keine einfache Möglichkeit finden, Zeitschriften / Textdateien mit einem Namen, der die Aktualisierung aktualisiert, iterativ zu speichern, so dass dies ein weiterer nützlicher Hinweis ist.
Vielen Dank!
Re: Iterationsfragen: Datenfilterung und Speichern von DateienSie sind sich nicht sicher, worauf Sie am Ende abzielen, aber dies ist eine Möglichkeit, den Datenfilter iterativ zu aktualisieren:
dt = Öffnen ( "$ SAMPLE_DATA \ big class.jmp" ) ;
dt << Neue Spalte ( "Rand001" . Formel ( Zufällige Uniform ( 0 . 1 ))) ;
dt << Neue Spalte ( "Rand002" . Formel ( Zufällige Uniform ( 0 . 1 ))) ;
dt << Neue Spalte ( "Rand003" . Formel ( Zufällige Uniform ( 0 . 1 ))) ;
// "Leeres" Datenfilterobjekt
df = dt << Datenfilter ( Modus ( Umfassen ( 1 )) . Inverse ) ;
Zum ( ich = 1 . ich <= 3 . ich ++
col = Säule ( "Rand00" || Verkohlen ( ich )) ; // Dynamische col-Variable
df << alles löschen ; // Alte Spalten aus df entfernen
df << Filter hinzufügen ( Säulen ( col ) . Woher ( col > 0,875 )) ; // Aktuelle Spalte hinzufügen
Warten ( 2 ) ; // Verzögerung nur zu Demonstrationszwecken
) ;
Der oben beschriebene Ansatz von Vince, anstelle der Verwendung eines Datenfilters eine where-Klausel in die Analyseplattform aufzunehmen, kann hier jedoch sinnvoller sein.
Re: Iterationsfragen: Datenfilterung und Speichern von DateienVince,
Vielen Dank für diese Informationen. Ich verstehe, dass meine derzeitige Methode wahrscheinlich nicht die effizienteste ist. Wenn das Where-Segment Ihres vorgeschlagenen Codes tatsächlich Zeilen mit Zellwerten von 1 für die entsprechende Rand-Spalte ausschließt, wie lautet dann die Syntax? Das löst mein Problem!
Re: Iterationsfragen: Datenfilterung und Speichern von DateienIch denke dann, was ist der Zweck des Ausschlusses? Wenn Sie nur ausschließen, so dass Sie jedes Mal ein anderes Diagramm erhalten, können Sie dies mit dem Where tun.
ansonsten sollten Sie keine Spalte col.
: col == {1} // funktioniert nicht
col == 1 // wird funktionieren
Re: Iterationsfragen: Datenfilterung und Speichern von DateienVielen Dank für diese Hilfe, sie hat mir einen Einblick in meine nächsten Schritte gegeben. Was ich jedoch suchte, war, einen Datenfilter iterativ anzuwenden, nicht den DA iterativ auszuführen. Beispiel, hier ist ein Beispielcode:
dt = Aktuelle Datentabelle () ;
col = Säule ( "Rand00" || verkohlen ( ich )) ;
dt = öffnen ( "$ SAMPLE_DATA \ big class.jmp" ) ;
dt << Neue Spalte ( "Rand001" . Formel ( Zufällige ganze Zahl ( 0 . 1 ))) ;
dt << Neue Spalte ( "Rand002" . Formel ( Zufällige ganze Zahl ( 0 . 1 ))) ;
dt << Neue Spalte ( "Rand003" . Formel ( Zufällige ganze Zahl ( 0 . 1 ))) ;
doDataFilter =
col = Säule ( "Rand00" || verkohlen ( ich )) ;
dt << Datenfilter (
Modus ( Umfassen ( 1 )) .
Inverse .
Filter hinzufügen (
Säulen ( "Rand00" || verkohlen ( ich )) .
Woher ( : col == { 1 })
// Wo (: "Rand00" || char (i)> 0,875 &: "Rand00" || char (i) = 1)
) .
) ;
zum ( ich = 1 . ich <= 3 . ich ++ doDataFilter ;
col = Säule ( "Rand00" || verkohlen ( ich )) ; ) ;
Dieser Code liest den Fehler:
Die WHERE-Klausel wurde nicht korrekt angegeben. bei Zugriff oder Bewertung von 'Equal': col == / * ### * / {1} / * ### * /
Wie kann ich die WHERE-Klausel schreiben, die das Zeichen 'i' enthält, damit sich der Filter mit jeder Iteration entlang der festgelegten Zeilen bewegt?
Re: Iterationsfragen: Datenfilterung und Speichern von DateienIch glaube nicht, dass ich alle Ihre Fragen beantwortet habe, aber das könnte Sie auf den richtigen Weg bringen.
dt = öffnen ( "$ SAMPLE_DATA \ big class.jmp" ) ;
dt << Neue Spalte ( "Rand001" . Formel ( Zufällige ganze Zahl ( 0 . 1 ))) ;
dt << Neue Spalte ( "Rand002" . Formel ( Zufällige ganze Zahl ( 0 . 1 ))) ;
dt << Neue Spalte ( "Rand003" . Formel ( Zufällige ganze Zahl ( 0 . 1 ))) ;
zum ( ich = 1 . ich <= 3 . ich ++
col = Säule ( "Rand00" || verkohlen ( ich )) ;
da = dt << Diskriminierung (
X ( : Sex ) .
Y ( : Höhe ) .
Woher ( col [ Reihe ()] == 1 ) .
Klassifikationswerte anzeigen ( 1 ) .
Biplot Ray Position ( [ 0 . 15.5914608488282 . 1,5 ] )
) ;
da << Titel ( "Rand00" || verkohlen ( ich )) ;
da << Neu zeichnen ;
da << Tagebuch ;
da << Fenster schließen () ;
)
Ich würde entweder die where-Anweisung oder den lokalen Datenfilter verwenden.
hoffe es ist zumindest etwas nützlich.