JMP è Pythonico! Integrazione Python migliorata in JMP 18JMP 18 dispone di un nuovo modo di integrarsi con Python. L'installazione di JMP 18 viene fornita con un ambiente Python indipendente progettato per essere utilizzato con JMP. Inoltre, JMP dispone ora di un editor Python nativo e di pacchetti Python specifici per JMP. Questo ambiente JMP Python ha migliorato la connettività e l'interazione con JMP, il che significa che utilizzare Python con JMP non è mai stato così semplice.
In questa serie di post del blog, ti presento le nuove funzionalità dell'integrazione Python con JMP. Questo post illustra il nuovo Python Script Editor in JMP. Nei prossimi post tratterò altre nuove funzionalità dell'integrazione, nonché la gestione dei pacchetti.
Editor di script JMP Python
Nelle versioni precedenti di JMP, l'unico modo per eseguire il codice Python era stabilire una connessione a un ambiente Python installato esternamente e quindi utilizzare una funzione wrapper JMP Scripting Language (JSL) per inviare il codice Python a tale ambiente. Ora puoi modificare e inviare uno script Python direttamente in JMP! È sufficiente aprire uno script Python in JMP o crearne uno nuovo dal menu File (File > Nuovo > Script Python).

Il nuovo editor di script Python presenta l'evidenziazione della sintassi e ti consente di scrivere codice in Python in modo più naturale. Facendo clic sul pulsante Esegui script viene eseguito il codice Python e i messaggi registrati in Python vengono elencati nel registro JMP.
pacchetti Python jmp e jmputils
Insieme al nuovo ambiente JMP Python arrivano due nuovi pacchetti Python “consapevoli di JMP”: jmp e jmputils.
Con il pacchetto jmp puoi:
- Esegui JSL da Python utilizzando jmp.run_jsl('''jsl script''').
- Apri, chiudi e salva tabelle di dati.
- Ottenere informazioni su una tabella aperta in JMP.
- Crea tabelle di dati JMP, aggiungi/elimina/modifica colonne della tabella di dati JMP e aggiungi/elimina righe della tabella di dati JMP.
- Accedi ai dati in una tabella dati JMP direttamente in memoria a livello di colonna o cella utilizzando operatori di array indicizzati in base zero sulle tabelle dati. Questa indicizzazione supporta anche gli operatori di sezione Python sugli indici di colonna e di riga.
- Utilizzare una tabella dati JMP e una colonna della tabella dati JMP come sequenza per l'iterazione Python.
Con il pacchetto jmputils puoi:
- Utilizzare jmputils.create_jmp(dir_path) per creare uno script JMP pip (jpip) da riga di comando nella directory specificata. Questo script può quindi essere utilizzato per installare i pacchetti nell'ambiente JMP Python. Tieni presente che l'installazione dalla riga di comando a volte è necessaria per alcuni pacchetti Python.
- Utilizzare la funzione jmputils.jpip() per installare i pacchetti Python nell'ambiente JMP Python.
Tutte queste funzioni sono descritte in modo più dettagliato nella documentazione della guida[LINK] ed è presente anche una nuova categoria Python nell'indice di Scripting JMP che elenca tutti questi pacchetti e funzioni.

