Python Gateway in InterSystems IRIS

Questo articolo è dedicato a Python Gateway — un progetto comunitario open source per la piattaforma di dati InterSystems IRIS. Questo progetto consente di orchestrare qualsiasi algoritmo di machine learning creato in Python (l'ambiente principale per molti Data Scientist), utilizzando numerose librerie pronte per la creazione rapida di soluzioni analitiche adattive e robotizzate AI/ML sulla piattaforma InterSystems IRIS. In questo articolo mostrerò come InterSystems IRIS può orchestrare processi in Python, effettuare una trasmissione bidirezionale dei dati e creare processi aziendali intelligenti.

Piano

  1. Introduzione.
  2. Strumenti.
  3. Installazione.
  4. API.
  5. Interoperabilità.
  6. Jupyter Notebook.
  7. Conclusioni.
  8. Link.
  9. MLToolkit.

Introduzione

Python è un linguaggio di programmazione ad alto livello, orientato a migliorare la produttività dello sviluppatore e la leggibilità del codice. In questa serie di articoli parlerò delle possibilità di utilizzo del linguaggio Python sulla piattaforma InterSystems IRIS, con particolare focus sull'uso di Python come linguaggio per la creazione e applicazione di modelli di machine learning.

Il machine learning (ML) è una classe di metodi di intelligenza artificiale caratterizzati dall'apprendimento durante la risoluzione di una serie di compiti simili, piuttosto che dal fornire una soluzione diretta al problema.

Gli algoritmi e i modelli di machine learning stanno diventando sempre più comuni. Le ragioni sono molteplici, ma sono tutte riconducibili all'accessibilità, alla semplicità e ai risultati pratici ottenuti. È la clustering o anche la modellazione basata su reti neurali una tecnologia nuova?

Assolutamente no, ma oggi non è più necessario scrivere centinaia di migliaia di righe di codice per avviare un modello, e i costi per la creazione e l'applicazione dei modelli stanno diminuendo sempre di più.

Gli strumenti stanno evolvendo: mentre non abbiamo ancora strumenti AI/ML completamente orientati alla GUI, il progresso che abbiamo osservato in molte altre classi di sistemi informativi, come il BI (da scrivere codice a utilizzare framework e soluzioni configurabili orientate alla GUI), si sta verificando anche negli strumenti per la creazione di AI/ML. Abbiamo già superato la fase di scrittura del codice e oggi utilizziamo framework per costruire e addestrare modelli.

Altri miglioramenti, come la possibilità di distribuire modelli preaddestrati, in cui l'utente finale deve semplicemente completare l'addestramento del modello sui propri dati specifici, semplificano l'inizio dell'applicazione dell'apprendimento automatico. Questi progressi rendono significativamente più accessibile l'apprendimento dell'intelligenza artificiale sia per i professionisti che per le aziende nel loro complesso.

D'altra parte, stiamo raccogliendo sempre più dati. Grazie a una piattaforma dati unificata come InterSystems IRIS, tutte queste informazioni possono essere immediatamente preparate e utilizzate come dati di origine per i modelli di apprendimento automatico.

Con il passaggio al cloud, l'avvio di progetti AI/ML diventa più semplice che mai. Possiamo utilizzare solo le risorse di cui abbiamo bisogno. Inoltre, grazie alla parallelizzazione offerta dalle piattaforme cloud, possiamo risparmiare tempo.

Ma che dire dei risultati? Qui le cose si complicano. Esistono molti strumenti per costruire modelli, di cui parlerò in seguito. Creare un buon modello non è semplice, ma cosa viene dopo? Realizzare profitti dall'uso di un modello da parte delle imprese è anche un compito non banale. La radice del problema risiede nella separazione dei carichi analitici e transazionali, e dei modelli di dati. Quando alleniamo un modello, di solito lo facciamo su dati storici. Ma il posto di un modello costruito è nell'elaborazione transazionale dei dati. Qual è l'utile di un migliore modello di rilevamento delle transazioni fraudolente, se lo eseguiamo una volta al giorno? I truffatori sono già scappati con i soldi. Dobbiamo addestrare il modello su dati storici, ma dobbiamo anche applicarlo in tempo reale su nuovi dati in arrivo, affinché i nostri processi aziendali possano agire in base alle previsioni fatte dal modello.

ML Toolkit — una suite di strumenti il cui obiettivo è proprio questo: unire modelli e ambienti transazionali, affinché i modelli sviluppati possano essere facilmente utilizzati direttamente nei vostri processi aziendali. Python Gateway è parte di ML Toolkit e garantisce l'integrazione con il linguaggio Python (analogamente a R Gateway, che essendo parte di ML Toolkit, offre integrazione con il linguaggio R).

Strumenti

Prima di continuare, vorrei descrivere alcuni strumenti e librerie per Python che utilizzeremo più avanti.

Tecnologie

  • Python è un linguaggio di programmazione interpretato e di alto livello, di uso generale. Il principale vantaggio del linguaggio è la vasta libreria di funzioni matematiche, ML e AI. Come ObjectScript, è un linguaggio orientato agli oggetti, ma tutto è definito dinamicamente, non staticamente. Inoltre, tutto è un oggetto. Gli articoli successivi presuppongono una conoscenza superficiale del linguaggio. Se desiderate iniziare l'apprendimento, consiglio di cominciare con documentazione.
  • Per i nostri esercizi successivi, installa Python 3.6.7 64 bit.
  • IDE: Io utilizzo PyCharm, ma in generale ci sono tanti. Se utilizzi Atelier, esiste un plug-in Eclipse per gli sviluppatori Python. Se utilizzi VS Code, c'è un'estensione per Python.
  • Notebook: invece di un IDE, puoi scrivere e condividere i tuoi script in notebook online. Il più popolare di questi è Jupyter.

Librerie

Ecco un elenco (non completo) di librerie per l'apprendimento automatico:

  • Numpy — un pacchetto fondamentale per i calcoli scientifici.
  • Pandas — strutture dati ad alte prestazioni e strumenti per l'analisi dei dati.
  • Matplotlib — creazione di grafici.
  • Seaborn — visualizzazione dei dati basata su matplotlib.
  • Sklearn — metodi di apprendimento automatico.
  • XGBoost — algoritmi di apprendimento automatico nell'ambito della metodologia del gradient boosting (Gradient Boosting).
  • Gensim — NLP.
  • Keras — reti neurali.
  • Tensorflow — piattaforma per la creazione di modelli di apprendimento automatico.
  • PyTorch — piattaforma per la creazione di modelli di apprendimento automatico, focalizzata su Python.
  • Nyoka — PMML da diversi modelli.

Le tecnologie AI/ML possono rendere le aziende più efficienti e adattabili. Inoltre, oggi queste tecnologie stanno diventando più semplici da sviluppare e implementare. Inizia a esplorare le tecnologie AI/ML e come possono aiutare la tua organizzazione a crescere.

Installazione

Ci sono diversi modi per installare e utilizzare Python Gateway:

  • il sistema operativo
    • Windows
    • Linux
    • Mac
  • Docker
    • Utilizza un'immagine da DockerHub
    • Crea la tua immagine personalizzata

Indipendentemente dal metodo di installazione, avrai bisogno del codice sorgente. L'unico posto per scaricare il codice è la pagina delle release. Questa contiene le release stabili testate, basta prendere l'ultima. Attualmente è la 0.8, ma ci saranno aggiornamenti nel tempo. Non clonare/caricare il repository, scarica l'ultima release.

il sistema operativo

Se stai installando Python Gateway su un sistema operativo, dovrai prima (indipendentemente dal sistema operativo) installare Python. Per fare ciò:

  1. Installa Python 3.6.7 64 bit. Si consiglia di installare Python nella directory predefinita.
  2. Installa il modulo dill: pip install dill.
  3. Carica il codice ObjectScript (cioè, do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) in qualsiasi namespace con prodotti. Se desideri che un namespace esistente supporti i prodotti, esegui: write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. Posiziona callout DLL/SO/DYLIB nella cartella bin della tua istanza InterSystems IRIS. Il file della libreria deve essere accessibile nel percorso restituito da write ##class(isc.py.Callout).GetLib().

Windows

  1. Assicurati che la variabile d'ambiente PYTHONHOME indichi Python 3.6.7.
  2. Verifica che la variabile d'ambiente di sistema PATH includa la variabile PYTHONHOME (o la directory a cui si riferisce).

Linux (Debian/Ubuntu)

  1. Controlla che la variabile d'ambiente PATH contiene /usr/lib e /usr/lib/x86_64-linux-gnu. Usa il file /etc/environment per impostare le variabili d'ambiente.
  2. In caso di errori undefined symbol: _Py_TrueStruct configura l'impostazione PythonLib. Inoltre nel Readme è presente una sezione di Risoluzione dei problemi.

Mac

  1. Attualmente è supportato solo Python 3.6.7 da Python.org. Controlla la variabile PATH.

Se hai modificato le variabili d'ambiente, riavvia il tuo prodotto InterSystems.

Docker

L'utilizzo dei container offre diversi vantaggi:

  • Portabilità
  • Efficienza
  • Isolamento
  • Leggerezza
  • Immutabilità

Consulta questa serie di articoli per ulteriori informazioni sull'uso di Docker con i prodotti InterSystems.

Tutte le build di Python Gateway sono attualmente basate su container 2019.4.

Immagine pronta

Esegui: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latest, per scaricare e avviare Python Gateway con InterSystems IRIS Community Edition. Questo è tutto.

Crea la tua immagine personalizzata

Per costruire l'immagine docker, esegui nella radice del repository: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
Per impostazione predefinita, l'immagine viene costruita su base dell'immagine store/intersystems/iris-community:2019.4.0.383.0, tuttavia puoi modificarlo impostando la variabile IMAGE.
Per costruire da InterSystems IRIS, esegui: `docker build --build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 --force-rm --tag intersystemscommunity/irispy:latest`.

Dopo di ciò, puoi avviare l'immagine Docker:

docker run -d 
  -p 52773:52773 
  -v //:/mount 
  --name irispy 
  intersystemscommunity/irispy:latest 
  --key /mount/iris.key

Se stai usando un'immagine basata su InterSystems IRIS Community Edition, non è necessario specificare la chiave.

Commenti

  • Processo di test isc.py.test.Process salva una serie di immagini in una directory temporanea. Potresti voler modificare questo percorso in una directory montata. Per farlo, modifica l'impostazione WorkingDir specificando la directory montata.
  • Per accedere al terminale, esegui: docker exec -it irispy sh.
  • Accesso al Portale di Gestione del Sistema con login SuperUser/SYS.
  • Per fermare il container, esegui: docker stop irispy && docker rm --force irispy.

Verifica dell'installazione

Dopo aver installato Python Gateway, è opportuno verificare che funzioni. Esegui questo codice nel terminale di InterSystems IRIS:

set sc = ##class(isc.py.Callout).Setup() 
set sc = ##class(isc.py.Main).SimpleString("x='HELLO'", "x", , .var).
write var

Il risultato dovrebbe essere stampato HELLO — il valore della variabile Python x. Se lo stato restituito sc è un errore o var è vuoto, controlla Readme — sezione di risoluzione dei problemi.

API

Python Gateway è installato e hai verificato che funzioni. È ora di iniziare a usarlo!
L'interfaccia principale per Python è isc.py.Main. Offre i seguenti gruppi di metodi (tutti restituiscono %Status):

  • Esecuzione del codice
  • Trasmissione dati
  • Ausiliari

Esecuzione del codice

Questi metodi consentono di eseguire codice Python arbitrario.

SimpleString

SimpleString — è il metodo principale. Accetta 4 argomenti opzionali:

  • code — stringa di codice da eseguire. Simbolo di nuova riga: $c(10).
  • returnVariable — nome della variabile da restituire.
  • serialization — come serializzare returnVariable. 0 — string (predefinito), 1 — repr.
  • result — ByRef riferimento alla variabile in cui viene scritto il valore returnVariable.

Abbiamo eseguito:

set sc = ##class(isc.py.Main).SimpleString("x='HELLO'", "x", , .var).

In questo esempio stiamo assegnando alla variabile Python x valore Hello e vogliamo restituire il valore della variabile Python x nella variabile ObjectScript var.

ExecuteCode

ExecuteCode è un'alternativa più sicura e meno restrittiva SimpleString.
Le stringhe nella piattaforma InterSystems IRIS sono limitate a 3.641.144 caratteri, e se desideri eseguire un pezzo di codice più lungo, devi utilizzare i flussi.
Si accettano due argomenti:

  • code — una stringa o un flusso di codice Python da eseguire.
  • variable — (opzionale) assegna il risultato dell'esecuzione a code questa variabile Python.

Esempio d'uso:

set sc = ##class(isc.py.Main).ExecuteCode("2*3", "y").

In questo esempio moltiplichiamo 2 per 3 e registriamo il risultato in una variabile Python. y.

Trasmissione dati

Passa dati a Python e indietro.

Python -> InterSystems IRIS

Ci sono 4 modi per ottenere il valore di una variabile Python in InterSystems IRIS, a seconda della serializzazione di cui hai bisogno:

  • Stringa per tipi di dati semplici e debug.
  • Repr per memorizzare oggetti semplici e debug.
  • JSON per una facile manipolazione dei dati sul lato InterSystems IRIS.
  • Pickle per la conservazione di oggetti.

Questi metodi consentono di ottenere variabili da Python come stringhe o flussi.

  • GetVariable(variable, serialization, .stream, useString) — ottenere serialization la variabile variable in stream. Se useString è uguale a 1 e la serializzazione è memorizzata in una stringa, allora viene restituita una stringa e non un flusso.
  • GetVariableJson(variable, .stream, useString) — ottenere la serializzazione JSON della variabile.
  • GetVariablePickle(variable, .stream, useString, useDill) -ottenere la serializzazione Pickle (o Dill) di una variabile.

Proviamo a ottenere la nostra variabile y.

set sc = ##class(isc.py.Main).GetVariable("y", , .val, 1)
write val
>6

InterSystems IRIS -> Python

Carichiamo i dati da InterSystems IRIS in Python.

  • ExecuteQuery(query, variabile, tipo, namespace) — crea un set di dati (pandas dataframe o list) da una query sql e lo imposta in una variabile Python variable. Il pacchetto isc.py deve essere accessibile nell'area namespace — lì verrà eseguita la query.
  • ExecuteGlobal(global, variabile, tipo, start, end, mask, labels, namespace) — carica i dati di un globale global da un sottoscrittore start fino a end in Python come variabile di tipo type: list, oppure pandas dataframe. La descrizione degli argomenti opzionali mask and etichette è disponibile nella documentazione della classe e nel repository Documentazione sul trasferimento dati.
  • ExecuteClass(class, variabile, tipo, start, end, properties, namespace) — carica i dati di una classe class da id start fino a end in Python come variabile di tipo type: list, oppure pandas dataframe. properties — elenco (separatore — virgola) delle proprietà della classe da caricare nel set di dati. Sono supportate le maschere * e ?. Di default — * (tutte le proprietà). La proprietà %%CLASSNAME viene ignorata.
  • ExecuteTable(table, variabile, tipo, start, end, properties, namespace) — carica i dati di una tabella table da id start fino a end in Python.

ExecuteQuery — è universale (qualsiasi query SQL corretta sarà passata a Python). Tuttavia, ExecuteGlobal e le sue wrapper ExecuteClass e ExecuteTable lavorano con alcune limitazioni. Sono notevolmente più veloci (da 3 a 5 volte più veloci dei driver ODBC e 20 volte più veloci ExecuteQuery). Maggiori informazioni su Documentazione sul trasferimento dati.
Tutti questi metodi supportano il trasferimento di dati da qualsiasi area. Il pacchetto isc.py deve essere accessibile nell'area target.

ExecuteQuery

ExecuteQuery(request, variable, type, namespace) — trasferimento dei risultati di qualsiasi query SQL valida in Python. Questo è il metodo più lento per il trasferimento dei dati. Utilizzalo se ExecuteGlobal e i suoi wrapper non sono disponibili.

Argomenti:

  • query — query SQL.
  • variable — nome della variabile Python in cui verranno registrati i dati.
  • typelist o Pandas dataframe.
  • namespace — area in cui verrà eseguita la query.

ExecuteGlobal

ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) — trasferimento di un globale in Python.

