Da Sie dies lesen, wissen Sie wahrscheinlich, dass Python ein häufig verwendetes Open-Source-Tool ist, das von Wissenschaftlern und Ingenieuren – einige eifriger als andere, möchte ich hinzufügen – zur Lösung verschiedener Probleme eingesetzt wird .
Meine bisherigen Gespräche mit JMP®-Benutzern lassen darauf schließen, dass die meisten von ihnen Python-Workflows entwickeln, um vorgelagerte Aufgaben beim Zugriff auf Datenquellen zu bewältigen, anstatt Python beispielsweise für die maschinellen Lernaufgaben zu verwenden, für die es normalerweise verwendet wird. Angesichts der schwindelerregenden Vielfalt einzigartiger Dateitypen aus einer Lawine unterschiedlicher Instrumente in jeder Branche ist Python die bevorzugte Methode für den Datenzugriff, weil – Gott sei Dank! – wahrscheinlich irgendjemand irgendwo ein Framework erstellt hat, um die Dateien dazu zu zwingen, ihre Geheimnisse preiszugeben.
Mein anfängliches Interesse an der Python-Integration von JMP war ebenfalls auf den Datenzugriff ausgerichtet. Bevor ich zu JMP kam, arbeitete ich in der Kardiologieabteilung eines örtlichen Krankenhauses. Als JMP erstmals die Plattform Functional Data Explorer (FDE) veröffentlichte, schienen EKG-Daten (EKG = EC ...


Ein winziges Problem: Alle Beispiele für EKG-Daten, die ich finden konnte, verwenden den Dateistandard WFDB (für „Waveform Database“) und beinhalten Binärformate, die JMP nicht nativ öffnet. Glücklicherweise ergänzt die überarbeitete JMP- und Python-Integration das JMP-Menü jetzt um Zugriff auf alle möglichen Dateitypen, wofür ich mich erneut bei den Problemlösern bedanke, die großzügig Python-Pakete für diese Aufgabe erstellen.
Nachdem ich die EKG-Daten und das wfdb- Python-Paket von PhysioNet.org identifiziert hatte, ermöglichten mir die neuen, in die JMP- und Python-Integration integrierten Tools Folgendes:
- Ziehen Sie die EKG-Daten über Python aus den WFDB-Dateistrukturen.
- Erstellen Sie JMP-Datentabellen und füllen Sie sie über Python.
- Übergeben Sie die verbleibenden Aufgaben an JMP, indem Sie eine JMP Scripting Language (JSL)-Datei mit Schritten ausführen, die mit JMP Workflow Builder erstellt wurden – der den Code meiner JMP-Point-and-Click-Aktionen erfasst – für die Datenvorbereitung, Visualisierung und FDE-Analyse.
Der „Python-in-a-box“-Ansatz von JMP umfasst einen integrierten Python-Editor sowie vorinstallierte Pakete ( jmp und jmputils), mit denen ich:
- Installieren Sie andere für die Aufgabe erforderliche Python-Pakete mit dem Befehl jmputils jpip (parallel zu Pythons pip ).
- Verwenden Sie dann den normalen Python-Skriptansatz, um diese Pakete zu importieren.
Durch die Installation und den Import des wfdb -Pakets wurde die erste Hürde beim Zugriff auf die Daten in JMP überwunden.
################################################################
# let's get this party started - load up some Python packages
################################################################
import jmp
import jmputils
jmputils.jpip('install', 'numpy pandas')
jmputils.jpip('install', 'wfdb')
import numpy as np
import pandas as pd
import wfdb
import os
Wenn es wie Python aussieht, dann deshalb, weil es das auch ist! Alles innerhalb von JMP.
Von dort aus wurden zusätzlich zu einigen Python-Datenvorbereitungsschritten die verbleibenden Hürden mit einigen weiteren neuen JMP- und Python-Integrationselementen beseitigt:
- Erstellen der JMP-Datentabelle mit der Python-Funktion jmp.DataTable() .
- Hinzufügen von Spalten zur JMP-Datentabelle über new_column() vor der Übergabe der Datenliste.
# migrate the signal data to a **JMP table**
# 'ecgall' is the pandas DataFrame containing 12 columns of ECG lead data
ecgdtname = "ECG Data"
ecgdt = jmp.DataTable(ecgdtname, rg*signal.shape[1]) #2nd argument assigns # of rows
for col in ecgall.columns:
#creating new column
ecgdt.new_column( col, jmp.DataType.Numeric )
#adding data
ecgdt[col] = ecgall[col].tolist()
Ich habe nur eine Möglichkeit zum Erstellen und Auffüllen der neuen JMP-Tabelle mit Python gezeigt, es gibt jedoch zahlreiche andere Ansätze, darunter die Validierung der Datentypen vor dem Auffüllen oder die einfache Anwendung roher Gewalt.
Schließlich bietet jmp.run_jsl() eine praktische Möglichkeit, Python dazu zu bringen, JSL für Sie auszuführen. Um meine geistige Gesundheit zu bewahren, habe ich „die heiße Seite heiß und die kalte Seite kalt“ gehalten, indem ich den JSL-Workflow, der aus dem Workflow Builder abgeleitet wurde, der meine Aktionen aufzeichnet, in eine komplett andere Datei gelegt und die JSL-Funktion include() verwendet habe, um auf deren Inhalt zu verweisen und ihn auszuführen.
jmp.run_jsl('''
include("PTB-XL Post Python Workflow.jsl");
''')
Ich hätte den anderen Weg wählen und Python Submit() oder Python Submit File() verwenden können, um alles von JSL aus auszuführen, aber das würde die Erklärung von der Python-Seite aus etwas undurchsichtiger machen. Weitere Informationen finden Sie im Scripting Index in JMP unter „Hilfe“.
Mit den neuen JMP- und Python-Integrationstools war mein Mangel an Python-Erfahrung der einzige Engpass bei der Realisierung meines ursprünglichen Ziels, nur die Daten zu sehen (ich hatte mich nur ein bisschen damit beschäftigt, bevor ich vor mehreren Jahren zu JMP kam); die Verwendung der Python-Tools für JMP war der einfache Teil. An nur einem kurzen Nachmittag konnte ich alle meine Python-Codierungsfehler beheben, um auf die Daten zuzugreifen und die JMP-Visualisierung freizugeben (siehe auch Video und Anhänge unten). Vielleicht habe ich mich sogar direkt an den Entwickler gewandt (sagen Sie es nicht meinem Chef), um meinen Dank auszudrücken.

Ich habe begonnen, an anderen Datenzugriffstools zu arbeiten, wie @Bill_Worley hier vorgeschlagen hat, und ich gehe davon aus, dass Sie einige dieser Arbeiten bald im JMP Marketplace sehen werden. Versuchen Sie, Ihren eigenen Daten- und Analyse-Workflow zu steuern, der Python und JMP umfasst? Falls Sie es noch nicht gesehen haben: @yasmine_hajar hat hervorragende Ressourcen zusammengestellt, die Ihnen dabei helfen, sich mit einigen der oben beschriebenen neuen Tools vertraut zu machen. Wenn Sie Fragen haben, können Sie die JMP-Benutzer-Community erkunden, Ihre Frage dort posten, sich an Ihr engagiertes JMP-Team wenden oder unten eine Nachricht hinterlassen.
Vielen Dank, @ChristianStopp, für all die harte Arbeit, die Sie in die Umsetzung gesteckt haben. Diejenigen, die versuchen, .spc- und .spa-Datendateien zu importieren, werden diese Tools sehr hilfreich finden.