Funzioni JSL Python
Come con le versioni precedenti di JMP, è possibile eseguire Python da JSL con le funzioni Python Execute(), Python Submit() e Python Submit File(). È inoltre possibile trasferire dati da e verso JMP e Python con le funzioni Python Send() e Python Get().
Le modifiche alle funzioni JSL Python includono:
- Python Connect() continua a supportare la creazione di un oggetto scriptabile in JMP sul Python locale.
- Python Send(data_table) ora crea un oggetto jmp.Datatable in Python che è un riferimento attivo alla tabella dati JMP accessibile in memoria da Python. In precedenza, veniva creata una copia di data_table come pandas.DataFrame esportando la tabella come file CSV su disco e facendo in modo che panda leggesse il file CSV, il che potrebbe essere molto lento per tabelle di dati di grandi dimensioni e potrebbe causare il degrado dei dati a causa del codice binario ->testo->conversione binaria.
- Python Ottieni(nome_oggetto):
- Se object_name è un nome di variabile che fa riferimento a una tabella di dati JMP aperta in Python, restituisce un riferimento a un oggetto scriptabile JSL alla tabella di dati JMP a cui fa riferimento il nome della variabile Python.
- Se object_name è un frame di dati panda Python, scriverà il frame di dati panda in un file CSV e quindi aprirà quel file come nuova tabella dati JMP. Questo approccio, tuttavia, non è consigliato, data la nuova capacità di creare e connettere tabelle di dati JMP in memoria da Python.
Funzioni JSL Python deprecate che non sono più necessarie:
- Python Ottieni grafica( )
- Controllo Python( )
- Python Inizial()
- Python è connesso( )
- Termine Python( )
Le nuove funzioni JSL Python includono:
- Python Install Packages( ) consente di installare pacchetti Python nell'ambiente JMP Python.
- Python Create JPIP() crea uno script da riga di comando che racchiude il jpip JMP e che può essere utilizzato per installare pacchetti Python dalla riga di comando nel sistema operativo. Lo script viene scritto per un regista scelto con una finestra di dialogo di selezione delle directory.
Automazione e scriptingRi: JMP è Pythonico! Integrazione Python migliorata in JMP 18È previsto che Workflow Builder accetti Python come alternativa al codice JSL?
Ri: JMP è Pythonico! Integrazione Python migliorata in JMP 18Sarebbe utile fornire un collegamento in questo post alla documentazione dei due "pacchetti Python compatibili con JMP".
Grazie!
Eric
Ri: JMP è Pythonico! Integrazione Python migliorata in JMP 18Oh, vedo che nell'articolo c'è un segnaposto per un collegamento a tale documentazione, deve solo essere sostituito con il collegamento effettivo.
Ri: JMP è Pythonico! Integrazione Python migliorata in JMP 18Se non riesco a utilizzare il mio interprete Python, esiste una soluzione per fornire al codice un'attività pianificata per eseguire quel codice Python a intervalli regolari per elaborare i dati per generare automaticamente il grafico.
Ri: JMP è Pythonico! Integrazione Python migliorata in JMP 18NO.
Era troppo pieno di problemi. Per alcuni utenti ha funzionato, ma troppi clienti hanno avuto difficoltà a farlo funzionare. Cosa altrettanto importante, uno script Python eseguito in JMP non aveva alcuna garanzia che sarebbe stato eseguito correttamente sul computer di un altro utente. Probabilmente non lo farebbe se ci fosse un percorso di installazione Python personalizzato. Come utente, tratta il Python fornito da JMP come il tuo ambiente virtuale Python specifico per JMP.
Abbiamo compiuto sforzi significativi per garantire che JMP Python sia isolato dalle altre installazioni Python presenti sul tuo sistema. Niente ti impedisce di utilizzare la pipeline esistente e puoi installare i pacchetti nell'ambiente JMP. Potresti essere in grado di portare quel flusso di lavoro all'interno di JMP. Se non altro, le funzionalità aggiuntive di JMP 18 dovrebbero semplificare l'importazione/esportazione dei dati tra JMP e una pipeline Python esterna, se lo si desidera.
Riteniamo che il vantaggio di un'installazione Python testata e verificata che funzioni al primo avvio di JMP, senza configurazione, sia una migliore esperienza per il cliente. Avere una versione e una posizione di Python conosciute ci consente di concentrarci sulla fornitura di funzionalità e funzionalità piuttosto che lottare per risolvere problemi dovuti a installazioni Python imprevedibili da parte dei clienti. La stabilità e il Python incorporato ci consentono di fornire un'integrazione molto più profonda. La nuova capacità di creare, modificare e accedere alle tabelle di dati JMP in memoria da Python è una di queste funzionalità.
Riconosco che ciò causa una transizione da JMP 14-17. JMP 18 rappresenta un cambiamento fondamentale nelle capacità. Alcune delle decisioni progettuali iniziali non hanno resistito alla prova del tempo. Ho cercato di ridurre al minimo le eventuali incompatibilità, ma alcune modifiche erano necessarie. Laddove si sono rivelati necessari cambiamenti, sono stati apportati nel 18 per garantire che JMP 18 fornisca una base stabile per il futuro.
Ri: JMP è Pythonico! Integrazione Python migliorata in JMP 18No, non nell'immediato futuro. Ma sarebbe una buona richiesta di nuova funzionalità.
Ci sono molte cose che si possono fare. La sfida è concentrarsi innanzitutto su quelli che apportano il massimo beneficio a tutti. L'attenzione principale in questo momento è su questioni fondamentali, in particolare l'accesso ai dati e l'interoperabilità tra Python e JSL.
Resta ancora molto da fare per rendere l'accesso alle tabelle dati completamente funzionalità di Python, come l'impostazione di colonne di espressione, colonne di stato delle righe, formattazione delle colonne, ... Assicurarsi che il marshalling dei dati tra JSL e Python comprenda tutti i tipi di dati JMP possibile.
E come prevedibile con qualsiasi revisione importante, ci sono alcuni bug e piccole sviste. Anche questi devono essere affrontati. Anche se un componente aggiuntivo JMP che utilizza il codice Python funziona perfettamente, il generatore del componente aggiuntivo non è ancora a conoscenza dei file Python, quindi è necessario comprimere manualmente il file del componente aggiuntivo JMP (archivio zip). Inoltre, anche se un file Python all'interno di un progetto funzionerà correttamente, non sa ancora come trovare altri file contenuti anch'essi nel file di progetto come tabelle di dati, altri file di dati o script Python aggiuntivi. Se riscontri altre limitazioni che dovrebbero funzionare, segnalale al supporto tecnico. Nuove fantastiche funzionalità che migliorerebbero la potenza di JMP per il tuo lavoro, inviale come richieste di funzionalità.
Ri: JMP è Pythonico! Integrazione Python migliorata in JMP 18Ciao @Paul_Nelson ,
Ho espresso il desiderio di fornire supporto Python nel generatore di flussi di lavoro.
Una grande vittoria:
- Poing Pong senza soluzione di continuità del codice JSL e Python
- un bel miglioramento per gli utenti che già utilizzano Workflow Builder.
Generatore di flussi di lavoro + Python
Re: JMP è Pythonic! Integrazione Python migliorata in JMP 18Nuovo su JMP, questa potrebbe essere una domanda da principiante. Sto ancora esplorando il blog. Come posso saperne di più sull'uso degli script Python in JMP? Posso scrivere codice Python? Ci sono blog a cui posso fare riferimento? Grazie
Re: JMP è Pythonic! Integrazione Python migliorata in JMP 18Ciao @zetaVagabond1 ,
Ecco alcune delle mie risorse preferite per imparare a usare gli script Python in JMP:
Introduzione all'integrazione di Python in JMP 18
Migliora il tuo gioco Python con JMP
Webinar accademico: integrazione di JMP e Python
@Paul_Nelson ha anche diversi post sul blog JMPer Cable .
Re: JMP è Pythonic! Integrazione Python migliorata in JMP 18Si prega di guardare lo Scripting Index, c'è documentazione ed esempi della funzionalità. Quando si lavora da JSL, ci sono un sacco di funzioni come value = Python Get( py_var ); Python Send( jsl_var); Python Submit( "codice python");
Dal lato Python delle cose c'è un'intera categoria di primo livello 'Python' nell'indice di scripting che descrive in dettaglio l'utilizzo del pacchetto gimp import e del pacchetto utilità jmp . All'interno del pacchetto gimp troverai interfacce Python per le capacità JMP, tra cui la creazione, la lettura e la scrittura di tabelle dati da Python, nonché la capacità di eseguire JSL da script Python. jmp.run_jsl(' codice JSL '). utilità jmp contiene la funzione jmputils.jpip( ) che è un wrapper su pip() di Python che assicura che i pacchetti installati finiscano nell'ambiente privato isolato per l'integrazione Python di JMP.
Re: JMP è Pythonic! Integrazione Python migliorata in JMP 18Nota breve: l'integrazione di Python in JMP è una delle mie funzionalità preferite di JMP v18. Abbiamo i nostri pacchetti Python per eseguire trasformazioni di dati e altre funzioni, e JMP è in grado di importare facilmente tali funzioni e mi permette di creare nuove colonne di dati da dati esistenti e di reinserirle direttamente in JMP. Proprio l'altro giorno ho dovuto eseguire una trasformazione di coordinate specifica di alcuni dati in una tabella dati JMP, e ci sono voluti solo pochi minuti per creare le nuove colonne utilizzando la funzionalità Python di JMP.
Complimenti a Paul e agli altri per un primo passo così pulito e impressionante verso la compatibilità con Python!