Acest articol este dedicat Python Gateway — un proiect comunitar cu sursă deschisă pentru platforma de date InterSystems IRIS. Acest proiect permite orchestrarea oricăror algoritmi de învățare automată, creați în limbajul Python (mediul principal pentru mulți Data Scientists), folosind numeroase biblioteci gata făcute pentru a crea rapid soluții analitice AI/ML adaptabile și roboticizate pe platforma InterSystems IRIS. În acest articol, voi arăta cum InterSystems IRIS poate orchestra procese în limbajul Python, realizând eficient transferul bidirecțional de date și creând procese de afaceri inteligente.
Plan
- Introducere.
- Unelte.
- Instalare.
- API.
- Interoperabilitate.
- Jupyter Notebook.
- Concluzii.
- Linkuri.
- MLToolkit.
Introducere
Python este un limbaj de programare de nivel înalt, de uz general, concentrat pe creșterea productivității dezvoltatorului și a lizibilității codului. În această serie de articole, voi discuta despre posibilitățile de aplicare a limbajului Python pe platforma InterSystems IRIS, concentrându-mă în mod special pe utilizarea Python ca limbaj pentru crearea și aplicarea modelelor de învățare automată.
Învățarea automată (ML) reprezintă o clasă de metode de inteligență artificială, caracterizată prin faptul că nu rezolvă direct o problemă, ci învață în procesul de rezolvare a unui număr mare de probleme similare.
Algoritmii și modelele de învățare automată devin din ce în ce mai răspândiți. Există multe motive pentru aceasta, dar totul se rezumă la disponibilitate, simplificare și realizarea de rezultate practice. Este clusterizarea sau chiar modelarea prin rețele neuronale o nouă tehnologie?
Desigur că nu, dar în prezent nu mai este necesar să scrii sute de mii de linii de cod pentru a rula un model, iar costurile de creare și aplicare a modelelor devin din ce în ce mai mici.
Instrumentele evoluează — în timp ce nu avem instrumente AI/ML complet orientate pe GUI, progresul pe care l-am observat în multe alte clase de sisteme informaționale, de exemplu, BI (de la scrierea codului până la utilizarea de cadre și soluții configurabile orientate pe GUI), se observă și în instrumentele pentru crearea AI/ML. Am depășit deja etapa de scriere a codului și astăzi folosim cadre pentru construcția și instruirea modelelor.
Alte îmbunătățiri, cum ar fi posibilitatea de a distribui un model pre-antrenat, astfel încât utilizatorul final să trebuiască doar să finalizeze antrenarea modelului pe datele sale specifice, facilitează de asemenea începerea aplicării învățării automate. Aceste progrese simplifică considerabil învățarea învățării automate atât pentru specialiști, cât și pentru companii în ansamblu.
Pe de altă parte, colectăm din ce în ce mai multe date. Datorită unei platforme de date unificate, cum ar fi InterSystems IRIS, toate aceste informații pot fi pregătite imediat și utilizate ca date de bază pentru modelele de învățare automată.
Odată cu trecerea către cloud, lansarea proiectelor AI/ML devine mai ușoară ca niciodată. Putem consuma doar resursele de care avem nevoie. Mai mult, datorită paralelizării oferite de platformele cloud, putem economisi timpul consumat.
Dar ce zici de rezultate? Aici lucrurile devin mai complicate. Există o mulțime de instrumente pentru construirea modelelor, despre care voi vorbi mai departe. A construi un model bun nu este ușor, dar ce urmează? Obținerea de profit din utilizarea modelului de către afacere este, de asemenea, o sarcină complicată. Rădăcina problemei constă în separarea încărcărilor analitice și tranzacționale, precum și a modelelor de date. Atunci când antrenăm un model, de obicei o facem pe date istorice. Dar locul pentru modelul construit este în procesarea tranzacțională a datelor. Ce folos are cel mai bun model de detectare a tranzacțiilor frauduloase, dacă îl executăm o dată pe zi? Fraudatorii au plecat demult cu banii. Trebuie să antrenăm modelul pe datele istorice, dar trebuie de asemenea să îl aplicăm în timp real pe datele noi care sosesc, astfel încât procesele noastre de afaceri să poată acționa în conformitate cu prognozele făcute de model.
ML Toolkit este un set de instrumente, al cărui scop este chiar acesta: integrează modelele și mediul tranzacțional, astfel încât modelele construite să poată fi utilizate cu ușurință direct în procesele dumneavoastră de afaceri. Python Gateway este parte a ML Toolkit și asigură integrarea cu limbajul Python (similar cum R Gateway, fiind parte a ML Toolkit, asigură integrarea cu limbajul R).
Instrumentar
Înainte de a continua, aș dori să descriu câteva instrumente și biblioteci pentru Python pe care le vom folosi mai târziu.
Tehnologii
- Python este un limbaj de programare interpretat, de înalt nivel, general. Principalul avantaj al limbajului este biblioteca sa vastă de biblioteci matematice, de învățare automată și inteligență artificială. La fel ca ObjectScript, este un limbaj orientat pe obiect, dar totul este definit dinamic, nu static. De asemenea, totul este un obiect. Articolele ulterioare presupun o familiarizare superficială cu limbajul. Dacă doriți să începeți să învățați, vă recomand să începeți cu .
- Pentru exercițiile noastre viitoare, instalați .
- IDE: Eu folosesc , dar în general există . Dacă folosiți Atelier, există un plugin Eclipse pentru dezvoltatorii Python. Dacă folosiți VS Code, există o extensie pentru Python.
- Notebook: în loc de IDE, puteți scrie și împărtăși scripturile dvs. în notebook-uri online. Cel mai popular dintre acestea este .
Biblioteci
Iată o listă (incompletă) de biblioteci pentru învățarea automată:
- — pachet fundamental pentru calcule precise.
- — structuri de date foarte performante și instrumente de analiză a datelor.
- — pentru crearea de grafice.
- — vizualizarea datelor, bazată pe matplotlib.
- — metode de învățare automată.
- — algoritmi de învățare automată în cadrul metodologiei de îmbunătățire gradientică (Gradient Boosting).
- — NLP.
- — rețele neuronale.
- — platformă pentru crearea de modele de învățare automată.
- — platformă pentru crearea de modele de învățare automată, orientată pe Python.
- — PMML din diferite modele.
Tehnologiile AI/ML permit îmbunătățirea eficienței și adaptabilității afacerilor. Mai mult, aceste tehnologii devin mai ușor de dezvoltat și implementat. Începeți să explorați tehnologiile AI/ML și modul în care pot ajuta organizația dvs. să crească.
Instalare
Există mai multe modalități de a instala și utiliza Python Gateway:
- sistemul de operare
- Windows
- Linux
- Mac
- Docker
- Folosiți o imagine din DockerHub
- Creează-ți propria imagine
Indiferent de metoda de instalare, veți avea nevoie de codul sursă. Singurul loc de unde puteți descărca codul este . Aceasta conține lansări stabile testate, doar luați ultima. În prezent, aceasta este 0.8, dar în timp vor apărea altele noi. Nu clonați/descărcați repository-ul, descărcați ultima versiune.
sistemul de operare
Dacă instalați Python Gateway în sistemul de operare, mai întâi (indiferent de sistemul de operare) trebuie să instalați Python. Pentru aceasta:
- . Se recomandă instalarea Python în directorul implicit.
- Instalați modulul
dill:pip install dill. - Descărcați codul ObjectScript (adică.
do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) în orice spațiu cu produse. În cazul în care doriți ca un spațiu existent să susțină produsele, executați:write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1). - Plasați în folderul
binal instanței dumneavoastră InterSystems IRIS. Fișierul bibliotecii trebuie să fie accesibil pe calea returnată dewrite ##class(isc.py.Callout).GetLib().
Windows
- Asigurați-vă că variabila de mediu
PYTHONHOMEindicată către Python 3.6.7. - Asigurați-vă că variabila de mediu a sistemului
PATHconține variabilaPYTHONHOME(sau directorul la care se referă).
Linux (Debian/Ubuntu)
- Verificați că variabila de mediu
PATHconține/usr/libși/usr/lib/x86_64-linux-gnu. Folosiți fișierul/etc/environmentpentru a seta variabilele de mediu. - În cazul erorilor
undefined symbol: _Py_TrueStructsetați configurațiaPythonLib. De asemenea, în există o secțiune de depanare.
Mac
- În prezent, este acceptat doar Python 3.6.7 de la . Verificați variabila
PATH.
Dacă ați modificat variabilele de mediu, reporniți produsul dumneavoastră InterSystems.
Docker
Utilizarea containerelor are mai multe avantaje:
- Portabilitate
- Eficiență
- Izolare
- Ușurință
- Imutabilitate
Consultați această pentru informații mai detaliate despre utilizarea Docker cu produsele InterSystems.
Toate versiunile Python Gateway sunt în prezent bazate pe containere 2019.4.
Imaginea gata
Executați: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latest, pentru a descărca și rula Python Gateway cu InterSystems IRIS Community Edition. Acesta este tot.
Creează-ți propria imagine
Pentru a construi imaginea Docker, executați în rădăcina repozitorului: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
În mod implicit, imaginea este construită pe baza imaginii store/intersystems/iris-community:2019.4.0.383.0, totuși, puteți modifica asta, setând variabila IMAGE.
Pentru a construi din InterSystems IRIS, executați: `docker build --build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 --force-rm --tag intersystemscommunity/irispy:latest`.
După aceea, puteți rula imaginea Docker:
docker run -d
-p 52773:52773
-v //:/mount
--name irispy
intersystemscommunity/irispy:latest
--key /mount/iris.keyDacă utilizați o imagine bazată pe InterSystems IRIS Community Edition, nu trebuie să specificați cheia.
Comentarii
- Procesul de testare
isc.py.test.Processsalvează o serie de imagini într-un director temporar. Este posibil să doriți să schimbați acest drum la un director montat. Pentru aceasta, editați setareaWorkingDirspecificând directorul montat. - Pentru a accesa terminalul, executați:
docker exec -it irispy sh. - Accesați Portalul de Administrare a Sistemului cu loginul
SuperUser/SYS. - Pentru a opri containerul, executați:
docker stop irispy && docker rm --force irispy.
Verificarea instalării
După ce ați instalat Python Gateway, este bine să verificați că funcționează. Executați acest cod în terminalul InterSystems IRIS:
set sc = ##class(isc.py.Callout).Setup()
set sc = ##class(isc.py.Main).SimpleString("x='HELLO'", "x", , .var).
write varCa rezultat ar trebui să fie afișat HELLO — valoarea variabilei Python x. Dacă statusul returnat sc este o eroare sau var gol, verificați .
API
Python Gateway a fost instalat și ați verificat că funcționează. Este vremea să începeți să îl folosiți!
Interfața principală pentru Python este isc.py.Main. Acesta oferă următoarele grupuri de metode (toate returnează %Status):
- Executarea codului
- Transferul de date
- Metode auxiliare
Executarea codului
Aceste metode permit executarea de cod Python arbitrar.
SimpleString
SimpleString — este metoda principală. Ea acceptă 4 argumente opționale:
code— șir de cod de executat. Simbolul de transfer pe linie:$c(10).returnVariable— numele variabilei de returnat.serialization— cum să serializăm.returnVariable. 0 — string (implicit), 1 — repr.rezultat— ByRef referință la variabila în care se scrie valoareareturnVariable.
Mai sus am executat:
set sc = ##class(isc.py.Main).SimpleString("x='HELLO'", "x", , .var).În acest exemplu, atribuim variabilei Python x valoarea Hello și dorim să returnăm valoarea variabilei Python x în variabila ObjectScript var.
ExecuteCode
ExecuteCode este o alternativă mai sigură și mai puțin restrictivă SimpleString.
Șirurile în platforma InterSystems IRIS sunt limitate la 3 641 144 de caractere, iar dacă doriți să executați un fragment de cod mai lung, trebuie să folosiți fluxuri.
Se acceptă două argumente:
code— șir sau flux de cod Python de executat.variable— (opțional) atribuie rezultatul executăriicodeacelei variabile Python.
Exemplu de utilizare:
set sc = ##class(isc.py.Main).ExecuteCode("2*3", "y").În acest exemplu, înmulțim 2 cu 3 și salvăm rezultatul în variabila Python Stabiliți o parolă și păstrați-o în siguranță!.
Transferul de date
Transferați date între Python șiapoi înapoi.
Python -> InterSystems IRIS
Există 4 modalități de a obține valoarea variabilei Python în InterSystems IRIS, în funcție de serializarea de care aveți nevoie:
Stringpentru tipuri simple de date și depanare.Reprpentru stocarea obiectelor simple și depanare.JSONpentru manipularea ușoară a datelor în InterSystems IRIS.Picklepentru salvarea obiectelor.
Aceste metode permit obținerea variabilelor din Python sub formă de șiruri sau fluxuri.
GetVariable(variable, serialization, .stream, useString)— obțineserializationvariabilavariableînstream. DacăuseStringeste egal cu 1 și serializarea este plasată într-un șir, se returnează un șir și nu un flux.GetVariableJson(variable, .stream, useString)— obține serializarea JSON a variabilei.GetVariablePickle(variable, .stream, useString, useDill)— obține serializarea Pickle (sau Dill) a variabilei.
Să încercăm să obținem variabila noastră Stabiliți o parolă și păstrați-o în siguranță!.
set sc = ##class(isc.py.Main).GetVariable("y", , .val, 1)
write val
>6InterSystems IRIS -> Python
Încărcăm datele din InterSystems IRIS în Python.
ExecuteQuery(query, variable, type, namespace)— creează un set de date (pandasdataframesaulist) dintr-o interogare SQL și îl setează într-o variabilă Pythonvariable. Pachetulisc.pytrebuie să fie disponibil în domeniulnamespace— acolo va fi executată interogarea.ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace)— încarcă date din globalglobalde la subscriptstartlaendîn Python ca variabilă de tiptype:list, sau pandasdataframe. Descrierea argumentelor opționalemaskșilabelseste disponibilă în documentația clasei și în repository-ul .ExecuteClass(class, variable, type, start, end, properties, namespace)— încarcă date din clasăclassde la idstartlaendîn Python ca variabilă de tiptype:list, sau pandasdataframe.properties— listă (separator - virgulă) de proprietăți ale clasei care trebuie încărcate în setul de date. Se suportă măști.*și?Prin default —*(toate proprietățile). Proprietatea%%CLASSNAMEeste ignorată.ExecuteTable(table, variable, type, start, end, properties, namespace)— încarcă date din tabeltablede la idstartlaendîn Python.
ExecuteQuery — este universal (orice interogare SQL corectă va fi transmisă în Python). Totuși, ExecuteGlobal și wrapper-urile sale ExecuteClass și ExecuteTable funcționează cu o serie de restricții. Ele sunt mult mai rapide (de 3-5 ori mai rapide decât driver-ul ODBC și de 20 de ori mai rapide ExecuteQuery). Informații suplimentare în .
Toate aceste metode suportă transmiterea datelor din orice domeniu. Pachetul isc.py trebuie să fie disponibil în domeniul țintă.
ExecuteQuery
ExecuteQuery(request, variable, type, namespace) — transmite rezultatele oricărei interogări SQL corecte către Python. Aceasta este cea mai lentă metodă de transfer de date. Folosiți-o dacă ExecuteGlobal și wrapper-urile sale nu sunt disponibile.
Argumente:
query— interogare SQL.variable— numele variabilei Python în care se scriu datele.type—listsau Pandasdataframe.namespace— domeniul în care va fi executată interogarea.
ExecuteGlobal
ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) — transferul globalului în Python.
Argumente:
global— numele globalului fără^variable— numele variabilei Python în care se scriu datele.type—listsau Pandasdataframe.start— primul subscript al globalului. Este obligatoriu%Integer.end— ultimul subscript al globalului. Este obligatoriu%Integer.mask— mască de valori pentru global. Masca poate fi mai scurtă decât numărul de câmpuri în global (în acest caz, câmpurile de la sfârșit vor fi omise). Cum se formatează masca:+transmiteți valoarea așa cum este.-omitați valoarea.b— Tip logic (0—False, totul ce este altceva —True).d— Dată (din $horolog, pe Windows din 1970, pe Linux din 1900).t— Timp ($horolog, secunde după miezul nopții).m— Marcaj de timp (șir în format AN- LUNA-ZI ORĂ:MINUT:SECUNDĂ).
labels— %List denumiri coloane. Primul element — denumirea subscriptului.namespace— domeniul în care va fi executată interogarea.
ExecuteClass
Împachetare peste ExecuteGlobal. Pe baza definiției clasei pregătește apelul ExecuteGlobal și îl invocă.
ExecuteClass(class, variable, type, start, end, properties, namespace) — transmiterea datelor clasei în Python.
Argumente:
class— numele claseivariable— numele variabilei Python în care se scriu datele.type—listsau Pandasdataframe.start— ID de început.end— ID final.properties— listă (separator - virgulă) de proprietăți ale clasei care trebuie încărcate în setul de date. Se suportă măști.*și?Prin default —*(toate proprietățile). Proprietatea%%CLASSNAMEeste ignorată.namespace— domeniul în care va fi executată interogarea.
Toate proprietățile sunt transmise așa cum sunt, cu excepția proprietăților tipurilor te, %Time, %Boolean și %TimeStamp — acestea sunt convertite în clase corespunzătoare din Python.
ExecuteTable
Împachetare peste ExecuteClass. Transmite numele tabelului în numele clasei și o invocă ExecuteClass. Semnătură:
ExecuteTable(table, variable, type, start, end, properties, namespace) — transmiterea datelor tabelului în Python.
Argumente:
table— numele tabelului.
Toate celelalte argumente sunt transmise astfel cum sunt înExecuteClass.
Note
ExecuteGlobal,ExecuteClassșiExecuteTablefuncționează la fel de repede.ExecuteGlobalde 20 de ori mai repede decâtExecuteQuerype seturi de date mari (timp de transmitere mai mare de >0.01 secunde).ExecuteGlobal,ExecuteClassșiExecuteTablefuncționează pe globaluri cu această structură:^global(key) = $lb(prop1, prop2, ..., propN)undekey— număr întreg.- Pentru
ExecuteGlobal,ExecuteClassșiExecuteTableinterval de valori suportattecorespunde intervaluluimktimeși depinde de OS (: 1970-01-01, 1900-01-01, ). Folosiți%TimeStamppentru a transmite date în afara acestui interval sau utilizați pandas dataframe, deoarece această restricție este doar pentru listă. - Pentru
ExecuteGlobal,ExecuteClassșiExecuteTabletoate argumentele în afară de sursa de date (global, clasă sau tabel) și variabila sunt opționale.
Exemple
Clasa de test conține o metodă care demonstrează toate variantele de transmitere a datelor:
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"
// Argumente generale
set variable = "df"
set type = "dataframe"
set start = 1
set end = $g(^isc.py.test.PersonD, start)
// Metoda 0: ExecuteGlobal fără argumente
set sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 0, type)
// Metoda 1: ExecuteGlobal cu argumente
// Când se transmite global, numele câmpurilor sunt specificate manual
// globalKey - numele subcriptului
set labels = $lb("globalKey", "Name", "DOB", "TS", "RandomTime", "AgeYears", "AgeDecimal", "AgeDouble", "Bool")
// mask are cu un element mai puțin decât labels deoarece "globalKey" - numele subscriptului
// Omitem %%CLASSNAME
set mask = "-+dmt+++b"
set sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 1, type, start, end, mask, labels)
// Metoda 2: ExecuteClass
set sc = ##class(isc.py.Main).ExecuteClass(class, variable _ 2, type, start, end)
// Metoda 3: ExecuteTable
set sc = ##class(isc.py.Main).ExecuteTable(table, variable _ 3, type, start, end)
// Metoda 4: ExecuteTable
set sc = ##class(isc.py.Main).ExecuteQuery(query, variable _ 4, type)Apelați metoda do ##class(isc.py.test.Person).Test() pentru a vedea cum funcționează toate metodele de transmitere a datelor.
Metode auxiliare
GetVariableInfo(variable, serialization, .defined, .type, .length)— obține informații despre variabilă: dacă este definită, clasa și lungimea serializării.GetVariableDefined(variable, .defined)— dacă variabila este definită.GetVariableType(variable, .type)— obține clasa variabilei.GetStatus()— obține și elimină ultima excepție de pe partea Python.GetModuleInfo(module, .imported, .alias)— obține variabila modulului și statutul importului.GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments)— obține informații despre funcție.
Interoperabilitate
Ați învățat cum să apelați Python Gateway din terminal, acum vom începe să-l folosim în producție. Baza interacțiunii cu Python în acest mod este isc.py.ens.Operation. Acesta ne permite:
- Să executăm cod Python
- Să salvăm/Restaurăm contextul Python
- Să încărcăm și să obținem date din Python
În principiu, operația Python este un wrapper peste isc.py.Main. Operația isc.py.ens.Operation permite interacțiunea cu procesul Python din produsele InterSystems IRIS. Sunt suportate cinci cereri:
isc.py.msg.ExecutionRequestpentru a executa cod Python. Returneazăisc.py.msg.ExecutionResponsecu rezultatul execuției și valorile variabilelor solicitate.isc.py.msg.StreamExecutionRequestpentru a executa cod Python. Returneazăisc.py.msg.StreamExecutionResponserezultatul execuției și valorile variabilelor solicitate. Analogisc.py.msg.ExecutionRequest, dar primește și returnează fluxuri în loc de șiruri.isc.py.msg.QueryRequestpentru a transmite rezultatul execuției unei cereri SQL. ReturneazăEns.Response.isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequestpentru transmiterea datelor globale/clase/tablouri. ReturneazăEns.Response.isc.py.msg.SaveRequestpentru salvarea contextului Python. ReturneazăEns.StringResponsecu identificatorul contextului.isc.py.msg.RestoreRequestpentru restaurarea contextului Python.În plus,
isc.py.ens.Operationare două setări:Initializer— alegerea clasei care implementează interfațaisc.py.init.Abstract. Aceasta poate fi folosită pentru a încărca funcții, module, clase etc. Ea se execută o dată la începutul procesului.PythonLib— (numai pentru Linux) dacă vezi erori la încărcare, setează valoarea acesteia lalibpython3.6m.sosau chiar la calea completă către biblioteca Python.
Crearea proceselor de afaceri
Sunt disponibile două clase care facilitează dezvoltarea proceselor de afaceri:
isc.py.ens.ProcessUtilspermite extragerea de anotări din activități cu substituția variabilelor.isc.py.util.BPEmulatorpermite testarea facilă a proceselor de afaceri cu Python. Poate executa un proces de afaceri (părți în limbajul Python) în procesul actual.
Substituția variabilelor
Toate procesele de afaceri derivate de la isc.py.ens.ProcessUtils, pot folosi metoda GetAnnotation(name) pentru a obține valoarea anotării activității după numele acesteia. Anotarea activității poate conține variabile care vor fi calculate pe partea InterSystems IRIS înainte de a fi transmise în Python. Iată sintaxa substituției variabilelor:
${class:method:arg1:...:argN}— apelarea metodei#{expr}— execută cod în limbajul ObjectScript.
Un exemplu este disponibil în procesul de afaceri de testare isc.py.test.Process, de exemplu, în activitatea Correlation Matrix: Graph: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). În acest exemplu:
#{process.WorkDirectory}returnează proprietatea WorkDirectory a obiectuluiprocess, care este o instanță a claseiisc.py.test.Processadică procesul de afaceri curent.${%PopulateUtils:Integer:1:100}apelează metodaIntegerclasei%PopulateUtils, transmitând argumentele1și100, returnând un număr întreg aleator în intervalul1...100.
Proces de afaceri de testare
Produse de testare și un proces de afaceri de testare sunt disponibile implicit ca parte a gateway-ului Python. Pentru a le utiliza:
- În terminalul OS, execută:
pip install pandas matplotlib seaborn. - În terminalul InterSystems IRIS, execută:
do ##class(isc.py.test.CannibalizationData).Import()pentru a completa datele de testare. - Execută produsul
isc.py.test.Production. - Trimite o cerere de tip
Ens.Requestînisc.py.test.Process.
Să vedem cum funcționează toate acestea împreună. Deschide isc.py.test.Process în editorul BPL:

