JMP® 18: Mehr als nur die Befriedigung von PythonistenVor einem Jahr machten JMP-Benutzer, die auch Python verwendeten, deutlich, dass sie der Meinung waren, dass unsere Python-Schnittstelle nicht optimal sei. Autsch! Wir dachten, dass die JMP- und Python-Integration, die wir vor mehr als fünf Jahren eingeführt haben, ins Schwarze getroffen hat. Als wir erkannten, dass es nur zufriedenstellend war (mit anderen Worten, dass es gut genug, aber nicht das Beste war), beschlossen wir, die Herausforderung direkt anzugehen.
JMP Principal Systems Developer Paul Nelson leitete die Bemühungen, in JMP 18 eine konsistente, voll funktionsfähige, integrierte Entwicklungsumgebung zum Schreiben und Ausführen von Python-Skripten innerhalb von JMP zu schaffen.
Ich habe kürzlich mit Paul über die aktualisierte JMP- und Python-Integration gesprochen. Paul betonte, dass das Ziel darin bestehe, eine deutlich produktivere Umgebung für Python-Entwickler bereitzustellen. Zu den wichtigsten Verbesserungen gehören:
Eine konsistente Umgebung, die sofort nach der Installation funktioniert, ohne dass eine Konfiguration erforderlich ist. Python unterstützt eine unbegrenzte Anzahl von Python-Umgebungen für Kunden. Das Hinzufügen neuer JMP- und Python-Funktionen, die nicht in unbegrenzten Python-Umgebungen von Kunden getestet werden konnten, war unhaltbar. Die Lösung? JMP 18 enthält eine eingebettete Version von Python, die die Grundlage für eine vollständig getestete Umgebung bildet, die sofort nach der Installation funktioniert.
Direkter Speicherzugriff auf Python-Datentabellen in einer Live-Umgebung. In früheren Versionen haben Python-Benutzer auf eine Kopie einer JMP-Datentabelle zugegriffen. Jetzt bietet JMP 18 direkten Zugriff auf JMP-Datentabellen aus der Python-Umgebung, sodass Python-Benutzer über Python-Skripte in JMP auf JMP-Tabellen zugreifen, diese erstellen und ändern können.
Ein neuer Python-Skripteditor, der Python-Kommentare und Code-Färbung sowie ein eingebettetes Protokoll verwendet. Die vorherige Integration verwendete JMP Scripting Language (JSL). JSL war JSL-Entwicklern vertraut, war jedoch für JMP-Benutzer mit Python-Erfahrung, aber ohne JSL-Erfahrung oft nicht einladend. In JMP 18 können Benutzer Python-Skripte direkt im JMP-Skripteditor öffnen und ausführen und JSL über ihre Python-Skripte ausführen. Der JMP Scripting Index dokumentiert und bietet Beispiele für die neue Funktionalität. Eine konsistente Umgebung für Python-Skripte bietet auch eine Grundlage für das Schreiben von Add-Ins mit Python und JSL.
Hören Sie mehr von Paul:
Erwägen Sie, sich für Pauls Live-Webinar „Entwickler-Tutorial: Neue Python-Integration und Skriptfunktionen in JMP 18“ am 21. März anzumelden, um zu hören, wie er alle Details erläutert und die Benutzeroberfläche demonstriert. Und wenn Sie am JMP Discovery Summit in Manchester, Großbritannien , teilnehmen, können Sie Paul im Rahmen der Morgenplenumssitzung am 6. März sprechen hören.
Da ich kein Python-Programmierer bin, hatte ich übrigens nicht das Gerücht gehört, dass der Python-Erfinder Guido van Rossum Skripte aus „Monty Pythons Flying Circus“ las, als er mit der Arbeit an der neuen Sprache begann. Er wollte einen kurzen, einzigartigen und faszinierenden Namen und beschloss, ihn Python zu nennen. Klingt plausibel!
Der leitende Systementwickler von JMP, Paul Nelson, leitete die Bemühungen, in JMP 18 eine konsistente, voll funktionsfähige, integrierte Entwicklungsumgebung zum Schreiben und Ausführen von Python-Skripten innerhalb von JMP zu schaffen. Das Ergebnis? Eine produktivere Umgebung für Python-Entwickler, die sofort nach der Installation funktioniert, direkten Speicherzugriff auf Python-Datentabellen in einer Live-Umgebung sowie einen integrierten Python-Skripteditor bietet, der Python-Kommentare und Code-Färbung sowie ein eingebettetes Protokoll verwendet.
Automatisierung und SkripterstellungBetreff: JMP® 18: Mehr als nur die Befriedigung von PythonistenWow, das klingt großartig!
Betreff: JMP® 18: Mehr als nur die Befriedigung von PythonistenKommentar/Frage zum Zurückbringen von Daten aus Python nach JMP.
Derzeit können wir Folgendes tun:
dt = Python Get( df )
Dabei ist „df“ ein Python-Datenrahmen.
Mir ist aufgefallen, dass der obige Befehl tatsächlich den Datenrahmen in eine CSV-Datei im Ordner „$TEMP“ schreibt, dann eine JSL zum Einlesen aufruft und dann diese temporäre CSV-Datei löscht. Bei großen Dateien entsteht offensichtlich ein Mehraufwand sowohl beim Schreiben der Datei als auch beim Scannen/Einlesen.
Es wäre sehr schön, wenn dies eine In-Memory-Übertragung direkt von Python nach JMP wäre
Betreff: JMP® 18: Mehr als nur die Pythonistas zufriedenstellenNur aus Neugier: Wird JMP v18 Formelspalten mit Python-Code unterstützen?
Betreff: JMP® 18: Mehr als nur die Pythonistas zufriedenstellenIn JMP 14-17 funktionierten sowohl Python Send ( dt ) als auch Python Get ( df ) durch Speichern von CSV in einer temporären Datei. Dies ist eine der wichtigsten Änderungen in JMP 18. Mit JMP 18 erstellt Python Send ( dt ) jetzt ein jmp.DataTable-Objekt in Python. Dies ist keine Kopie, sondern ein Live-Im-Speicher-Verweis auf das Datentabelle. Sie kann direkt aus Python gelesen und geändert werden. Wenn Sie aus JSL ein Python Get (dt) ausführen, erhalten Sie die Datentabellenreferenz im Arbeitsspeicher. Aus Kompatibilitätsgründen wurde die ursprüngliche Python Get(df);-Methode beibehalten, um einen Pandas-Datenrahmen als Kopie in eine JMP-Datentabelle zu kopieren.
Sie können jetzt einen Datenrahmen in Python verwenden, einfach die Datenrahmenspalten durchlaufen und im Speicher die entsprechende JMP-Datentabelle erstellen. Siehe jmp.DataTable. unter der neuen Python-Kategorie im Skripting-Index von JMP 18. Es gibt auch ein Python-Unterverzeichnis mit Beispielskripten. Dort finden Sie ein JMP2pandas.py-Skript, das zwei Möglichkeiten zeigt, im Speicher einen pandas.DataFrame aus einem jmp.DataTable-Objekt zu erstellen, sowie ein Beispiel zum Erstellen des jmp.DataTable-Objekts aus dem pandas.DataFrame (im Speicher).
# create JMP DataTable from pandas DataFrame
dt2 = jmp.DataTable('BC2',df.shape[0])
for j in range( df.shape[1] ):
dt2.new_column(dt[j].name, dt[j].dtype)
dt2[j] = list(df.iloc[:,j])
Wobei df ein Pandas-Datenrahmen und dt2 die neue JMP-Datentabelle ist. (Beachten Sie, dass dt auch ein JMP-jmp.DataTable-Objekt ist, der Typparameter ist ein jmp.DataType-Aufzählungswert.) Die Beispieldatei „Big Class.jmp“ wurde als dt geöffnet, erstellt einen Pandas.DataFrame und erstellt dann dt2 aus dem Datenrahmen.
Betreff: JMP® 18: Mehr als nur die Pythonistas zufriedenstellenFormelspalten unterstützen in JMP 18 keinen Python-Code. Dies wird derzeit untersucht und wäre eine großartige Funktion. Es musste eine enorme Menge an Infrastruktur hinzugefügt werden, um JMP 18 robust zu machen, es beim Start funktionsfähig zu machen, einen Python-fähigen Skripteditor zu unterstützen, die Fehlerberichterstattung zu verbessern, einen Skriptindex hinzuzufügen und eine Brücke von Python zu JMP zu schlagen. Viele Dinge, die seit einiger Zeit fehlten, wurden nun verbessert, um eine einladende und produktive Python-Umgebung innerhalb von JMP zu schaffen.
Jetzt, wo die Schwerstarbeit erledigt ist, ist für uns noch lange nicht Schluss. Es kommt noch viel mehr.