JMP ist Pythonic! Verbesserte Python-Integration in JMP 18JMP 18 bietet eine neue Möglichkeit zur Integration mit Python. Die JMP 18-Installation enthält eine unabhängige Python-Umgebung, die für die Verwendung mit JMP konzipiert ist. Darüber hinaus verfügt JMP jetzt über einen nativen Python-Editor und JMP-spezifische Python-Pakete. Diese JMP-Python-Umgebung verfügt über eine verbesserte Konnektivität und Interaktion mit JMP, was bedeutet, dass die Verwendung von Python mit JMP noch nie so einfach war.
In dieser Reihe von Blogbeiträgen stelle ich Ihnen die neuen Möglichkeiten der Python-Integration mit JMP vor. In diesem Beitrag wird der neue Python-Skript-Editor in JMP vorgestellt. In kommenden Beiträgen behandle ich weitere neue Funktionen der Integration sowie die Paketverwaltung.
JMP Python-Skripteditor
In früheren Versionen von JMP bestand die einzige Möglichkeit, Python-Code auszuführen, darin, eine Verbindung zu einer extern installierten Python-Umgebung herzustellen und dann eine Wrapper-Funktion der JMP Scripting Language (JSL) zu verwenden, um den Python-Code an diese Umgebung zu senden. Jetzt können Sie ein Python-Skript direkt in JMP bearbeiten und übermitteln! Öffnen Sie einfach ein Python-Skript in JMP oder erstellen Sie ein neues über das Menü „Datei“ (Datei > Neu > Python-Skript).

Der neue Python-Skripteditor verfügt über Syntaxhervorhebung und ermöglicht Ihnen, auf natürlichere Weise in Python zu programmieren. Durch Klicken auf die Schaltfläche „Skript ausführen“ wird der Python-Code ausgeführt und in Python protokollierte Nachrichten werden im JMP-Protokoll aufgelistet.
jmp- und jmputils- Python-Pakete
Zusammen mit der neuen JMP-Python-Umgebung kommen zwei neue „JMP-fähige“ Python-Pakete: jmp und jmputils.
Mit dem jmp-Paket können Sie:
- Führen Sie JSL von Python aus mit jmp.run_jsl('''jsl script''') aus.
- Datentabellen öffnen, schließen und speichern.
- Erhalten Sie Informationen zu einer in JMP geöffneten Tabelle.
- Erstellen Sie JMP-Datentabellen, fügen Sie JMP-Datentabellenspalten hinzu/löschen/ändern Sie sie und fügen Sie JMP-Datentabellenzeilen hinzu/löschen Sie sie.
- Greifen Sie auf Daten in einer JMP-Datentabelle direkt im Speicher auf Spalten- oder Zellenebene zu, indem Sie nullbasierte indizierte Array-Operatoren für Datentabellen verwenden. Diese Indizierung unterstützt auch Python-Slice-Operatoren sowohl für Spalten- als auch für Zeilenindizes.
- Verwenden Sie eine JMP-Datentabelle und eine JMP-Datentabellenspalte als Sequenz für die Python-Iteration.
Mit dem jmputils-Paket können Sie:
- Verwenden Sie jmputils.create_jmp(dir_path), um ein Befehlszeilen-JMP-Pip-Skript (jpip) im angegebenen Verzeichnis zu erstellen. Dieses Skript kann dann zum Installieren von Paketen in der JMP-Python-Umgebung verwendet werden. Beachten Sie, dass für bestimmte Python-Pakete manchmal eine Installation über die Befehlszeile erforderlich ist.
- Verwenden Sie die Funktion jmputils.jpip( ), um Python-Pakete in der JMP-Python-Umgebung zu installieren.
Alle diese Funktionen werden in der Hilfedokumentation[LINK] ausführlicher beschrieben, außerdem gibt es im JMP Scripting Index eine neue Python-Kategorie, die alle diese Pakete und Funktionen auflistet.

