Python Gateway presso InterSystems IRIS

Questo articolo riguarda Python Gateway, un progetto di community open source per la piattaforma dati InterSystems IRIS. Questo progetto ti consente di orchestrare qualsiasi algoritmo di apprendimento automatico creato in Python (l'ambiente principale per molti Data Scientist), utilizzare numerose librerie già pronte per creare rapidamente soluzioni AI / ML analitiche adattive e robotiche sulla piattaforma InterSystems IRIS. In questo articolo, ti mostrerò come InterSystems IRIS può orchestrare i processi Python, eseguire un efficiente trasferimento di dati bidirezionale e creare processi aziendali intelligenti.

План

  1. Introduzione.
  2. Utensili.
  3. Installazione.
  4. API.
  5. Interoperabilità.
  6. Quaderno Giove.
  7. Conclusioni.
  8. Collegamenti.
  9. ML Toolkit.

Introduzione

Python è un linguaggio di programmazione generico di alto livello incentrato sul miglioramento della produttività degli sviluppatori e della leggibilità del codice. In questa serie di articoli parlerò delle possibilità di utilizzo del linguaggio Python sulla piattaforma InterSystems IRIS, mentre l'obiettivo principale di questo articolo è l'uso di Python come linguaggio per la creazione e l'applicazione di modelli di machine learning.

L'apprendimento automatico (ML) è una classe di metodi di intelligenza artificiale, la cui caratteristica non è la soluzione diretta di un problema, ma l'apprendimento nel processo di risoluzione di molti problemi simili.

Algoritmi e modelli di apprendimento automatico stanno diventando sempre più comuni. Ci sono molte ragioni per questo, ma tutto si riduce all'accessibilità, alla semplicità e al raggiungimento di risultati pratici. Il clustering o anche la modellazione della rete neurale è una nuova tecnologia?

Certo che no, ma al giorno d'oggi non è necessario scrivere centinaia di migliaia di righe di codice per eseguire un modello e i costi di creazione e utilizzo dei modelli stanno diventando sempre più piccoli.

Gli strumenti si stanno evolvendo: sebbene non disponiamo di strumenti AI/ML completamente orientati alla GUI, si vedono anche i progressi che abbiamo visto con molte altre classi di sistemi informativi come la BI (dalla scrittura di codice all'utilizzo di framework e soluzioni configurabili orientate alla GUI). negli strumenti di creazione AI/ML. Abbiamo già superato la fase di scrittura del codice e oggi utilizziamo i framework per costruire e addestrare i modelli.

Altri miglioramenti, come la possibilità di propagare un modello pre-addestrato in cui l'utente finale deve semplicemente terminare l'addestramento del modello sui propri dati specifici, facilitano anche l'avvio dell'applicazione dell'apprendimento automatico. Questi progressi rendono molto più semplice l'apprendimento dell'apprendimento automatico, sia per i professionisti che per le aziende nel loro complesso.

D'altra parte, raccogliamo sempre più dati. Con una piattaforma dati unificata come InterSystems IRIS, tutte queste informazioni possono essere immediatamente preparate e utilizzate come input per i modelli di machine learning.

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

Ma per quanto riguarda i risultati? È qui che le cose si complicano. Esistono molti strumenti per la creazione di modelli, di cui parlerò in seguito. Costruire un buon modello non è facile, ma cosa succederà dopo? Anche trarre profitto dall'uso del modello da parte di un'azienda è un compito non banale. La radice del problema è la separazione dei carichi di lavoro 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 dei dati transazionali. A che serve il miglior modello di rilevamento delle transazioni fraudolente se lo eseguiamo una volta al giorno? I truffatori se ne sono andati da tempo con i soldi. Dobbiamo addestrare il modello sui dati storici, ma dobbiamo anche applicarlo in tempo reale sui nuovi dati in arrivo in modo che i nostri processi aziendali possano agire secondo le previsioni fatte dal modello.

ML Toolkit è un toolkit che fa proprio questo: riunisce modelli e un ambiente transazionale in modo che i modelli che crei possano essere facilmente utilizzati direttamente nei tuoi processi aziendali. Python Gateway fa parte di ML Toolkit e fornisce l'integrazione con il linguaggio Python (simile a R Gateway, essendo parte di ML Toolkit fornisce l'integrazione con il linguaggio R).

strumenti

Prima di continuare, vorrei descrivere alcuni strumenti e librerie Python che useremo in seguito.

Tecnologia

  • Python è un linguaggio di programmazione interpretato, generico e di alto livello. Il vantaggio principale del linguaggio è una vasta libreria di librerie 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 familiarità passeggera con la lingua. Se vuoi iniziare ad imparare, ti consiglio di iniziare con documentazione.
  • Per i nostri prossimi esercizi, set Pitone 3.6.7 64bit.
  • IDE: io uso PyCharm, ma in generale много. Se stai usando Atelier, c'è un plugin Eclipse per gli sviluppatori Python. Se stai usando VS Code, allora c'è un'estensione per Python.
  • Notebook: invece di un IDE, puoi scrivere e condividere i tuoi script in notebook online. Il più popolare di loro è Giove.

biblioteche

Ecco un elenco (parziale) di librerie di machine learning:

  • numpy — un pacchetto fondamentale per calcoli esatti.
  • Pandas — strutture di dati ad alte prestazioni e strumenti di analisi dei dati.
  • matplotlib - Creazione di grafici.
  • Seaborn - visualizzazione dei dati basata su matplotlib.
  • Impara — metodi di apprendimento automatico.
  • XGBoost — algoritmi di machine learning all'interno della metodologia Gradient Boosting.
  • Gensim — PNL.
  • Keras - reti neurali.
  • tensorflow è una piattaforma per la creazione di modelli di machine learning.
  • PyTorch è una piattaforma per la creazione di modelli di machine learning incentrati su Python.
  • Nyoka - PMML da vari modelli.

Le tecnologie AI/ML rendono il business più efficiente e adattabile. Inoltre, oggi queste tecnologie stanno diventando più facili da sviluppare e implementare. Inizia a conoscere le tecnologie AI/ML e come possono aiutare la tua organizzazione a crescere.

Installazione

Esistono diversi modi per installare e utilizzare Python Gateway:

  • GA
    • Windows
    • Linux
    • Mac
  • docker
    • Usa l'immagine da DockerHub
    • Crea la tua immagine

Indipendentemente dal metodo di installazione, sarà necessario il codice sorgente. L'unico posto per scaricare il codice è pagina dei rilasci. Contiene versioni stabili testate, basta prendere l'ultima. Al momento è 0.8, ma col tempo ce ne saranno di nuovi. Non clonare/scaricare il repository, scarica l'ultima versione.

GA

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

  1. Installa Python 3.6.7 a 64 bit. Si consiglia di installare Python nella directory predefinita.
  2. Installa il modulo dill: pip install dill.
  3. Scarica il codice ObjectScript (ad es. do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) a qualsiasi area con prodotti. Nel caso in cui desideri che un'area esistente supporti le produzioni, esegui: write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. Luogo richiamo DLL/SO/DYLIB nella cartella bin la tua istanza InterSystems IRIS. Il file della libreria deve essere disponibile nel percorso restituito da write ##class(isc.py.Callout).GetLib().

Windows

  1. Assicurati che la variabile di ambiente sia PYTHONHOME punta a Python 3.6.7.
  2. Assicurati che la variabile di ambiente di sistema sia PATH contiene una variabile PYTHONHOME (o la directory a cui punta).

Linux (Debian/Ubuntu)

  1. Controlla se la variabile di ambiente lo è PATH contiene /usr/lib и /usr/lib/x86_64-linux-gnu. Usa File /etc/environment per impostare le variabili di ambiente.
  2. In caso di errori undefined symbol: _Py_TrueStruct impostare l'impostazione PythonLib. anche in Leggimi c'è una sezione Risoluzione dei problemi.

Mac

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

Se sono state modificate le variabili di ambiente, riavviare il prodotto InterSystems.

docker

L'utilizzo dei contenitori presenta una serie di vantaggi:

  • portabilità
  • efficacia
  • Isolamento
  • leggerezza
  • Immutabilità

Controlla questo una serie di articoli per ulteriori informazioni sull'utilizzo di Docker con i prodotti InterSystems.

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

Immagine pronta

Correre: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latestper scaricare ed eseguire Python Gateway con InterSystems IRIS Community Edition. È tutto.

Crea la tua immagine

Per creare un'immagine docker, esegui nella root del repository: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
Per impostazione predefinita, l'immagine viene creata in base all'immagine store/intersystems/iris-community:2019.4.0.383.0, tuttavia puoi modificarlo impostando la variabile IMAGE.
Per compilare da InterSystems IRIS eseguire: `docker build --build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 --force-rm --tag intersystemscommunity/irispy:latest'.

Successivamente, puoi eseguire l'immagine docker:

docker run -d 
  -p 52773:52773 
  -v /<HOST-DIR-WITH-iris.key>/:/mount 
  --name irispy 
  intersystemscommunity/irispy:latest 
  --key /mount/iris.key

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

Commenti

  • Processo di prova isc.py.test.Process salva un numero di immagini in una directory temporanea. Potresti voler cambiare questo percorso in una directory montata. Per fare ciò, modificare l'impostazione WorkingDir specificando la directory montata.
  • Per accedere al terminale, eseguire: docker exec -it irispy sh.
  • Accesso al Portale Gestione Sistema tramite login SuperUser/SYS.
  • Per arrestare un contenitore, eseguire: docker stop irispy && docker rm --force irispy.

Verifica dell'installazione

Dopo aver installato Python Gateway, vale la pena 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 - il valore della variabile Python x. Se lo stato di ritorno sc è un errore o var vuoto, controlla Leggimi: sezione Risoluzione dei problemi.

API

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

  • Esecuzione del codice
  • Trasferimento dati
  • ausiliario

Esecuzione del codice

Questi metodi consentono di eseguire codice Python arbitrario.

Stringa semplice

SimpleString è il metodo principale. Richiede 4 argomenti opzionali:

  • code è la riga di codice da eseguire. Carattere di avanzamento riga: $c(10).
  • returnVariable è il nome della variabile da restituire.
  • serialization - come serializzare returnVariable. 0 - stringa (predefinito), 1 - repr.
  • result - ByRef riferimento alla variabile in cui è scritto il valore returnVariable.

Sopra abbiamo fatto:

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

In questo esempio, stiamo assegnando a una variabile Python x значение Hello e vuoi restituire il valore di una variabile Python x a una variabile ObjectScript var.

EseguiCodice

ExecuteCode è un'alternativa più sicura e meno restrittiva SimpleString.
Le righe nella piattaforma InterSystems IRIS sono limitate a 3 caratteri e se si desidera eseguire una parte di codice più lunga, è necessario utilizzare gli stream.
Ci vogliono due argomenti:

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

Suggerisci di usare:

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

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

Trasferimento dati

Passa i dati da e verso Python.

Python -> InterSystems IRIS

Esistono 4 modi per ottenere il valore di una variabile Python in InterSystems IRIS, a seconda della serializzazione necessaria:

  • String per tipi di dati semplici e debug.
  • Repr per la memorizzazione di oggetti semplici e il debug.
  • JSON per una facile manipolazione dei dati sul lato InterSystems IRIS.
  • Pickle per salvare gli oggetti.

Questi metodi ti consentono di ricevere variabili da Python come stringa o come flussi.

  • GetVariable(variable, serialization, .stream, useString) - Ottenere serialization variabile variable в stream. Se useString è 1 e la serializzazione è inserita in una stringa, quindi viene restituita una stringa, non un flusso.
  • GetVariableJson(variable, .stream, useString) — ottenere la serializzazione JSON di una variabile.
  • GetVariablePickle(variable, .stream, useString, useDill) -Ottenere una 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

Caricamento dei dati da InterSystems IRIS in Python.

  • ExecuteQuery(query, variable, type, namespace) - crea un set di dati (pandas dataframe o list) dalla query sql e impostalo sulla variabile python variable. Sacchetto di plastica isc.py dovrebbe essere disponibile in zona namespace - la richiesta verrà eseguita lì.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) - carica i dati globali global da pedice start a end in Python come variabile di tipo type: list, o panda dataframe. Descrizione degli argomenti facoltativi mask ed labels disponibile nella documentazione e nel repository della classe Documenti sul trasferimento dei dati.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) - carica i dati della classe class da id start a end in Python come variabile di tipo type: list, o panda dataframe. properties — elenco (separato da virgola) delle proprietà della classe da caricare nel set di dati. Maschere supportate * и ?. Predefinito - * (tutte le proprietà). Proprietà %%CLASSNAME ignorato.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) - carica i dati della tabella table da id start a end in pitone.

ExecuteQuery - universale (qualsiasi query SQL valida verrà passata a Python). Tuttavia, ExecuteGlobal e i suoi involucri ExecuteClass и ExecuteTable lavorare con una serie di restrizioni. Sono molto più veloci (3-5 volte più veloci del driver ODBC e 20 volte più veloci di ExecuteQuery). Maggiori informazioni in Documenti sul trasferimento dei dati.
Tutti questi metodi supportano il trasferimento di dati da qualsiasi area. Sacchetto di plastica isc.py deve essere disponibile nell'area di destinazione.

EseguiQuery

ExecuteQuery(request, variable, type, namespace) - passando i risultati di qualsiasi query SQL valida a Python. Questo è il metodo di trasferimento dati più lento. Usalo se ExecuteGlobal e i suoi involucri non sono disponibili.

argomenti:

  • query - query sql.
  • variable - il nome della variabile Python in cui sono scritti i dati.
  • type - list o panda dataframe.
  • namespace - l'area in cui verrà eseguita la richiesta.

Esegui Global

ExecuteGlobal(global, variable, type, start, end, mask, labelels, namespace) - passando un globale a Python.

argomenti:

  • global è il nome del globale senza ^
  • variable - il nome della variabile Python in cui sono scritti i dati.
  • type - list o panda dataframe.
  • start — il primo pedice del globale. Necessariamente %Integer.
  • end è l'ultimo pedice del globale. Necessariamente %Integer.
  • mask — maschera dei valori globali. La maschera può essere più corta del numero di campi nel globale (nel qual caso i campi alla fine verranno saltati). Come formattare la maschera:
    • + passare il valore così com'è.
    • - salta il valore.
    • b — Tipo booleano (0 - False, tutto il resto - True).
    • d — Data (da $horolog, su Windows dal 1970, su Linux dal 1900).
    • t - Tempo ($orolog, secondi dopo la mezzanotte).
    • m — Timestamp (stringa di formato ANNO-MESE-GIORNO ORA:MINUTO:SECONDO).
  • labels - %Elenco dei nomi delle colonne. Il primo elemento è il nome del pedice.
  • namespace - l'area in cui verrà eseguita la richiesta.

EseguiClasse

avvolgere ExecuteGlobal. Prepara una chiamata basata sulla definizione della classe ExecuteGlobal e lo chiama.

ExecuteClass(class, variable, type, start, end, properties, namespace) - passare i dati della classe a Python.

argomenti:

  • class - nome della classe
  • variable - il nome della variabile Python in cui sono scritti i dati.
  • type - list o panda dataframe.
  • start - ID di partenza.
  • end - ID finale
  • properties — elenco (separato da virgola) delle proprietà della classe da caricare nel set di dati. Maschere supportate * и ?. Predefinito - * (tutte le proprietà). Proprietà %%CLASSNAME ignorato.
  • namespace - l'area in cui verrà eseguita la richiesta.

Tutte le proprietà vengono passate così come sono tranne le proprietà del tipo %Date, %Time, %Boolean и %TimeStamp - vengono convertiti nelle corrispondenti classi Python.

Eseguitabella

avvolgere ExecuteClass. Traduce il nome della tabella in un nome di classe e chiama ExecuteClass. Firma:

ExecuteTable(table, variable, type, start, end, properties, namespace) - passare i dati della tabella a Python.

argomenti:

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

Osservazioni

  • ExecuteGlobal, ExecuteClass и ExecuteTable lavorare altrettanto velocemente.
  • ExecuteGlobal 20 volte più veloce di ExecuteQuery su set di dati di grandi dimensioni (tempo di trasferimento >0.01 secondi).
  • ExecuteGlobal, ExecuteClass и ExecuteTable lavorare su globali con questa struttura: ^global(key) = $lb(prop1, prop2, ..., propN) dove key è un numero intero.
  • per ExecuteGlobal, ExecuteClass и ExecuteTable intervallo di valori supportato %Date corrisponde alla fascia mktime e dipende dal sistema operativofinestre: 1970-01-01, linux 1900-01-01, Mac). Utilizzo %TimeStampper passare dati al di fuori di questo intervallo o utilizzare pandas dataframe as questa limitazione è solo per l'elenco.
  • per ExecuteGlobal, ExecuteClass и ExecuteTable tutti gli argomenti tranne l'origine dati (globale, classe o tabella) e la variabile sono facoltativi.

Примеры

classe di prova isc.py.test.Person contiene un metodo che dimostra tutte le opzioni 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"

// Общие аргументы
set variable = "df"
set type = "dataframe"
set start = 1
set end = $g(^isc.py.test.PersonD, start)

// Способ 0: ExecuteGlobal без аргументов
set sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 0, type)

// Способ 1: ExecuteGlobal с аргументами    
// При передаче глобала названия полей задаются вручную
// globalKey - название сабсткрипта 
set labels = $lb("globalKey", "Name", "DOB", "TS", "RandomTime", "AgeYears", "AgeDecimal", "AgeDouble", "Bool")

// mask содержит на 1 элемент меньше чем labels потому что "globalKey" - название сабскипта
// Пропускаем %%CLASSNAME
set mask = "-+dmt+++b"

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

// Способ 2: ExecuteClass
set sc = ##class(isc.py.Main).ExecuteClass(class, variable _ 2, type, start, end)

// Способ 3: ExecuteTable
set sc = ##class(isc.py.Main).ExecuteTable(table, variable _ 3, type, start, end)

// Способ 4: ExecuteTable
set sc = ##class(isc.py.Main).ExecuteQuery(query, variable _ 4, type)

metodo di chiamata 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 di serializzazione.
  • GetVariableDefined(variable, .defined) - se la variabile è definita.
  • GetVariableType(variable, .type) - ottenere la classe della variabile.
  • GetStatus() - ottieni e rimuovi l'ultima eccezione sul lato Python.
  • GetModuleInfo(module, .imported, .alias) — ottieni 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 Python Gateway dal terminale, ora iniziamo ad usarlo in produzione. La base per interagire con Python in questa modalità è isc.py.ens.Operation. Ci permette:

  • Esegui il codice Python
  • Salva/Ripristina contesto Python
  • Carica e ricevi dati da Python

Fondamentalmente, un'operazione Pyhton è un wrapper isc.py.Main. Operazione isc.py.ens.Operation consente l'interazione con il processo Python dai prodotti InterSystems IRIS. Sono supportate cinque richieste:

  • isc.py.msg.ExecutionRequest per eseguire codice Python. ritorna isc.py.msg.ExecutionResponse con il risultato dell'esecuzione e i valori delle variabili richieste.
  • isc.py.msg.StreamExecutionRequest per eseguire codice Python. ritorna isc.py.msg.StreamExecutionResponse il risultato dell'esecuzione e i valori delle variabili richieste. Analogico isc.py.msg.ExecutionRequest, ma accetta e restituisce flussi anziché stringhe.
  • isc.py.msg.QueryRequest per trasferire il risultato dell'esecuzione di una query SQL. ritorna Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest per passare dati globali/classe/tabella. ritorna Ens.Response.
  • isc.py.msg.SaveRequest per salvare il contesto Python. ritorna Ens.StringResponse con ID contesto.
  • isc.py.msg.RestoreRequest per ripristinare il contesto Python.

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

    • Initializer - scelta di una classe che implementa l'interfaccia isc.py.init.Abstract. Può essere utilizzato per caricare funzioni, moduli, classi e simili. Viene eseguito una volta all'avvio del processo.
    • PythonLib - (solo Linux) se vedi errori di avvio, imposta il suo valore su libpython3.6m.so o anche nel percorso completo della libreria Python.

Creazione di processi aziendali

Sono disponibili due classi che facilitano lo sviluppo dei processi aziendali:

  • isc.py.ens.ProcessUtils consente di estrarre annotazioni da attività con sostituzione di variabili.
  • isc.py.util.BPEmulator semplifica il test dei processi aziendali con Python. Può eseguire un processo aziendale (parti Python) nel processo corrente.

Sostituzione variabile

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

  • ${class:method:arg1:...:argN} - chiamata al metodo
  • #{expr} - eseguire codice nel 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 quelli. processo aziendale in corso.
  • ${%PopulateUtils:Integer:1:100} chiama un metodo Integer classe %PopulateUtils, passando argomenti 1 и 100, restituendo un numero intero casuale nell'intervallo 1...100.

Testare il processo aziendale

La produzione di test e il processo aziendale di test sono disponibili per impostazione predefinita come parte del gateway Python. Per usarli:

  1. Nel terminale del sistema operativo eseguire: pip install pandas matplotlib seaborn.
  2. Nel terminale InterSystems IRIS, eseguire: do ##class(isc.py.test.CannibalizationData).Import() per popolare i dati di test.
  3. Lancia i prodotti isc.py.test.Production.
  4. Invia tipo di richiesta Ens.Request в isc.py.test.Process.

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

Python Gateway presso InterSystems IRIS

Esecuzione del codice

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

Python Gateway presso InterSystems IRIS

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

  • Code — Codice Python.
  • SeparateLines - se suddividere il codice in righe per l'esecuzione. $c(10) (n) viene utilizzato per separare le stringhe. Si noti che NON è consigliabile elaborare l'intero messaggio in una volta, questa funzione è solo per l'elaborazione def e simili espressioni multilinea. Predefinito 0.
  • Variables è un elenco di variabili separate da virgole che verranno aggiunte alla risposta.
  • Serialization - Come serializzare le variabili che vogliamo restituire. Opzioni: Str, Repr, JSON, Pickle и Dill, predefinito Str.

Nel nostro caso, impostiamo solo la proprietà Code, in modo che tutte le altre proprietà utilizzino i valori predefiniti. Lo configuriamo chiamando process.GetAnnotation("Import pandas"), che in fase di esecuzione restituisce un'annotazione dopo che è stata eseguita la sostituzione della variabile. Finalmente 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 conveniente per te.

Ottenere variabili

Un'altra sfida interessante usando isc.py.msg.ExecutionRequest - Correlation Matrix: Tabular:

Python Gateway presso InterSystems IRIS

Calcola la matrice di correlazione sul lato Python ed estrae la variabile corrmat torna a InterSystems IRIS in formato JSON impostando le proprietà della richiesta:

  • Variables: "corrmat"
  • Serialization: "JSON"

Possiamo vedere i risultati in Visual Trace:

Python Gateway presso InterSystems IRIS

E se abbiamo bisogno di questo valore nel BP, può essere ottenuto in questo modo: callresponse.Variables.GetAt("corrmat").

Trasferimento dati

Successivamente, parliamo 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à:

  • Variable è una variabile Python in cui vengono scritti i dati.
  • Type - tipo di variabile: dataframe (pandas dataframe) o list.
  • Namespace - l'area da cui riceviamo i dati. Sacchetto di plastica isc.py dovrebbe essere disponibile in quest'area. Questa potrebbe essere un'area senza supporto del prodotto.

Sulla base di questa interfaccia, vengono implementate 4 classi di richieste:

  • isc.py.msg.QueryRequest - impostare la proprietà Query per inviare una query SQL.
  • isc.py.msg.ClassRequest - impostare la proprietà Class per passare i dati della classe.
  • isc.py.msg.TableRequest - impostare la proprietà Table per passare i dati della tabella.
  • isc.py.msg.GlobalRequest - impostare la proprietà Global trasferire i dati a livello globale.

Nel processo di test, guarda l'attività RAWDove isc.py.msg.QueryRequest mostrato in azione.

Python Gateway presso InterSystems IRIS

Salvataggio/ripristino di un contesto Python

Infine, possiamo memorizzare il contesto Python in InterSystems IRIS, per fare ciò, inviare isc.py.msg.SaveRequest con argomenti:

  • Mask — Vengono salvate solo le variabili che soddisfano la maschera. Supportato * и ?. esempio: "Data*, Figure?"... Predefinito *.
  • MaxLength — La lunghezza massima della variabile memorizzata. Se la serializzazione di una variabile è più lunga, verrà ignorata. Impostare su 0 per ottenere variabili di qualsiasi lunghezza. Predefinito $$$MaxStringLength.
  • Name — Nome del contesto (facoltativo).
  • Description — Descrizione del contesto (facoltativo).

ritorna Ens.StringResponse с Id contesto salvato. Nel processo di test, guarda l'attività Save Context.

Richiesta corrispondente isc.py.msg.RestoreRequest carica un contesto da InterSystems IRIS in Python:

  • ContextId è l'identificatore di contesto.
  • Clear — cancellare il contesto prima del ripristino.

Notebook Jupyter

Notebook Jupyter è un'applicazione Web open source che consente di creare e pubblicare notebook contenenti codice, visualizzazioni e testo. Python Gateway consente di visualizzare e modificare i processi BPL come Jupyter Notebook. Si noti che il normale esecutore Python 3 è attualmente in uso.

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

  • Creare nuovi processi aziendali
  • Elimina i processi aziendali
  • Crea nuove attività
  • Cambia attività
  • Elimina attività

Qui video dimostrativo. E alcuni screenshot:

Esplora processi

Python Gateway presso InterSystems IRIS

Redattore di processi

Python Gateway presso InterSystems IRIS

Installazione

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

Documentazione.

risultati

MLToolkit è un insieme di strumenti che mira a combinare modelli e un ambiente transazionale in modo che i modelli creati possano essere facilmente utilizzati direttamente nei processi aziendali. Python Gateway fa parte di MLToolkit e fornisce l'integrazione con il linguaggio Python, consentendo di orchestrare qualsiasi algoritmo di apprendimento automatico creato in Python (l'ambiente principale per molti Data Scientist), utilizzare numerose librerie già pronte per creare rapidamente AI / Soluzioni ML sulla piattaforma InterSystems IRIS.

riferimenti

MLToolkit

Il gruppo di utenti MLToolkit è un repository GitHub privato creato come parte dell'organizzazione GitHub aziendale di InterSystems. È rivolto a utenti esterni che stanno installando, imparando o già utilizzando i componenti di MLToolkit, incluso Python Gateway. Il gruppo ha una serie di casi implementati (con codice sorgente e dati di test) nei settori del marketing, della produzione, della medicina e di molti altri settori. Per unirti al gruppo di utenti di ML Toolkit, invia una breve e-mail al seguente indirizzo: [email protected] e includi le seguenti informazioni nella tua lettera:

  • Nome utente GitHub
  • Organizzazione (lavori o studi)
  • Posizione (la tua attuale posizione nella tua organizzazione, "Studente" o "Indipendente").
  • paese

Per coloro che hanno letto l'articolo e sono interessati a InterSystems IRIS come piattaforma per lo sviluppo o l'hosting di meccanismi di intelligenza artificiale e apprendimento automatico, vi invitiamo a discutere possibili scenari di interesse per la vostra azienda. Analizzeremo prontamente le esigenze della tua impresa e determineremo insieme un piano d'azione; indirizzo email di contatto del nostro gruppo di esperti AI/ML – [email protected].

Fonte: habr.com

Aggiungi un commento