Python Gateway în InterSystems IRIS

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

  1. Introducere.
  2. Unelte.
  3. Instalare.
  4. API.
  5. Interoperabilitate.
  6. Jupyter Notebook.
  7. Concluzii.
  8. Linkuri.
  9. 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 documentation.
  • Pentru exercițiile noastre viitoare, instalați Python 3.6.7 64 bit.
  • IDE: Eu folosesc PyCharm, dar în general există multe. 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 Jupyter.

Biblioteci

Iată o listă (incompletă) de biblioteci pentru învățarea automată:

  • Numpy — pachet fundamental pentru calcule precise.
  • Pandas — structuri de date foarte performante și instrumente de analiză a datelor.
  • Matplotlib — pentru crearea de grafice.
  • Seaborn — vizualizarea datelor, bazată pe matplotlib.
  • Sklearn — metode de învățare automată.
  • XGBoost — algoritmi de învățare automată în cadrul metodologiei de îmbunătățire gradientică (Gradient Boosting).
  • Gensim — NLP.
  • Keras — rețele neuronale.
  • Tensorflow — platformă pentru crearea de modele de învățare automată.
  • PyTorch — platformă pentru crearea de modele de învățare automată, orientată pe Python.
  • Nyoka — 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 pagina de lansare. 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:

  1. Instalați Python 3.6.7 64 bit. Se recomandă instalarea Python în directorul implicit.
  2. Instalați modulul dill: pip install dill.
  3. 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).
  4. Plasați callout DLL/SO/DYLIB în folderul bin al instanței dumneavoastră InterSystems IRIS. Fișierul bibliotecii trebuie să fie accesibil pe calea returnată de write ##class(isc.py.Callout).GetLib().

Windows

  1. Asigurați-vă că variabila de mediu PYTHONHOME indicată către Python 3.6.7.
  2. Asigurați-vă că variabila de mediu a sistemului PATH conține variabila PYTHONHOME (sau directorul la care se referă).

Linux (Debian/Ubuntu)

  1. Verificați că variabila de mediu PATH conține /usr/lib și /usr/lib/x86_64-linux-gnu. Folosiți fișierul /etc/environment pentru a seta variabilele de mediu.
  2. În cazul erorilor undefined symbol: _Py_TrueStruct setați configurația PythonLib. De asemenea, în Readme există o secțiune de depanare.

Mac

  1. În prezent, este acceptat doar Python 3.6.7 de la Python.org. 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ă serie de articole 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.key

Dacă utilizați o imagine bazată pe InterSystems IRIS Community Edition, nu trebuie să specificați cheia.

Comentarii

  • Procesul de testare isc.py.test.Process salvează 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 setarea WorkingDir specificâ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 var

Ca rezultat ar trebui să fie afișat HELLO — valoarea variabilei Python x. Dacă statusul returnat sc este o eroare sau var gol, verificați Readme — secțiunea de depanare.

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 valoarea returnVariable.

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ării code acelei 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:

  • String pentru tipuri simple de date și depanare.
  • Repr pentru stocarea obiectelor simple și depanare.
  • JSON pentru manipularea ușoară a datelor în InterSystems IRIS.
  • Pickle pentru salvarea obiectelor.

Aceste metode permit obținerea variabilelor din Python sub formă de șiruri sau fluxuri.

  • GetVariable(variable, serialization, .stream, useString) — obține serialization variabila variable în stream. Dacă useString este 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
>6

InterSystems IRIS -> Python

Încărcăm datele din InterSystems IRIS în Python.

  • ExecuteQuery(query, variable, type, namespace) — creează un set de date (pandas dataframe sau list) dintr-o interogare SQL și îl setează într-o variabilă Python variable. Pachetul isc.py trebuie să fie disponibil în domeniul namespace — acolo va fi executată interogarea.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) — încarcă date din global global de la subscript start la end în Python ca variabilă de tip type: list, sau pandas dataframe. Descrierea argumentelor opționale mask și labels este disponibilă în documentația clasei și în repository-ul Data Transfer docs.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) — încarcă date din clasă class de la id start la end în Python ca variabilă de tip type: list, sau pandas dataframe. 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 %%CLASSNAME este ignorată.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) — încarcă date din tabel table de la id start la end î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 Data Transfer docs.
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 — list sau Pandas dataframe.
  • 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 — list sau Pandas dataframe.
  • 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 clasei
  • variable — numele variabilei Python în care se scriu datele.
  • type — list sau Pandas dataframe.
  • 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 %%CLASSNAME este 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 în ExecuteClass.

