Spaltendatentyp für JSON Panda Split festlegenIch verwende JSL, um eine JSON-Datei im Panda Split-Format zu importieren. Dabei werden alle Spalten als Zeichen importiert, obwohl sie in der Praxis eine Kombination aus Zeichen und Zahlen sein sollten. Ich kann ein JSL-Skript schreiben, das alle Spalten in Zahlen konvertiert, aber dadurch werden auch die Zeichenspalten konvertiert (und ihre Daten gelöscht).
Kann ich mithilfe von JSL erkennen, ob ein Datentyp ein Zeichen oder ein numerischer Datentyp sein soll und ihn entsprechend konvertieren? Oder gibt es eine Möglichkeit, dies während des Importschritts zu tun? Ich kenne die Spalten für eine bestimmte Datei nicht im Voraus.
JMP 18.1.1
dt_cols = dt << Get Column Names();
For Each({col, i}, dt_cols,
Try(
// No warning, just converts everything.
As Column(dt, col) << Data Type("Numeric");
As Column(dt, col) << Modeling Type( "Continuous" );
);
);DatenzugriffWindowsBetreff: Spaltendatentyp für JSON Panda Split festlegenIch habe kein geeignetes Beispiel, um dies auszuprobieren (JMP stürzt einfach mit meinem JSON-Beispiel ab, das ich schnell erhalten habe), daher kann ich nicht testen, ob es eine Möglichkeit gibt, dies im JSON-Assistenten zu tun.
Sie können nur numerische Werte konvertieren, indem Sie zuerst die Werte aus der Spalte überprüfen und sie dann entsprechend konvertieren.
Eine Möglichkeit, die Konvertierung durchzuführen, besteht darin, zunächst einige Werte der Spalte zu überprüfen und dann zu konvertieren, wenn sie in Ordnung sind. Einige Optionen, die Sie überprüfen könnten
- Überprüfen Sie einfach den ersten Wert
- Ersten und letzten Wert prüfen
- Alle Werte prüfen
- Zufällige Teilmenge von Werten prüfen
Heutzutage würde ich die Prüfung mit Num(< Datentyp der Spalte ändern. Ich denke, Sie können auch InFormat() verwenden, um die „beste“ Übereinstimmung zu prüfen (könnte sogar besser sein als Num()).
Betreff: Spaltendatentyp für JSON Panda Split festlegenJa, das funktioniert. Danke, Jarmo.
Betreff: Spaltendatentyp für JSON Panda Split festlegenHier ist eine JSL-Implementierung als Referenz:
rows_to_check_for_conversion = 100;
// Get column names.
dt_cols = dt << Get Column Names();
// Change data types.
For Each( {c, i}, dt_cols,
non_missing_rows = dt << Get Rows Where( !Is Missing( As Column( dt, c ) ) );
row_check = 0;
convert_to_number = 1;
While( row_check < rows_to_check_for_conversion & row_check < N Items( non_missing_rows ) & convert_to_number == 1,
row_check = row_check + 1;
r = non_missing_rows[row_check];
val = Num( dt:c[r] );
If( Is Missing( val ),
convert_to_number = 0
);
);
If( convert_to_number == 1,
As Column( dt, c ) << Data Type( "Numeric" );
As Column( dt, c ) << Modeling Type( "Continuous" );
);
);Betreff: Spaltendatentyp für JSON Panda Split festlegenEinige Änderungen, die sinnvoll sein könnten: Verwenden Sie Column() anstelle von As Column() und prüfen Sie, ob Sie << Restrict in Ihren Num()-Aufruf einfügen möchten (ich habe es für meine Version von so etwas getan).