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
- Introduzione.
- Strumenti.
- Installazione.
- API.
- Interoperabilità.
- Jupyter Notebook.
- Conclusioni.
- Riferimenti.
- 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 .
- Per i nostri prossimi esercizi, installa .
- IDE: Io uso , ma in generale ci sono . 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 è .
Librerie
Ecco un elenco (non completo) di librerie per l'apprendimento automatico:
- è un pacchetto fondamentale per calcoli di precisione.
- è per strutture dati ad alte prestazioni e strumenti di analisi dei dati.
- è per la creazione di grafici.
- è per la visualizzazione dei dati, basata su matplotlib.
- è per metodi di apprendimento automatico.
- è per algoritmi di apprendimento automatico nell'ambito della metodologia di boosting graduale (Gradient Boosting).
- è per NLP.
- è per reti neurali.
- è una piattaforma per la creazione di modelli di machine learning.
- è una piattaforma per la creazione di modelli di machine learning, focalizzata su Python.
- è 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 è . 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:
- . È consigliabile installare Python nella directory predefinita.
- Installa il modulo
dill:pip install dill. - 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). - Posiziona nella cartella
bindel tuo istanza di InterSystems IRIS. Il file della libreria deve essere disponibile nel percorso restituitowrite ##class(isc.py.Callout).GetLib().
Windows
- Assicurati che la variabile d'ambiente
PYTHONHOMErimandi a Python 3.6.7. - Assicurati che la variabile d'ambiente di sistema
PATHcontenga la variabilePYTHONHOME(o la directory a cui punta).
Linux (Debian/Ubuntu)
- Controlla che la variabile d'ambiente
PATHcontiene/usr/libe/usr/lib/x86_64-linux-gnu. Usa il file/etc/environmentper impostare le variabili d'ambiente. - In caso di errori
undefined symbol: _Py_TrueStructimposta la configurazionePythonLib. Inoltre, nel c'è una sezione di risoluzione dei problemi.
Mac
- Attualmente è supportato solo Python 3.6.7 di 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 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.keySe stai utilizzando un'immagine basata su InterSystems IRIS Community Edition, non è necessario specificare la chiave.
Commenti
- Processo di test
isc.py.test.Processsalva una serie di immagini in una directory temporanea. Potresti voler cambiare questo percorso in una directory montata. Per farlo, modifica l'impostazioneWorkingDirindicando 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 varIl risultato dovrebbe essere HELLO — valore della variabile Python x. Se lo stato restituito sc è un errore o var vuoto, controlla .
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 serializzarereturnVariable. 0 — string (predefinito), 1 — repr.risultato— riferimento ByRef a una variabile in cui viene salvato il valorereturnVariable.
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'esecuzionecodea 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:
Stringper tipi di dati semplici e per il debug.Reprper la memorizzazione di oggetti semplici e il debugging.JSONper la facile manipolazione dei dati su InterSystems IRIS.Pickleper la persistenza degli oggetti.
Questi metodi consentono di ottenere variabili da Python come stringhe o flussi.
GetVariable(variable, serialization, .stream, useString)— ottenereserializationvariabilevariableinstreamSeuseStringè 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
>6InterSystems IRIS -> Python
Carichiamo i dati da InterSystems IRIS in Python.
ExecuteQuery(query, variable, type, namespace)— crea un set di dati (pandasdataframeolist) da una query SQL e lo imposta in una variabile Python.variable. Il pacchettoisc.pydeve essere accessibile nel namespacenamespace— qui verrà eseguita la query.ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace)— carica i dati da un globaleglobaldalla sottoscrizionestartfino aendin Python come una variabile di tipotype:list, oppure pandas.dataframeLa descrizione degli argomenti opzionalimascheraandlabelsè disponibile nella documentazione della classe e nel repository .ExecuteClass(class, variable, type, start, end, properties, namespace)— carica i dati da una classeclassdall'idstartfino aendin Python come una variabile di tipotype: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à%%CLASSNAMEviene ignorato.ExecuteTable(table, variable, type, start, end, properties, namespace)— carica i dati da una tabellatabledall'idstartfino aendin 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 .
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.type—listo Pandasdataframe.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.type—listo Pandasdataframe.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 (0—False, 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 classevariable— nome della variabile Python in cui vengono scritti i dati.type—listo Pandasdataframe.start— Id iniziale.end— Id finaleproperties— 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à%%CLASSNAMEviene 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 aExecuteClass.
Note
ExecuteGlobal,ExecuteClasseExecuteTablelavorano tutte con la stessa velocità.ExecuteGlobal20 volte più veloci rispetto aExecuteQuerysu grandi set di dati (tempo di trasferimento maggiore di >0.01 secondi).ExecuteGlobal,ExecuteClasseExecuteTablelavorano su variabili globali con questa struttura:^global(key) = $lb(prop1, prop2, ..., propN)dovekey— numero intero.- Per
ExecuteGlobal,ExecuteClasseExecuteTableintervallo di valori supportatotecorrisponde all'intervallomktimee dipende dal sistema operativo (: 1970-01-01, 1900-01-01, ). 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,ExecuteClasseExecuteTabletutti gli argomenti tranne la sorgente dei dati (variabile globale, classe o tabella) e la variabile sono opzionali.
Esempi
Classe di test 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.ExecutionRequestper eseguire codice Python. Restituisceisc.py.msg.ExecutionResponsecon il risultato dell'esecuzione e i valori delle variabili richieste.isc.py.msg.StreamExecutionRequestper eseguire codice Python. Restituisceisc.py.msg.StreamExecutionResponserisultato dell'esecuzione e valori delle variabili richieste. Simileisc.py.msg.ExecutionRequest, ma accetta e restituisce flussi invece di stringhe.isc.py.msg.QueryRequestper trasferire il risultato dell'esecuzione della query SQL. RestituisceEns.Response.isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequestper la trasmissione dei dati globale/classe/tabella. RestituisceEns.Response.isc.py.msg.SaveRequestper salvare il contesto Python. RestituisceEns.StringResponsecon l'identificativo del contesto.isc.py.msg.RestoreRequestper ripristinare il contesto Python.Inoltre,
isc.py.ens.Operationha due impostazioni:Initializer— selezione della classe che implementa l'interfacciaisc.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 sulibpython3.6m.soo 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.ProcessUtilsper estrarre annotazioni dalle attività con sostituzione di variabili.isc.py.util.BPEmulatorper 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'oggettoprocess, che è un'istanza della classeisc.py.test.Processcioè il processo aziendale attuale.${%PopulateUtils:Integer:1:100}chiama il metodoInteroclasse%PopulateUtils, passando argomenti1e100, restituendo un numero intero casuale nell'intervallo1...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:
- Esegui nel terminale OS:
pip install pandas matplotlib seaborn. - Esegui nel terminale InterSystems IRIS:
do ##class(isc.py.test.CannibalizationData).Import()per riempire i dati di test. - Avvia il prodotto
isc.py.test.Production. - Invia una richiesta di tipo
Ens.Requestinisc.py.test.Process.
Vediamo come funziona tutto insieme. Apri isc.py.test.Process nell'editor BPL:

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

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'elaborazionedefe simili espressioni multilinea. Per impostazione predefinita0.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,PickleeDill, per impostazione predefinitaStr.
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.ExecutionRequest — Matrice di Correlazione: Tabellare:

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:

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) olist.Namespace— campo da cui otteniamo i dati. Il pacchettoisc.pydeve 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àQueryper passare una richiesta SQL.isc.py.msg.ClassRequest— impostare la proprietàClasseper passare i dati della classe.isc.py.msg.TableRequest— impostare la proprietàTabellaper passare i dati della tabella.isc.py.msg.GlobalRequest— impostare la proprietàGlobaleper passare i dati globali.
Nel processo di test, guarda l'attività RAW, dove isc.py.msg.QueryRequest mostrato in azione.

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
— 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 . E alcune schermate:
Esploratore di processi

Editor di processi

Installazione
- Hai bisogno di InterSystems IRIS 2019.2+.
- Installa PythonGateway v0.8+ (solo necessario
isc.py.util.Jupyter,isc.py.util.JupyterCheckpointseisc.py.ens.ProcessUtils). - Aggiorna il codice ObjectScript dal repository.
- Esegui
do ##class(isc.py.util.Jupyter).Install()e segui le istruzioni.
.
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: 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 è .
Fonte: habr.com
