Dal momento che stai leggendo questo, probabilmente sai che Python è uno strumento open source molto utilizzato e utilizzato da scienziati e ingegneri (alcuni con più entusiasmo di altri, aggiungerei ) per risolvere vari problemi .
Finora, le mie conversazioni con gli utenti JMP® suggeriscono che la maggior parte di loro sviluppa flussi di lavoro Python per affrontare attività upstream di accesso alle fonti di dati, piuttosto che usare Python per, diciamo, le attività di apprendimento automatico a cui è tipicamente associato. Considerando la vertiginosa gamma di tipi di file univoci da una valanga di strumenti diversi in qualsiasi dato settore, Python regna come metodo di riferimento per l'accesso ai dati perché, per fortuna!, qualcuno, da qualche parte, ha probabilmente creato un framework per costringere i file a rivelare i loro segreti.
Il mio interesse iniziale per l'integrazione Python di JMP era anch'esso orientato in modo simile all'accesso ai dati. Prima di entrare in JMP, lavoravo nel reparto di cardiologia di un ospedale locale. Quando JMP ha rilasciato per la prima volta la piattaforma Functional Data Explorer (FDE), i dati ECG (alias EKG) dai battiti cardiaci sembravano una soluzione perfetta per l'analisi nel nuovo strumento: senza un modello tradizionale top-down della loro forma, un approccio bottom-up per catturare la loro comune variabilità di forma (ad esempio all'interno della derivazione ECG, il "battito" che vedi) tra i pazienti sembrava un compito perfetto per FDE.


Un piccolo inconveniente: tutti gli esempi che sono riuscito a trovare di dati ECG utilizzano standard di file WFDB (per "Waveform Database") che coinvolgono formati binari che JMP non apre in modo nativo. Fortunatamente, l'integrazione rinnovata di JMP e Python ora integra il menu di JMP con l'accesso a tutti i tipi di file, per cui ringrazio ancora una volta la generosità dei risolutori di problemi che creano pacchetti Python adatti al compito.
Dopo aver identificato i dati ECG e il pacchetto Python wfdb da PhysioNet.org, i nuovi strumenti integrati in JMP e Python mi consentono di:
- Estrarre i dati ECG dalle strutture dei file WFDB tramite Python.
- Crea tabelle di dati JMP e popolale tramite Python.
- Affidare gli sforzi rimanenti a JMP eseguendo un file JMP Scripting Language (JSL) di passaggi creati utilizzando JMP Workflow Builder , che cattura il codice delle mie azioni punta e clicca JMP , per la preparazione dei dati, la visualizzazione e l'analisi FDE.
L'approccio "Python-in-a-box" di JMP include un editor Python integrato e pacchetti preinstallati ( jmp e jmputils) con i quali posso:
- Installare altri pacchetti Python necessari per l'attività utilizzando il comando jmputils jpip (parallelo al comando pip di Python),
- Quindi utilizzare il normale approccio tramite script Python per importare questi pacchetti.
L'installazione e l'importazione del pacchetto wfdb hanno contribuito a superare il primo ostacolo nell'accesso ai dati in JMP.
################################################################
# 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
Se sembra Python, è perché lo è! Tutto all'interno di JMP.
Da lì, oltre ad alcuni passaggi di preparazione dei dati Python, gli ostacoli rimanenti sono stati superati con alcuni nuovi elementi di integrazione JMP e Python:
- Creazione della tabella dati JMP utilizzando la funzione Python jmp.DataTable() .
- Aggiungere colonne alla tabella dati JMP tramite new_column() prima di passare l'elenco dati.
# 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()
Ho mostrato solo un modo per creare e popolare la nuova tabella JMP utilizzando Python, ma esistono diversi approcci, tra cui la convalida dei tipi di dati prima del popolamento o semplicemente l'uso della forza bruta.
Infine, jmp.run_jsl() fornisce un modo pratico per far sì che Python esegua un po' di JSL per te. Per mantenere la mia sanità mentale, ho mantenuto "il lato caldo caldo e il lato freddo freddo" inserendo il flusso di lavoro JSL, derivato dal Workflow Builder che registra le mie azioni, in un altro file e ho utilizzato la funzione JSL include() per fare riferimento ed eseguire il suo contenuto.
jmp.run_jsl('''
include("PTB-XL Post Python Workflow.jsl");
''')
Avrei potuto prendere l'altra strada e usare Python Submit() o Python Submit File() per eseguire tutto da JSL, ma ciò avrebbe reso la spiegazione delle cose qui dal lato Python un po' più confusa. Dai un'occhiata allo Scripting Index in JMP sotto Help per maggiori informazioni.
Con i nuovi strumenti di integrazione JMP e Python, l'unico ostacolo nel realizzare il mio obiettivo iniziale di vedere solo i dati è stata la mia mancanza di esperienza con Python (ci avevo solo provato poco prima di entrare in JMP diversi anni fa); usare gli strumenti Python per JMP è stata la parte facile. In un solo pomeriggio, sono riuscito a superare tutti i miei errori di codifica Python per accedere ai dati e condividere la visualizzazione JMP (vedi anche il video e gli allegati di seguito). Potrei anche aver contattato direttamente lo sviluppatore (non ditelo al mio capo) per esprimere la mia gratitudine.

Ho iniziato a lavorare su altri strumenti di accesso ai dati come suggerito qui da @Bill_Worley e mi aspetto che presto vedrete alcuni di questi sforzi nel JMP Marketplace . State cercando di navigare nel vostro flusso di lavoro di dati e analisi che abbraccia Python e JMP? Se non l'avete visto, @yasmine_hajar ha messo insieme delle risorse eccellenti per aiutarvi a familiarizzare con alcuni dei nuovi strumenti descritti sopra. Se avete domande, potete esplorare la JMP User Community , postare la vostra domanda lì, contattare il vostro team JMP dedicato o scrivere una riga qui sotto.
Grazie @ChristianStopp per tutto il duro lavoro che hai fatto per realizzare tutto questo. Chi là fuori sta cercando di importare file di dati .spc e .spa troverà questi strumenti molto utili.