Executarea codului
Cea mai importantă apelare — executarea codului Python:

Folosesc cererea isc.py.msg.ExecutionRequest, iată proprietățile sale:
Cod— cod Python.SeparateLines— să fie sau nu codul separat pe linii pentru executare.$c(10)(n) este folosit pentru a separa liniile. Rețineți că NU este recomandat să procesați mesajul în întregime, această funcție este destinată doar pentru procesaredefși astfel de expresii multiliniare. Implicit0.Variabile— o listă separată prin virgule de variabile care vor fi incluse în răspuns.Serializare— Cum să serializăm variabilele pe care dorim să le returnăm. Opțiuni:Str,Repr,JSON,PickleșiDill, implicitStr.
În cazul nostru, stabilim doar proprietatea Cod, astfel încât toate celelalte proprietăți să folosească valorile implicite. O stabilim apelând process.GetAnnotation("Import pandas"), care, la runtime, returnează notația după ce a efectuat substituțiile variabilelor. În cele din urmă, codul import pandas as pd va fi transmis în Python. GetAnnotation poate fi util pentru a obține scripturi Python multiliniare, dar nu există restricții asupra acestei metode de obținere a codului. Puteți seta proprietatea Cod în orice mod convenabil pentru dumneavoastră.
Obținerea variabilelor
O altă provocare interesantă cu utilizarea isc.py.msg.ExecutionRequest — Matricea de Corelație: Tabular:

Aceasta calculează Matricea de Corelație pe partea Python și extrage variabila corrmat înapoi în InterSystems IRIS în format JSON, prin setarea proprietăților cererii:
Variabile:"corrmat"Serializare:"JSON"
Putem vedea rezultatele în Trace Vizual:

Și dacă avem nevoie de această valoare în BP, o putem obține astfel: callresponse.Variables.GetAt("corrmat").
Transferul de date
Discutăm acum despre transferul de date din InterSystems IRIS către Python, toate cererile de transfer de date implementează interfața isc.py.msg.DataRequest, care oferă următoarele proprietăți:
Variabilă— variabilă Python în care se scriu datele.Tip— tipul variabilei:dataframe(dataframe pandas) saulist.Namespace— spațiul din care obținem datele. Pachetulisc.pytrebuie să fie disponibil în acest spațiu. Poate fi un spațiu fără suport pentru produse.
Pe baza acestei interfețe sunt implementate 4 clase de cereri:
isc.py.msg.QueryRequest— setați proprietateaQuerypentru a transmite o cerere SQL.isc.py.msg.ClassRequest— setați proprietateaClasspentru a transmite datele unei clase.isc.py.msg.TableRequest— setați proprietateaTablepentru a transmite datele unei tabele.isc.py.msg.GlobalRequest— setați proprietateaGlobalpentru a transmite date globale.
În procesul de testare, observați activitatea RAW, unde isc.py.msg.QueryRequest aratat în acțiune.