Argomenti:

  • global — nome del globale senza ^
  • variable — nome della variabile Python in cui verranno registrati i dati.
  • typelist o Pandas dataframe.
  • start — primo sottoscrittore del globale. Obbligatorio %Integer.
  • end — ultimo sottoscrittore del globale. Obbligatorio %Integer.
  • mask — maschera dei valori del globale. La maschera può essere più corta del numero di campi nel globale (in questo caso i campi finali verranno saltati). Come formattare la maschera:
    • + trasmettere il valore così com'è.
    • - saltare il valore.
    • b — Tipo logico (0Falso, tutto il resto — True).
    • d — Data (da $horolog, su Windows dal 1970, su Linux dal 1900).
    • t — Orario ($horolog, secondi dopo la mezzanotte).
    • m — Timestamp (formato YEAR-MONTH-DAY HOUR:MINUTE:SECOND).
  • etichette — %List dei nomi delle colonne. Il primo elemento è il nome del sottoscrittore.
  • namespace — area in cui verrà eseguita la query.

ExecuteClass

Wrapper sopra ExecuteGlobal. Sulla base della definizione della classe prepara la chiamata ExecuteGlobal e la esegue.

ExecuteClass(class, variabile, tipo, start, end, properties, namespace) — passaggio dei dati della classe in Python.