Python-JSL-Funktionen
Wie bei früheren Versionen von JMP können Sie Python von JSL aus mit den Funktionen Python Execute( ), Python Submit( ) und Python Submit File( ) ausführen. Mit den Funktionen Python Send( ) und Python Get( ) können Sie auch Daten von und zu JMP und Python übertragen.
Zu den Änderungen an den Python-JSL-Funktionen gehören:
- Python Connect( ) unterstützt weiterhin die Erstellung eines skriptfähigen Objekts in JMP für das lokale Python.
- Python Send(data_table) erstellt jetzt ein jmp.Datatable-Objekt in Python, das eine Live-Referenz auf die JMP-Datentabelle ist, auf die im Arbeitsspeicher von Python aus zugegriffen werden kann. Zuvor wurde eine Kopie der data_table als pandas.DataFrame erstellt, indem die Tabelle als CSV-Datei auf die Festplatte exportiert wurde und Pandas die CSV-Datei lesen ließ, was bei großen Datentabellen sehr langsam sein und aufgrund der Binärdaten zu einer Verschlechterung der Daten führen konnte ->Text->Binärkonvertierung.
- Python Get(object_name):
- Wenn der Objektname ein Variablenname ist, der auf eine offene JMP-Datentabelle in Python verweist, wird eine JSL-skriptfähige Objektreferenz auf die JMP-Datentabelle zurückgegeben, auf die der Python-Variablenname verweist.
- Wenn der Objektname ein Python-Pandas-Datenrahmen ist, wird der Pandas-Datenrahmen in eine CSV-Datei geschrieben und diese Datei dann als neue JMP-Datentabelle geöffnet. Dieser Ansatz wird jedoch angesichts der neuen Möglichkeit, JMP-Datentabellen im Arbeitsspeicher aus Python zu erstellen und zu verbinden, nicht empfohlen.
Veraltete JSL-Python-Funktionen, die nicht mehr benötigt werden:
- Python Get Graphics( )
- Python-Steuerung( )
- Python Init()
- Python ist verbunden( )
- Python-Begriff( )
Zu den neuen JSL-Python-Funktionen gehören:
- Mit Python Install Packages( ) können Sie Python-Pakete in der JMP-Python-Umgebung installieren.
- Python Create JPIP( ) erstellt ein Befehlszeilenskript, das das JMP-JPIP umschließt und zum Installieren von Python-Paketen über die Befehlszeile im Betriebssystem verwendet werden kann. Das Skript wird an einen Regisseur geschrieben, der über einen Verzeichnisauswahldialog ausgewählt wird.
Automatisierung und SkripterstellungBetreff: JMP ist pythonisch! Verbesserte Python-Integration in JMP 18Gibt es Pläne, dass Workflow Builder Python als Alternative zu JSL-Code akzeptiert?
Betreff: JMP ist pythonisch! Verbesserte Python-Integration in JMP 18Es wäre hilfreich, in diesem Beitrag einen Link zur Dokumentation der beiden „JMP-fähigen Python-Pakete“ bereitzustellen.
Danke!
Eric
Betreff: JMP ist pythonisch! Verbesserte Python-Integration in JMP 18Oh, ich sehe, dass es im Artikel einen Platzhalter für einen Link zu einer solchen Dokumentation gibt, dieser muss nur durch den eigentlichen Link ersetzt werden.
Betreff: JMP ist pythonisch! Verbesserte Python-Integration in JMP 18Wenn ich meinen eigenen Python-Interpreter nicht verwenden kann, gibt es eine Lösung, dem Code eine geplante Aufgabe zuzuweisen, um diesen Python-Code in regelmäßigen Abständen auszuführen und die Daten zu verarbeiten, um das Diagramm automatisch zu generieren?
Betreff: JMP ist pythonisch! Verbesserte Python-Integration in JMP 18NEIN.
Das war zu problematisch. Bei manchen Benutzern funktionierte es einfach, aber viel zu viele Kunden hatten Probleme, es zum Laufen zu bringen. Fast ebenso wichtig: Ein in JMP ausgeführtes Python-Skript hatte keine Garantie dafür, dass es auf dem Computer eines anderen Benutzers ordnungsgemäß ausgeführt werden würde. Wahrscheinlich wäre es auch nicht der Fall, wenn es einen benutzerdefinierten Python-Installationsort gäbe. Behandeln Sie als Benutzer das von JMP bereitgestellte Python als Ihre eigene JMP-spezifische virtuelle Python-Umgebung.
Wir haben erhebliche Anstrengungen unternommen, um sicherzustellen, dass JMP Python von anderen Python-Installationen auf Ihrem System isoliert ist. Nichts hindert Sie daran, Ihre vorhandene Pipeline zu verwenden, und Sie können Pakete in die JMP-Umgebung installieren. Möglicherweise können Sie diesen Workflow in JMP integrieren. Die zusätzlichen Funktionen von JMP 18 sollten Ihnen den Import/Export von Daten zwischen JMP und einer externen Python-Pipeline erleichtern, falls gewünscht.
Wir sind davon überzeugt, dass eine getestete und verifizierte Python-Installation, die beim ersten Start von JMP ohne Konfiguration funktioniert, ein besseres Kundenerlebnis bietet. Da wir eine bekannte Python-Version und einen bekannten Python-Speicherort haben, können wir uns auf die Bereitstellung von Funktionen und Fähigkeiten konzentrieren, anstatt uns mit der Lösung von Problemen aufgrund unvorhersehbarer Python-Installationen bei Kunden herumzuschlagen. Die Stabilität und das eingebettete Python ermöglichen uns eine viel tiefere Integration. Die neue Möglichkeit, JMP-Datentabellen im Speicher von Python aus zu erstellen, zu ändern und darauf zuzugreifen, ist eine solche Funktion.
Mir ist bewusst, dass dies einen Übergang von JMP 14 auf 17 bedeutet. JMP 18 stellt eine grundlegende Änderung der Funktionen dar. Einige der anfänglichen Designentscheidungen haben dem Test der Zeit nicht standgehalten. Ich habe versucht, Inkompatibilitäten zu minimieren, aber einige Änderungen waren notwendig. Wo Änderungen notwendig waren, wurden sie in 18 vorgenommen, um sicherzustellen, dass JMP 18 eine stabile Grundlage für die Zukunft bietet.
Betreff: JMP ist pythonisch! Verbesserte Python-Integration in JMP 18Nein, nicht in naher Zukunft. Aber es wäre eine gute neue Funktionsanfrage.
Es gibt viele Dinge, die getan werden können. Die Herausforderung besteht darin, sich zunächst auf die Dinge zu konzentrieren, die allen den größten Nutzen bringen. Der Schwerpunkt liegt derzeit auf grundlegenden Problemen, insbesondere auf dem Datenzugriff und der Interoperabilität zwischen Python und JSL.
Es bleibt noch viel zu tun, um den Datentabellenzugriff von Python aus voll funktionsfähig zu machen, z. B. das Festlegen von Ausdrucksspalten, Zeilenstatusspalten, Spaltenformatierung usw. Sicherstellen, dass das Marshalling der Daten zwischen JSL und Python so viele JMP-Datentypen wie möglich umfasst.
Und wie bei jeder großen Überarbeitung zu erwarten, gibt es ein paar Bugs und kleine Versehen. Diese müssen ebenfalls behoben werden. Ein JMP-Add-In, das Python-Code verwendet, funktioniert zwar einwandfrei, aber der Add-In-Builder kennt noch keine Python-Dateien, sodass Sie die JMP-Add-In-Datei (ZIP-Archiv) manuell packen müssen. Auch wenn eine Python-Datei innerhalb eines Projekts einwandfrei läuft, weiß sie noch nicht, wie sie andere Dateien findet, die ebenfalls in der Projektdatei enthalten sind, wie etwa Datentabellen, andere Datendateien oder zusätzliche Python-Skripte. Wenn Sie auf andere Einschränkungen stoßen, die funktionieren sollten, melden Sie diese bitte dem technischen Support. Neue coole Funktionen, die die Leistung von JMP für Ihre Arbeit verbessern würden, reichen Sie diese bitte als Funktionsanfragen ein.
Betreff: JMP ist pythonisch! Verbesserte Python-Integration in JMP 18Hallo @Paul_Nelson ,
Ich habe den Wunsch geäußert, Python-Unterstützung im Workflow Builder bereitzustellen.
Eine große Win-Win-Situation:
- nahtloses Poing Pong von JSL- und Python-Code
– eine nette Erweiterung für Benutzer, die Workflow Builder bereits verwenden.
Workflow-Builder + Python
Betreff: JMP ist pythonisch! Verbesserte Python-Integration in JMP 18Neu bei JMP, das ist vielleicht eine Anfängerfrage. Ich erkunde immer noch den Blog. Wie kann ich mehr über die Verwendung von Python-Skripten in JMP erfahren? Kann ich Python-Code schreiben? Gibt es Blogs, auf die ich verweisen kann? Danke
Betreff: JMP ist pythonisch! Verbesserte Python-Integration in JMP 18Hallo @zetaVagabond1 ,
Hier sind einige meiner bevorzugten Ressourcen zum Erlernen der Verwendung von Python-Skripten in JMP:
Erste Schritte mit der Python-Integration in JMP 18
Verbessern Sie Ihre Python-Kenntnisse mit JMP
Akademisches Webinar: Integration von JMP und Python
@Paul_Nelson hat auch mehrere Blogbeiträge im JMPer Cable Blog .
Betreff: JMP ist pythonisch! Verbesserte Python-Integration in JMP 18Bitte schauen Sie sich den Scripting Index an. Dort finden Sie Dokumentation und Beispiele zur Funktionalität. Beim Arbeiten mit JSL gibt es eine Reihe von Funktionen wie value = Python Get( py_var ); Python Send( jsl_var ); Python Submit( "python code");
Für Python gibt es im Skriptindex eine eigene Kategorie „Python“ auf oberster Ebene, die die Verwendung des JMP- Importpakets und des JMPutils- Pakets detailliert beschreibt. Das JMP- Paket bietet Python-Schnittstellen zu JMP-Funktionen, darunter das Erstellen, Lesen und Schreiben von Datentabellen aus Python sowie die Möglichkeit, JSL aus Python-Skripten auszuführen. jmp.run_jsl('JSL-Code'). JMPutils enthält die Funktion jmputils.jpip( ), die einen Wrapper über Pythons pip() darstellt und sicherstellt, dass installierte Pakete in der isolierten privaten Umgebung für die Python-Integration von JMP landen.
Betreff: JMP ist pythonisch! Verbesserte Python-Integration in JMP 18Kurzer Hinweis: Die Python-Integration in JMP ist eine meiner Lieblingsfunktionen von JMP v18. Wir verfügen über eigene Python-Pakete für Datentransformationen und andere Funktionen. JMP kann diese Funktionen problemlos importieren und ermöglicht es mir, neue Spaltendaten aus vorhandenen Daten zu erstellen und direkt in JMP zurückzuübertragen. Erst neulich musste ich eine spezielle Koordinatentransformation einiger Daten in einer JMP-Datentabelle durchführen, und die Erstellung der neuen Spalten mit der Python-Funktion von JMP dauerte nur wenige Minuten.
Ein großes Lob an Paul und andere für diesen sauberen/beeindruckenden ersten Schritt in Richtung Python-Kompatibilität!