Salvarea/restaurarea contextului Python
În cele din urmă, putem salva contextul Python în InterSystems IRIS, pentru a face acest lucru, vom trimite isc.py.msg.SaveRequest cu argumentele:
Mask— Se salvează doar variabilele care îndeplinesc masca. Se acceptă*și?. Exemplu:"Data*, Figure?". Implicit*.MaxLength— Lungimea maximă a variabilei păstrate. Dacă serializarea variabilei depășește această lungime, va fi ignorată. Setați 0 pentru a accepta variabile de orice lungime. Implicit,$$$MaxStringLength.Name— Numele contextului (opțional).Description— Descrierea contextului (opțional).
Returnează Ens.StringResponse de Id al contextului salvat. În procesul de testare, verificați activitatea Save Context.
Cererea corespunzătoare isc.py.msg.RestoreRequest încarcă contextul din InterSystems IRIS în Python:
ContextId— identificatorul contextului.Clear— curăță contextul înainte de restaurare.
Jupyter Notebook
— este o aplicație web open-source care permite crearea de notebook-uri conținând cod, vizualizări și text, și publicarea acestora. Python Gateway permite vizualizarea și editarea proceselor BPL sub formă de Jupyter Notebook. Rețineți că în prezent se utilizează executorul standard Python 3.
Această extensie presupune că anotările conțin cod Python și folosesc denumirile activităților ca antete anterioare. Acum este posibil să dezvoltați procese de afaceri PythonGateway în Jupyter Notebook. Iată ce este posibil:
- Crearea de noi procese de afaceri
- Ștergerea proceselor de afaceri
- Crearea de noi activități
- Modificarea activităților
- Ștergerea activităților
Iată . Și câteva capturi de ecran:
Explorer de procese

Editor de procese

Instalare
- Aveți nevoie de InterSystems IRIS 2019.2+.
- Instalați PythonGateway v0.8+ (este necesar doar
isc.py.util.Jupyter,isc.py.util.JupyterCheckpointsșiisc.py.ens.ProcessUtils). - Actualizați codul ObjectScript din repository.
- Executați
do ##class(isc.py.util.Jupyter).Install()și urmați instrucțiunile.
.
Conclusions
MLToolkit este un set de instrumente care are ca scop integrarea modelelor și a mediului tranzacțional, astfel încât modelele construite să poată fi utilizate cu ușurință direct în procesele dumneavoastră de afaceri. Python Gateway este parte a MLToolkit și oferă integrarea cu limbajul Python, permițând orchestrarea oricăror algoritmi de învățare automată dezvoltați în Python (mediu de bază pentru mulți data scientists) și utilizarea numeroaselor biblioteci gata pregătite pentru a crea rapid soluții adaptive și robotizate de analiză AI/ML pe platforma InterSystems IRIS.
Linkuri
MLToolkit
Grupul utilizatorilor MLToolkit este un depozit privat GitHub creat ca parte a organizației corporative GitHub InterSystems. Acesta este destinat utilizatorilor externi care instalează, studiază sau utilizează deja componentele MLToolkit, inclusiv Python Gateway. Grupul oferă o serie de cazuri implementate (cu cod sursă și date de test) în domeniile marketingului, producției, medicinei și multor altor industrii. Pentru a te alătura grupului utilizatorilor ML Toolkit, te rugăm să trimiți un mesaj scurt prin e-mail la următoarea adresă: și să menționezi în mesajul tău următoarele informații:
- Numele de utilizator GitHub
- Organizația (unde lucrezi sau studiezi)
- Funcția (poziția ta efectivă în organizația ta, sau "Student", sau "Independent").
- Țara
Celor care au citit articolul și sunt interesați de oportunitățile InterSystems IRIS ca platformă pentru dezvoltarea sau găzduirea mecanismelor de inteligență artificială și învățare automată, le oferim să discutăm posibile scenarii de interes pentru compania dumneavoastră. Suntem pregătiți să analizăm nevoile companiei dumneavoastră și să stabilim împreună un plan de acțiune; adresa de contact a grupului nostru de experți AI/ML este: .
Sursa: habr.com