Argomenti:

  • class — nome della classe
  • variable — nome della variabile Python in cui verranno registrati i dati.
  • typelist o Pandas dataframe.
  • start — Id iniziale.
  • end — Id finale
  • properties — elenco (separatore — virgola) delle proprietà della classe da caricare nel set di dati. Sono supportate le maschere * e ?. Di default — * (tutte le proprietà). La proprietà %%CLASSNAME viene ignorata.
  • namespace — area in cui verrà eseguita la query.

Tutte le proprietà vengono passate così come sono, tranne le proprietà di tipo %Date, %Ora, %Booleano e %Timestamp — vengono convertiti nei corrispondenti tipi Python.

ExecuteTable

Wrapper sopra ExecuteClass. Trasmette il nome della tabella nel nome della classe e la chiama ExecuteClass. Firma:

ExecuteTable(table, variabile, tipo, start, end, properties, namespace) — passaggio dei dati della tabella in Python.

Argomenti:

  • table — nome della tabella.
    Tutti gli altri argomenti vengono passati così come sono a ExecuteClass.

Note

  • ExecuteGlobal, ExecuteClass e ExecuteTable funzionano altrettanto velocemente.
  • ExecuteGlobal 20 volte più veloce di ExecuteQuery su grandi set di dati (tempo di trasmissione superiore a >0.01 secondi).
  • ExecuteGlobal, ExecuteClass e ExecuteTable funzionano su globali con questa struttura: ^global(key) = $lb(prop1, prop2, ..., propN) dove key — numero intero.
  • Per ExecuteGlobal, ExecuteClass e ExecuteTable intervallo di valori supportato %Date corrisponde all'intervallo mktime e dipende dal sistema operativo (windows: 1970-01-01, linux 1900-01-01, mac). Utilizzare %Timestampper passare dati al di fuori di questo intervallo o utilizzare un pandas dataframe poiché questa restrizione è valida solo per la lista.
  • Per ExecuteGlobal, ExecuteClass e ExecuteTable tutti gli argomenti tranne la fonte dei dati (globale, classe o tabella) e la variabile sono facoltativi.

Esempi

Classe di test isc.py.test.Person contiene un metodo che dimostra tutte le modalità di trasferimento dei dati:

set global = "isc.py.test.PersonD"
set class = "isc.py.test.Person"
set table = "isc_py_test.Person"
set query = "SELECT * FROM isc_py_test.Person"

// Argomenti comuni
set variable = "df"
set type = "dataframe"
set start = 1
set end = $g(^isc.py.test.PersonD, start)

// Metodo 0: ExecuteGlobal senza argomenti
set sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 0, type)

// Metodo 1: ExecuteGlobal con argomenti  
// Durante il passaggio del globale, i nomi dei campi sono specificati manualmente
// globalKey - nome del sotto-scrittore 
set labels = $lb("globalKey", "Nome", "Data di nascita", "TS", "TempoCasuale", "AnniEtà", "EtàDecimale", "EtàDoppia", "Bool")

// mask contiene un elemento in meno di labels perché "globalKey" è il nome del sotto-scrittore
// Saltiamo %%CLASSNAME
set mask = "-+dmt+++b"

set sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 1, type, start, end, mask, labels)

// Metodo 2: ExecuteClass
set sc = ##class(isc.py.Main).ExecuteClass(class, variable _ 2, type, start, end)

// Metodo 3: ExecuteTable
set sc = ##class(isc.py.Main).ExecuteTable(table, variable _ 3, type, start, end)

// Metodo 4: ExecuteTable
set sc = ##class(isc.py.Main).ExecuteQuery(query, variable _ 4, type)

Chiama il metodo do ##class(isc.py.test.Person).Test() per vedere come funzionano tutti i metodi di trasferimento dei dati.

Metodi ausiliari

  • GetVariableInfo(variable, serialization, .defined, .type, .length) — ottenere informazioni sulla variabile: se è definita, classe e lunghezza della serializzazione.
  • GetVariableDefined(variable, .defined) — è stata definita la variabile.
  • GetVariableType(variable, .type) — ottenere la classe della variabile.
  • GetStatus() — ottenere e rimuovere l'ultima eccezione dal lato Python.
  • GetModuleInfo(module, .imported, .alias) — ottenere la variabile del modulo e lo stato di importazione.
  • GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments) — ottenere informazioni sulla funzione.

Interoperabilità

Hai imparato a chiamare il Python Gateway dal terminale, ora iniziamo a utilizzarlo nella produzione. La base dell'interazione con Python in questo modo è isc.py.ens.Operation. Ci permette di:

  • Eseguire codice Python
  • Salvare/Ripristinare il contesto Python
  • Caricare e ottenere dati da Python

Fondamentalmente, un'operazione Python è una wrapper su isc.py.Main. L'operazione isc.py.ens.Operation consente l'interazione con il processo Python dalle produzioni di InterSystems IRIS. Sono supportate cinque richieste:

  • isc.py.msg.ExecutionRequest per eseguire codice Python. Restituisce isc.py.msg.ExecutionResponse con il risultato dell'esecuzione e i valori delle variabili richieste.
  • isc.py.msg.StreamExecutionRequest per eseguire codice Python. Restituisce isc.py.msg.StreamExecutionResponse risultato dell'esecuzione e i valori delle variabili richieste. Simile isc.py.msg.ExecutionRequest, ma accetta e restituisce flussi anziché stringhe.
  • isc.py.msg.QueryRequest per restituire il risultato dell'esecuzione di una query SQL. Restituisce Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest per la trasmissione dei dati globali/di classe/di tabella. Restituisce Ens.Response.
  • isc.py.msg.SaveRequest per salvare il contesto Python. Restituisce Ens.StringResponse con l'identificativo del contesto.
  • isc.py.msg.RestoreRequest per ripristinare il contesto Python.

    Inoltre, isc.py.ens.Operation ha due impostazioni:

    • Inizializzatore — selezione della classe che implementa l'interfaccia isc.py.init.Abstract. Può essere utilizzato per caricare funzioni, moduli, classi, ecc. Viene eseguito una sola volta all'avvio del processo.
    • PythonLib — (solo per Linux) se vedere errori durante il caricamento, impostare il suo valore a libpython3.6m.so o anche al percorso completo della libreria Python.

Creazione di processi aziendali

Sono disponibili due classi che semplificano lo sviluppo di processi aziendali:

  • isc.py.ens.ProcessUtils permette di estrarre annotazioni dalle attività con sostituzione di variabili.
  • isc.py.util.BPEmulator consente di testare facilmente i processi aziendali con Python. Può eseguire un processo aziendale (parti in linguaggio Python) nel processo corrente.

Sostituzione di variabili

Tutti i processi aziendali ereditati da isc.py.ens.ProcessUtils, possono utilizzare il metodo GetAnnotation(name) per ottenere il valore dell'annotazione dell'attività in base al suo nome. L'annotazione dell'attività può contenere variabili che saranno calcolate sul lato di InterSystems IRIS prima di essere passate a Python. Ecco la sintassi per la sostituzione delle variabili:

  • ${class:method:arg1:...:argN} — chiamata del metodo
  • #{expr} — eseguire codice in ObjectScript.

Un esempio è disponibile nel processo aziendale di test isc.py.test.Process, ad esempio, nell'attività Matrice di Correlazione: Grafico: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). In questo esempio:

  • #{process.WorkDirectory} restituisce la proprietà WorkDirectory dell'oggetto processcioè, il processo aziendale corrente. isc.py.test.Process ${%PopulateUtils:Integer:1:100}
  • ${%PopulateUtils:Integer:1:100} invoca il metodo Intero classe %PopulateUtils, passando gli argomenti 1 e 100, restituendo un numero intero casuale nell'intervallo 1...100.

Processo aziendale di test

I dati di test e il processo aziendale di test sono disponibili di default come parte del gateway Python Gateway. Per utilizzarli:

  1. Esegui nel terminale OS: pip install pandas matplotlib seaborn.
  2. Esegui nel terminale InterSystems IRIS: do ##class(isc.py.test.CannibalizationData).Import() per riempire i dati di test.
  3. Avvia la produzione isc.py.test.Production.
  4. Invia una richiesta di tipo Ens.Request in isc.py.test.Process.

Vediamo come funziona tutto insieme. Apri isc.py.test.Process nell'editor BPL:

Python Gateway in InterSystems IRIS

Esecuzione del codice

La chiamata più importante è l'esecuzione del codice Python:

Python Gateway in InterSystems IRIS

Richiesta utilizzata isc.py.msg.ExecutionRequest, ecco le sue proprietà:

  • Code — codice Python.
  • SeparateLines — suddividere il codice in righe per l'esecuzione. $c(10) (n) viene utilizzato per separare le righe. Si prega di notare che NON è consigliabile elaborare l'intero messaggio contemporaneamente, questa funzione è destinata esclusivamente all'elaborazione def e simili espressioni multilinea. Per impostazione predefinita 0.
  • Variabili — elenco di variabili separate da virgole che verranno incluse nella risposta.
  • Serializzazione — come serializzare le variabili che desideriamo restituire. Opzioni: Str, Repr, JSON, Pickle e Dill, per impostazione predefinita Str.

Nel nostro caso, impostiamo solo la proprietà Code, in modo che tutte le altre proprietà utilizzino i valori predefiniti. Lo impostiamo chiamando process.GetAnnotation("Import pandas"), che durante l'esecuzione restituisce l'annotazione dopo aver effettuato la sostituzione delle variabili. Infine, il codice import pandas as pd verrà passato a Python. GetAnnotation può essere utile per ottenere script Python multilinea, ma non ci sono restrizioni su questo modo di ottenere il codice. Puoi impostare la proprietà Code in qualsiasi modo ti sia comodo.

Ottenere variabili

Un'altra sfida interessante utilizzando isc.py.msg.ExecutionRequestMatrice di Correlazione: Tabellare:

Python Gateway in InterSystems IRIS

Calcola la Matrice di Correlazione sul lato Python ed estrae la variabile corrmat di nuovo in InterSystems IRIS in formato JSON, impostando le proprietà della richiesta:

  • Variabili: "corrmat"
  • Serializzazione: "JSON"

Possiamo visualizzare i risultati in Visual Trace:

Python Gateway in InterSystems IRIS

E se avessimo bisogno di questo valore nel BP, possiamo ottenerlo in questo modo: callresponse.Variables.GetAt("corrmat").

Trasmissione dati

Ora parliamo del trasferimento dei dati da InterSystems IRIS a Python; tutte le richieste di trasferimento dati implementano l'interfaccia isc.py.msg.DataRequest, che fornisce le seguenti proprietà:

  • Variabile — variabile Python in cui vengono scritti i dati.
  • Tipo — tipo di variabile: dataframe (dataframe pandas) o list.
  • Namespace — ambito da cui otteniamo i dati. Il pacchetto isc.py deve essere accessibile in questo ambito. Questo può essere un ambito senza supporto per le produzioni.

In base a questa interfaccia sono stati implementati 4 classi di richieste:

  • isc.py.msg.QueryRequest — impostare la proprietà Query per trasmettere la query SQL.
  • isc.py.msg.ClassRequest — impostare la proprietà Classe per trasmettere i dati della classe.
  • isc.py.msg.TableRequest — impostare la proprietà Tabella per trasmettere i dati della tabella.
  • isc.py.msg.GlobalRequest — impostare la proprietà Globale per trasmettere i dati globali.

Nel processo di testing guarda l'attività RAW, dove isc.py.msg.QueryRequest mostrato in azione.

Python Gateway in InterSystems IRIS

Salvataggio/ripristino del contesto Python