Note

  • ExecuteGlobal, ExecuteClass și ExecuteTable funcționează la fel de repede.
  • ExecuteGlobal de 20 de ori mai repede decât ExecuteQuery pe seturi de date mari (timp de transmitere mai mare de >0.01 secunde).
  • ExecuteGlobal, ExecuteClass și ExecuteTable funcționează pe globaluri cu această structură: ^global(key) = $lb(prop1, prop2, ..., propN) unde key — număr întreg.
  • Pentru ExecuteGlobal, ExecuteClass și ExecuteTable interval de valori suportat te corespunde intervalului mktime și depinde de OS (windows: 1970-01-01, linux 1900-01-01, mac). 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 și ExecuteTable toate argumentele în afară de sursa de date (global, clasă sau tabel) și variabila sunt opționale.

Exemple

Clasa de test isc.py.test.Person 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.ExecutionRequest pentru a executa cod Python. Returnează isc.py.msg.ExecutionResponse cu rezultatul execuției și valorile variabilelor solicitate.
  • isc.py.msg.StreamExecutionRequest pentru a executa cod Python. Returnează isc.py.msg.StreamExecutionResponse rezultatul execuției și valorile variabilelor solicitate. Analog isc.py.msg.ExecutionRequest, dar primește și returnează fluxuri în loc de șiruri.
  • isc.py.msg.QueryRequest pentru a transmite rezultatul execuției unei cereri SQL. Returnează Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest pentru transmiterea datelor globale/clase/tablouri. Returnează Ens.Response.
  • isc.py.msg.SaveRequest pentru salvarea contextului Python. Returnează Ens.StringResponse cu identificatorul contextului.
  • isc.py.msg.RestoreRequest pentru restaurarea contextului Python.

    În plus, isc.py.ens.Operation are două setări:

    • Initializer — alegerea clasei care implementează interfața isc.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 la libpython3.6m.so sau 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.ProcessUtils permite extragerea de anotări din activități cu substituția variabilelor.
  • isc.py.util.BPEmulator permite 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 obiectului process, care este o instanță a clasei isc.py.test.Process adică procesul de afaceri curent.
  • ${%PopulateUtils:Integer:1:100} apelează metoda Integer clasei %PopulateUtils, transmitând argumentele 1 și 100, returnând un număr întreg aleator în intervalul 1...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:

  1. În terminalul OS, execută: pip install pandas matplotlib seaborn.
  2. În terminalul InterSystems IRIS, execută: do ##class(isc.py.test.CannibalizationData).Import() pentru a completa datele de testare.
  3. Execută produsul isc.py.test.Production.
  4. Trimite o cerere de tip Ens.Request în isc.py.test.Process.

Să vedem cum funcționează toate acestea împreună. Deschide isc.py.test.Process în editorul BPL:

Python Gateway în InterSystems IRIS

Executarea codului

Cea mai importantă apelare — executarea codului Python:

Python Gateway în InterSystems IRIS

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 procesare def și astfel de expresii multiliniare. Implicit 0.
  • 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 și Dill, implicit Str.

Î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:

Python Gateway în InterSystems IRIS

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:

Python Gateway în InterSystems IRIS

Ș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) sau list.
  • Namespace — spațiul din care obținem datele. Pachetul isc.py trebuie 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 proprietatea Query pentru a transmite o cerere SQL.
  • isc.py.msg.ClassRequest — setați proprietatea Class pentru a transmite datele unei clase.
  • isc.py.msg.TableRequest — setați proprietatea Table pentru a transmite datele unei tabele.
  • isc.py.msg.GlobalRequest — setați proprietatea Global pentru a transmite date globale.

În procesul de testare, observați activitatea RAW, unde isc.py.msg.QueryRequest aratat în acțiune.

Python Gateway în InterSystems IRIS

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

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ă video demo. Și câteva capturi de ecran:

Explorer de procese

Python Gateway în InterSystems IRIS

Editor de procese

Python Gateway în InterSystems IRIS

Instalare

  1. Aveți nevoie de InterSystems IRIS 2019.2+.
  2. Instalați PythonGateway v0.8+ (este necesar doar isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints și isc.py.ens.ProcessUtils).
  3. Actualizați codul ObjectScript din repository.
  4. Executați do ##class(isc.py.util.Jupyter).Install() și urmați instrucțiunile.

Documentație.

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ă: MLToolkit@intersystems.com ș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: MLToolkit@intersystems.com.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster