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 sviluppato in Python (l'ambiente principale per molti Data Scientist), utilizzando numerose librerie pronte all'uso per creare rapidamente soluzioni analitiche AI/ML adattive e automatizzate sulla piattaforma InterSystems IRIS. In questo articolo mostrerò come InterSystems IRIS possa orchestrare processi in Python, facilitare lo scambio bidirezionale di dati e creare processi aziendali intelligenti.

Piano

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

Introduzione

Python è un linguaggio di programmazione di alto livello, generico, progettato per 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 un focus principale su come utilizzare Python per la creazione e l'applicazione di modelli di machine learning.

Il machine learning (ML) è una classe di metodi di intelligenza artificiale, caratterizzati non dalla soluzione diretta di un problema, ma dall'apprendimento nel processo di risoluzione di molteplici problemi simili.

Gli algoritmi e i modelli di machine learning stanno diventando sempre più comuni. Ci sono molte ragioni per questo, ma tutto si riporta alla disponibilità, semplicità e raggiungimento di risultati pratici. La clusterizzazione o anche la modellazione attraverso reti neurali sono tecnologie nuove?

Naturalmente no, ma al giorno d'oggi non è necessario scrivere centinaia di migliaia di righe di codice per avviare un modello, e i costi per la creazione e l'applicazione di modelli continuano a diminuire.

Gli strumenti si stanno evolvendo: mentre non abbiamo strumenti AI/ML completamente orientati al GUI, il progresso che abbiamo visto con molte altre classi di sistemi informativi, come il BI (dalla scrittura di codice all'uso di framework e soluzioni configurabili orientate al GUI), si osserva anche negli strumenti per la creazione di AI/ML. Abbiamo già superato la fase di scrittura di codice e oggi utilizziamo framework per costruire e addestrare modelli.

Altri miglioramenti, come la possibilità di distribuire un modello pre-addestrato, in cui l'utente finale deve semplicemente completare l'addestramento del modello sui propri dati specifici, semplificano anche l'inizio dell'uso del machine learning. Questi risultati rendono molto più accessibile lo studio del machine learning sia per i professionisti che per le aziende nel loro insieme.

D'altra parte, stiamo raccogliendo sempre più dati. Grazie a una piattaforma dati unificata, come InterSystems IRIS, tutte queste informazioni possono essere prontamente preparate e utilizzate come dati di partenza per modelli di machine learning.

Con la transizione al cloud, l'avvio di progetti AI/ML sta diventando più semplice che mai. Possiamo consumare solo le risorse di cui abbiamo bisogno. Inoltre, grazie alla parallelizzazione offerta dalle piattaforme cloud, possiamo risparmiare tempo.

Ma riguardo ai risultati? Qui le cose si fanno più complesse. Ci sono molti strumenti per la costruzione di modelli, di cui parlerò in seguito. Costruire un buon modello non è semplice, ma poi? Ottenere un ritorno sull'investimento dall'uso del modello da parte delle aziende è anche una sfida non banale. Il cuore del problema risiede nella separazione dei carichi analitici e transazionali e dei modelli di dati. Quando addestriamo un modello, di solito lo facciamo su dati storici. Ma il posto per il modello costruito è nell'elaborazione transazionale dei dati. Che valore ha il migliore modello di rilevamento delle frodi 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 sui nuovi dati in arrivo, affinché i nostri processi aziendali possano funzionare in base alle previsioni effettuate dal modello.

ML Toolkit è un insieme di strumenti che ha proprio questo obiettivo: unire modelli e ambiente transazionale, affinché i modelli costruiti possano essere facilmente utilizzati direttamente nei tuoi processi aziendali. Python Gateway fa parte di ML Toolkit e fornisce integrazione con il linguaggio Python (analogamente a come R Gateway, anch'esso parte di ML Toolkit, fornisce 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 ad alto livello, di uso generale. Il principale vantaggio del linguaggio è la vasta libreria di pacchetti matematici, ML e AI. Proprio come ObjectScript, è un linguaggio orientato agli oggetti, ma tutto è definito dinamicamente e non staticamente. Inoltre, tutto è un oggetto. Articoli successivi presuppongono una familiarità superficiale con il linguaggio. Se desideri iniziare a imparare, ti consiglio di iniziare con documentazione.
  • Per i nostri prossimi esercizi, installa Python 3.6.7 64 bit.
  • IDE: Io uso PyCharm, ma in generale ci sono molte. Se utilizzi Atelier, c'è un plugin di Eclipse per gli sviluppatori Python. Se usi VS Code, c'è un'estensione per Python.
  • Notebook: invece della IDE, puoi scrivere e condividere i tuoi script in notebook online. Il più popolare è Jupyter.

Librerie

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

  • Numpy è un pacchetto fondamentale per calcoli di precisione.
  • Pandas è per strutture dati ad alte prestazioni e strumenti di analisi dei dati.
  • Matplotlib è per la creazione di grafici.
  • Seaborn è per la visualizzazione dei dati, basata su matplotlib.
  • Sklearn è per metodi di apprendimento automatico.
  • XGBoost è per algoritmi di apprendimento automatico nell'ambito della metodologia di boosting graduale (Gradient Boosting).
  • Gensim è per NLP.
  • Keras è per reti neurali.
  • Tensorflow è una piattaforma per la creazione di modelli di machine learning.
  • PyTorch è una piattaforma per la creazione di modelli di machine learning, focalizzata su Python.
  • Nyoka è per il PMML da vari modelli.

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

Installazione

Ci sono diversi modi per installare e utilizzare il Python Gateway:

  • OS
    • Windows
    • Linux
    • Mac
  • Docker
    • Usa un'immagine da DockerHub
    • Crea la tua immagine

Indipendentemente dal metodo di installazione, avrai bisogno del codice sorgente. L'unico posto per scaricare il codice è la pagina delle release. Essa contiene release stabili testate, prendi semplicemente l'ultima. Attualmente è la 0.8, ma nel tempo ne verranno aggiunte di nuove. Non clonare/scaricare il repository, scarica l'ultima release.

OS

Se stai installando il Python Gateway nel sistema operativo, prima di tutto (indipendentemente dal sistema operativo) devi installare Python. A tal fine:

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

Windows

  1. Assicurati che la variabile d'ambiente PYTHONHOME rimandi a Python 3.6.7.
  2. Assicurati che la variabile d'ambiente di sistema PATH contenga la variabile PYTHONHOME (o la directory a cui punta).

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 imposta la configurazione PythonLib. Inoltre, nel Readme c'è una sezione di risoluzione dei problemi.

Mac

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

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

Docker

L'uso dei container ha diversi vantaggi:

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

Consulta questa serie di articoli per ulteriori informazioni su come utilizzare Docker con i prodotti InterSystems.

Tutte le build del 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 il Python Gateway con InterSystems IRIS Community Edition. È tutto.

Crea la tua immagine

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 sulla 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 che puoi avviare l'immagine Docker:

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

Se stai utilizzando 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 cambiare questo percorso in una directory montata. Per farlo, modifica l'impostazione WorkingDir indicando la directory montata.
  • Per accedere al terminale esegui: docker exec -it irispy sh.
  • Accesso al Portale di Gestione di Sistema tramite login SuperUser/SYS.
  • Per fermare il contenitore esegui: docker stop irispy && docker rm --force irispy.

Verifica dell'installazione

Dopo aver installato Python Gateway, è consigliabile verificare che funzioni. Esegui questo codice nel terminale 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 HELLO — 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. Propone i seguenti gruppi di metodi (tutti restituiscono %Status):

  • Esecuzione del codice
  • Trasmissione dei dati
  • Metodi 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. Carattere di nuova linea: $c(10).
  • returnVariable — nome della variabile da restituire.
  • serialization — come serializzare returnVariable. 0 — string (predefinito), 1 — repr.
  • risultato — riferimento ByRef a una variabile in cui viene salvato il valore returnVariable.

Sopra abbiamo eseguito:

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

In questo esempio assegniamo a una variabile Python x valore Ciao e vogliamo restituire il valore della variabile Python x in una variabile ObjectScript var.

ExecuteCode

ExecuteCode è un'alternativa più sicura e meno limitata 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 usare i flussi.
Accetta due argomenti:

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

Esempio di utilizzo:

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

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

Trasmissione dei dati

Passa dati a Python e ritorno.

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:

  • String per tipi di dati semplici e per il debug.
  • Repr per la memorizzazione di oggetti semplici e il debugging.
  • JSON per la facile manipolazione dei dati su InterSystems IRIS.
  • Pickle per la persistenza degli oggetti.

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

  • GetVariable(variable, serialization, .stream, useString) — ottenere serialization variabile variable in streamSe useString è uguale a 1 e la serializzazione è posizionata in una stringa, allora restituisce 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) della 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, variable, type, 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 nel namespace namespace — qui verrà eseguita la query.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) — carica i dati da un globale global dalla sottoscrizione start fino a end in Python come una variabile di tipo type: list, oppure pandas. dataframeLa descrizione degli argomenti opzionali maschera and labels è disponibile nella documentazione della classe e nel repository Documentazione sul trasferimento dati.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) — carica i dati da una classe class dall'id start fino a end in Python come una variabile di tipo type: list, oppure pandas. dataframe. properties — un elenco (separato da virgola) di proprietà della classe da caricare nel set di dati. Sono supportate le maschere. * e ?Per impostazione predefinita — * (tutte le proprietà). La proprietà %%CLASSNAME viene ignorato.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) — carica i dati da una tabella table dall'id start fino a end in Python.

ExecuteQuery — è universale (qualsiasi SQL valido verrà passato a Python). Tuttavia, ExecuteGlobal e le sue wrapper ExecuteClass e ExecuteTable hanno alcune limitazioni. Sono molto più veloci (3-5 volte più veloci del driver ODBC e 20 volte più veloci ExecuteQuery). Ulteriori informazioni sono disponibili in Documentazione sul trasferimento dati.
Tutti questi metodi supportano il trasferimento di dati da qualsiasi namespace. Il pacchetto isc.py deve essere accessibile nel namespace di destinazione.

ExecuteQuery

ExecuteQuery(request, variable, type, namespace) — trasferimento dei risultati di qualsiasi SQL valido a Python. Questo è il metodo più lento per il trasferimento dei dati. Usalo se ExecuteGlobal e le sue wrapper non sono disponibili.

Argomenti:

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

ExecuteGlobal

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

Argomenti:

  • global — nome del globale senza ^
  • variable — nome della variabile Python in cui vengono scritti i dati.
  • typelist o Pandas dataframe.
  • start — primo sottoscrittore del globale. Obbligatorio %Integer.
  • end — ultimo sottoscrittore del globale. Obbligatorio %Integer.
  • maschera — maschera dei valori globali. La maschera può essere più corta del numero di campi nella variabile globale (in tal caso, i campi finali verranno omessi). Come formattare la maschera:
    • + passare il valore così com'è.
    • - saltare il valore.
    • b — Tipo logico (0False, tutto il resto è Vero).
    • d — Data (da $horolog, su Windows dal 1970, su Linux dal 1900).
    • t — Ora ($horolog, secondi dopo mezzanotte).
    • m — Timestamp (stringa nel formato ANNO-MESE-GIORNO ORA:MINUTI:SECONDI).
  • labels — %Elenco dei nomi delle colonne. Il primo elemento è il nome del sottomodulo.
  • namespace — namespace in cui verrà eseguita la query.

ExecuteClass

Involucro sopra ExecuteGlobal. Basandosi sulla definizione della classe, prepara la chiamata ExecuteGlobal e la esegue.

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

Argomenti:

  • class — nome della classe
  • variable — nome della variabile Python in cui vengono scritti i dati.
  • typelist o Pandas dataframe.
  • start — Id iniziale.
  • end — Id finale
  • properties — un elenco (separato da virgola) di proprietà della classe da caricare nel set di dati. Sono supportate le maschere. * e ?Per impostazione predefinita — * (tutte le proprietà). La proprietà %%CLASSNAME viene ignorato.
  • namespace — namespace in cui verrà eseguita la query.

Tutte le proprietà vengono passate così come sono, tranne le proprietà dei tipi te, %Ora, %Booleano e %Timestamp — vengono convertiti nelle corrispondenti classi Python.

ExecuteTable

Involucro sopra ExecuteClass. Trasmette il nome della tabella al nome della classe e chiama ExecuteClass. Firma:

ExecuteTable(table, variable, type, 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 lavorano tutte con la stessa velocità.
  • ExecuteGlobal 20 volte più veloci rispetto a ExecuteQuery su grandi set di dati (tempo di trasferimento maggiore di >0.01 secondi).
  • ExecuteGlobal, ExecuteClass e ExecuteTable lavorano su variabili globali con questa struttura: ^global(key) = $lb(prop1, prop2, ..., propN) dove key — numero intero.
  • Per ExecuteGlobal, ExecuteClass e ExecuteTable intervallo di valori supportato te 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 dataframe di pandas poiché questa è una limitazione solo per l'elenco.
  • Per ExecuteGlobal, ExecuteClass e ExecuteTable tutti gli argomenti tranne la sorgente dei dati (variabile globale, classe o tabella) e la variabile sono opzionali.

Esempi

Classe di test isc.py.test.Person contiene un metodo che dimostra tutte le varianti di passaggio 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
// Quando si passa il globale, i nomi dei campi devono essere impostati manualmente
// globalKey - nome del sottoscrittore
set labels = $lb("globalKey", "Nome", "DOB", "TS", "RandomTime", "AgeYears", "AgeDecimal", "AgeDouble", "Bool")

// La maschera contiene un elemento in meno rispetto alle etichette perché "globalKey" è il nome del sottoscrittore
// 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 dati.

Metodi di supporto

  • GetVariableInfo(variable, serialization, .defined, .type, .length) — ottenere informazioni sulla variabile: se è definita, classe e lunghezza della serializzazione.
  • GetVariableDefined(variable, .defined) — se la variabile è definita.
  • 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 dell'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 usarlo in 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

In pratica, l'operazione Python è un wrapper su isc.py.Main. L'operazione isc.py.ens.Operation consente di interagire con il processo Python dalle produzioni 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 valori delle variabili richieste. Simile isc.py.msg.ExecutionRequest, ma accetta e restituisce flussi invece di stringhe.
  • isc.py.msg.QueryRequest per trasferire il risultato dell'esecuzione della query SQL. Restituisce Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest per la trasmissione dei dati globale/classe/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:

    • Initializer — 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 vedi errori durante il caricamento, impostane il valore su libpython3.6m.so o anche sul percorso completo della libreria Python.

Creazione di processi aziendali

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

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

Sostituzione delle 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à per il suo nome. L'annotazione dell'attività può contenere variabili che verranno calcolate dal 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 linguaggio ObjectScript.

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

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

Processo aziendale di test

Il prodotto di test e il processo aziendale di test sono disponibili per impostazione predefinita come parte del gateway Python. 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 il prodotto 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

Viene utilizzata la richiesta isc.py.msg.ExecutionRequest, ecco le sue proprietà:

  • Codice — codice Python.
  • SeparateLines — separare il codice in righe per l'esecuzione. $c(10) (n) viene utilizzato per separare le righe. Si prega di notare che NON è consigliabile elaborare il messaggio tutto in una volta, questa funzione è destinata solo all'elaborazione def e simili espressioni multilinea. Per impostazione predefinita 0.
  • Variabili è un elenco di variabili separate da virgole, che verranno aggiunte alla risposta.
  • Serializzazione — Come serializzare le variabili che vogliamo restituire. Opzioni: Str, Repr, JSON, Pickle e Dill, per impostazione predefinita Str.

Nel nostro caso, stiamo solo impostando la proprietà Codice, quindi tutte le altre proprietà utilizzano i valori predefiniti. La impostiamo chiamando process.GetAnnotation("Import pandas"), che durante l'esecuzione restituisce l'annotazione dopo aver eseguito la sostituzione delle variabili. Alla fine, il codice import pandas as pd verrà passato a Python. GetAnnotation può essere utile per ottenere script Python multilinea, ma non ci sono limitazioni su questo metodo di ottenimento del codice. Puoi impostare la proprietà Codice in qualsiasi modo tu preferisca.

Ottenere variabili

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

Python Gateway in InterSystems IRIS

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

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

Possiamo vedere i risultati in Visual Trace:

Python Gateway in InterSystems IRIS

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

Trasmissione dei dati

Parliamo quindi del trasferimento di 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.
  • Type — tipo di variabile: dataframe (dataframe pandas) o list.
  • Namespace — campo da cui otteniamo i dati. Il pacchetto isc.py deve essere accessibile in questo campo. Può trattarsi di un'area senza supporto per i prodotti.

Sulla base di questa interfaccia sono stati implementati 4 classi di richiesta:

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

Nel processo di test, 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, inviamo isc.py.msg.SaveRequest con i seguenti argomenti:

  • Maschera — Vengono salvate solo le variabili che soddisfano la maschera. Sono supportati * e ?. Esempio: "Data*, Figure?". Per impostazione predefinita *.
  • MaxLength — Lunghezza massima della variabile memorizzata. Se la serializzazione della variabile supera tale lunghezza, verrà ignorata. Imposta 0 per consentire variabili di qualsiasi lunghezza. Di default $$$MaxStringLength.
  • Name — Nome del contesto (opzionale).
  • Descrizione — Descrizione del contesto (opzionale).

Restituisce Ens.StringResponse con Id del contesto salvato. Durante il processo di test, osserva l'attività Salva Contesto.

La richiesta corrispondente isc.py.msg.RestoreRequest carica il contesto da InterSystems IRIS in Python:

  • ContextId — identificatore del contesto.
  • Cancella — svuotare il contesto prima del ripristino.

Jupyter Notebook

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

Questa estensione presuppone che le annotazioni contengano codice Python e utilizzano 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 alcune schermate:

Esploratore di processi

Python Gateway in InterSystems IRIS

Editor di processi

Python Gateway in InterSystems IRIS

Installazione

  1. Hai bisogno di InterSystems IRIS 2019.2+.
  2. Installa PythonGateway v0.8+ (solo necessario 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 il cui obiettivo è quello di unire i modelli e l'ambiente transazionale, affinché i modelli costruiti possano essere facilmente utilizzati direttamente nei tuoi processi aziendali. Python Gateway è parte di MLToolkit e fornisce integrazione con il linguaggio Python, consentendo di orchestrare qualsiasi algoritmo di machine learning creato in Python (l'ambiente principale per molti Data Scientist), utilizzando numerose librerie pronte per una rapida creazione di soluzioni analitiche AI/ML adattive 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 già utilizzano i componenti di MLToolkit, incluso Python Gateway. Il gruppo offre una serie di casi pratici implementati (con codice sorgente e dati di test) in ambito marketing, produzione, medicina e molte altre aree. Per unirti al gruppo utenti ML Toolkit, ti preghiamo di inviare un breve messaggio via e-mail al seguente indirizzo: MLToolkit@intersystems.com e specifica nella tua e-mail i seguenti dati:

  • Nome utente GitHub
  • Organizzazione (dove lavori o studi)
  • Ruolo (la tua posizione effettiva nella tua organizzazione, oppure "Studente" o "Libero professionista").
  • Paese

A coloro che hanno letto l'articolo e sono interessati alle potenzialità di InterSystems IRIS come piattaforma per lo sviluppo o l'hosting di meccanismi di intelligenza artificiale e machine learning, proponiamo di discutere scenari interessanti per la tua azienda. Siamo pronti ad analizzare le esigenze della tua azienda e a definire insieme un piano d'azione; l'indirizzo e-mail 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