So verbessern Sie die Leistung, wenn Sie eine kategoriale Spalte in eine numerische umwandelnIch extrahiere Daten, verarbeite Daten entlang der Produktionslinie aus einer Datenbank, die Daten als Parameterwert für Paare zurückgibt (Wert kann fehlen).
Ich verwende eine Tabellenaufteilung, um Daten mit Parametern als Spalte zu haben (in vielen Spalten werden mehr fehlende Daten erwartet).
Dann führe ich ein Skript aus, um das Zeichen gegebenenfalls in ein numerisches Zeichen umzuwandeln.
Das Problem ist, dass die Anzahl der Spalten sehr hoch sein kann, in meinem Beispiel um 60000 (11 Zeilen im Beispiel)
In meinem Beispiel habe ich also 8 Sekunden Zeit, um Daten aus der Datenbank zurückzugewinnen.
18 Sekunden, um den Algorithmus anzuwenden, der alle Spalten überprüft, die zu 80 Sekunden werden, um auch die Spalte zu transformieren.
Kann jemand einen effizienteren Weg vorschlagen, um das Endergebnis zu erzielen?
Dies ist der Algorithmus, den ich verwendet habe:
names = <FONT face="Courier New" size="3">current data table()</FONT> << Get Column Names( Character, String );
for(I = 1, I <=N items(names), I++,
values= column( names[I]) << get values;
numerical=1;
for(j=1, j<=N items(values),j++,
if(!Is Missing(values[j]) & Is Missing( Num(values[j]) ),
numerical=0;
break();
);
);
if(numerical,
column( names[I]) << data Type("Numeric") << set Modeling Type ("Continuous");
);
);SkriptingBetreff: So verbessern Sie die Leistung, wenn Sie kategoriale Spalten in numerische umwandelnVielleicht funktioniert das schneller?
Es vermeidet die Zeilenschleife und lässt die Tabellenalgorithmen von JMP funktionieren, sofern sie effizienter sind.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// set all columns to character
For( i = 1, i <= N Cols( dt ), i++,
Column( i ) << set data type( character )
);
wait(3);
// copy data table
dt_copy = dt << Subset( All rows, Selected columns only( 0 ) );
// Convert only numerics, use copied table for testing
For( i = 1, i <= N Cols( dt ), i++,
Column( dt_copy, i ) << set data type( numeric );
If( Col N Missing( Column( dt_copy, i ) ) == Col N Missing( Column( dt, i ) ),
Column( dt, i ) << set data type( numeric ) << set modeling type( continuous )
);
);
Close(dt_copy, nosave );
Betreff: So verbessern Sie die Leistung, wenn Sie kategoriale Spalten in numerische umwandelnDer JSL-Debugger verfügt außerdem über einen Profiler, der anzeigt, welche Anweisungen am häufigsten verwendet werden. Mir ist nicht klar, warum 60.000 Spalten in 11 Zeilen so lange dauern sollten, aber der Profiler schlägt möglicherweise etwas vor. (Wenn ich raten würde, könnte ich die tatsächliche Änderung von Zeichen zu Zahlen erraten, nicht alle Schleifen.)
Verwenden Sie den Profiler des Debuggers - wählen Sie das Debug-Skript aus, drücken Sie das Symbol #clock und dann die Taste go.
Drücken Sie zuerst das Symbol #clock
das Ergebnis
Heat Map Farben!
Betreff: So verbessern Sie die Leistung, wenn Sie kategoriale Spalten in numerische umwandelnSehr clevere Methode, George! Leider sind die Leistungen schlechter als die, die ich verwendet habe. Der Grund dafür ist, dass der Spaltenwechsel zweimal angewendet wird
Die Änderung des Spaltentyps ist die zeitaufwändigste Operation, da ich bestätigt habe, den Vorschlag von Craige anzuwenden, um die Anweisungsleistungen zu bewerten.
Ich habe eine weitere Analyse durchgeführt, indem ich die Tabelle "anonymisiert" habe (dh nur Zeichendaten, sowohl Spalten- als auch Zeilendaten, geändert habe).
Die Leistung verbesserte sich von 80 Sekunden auf 55 Sekunden. Dies deutet darauf hin, dass die Zeichenfolgen einen signifikanten Einfluss haben (8315 Zeichenspalten gegenüber 55729 numerischen)
Ich habe den Vergleich zwischen den beiden Methoden und der von mir verwendeten Datentabelle angehängt.