Infine, possiamo salvare il contesto Python in InterSystems IRIS, per farlo invieremo isc.py.msg.SaveRequest con argomenti:

  • Mask — Vengono salvate solo le variabili che soddisfano la maschera. Supportati * e ?. Esempio: "Data*, Figure?". Per impostazione predefinita *.
  • MaxLength — Lunghezza massima della variabile memorizzata. Se la serializzazione della variabile è più lunga, verrà ignorata. Imposta 0 per ottenere variabili di qualsiasi lunghezza. Per impostazione predefinita $$$MaxStringLength.
  • Name — Nome del contesto (opzionale).
  • Descrizione — Descrizione del contesto (opzionale).

Restituisce Ens.StringResponse con Id del contesto salvato. Nel processo di test, controlla l'attività Salva contesto.

Richiesta corrispondente isc.py.msg.RestoreRequest carica il contesto da InterSystems IRIS a Python:

  • ContextId — identificatore del contesto.
  • Pulisci — pulire il contesto prima del ripristino.

Jupyter Notebook

Jupyter Notebook — è un'applicazione web open source che consente di creare notebook contenenti codice, visualizzazioni e testo e pubblicarli. Python Gateway consente di visualizzare e modificare i processi BPL come Jupyter Notebook. Si noti che attualmente viene utilizzato l'esecutore Python 3 standard.

Questa estensione presuppone che le annotazioni contengano codice Python e utilizzino i nomi delle attività come intestazioni precedenti. Ora è possibile sviluppare processi aziendali PythonGateway in Jupyter Notebook. Ecco cosa è possibile:

  • Creare nuovi processi aziendali
  • Eliminare processi aziendali
  • Creare nuove attività
  • Modificare attività
  • Eliminare attività

Ecco video dimostrativo. E alcuni screenshot:

Esplora processi

Python Gateway in InterSystems IRIS

Editor di processi

Python Gateway in InterSystems IRIS

Installazione

  1. Avrai bisogno di InterSystems IRIS 2019.2+.
  2. Installa PythonGateway v0.8+ (richiesto solo isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints e isc.py.ens.ProcessUtils).
  3. Aggiorna il codice ObjectScript dal repository.
  4. Esegui do ##class(isc.py.util.Jupyter).Install() e segui le istruzioni.

Documentazione.

Conclusioni

MLToolkit è un insieme di strumenti con l'obiettivo di integrare modelli e ambienti transazionali, consentendo di utilizzare facilmente i modelli costruiti direttamente nei tuoi processi aziendali. Python Gateway è parte di MLToolkit e fornisce integrazione con il linguaggio Python, permettendo di orchestrare qualsiasi algoritmo di machine learning creato in Python (l'ambiente principale per molti Data Scientists) e di utilizzare numerose librerie pronte per la creazione rapida di soluzioni analitiche AI/ML adattative e robotizzate sulla piattaforma InterSystems IRIS.

Link

MLToolkit

Il gruppo utenti MLToolkit è un repository GitHub privato, creato come parte dell'organizzazione aziendale GitHub di InterSystems. È rivolto a utenti esterni che installano, esplorano o utilizzano già i componenti di MLToolkit, inclusa la Python Gateway. Nel gruppo sono disponibili diversi casi realizzati (con codice sorgente e dati di test) in ambiti come marketing, produzione, medicina e molti altri settori. Per unirti al gruppo utenti ML Toolkit, ti preghiamo di inviare un breve messaggio via email al seguente indirizzo: MLToolkit@intersystems.com e indica nella tua email le seguenti informazioni:

  • Nome utente GitHub
  • Organizzazione (dove lavori o studi)
  • Posizione (il tuo attuale ruolo nella tua organizzazione, oppure "Studente", o "Indipendente").
  • Paese

A chi ha letto l'articolo e è interessato alle potenzialità di InterSystems IRIS come piattaforma per lo sviluppo o l'hosting di meccanismi di intelligenza artificiale e apprendimento automatico, offriamo l'opportunità di discutere scenari potenzialmente rilevanti per la vostra azienda. Siamo pronti ad analizzare le esigenze della vostra azienda e a definire insieme un piano d'azione; l'indirizzo email del nostro gruppo di esperti AI/ML è MLToolkit@intersystems.com.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster