Python Gateway în InterSystems IRIS

Acest articol este despre Python Gateway, un proiect comunitar open source pentru platforma de date InterSystems IRIS. Acest proiect vă permite să orchestrați orice algoritm de învățare automată creați în Python (mediul principal pentru mulți oameni de știință ai datelor), să utilizați numeroase biblioteci gata făcute pentru a crea rapid soluții AI / ML analitice, robotizate, adaptive pe platforma InterSystems IRIS. În acest articol, voi arăta cum InterSystems IRIS poate orchestra procese în Python, poate comunica eficient date în două sensuri și poate crea procese de afaceri inteligente.

plan

  1. Introducere.
  2. Instrumente.
  3. Instalare.
  4. API-ul.
  5. Interoperabilitate.
  6. Caietul Jupyter.
  7. Concluzii.
  8. Legături.
  9. MLToolkit.

Introducere

Python este un limbaj de programare de nivel înalt, cu scop general, care vizează îmbunătățirea productivității dezvoltatorilor și a lizibilității codului. În această serie de articole, voi discuta despre posibilitățile de utilizare a Python pe platforma InterSystems IRIS, accentul principal al acestui articol fiind utilizarea Python ca limbaj pentru crearea și rularea modelelor de învățare automată.

Învățarea automată (ML) este o clasă de metode de inteligență artificială, a cărei trăsătură caracteristică nu este soluția directă a unei probleme, ci învățarea în procesul de rezolvare a multor probleme similare.

Algoritmii și modelele de învățare automată devin din ce în ce mai frecvente. Există multe motive pentru aceasta, dar totul se rezumă la accesibilitate, simplitate și obținerea de rezultate practice. Este clustering-ul sau chiar modelarea rețelelor neuronale o nouă tehnologie?

Bineînțeles că nu, dar în zilele noastre nu este nevoie să scrieți sute de mii de linii de cod pentru a rula un singur model, iar costul creării și utilizării modelelor devine din ce în ce mai mic.

Instrumentele evoluează - deși nu avem instrumente AI/ML complet centrate pe GUI, progresul pe care l-am văzut cu multe alte clase de sisteme informatice, cum ar fi BI (de la scrierea codului la utilizarea cadrelor și a soluțiilor configurabile centrate pe GUI) este observat și în instrumentele pentru crearea AI/ML. Am trecut deja de stadiul scrierii codului și astăzi folosim framework-uri pentru a construi și a antrena modele.

Alte îmbunătățiri, cum ar fi capacitatea de a distribui un model pre-instruit, în care utilizatorul final trebuie pur și simplu să termine antrenarea modelului pe datele sale specifice, facilitează, de asemenea, începerea învățării automate. Aceste progrese fac învățarea învățării automate mult mai ușoară atât pentru profesioniști, cât și pentru companii în general.

Pe de altă parte, colectăm din ce în ce mai multe date. Cu o platformă de date unificată precum InterSystems IRIS, toate aceste informații pot fi pregătite imediat și utilizate ca intrare pentru modelele de învățare automată.

Odată cu trecerea la 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 petrecut.

Dar cum rămâne cu rezultatele? Aici lucrurile devin mai complicate. Există multe instrumente pentru construirea modelelor, despre care voi discuta în continuare. Construirea unui model bun nu este ușor, dar ce urmează? A obține un profit din utilizarea unui model de afaceri este, de asemenea, o sarcină netrivială. Rădăcina problemei este separarea sarcinilor de lucru analitice și tranzacționale și a modelelor de date. Când antrenăm un model, de obicei o facem pe date istorice. Dar locul pentru modelul construit este în prelucrarea datelor tranzacționale. La ce servește cel mai bun model de detectare a tranzacțiilor frauduloase dacă îl rulăm o dată pe zi? Escrocii au plecat de mult cu banii. Trebuie să antrenăm modelul pe date istorice, dar trebuie să îl aplicăm și în timp real asupra noilor date primite, astfel încât procesele noastre de afaceri să poată acționa asupra predicțiilor făcute de model.

Setul de instrumente ML este un set de instrumente care își propune să facă exact asta: unificarea modelelor și a unui mediu tranzacțional, astfel încât modelele construite să poată fi utilizate cu ușurință direct în procesele dvs. de afaceri. Python Gateway face parte din ML Toolkit și oferă integrare cu limbajul Python (similar cu modul în care R Gateway, fiind parte a ML Toolkit oferă integrare cu limbajul R).

unelte

Înainte de a continua, aș dori să descriu câteva instrumente și biblioteci Python pe care le vom folosi mai târziu.

Tehnologie

  • Python este un limbaj de programare interpretat, de nivel înalt, cu scop general. Principalul avantaj al limbajului este biblioteca sa mare de biblioteci matematice, ML și AI. La fel ca ObjectScript, este un limbaj orientat pe obiecte, dar totul este definit mai degrabă dinamic decât static. De asemenea, totul este un obiect. Articolele ulterioare presupun o familiaritate trecătoare cu limba. Dacă vrei să începi să înveți, recomand să începi cu documentație.
  • Pentru exercițiile noastre ulterioare, setați Python 3.6.7 pe 64 de biți.
  • IDE: Eu folosesc PyCharm, dar în general ei multe. Dacă utilizați Atelier, există un plugin Eclipse pentru dezvoltatorii Python. Dacă utilizați VS Code, există o extensie pentru Python.
  • Notebook: în loc de un IDE, puteți scrie și partaja scripturile dvs. în caiete online. Cel mai popular dintre ei este jupyter.

bibliotecile

Iată o listă (neexhaustivă) de biblioteci de învățare automată:

  • NumPy — un pachet fundamental pentru calcule precise.
  • ursi panda — structuri de date de înaltă performanță și instrumente de analiză a datelor.
  • matplotlib - realizarea de grafice.
  • SEABORN — vizualizarea datelor bazată pe matplotlib.
  • Sklearn — metode de învățare automată.
  • XGBoost — algoritmi de învățare automată în cadrul metodologiei de creștere a gradientului.
  • Gensim - NLP.
  • Keras - rețele neuronale.
  • flux tensor — o platformă pentru crearea de modele de învățare automată.
  • PyTorch este o platformă pentru crearea de modele de învățare automată, axată pe Python.
  • Nyoka - PMML din diverse modele.

Tehnologiile AI/ML fac afacerile mai eficiente și mai adaptabile. Mai mult, astăzi aceste tehnologii devin din ce în ce mai ușor de dezvoltat și implementat. Începeți să învățați despre tehnologiile AI/ML și despre cum acestea vă pot ajuta organizația să se dezvolte.

Instalare

Există mai multe moduri de a instala și utiliza Python Gateway:

  • ОС
    • ferestre din
    • Linux
    • Mac
  • Docher
    • Utilizați o imagine din DockerHub
    • Creează-ți propriul look

Indiferent de metoda de instalare, veți avea nevoie de codul sursă. Singurul loc pentru a descărca codul este pagina de lansări. Conține versiuni stabile testate, luați-o pe cea mai recentă. Momentan este 0.8, dar cu timpul vor fi altele noi. Nu clonați/descărcați depozitul, descărcați cea mai recentă versiune.

ОС

Dacă instalați Python Gateway pe un sistem de operare, atunci mai întâi (indiferent de sistemul de operare) trebuie să instalați Python. Pentru aceasta:

  1. Instalați Python 3.6.7 pe 64 de biți. Este recomandat să instalați Python în directorul implicit.
  2. Instalați modulul dill: pip install dill.
  3. Descărcați codul ObjectScript (de ex. do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) în orice zonă cu produse. În cazul în care doriți o zonă existentă pentru a susține produse, rulați: write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. Loc înștiințare DLL/SO/DYLIB în dosar bin instanța dvs. InterSystems IRIS. Fișierul bibliotecii trebuie să fie disponibil în calea returnată write ##class(isc.py.Callout).GetLib().

ferestre din

  1. Asigurați-vă că variabila de mediu PYTHONHOME indică Python 3.6.7.
  2. Asigurați-vă că variabila de mediu de sistem este PATH conţine o variabilă PYTHONHOME (sau directorul către care indică).

Linux (Debian/Ubuntu)

  1. Verificați dacă variabila de mediu este PATH содержит /usr/lib и /usr/lib/x86_64-linux-gnu. Folosește fișierul /etc/environment pentru a seta variabilele de mediu.
  2. În caz de erori undefined symbol: _Py_TrueStruct setați setarea PythonLib. De asemenea, în readme există o secțiune de depanare.

Mac

  1. În prezent, este acceptat doar Python 3.6.7 Python.org. Verificați variabila PATH.

Dacă ați modificat variabilele de mediu, reporniți produsul InterSystems.

Docher

Utilizarea containerelor are o serie de avantaje:

  • Portabilitate
  • eficacitate
  • Izolație
  • Lejeritate
  • Imuabilitate

Verifica asta serie de articole pentru mai multe informații despre utilizarea Docker cu produsele InterSystems.

Toate versiunile Python Gateway sunt în prezent bazate pe containere 2019.4.

Imagine gata

Alerga: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latestpentru a descărca și rula Python Gateway cu InterSystems IRIS Community Edition. Asta e tot.

Creează-ți propriul look

Pentru a construi o imagine Docker, rulați în rădăcina depozitului: 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, cu toate acestea, puteți modifica acest lucru setând o variabilă IMAGE.
Pentru a construi din InterSystems IRIS, rulați: `docker build --build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 --force-rm --tag intersystemscommunity/irispy:latest ".

După aceasta, puteți rula imaginea docker:

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

Dacă utilizați o imagine bazată pe InterSystems IRIS Community Edition, puteți omite cheia.

Comentarii

  • Procesul de testare isc.py.test.Process salvează un număr de imagini într-un director temporar. Poate doriți să schimbați această cale către directorul montat. Pentru a face acest lucru, editați setarea WorkingDir specificând directorul montat.
  • Pentru a accesa rularea terminalului: docker exec -it irispy sh.
  • Acces la portalul de management al sistemului prin autentificare SuperUser/SYS.
  • Pentru a opri containerul, rulați: docker stop irispy && docker rm --force irispy.

Verificarea instalării

Odată ce ați instalat Python Gateway, merită să verificați dacă 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

Rezultatul ar trebui să fie: HELLO — Valoarea variabilei Python x. Dacă starea de întoarcere sc este o eroare sau var gol, verifica Readme - Secțiunea de depanare.

API

Python Gateway este instalat și ați verificat că funcționează. Este timpul să începi să-l folosești!
Interfața principală pentru Python este isc.py.Main. Oferă următoarele grupuri de metode (toate return %Status):

  • Executarea codului
  • transfer de date
  • auxiliar

Executarea codului

Aceste metode vă permit să executați cod Python arbitrar.

SimpleString

SimpleString - aceasta este metoda principală. Este nevoie de 4 argumente opționale:

  • code — linie de cod de executat. Caracter de avans de linie: $c(10).
  • returnVariable — numele variabilei de returnat.
  • serialization - cum se serializa returnVariable. 0 — șir (implicit), 1 — repr.
  • result — ByRef referință la variabila în care este scrisă valoarea returnVariable.

Mai sus am făcut:

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

În acest exemplu, atribuim unei variabile Python x valoare Hello și doriți să returnați valoarea unei variabile Python x la o variabilă ObjectScript var.

ExecuteCode

ExecuteCode este o alternativă mai sigură și mai puțin restrictivă SimpleString.
Liniile din platforma InterSystems IRIS sunt limitate la 3 de caractere, iar dacă doriți să executați o bucată mai lungă de cod, trebuie să utilizați fire.
Două argumente sunt acceptate:

  • code — o linie sau un flux de cod Python care urmează să fie executat.
  • variable — (opțional) atribuie rezultatul execuției code această variabilă Python.

Exemplu de utilizat:

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

În acest exemplu, înmulțim 2 cu 3 și scriem rezultatul într-o variabilă Python y.

transfer de date

Transferați date către și de la Python.

Python -> InterSystems IRIS

Există 4 moduri de a obține valoarea unei variabile Python în InterSystems IRIS, în funcție de serializarea de care aveți nevoie:

  • String pentru tipuri de date simple și depanare.
  • Repr pentru stocarea obiectelor simple și depanare.
  • JSON pentru manipularea ușoară a datelor din partea InterSystems IRIS.
  • Pickle pentru a salva obiecte.

Aceste metode vă permit să preluați variabile din Python ca șir sau fluxuri.

  • GetVariable(variable, serialization, .stream, useString) - obține serialization variabil variable в stream. dacă useString este 1 și serializarea este plasată pe un șir, apoi este returnat un șir și nu un flux.
  • GetVariableJson(variable, .stream, useString) — obțineți serializarea JSON a unei variabile.
  • GetVariablePickle(variable, .stream, useString, useDill) -obține serializarea Pickle (sau Dill) a unei variabile.

Să încercăm să obținem variabila noastră y.

set sc = ##class(isc.py.Main).GetVariable("y", , .val, 1)
write val
>6

InterSystems IRIS -> Python

Încărcarea datelor din InterSystems IRIS în Python.

  • ExecuteQuery(query, variable, type, namespace) - creează un set de date (pandas dataframe sau list) din interogarea sql și o setează la o variabilă Python variable. Punga de plastic isc.py trebuie să fie disponibil în zonă namespace — cererea va fi executată acolo.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) - încarcă date globale global din indice start la end în Python ca variabilă de tip type: list, sau panda dataframe. Descrierea argumentelor opționale mask și labels disponibil în documentația clasei și în depozit Documente despre transferul de date.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) - încarcă datele de clasă class din id start la end în Python ca variabilă de tip type: list, sau panda dataframe. properties — o listă (separată prin virgulă) cu proprietățile clasei care trebuie încărcate în setul de date. Măști suportate * и ?. Mod implicit - * (toate proprietățile). Proprietate %%CLASSNAME ignorat.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) - încarcă datele din tabel table din id start la end în Python.

ExecuteQuery — universal (orice interogare SQL corectă va fi transmisă la Python). In orice caz, ExecuteGlobal și învelișurile sale ExecuteClass и ExecuteTable lucrați cu o serie de restricții. Sunt mult mai rapide (de 3-5 ori mai rapide decât driverul ODBC și de 20 de ori mai rapide ExecuteQuery). Mai multe informații la Documente despre transferul de date.
Toate aceste metode acceptă transferul de date din orice zonă. Punga de plastic isc.py trebuie să fie disponibil în zona țintă.

ExecuteQuery

ExecuteQuery(request, variable, type, namespace) — transferarea rezultatelor oricărei interogări SQL corecte către Python. Aceasta este cea mai lentă metodă de transfer de date. Folosește-l dacă ExecuteGlobal iar ambalajele sale nu sunt disponibile.

Argumente:

  • query - interogare sql.
  • variable — numele variabilei Python în care sunt scrise datele.
  • type - list sau panda dataframe.
  • namespace — zona în care se va executa cererea.

ExecuteGlobal

ExecuteGlobal(global, variable, type, start, end, mask, labelels, namespace) - trecerea unui global în Python.

Argumente:

  • global - nume global fără ^
  • variable — numele variabilei Python în care sunt scrise datele.
  • type - list sau panda dataframe.
  • start — primul indice al globalului. Neapărat %Integer.
  • end — ultimul indice al globalului. Neapărat %Integer.
  • mask — mască de valoare globală. Masca poate fi mai scurtă decât numărul de câmpuri din global (caz în care câmpurile de la sfârșit vor fi sărite). Cum se formatează o mască:
    • + transmiteți valoarea așa cum este.
    • - săriți valoarea.
    • b — tip boolean (0 - False, toate celelalte - True).
    • d — Data (de la $horolog, pe Windows din 1970, pe Linux din 1900).
    • t — Ora ($horolog, secunde după miezul nopții).
    • m — Marcaj temporal (șir de format YEAR-MONTH-DAY HOUR:MINUTE:SECOND).
  • labels — %Lista de nume de coloane. Primul element este numele indicelui.
  • namespace — zona în care se va executa cererea.

ExecuteClass

Înfășurați ExecuteGlobal. Pe baza definiției clasei, pregătește un apel ExecuteGlobal și îl cheamă.

ExecuteClass(class, variable, type, start, end, properties, namespace) - transmiterea datelor de clasă în Python.

Argumente:

  • class - numele clasei
  • variable — numele variabilei Python în care sunt scrise datele.
  • type - list sau panda dataframe.
  • start - ID de pornire.
  • end - Id. final
  • properties — o listă (separată prin virgulă) cu proprietățile clasei care trebuie încărcate în setul de date. Măști suportate * и ?. Mod implicit - * (toate proprietățile). Proprietate %%CLASSNAME ignorat.
  • namespace — zona în care se va executa cererea.

Toate proprietățile sunt transmise așa cum sunt, cu excepția proprietăților de tip %Date, %Time, %Boolean и %TimeStamp - sunt convertite în clasele Python corespunzătoare.

ExecuteTable

Înfășurați ExecuteClass. Traduce numele tabelului în numele clasei și apelează ExecuteClass. Semnătură:

ExecuteTable(table, variable, type, start, end, properties, namespace) - transmiterea datelor din tabel către Python.

Argumente:

  • table - numele tabelului.
    Toate celelalte argumente sunt transmise ca atare ExecuteClass.

Comentarii

  • ExecuteGlobal, ExecuteClass и ExecuteTable lucrează la fel de repede.
  • ExecuteGlobal De 20 de ori mai rapid decât ExecuteQuery pe seturi mari de date (timp de transfer >0.01 secunde).
  • ExecuteGlobal, ExecuteClass и ExecuteTable lucrați la global cu această structură: ^global(key) = $lb(prop1, prop2, ..., propN) unde key — un număr întreg.
  • Pentru ExecuteGlobal, ExecuteClass и ExecuteTable intervalul de valori acceptat %Date corespunde intervalului mktime și depinde de sistemul de operare (ferestre: 1970-01-01, linux 1900-01-01, mac). Utilizare %TimeStamppentru a transfera date în afara acestui interval sau pentru a utiliza panda dataframe deoarece aceasta este o limitare numai pentru listă.
  • Pentru ExecuteGlobal, ExecuteClass и ExecuteTable toate argumentele cu excepția sursei de date (global, clasă sau tabel) și variabilei sunt opționale.

exemple

Clasa de testare isc.py.test.Person conține o metodă care demonstrează toate opțiunile de transfer de date:

set global = "isc.py.test.PersonD"
set class = "isc.py.test.Person"
set table = "isc_py_test.Person"
set query = "SELECT * FROM isc_py_test.Person"

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

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

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

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

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

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

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

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

Apelați metoda do ##class(isc.py.test.Person).Test() pentru a vedea cum funcționează toate metodele de transfer de date.

Metode de ajutor

  • GetVariableInfo(variable, serialization, .defined, .type, .length) — obțineți informații despre variabilă: dacă este definită, clasa sa și lungimea serializării.
  • GetVariableDefined(variable, .defined) — dacă variabila este definită.
  • GetVariableType(variable, .type) — obțineți clasa variabilei.
  • GetStatus() - obțineți și eliminați ultima excepție din partea Python.
  • GetModuleInfo(module, .imported, .alias) — obțineți variabila modulului și starea de import.
  • GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments) — obțineți informații despre funcție.

Interoperabilitate

Ați învățat cum să apelați Python Gateway de la terminal, acum să începem să-l folosim în producție. Baza interacțiunii cu Python în acest mod este isc.py.ens.Operation. Ne permite:

  • Executați cod în Python
  • Salvați/Restaurați contextul Python
  • Încărcați și primiți date de la Python

Practic, o operațiune Python este un wrapper peste isc.py.Main. Operațiune isc.py.ens.Operation oferă capacitatea de a interacționa cu procesul Python din produsele InterSystems IRIS. Sunt acceptate cinci interogări:

  • isc.py.msg.ExecutionRequest pentru a executa codul Python. Se intoarce isc.py.msg.ExecutionResponse cu rezultatul execuției și valorile variabilelor solicitate.
  • isc.py.msg.StreamExecutionRequest pentru a executa codul Python. Se intoarce isc.py.msg.StreamExecutionResponse rezultatul execuției și valorile variabilelor solicitate. Analogic isc.py.msg.ExecutionRequest, dar acceptă și returnează fluxuri în loc de șiruri.
  • isc.py.msg.QueryRequest pentru a transmite rezultatul executării unei interogări SQL. Se intoarce Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest pentru transmiterea de date globale/clasă/tabel. Se intoarce Ens.Response.
  • isc.py.msg.SaveRequest pentru a salva contextul Python. Se intoarce Ens.StringResponse cu ID de context.
  • isc.py.msg.RestoreRequest pentru a restabili contextul Python.

    Mai mult decât atât, isc.py.ens.Operation are doua setari:

    • Initializer — selectarea unei clase care implementează interfața isc.py.init.Abstract. Poate fi folosit pentru a încărca funcții, module, clase etc. Se execută o dată când începe procesul.
    • PythonLib - (doar Linux) dacă vedeți erori la încărcare, setați valoarea acesteia la libpython3.6m.so sau chiar în calea completă către biblioteca Python.

Crearea proceselor de afaceri

Există două clase disponibile care facilitează dezvoltarea proceselor de afaceri:

  • isc.py.ens.ProcessUtils vă permite să extrageți adnotări din activități cu substituție variabilă.
  • isc.py.util.BPEmulator facilitează testarea proceselor de afaceri cu Python. Poate executa un proces de afaceri (părți Python) în procesul curent.

Înlocuirea variabilei

Toate procesele de afaceri moștenite de la isc.py.ens.ProcessUtils, poate folosi metoda GetAnnotation(name) pentru a obține valoarea adnotării activității după numele acesteia. Adnotarea activității poate conține variabile care vor fi calculate pe partea InterSystems IRIS înainte de a fi transmise la Python. Iată sintaxa pentru înlocuirea variabilelor:

  • ${class:method:arg1:...:argN} - apel de metodă
  • #{expr} — executați cod în limbajul ObjectScript.

Un exemplu este disponibil în procesul de testare a afacerii isc.py.test.Process, de exemplu, în activitate 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 acestea. procesul de afaceri curent.
  • ${%PopulateUtils:Integer:1:100} apelează la o metodă Integer clasă %PopulateUtils, trecând argumente 1 и 100, returnând un număr întreg aleatoriu în interval 1...100.

Testează procesul de afaceri

Produsele de testare și procesele de afaceri de testare sunt disponibile implicit ca parte a Python Gateway. Pentru a le folosi:

  1. În terminalul OS, rulați: pip install pandas matplotlib seaborn.
  2. În terminalul InterSystems IRIS, rulați: do ##class(isc.py.test.CannibalizationData).Import() pentru a completa datele de testare.
  3. Lansați produse isc.py.test.Production.
  4. Trimiteți tipul cererii Ens.Request в isc.py.test.Process.

Să vedem cum funcționează totul împreună. Deschis isc.py.test.Process în editorul BPL:

Python Gateway în InterSystems IRIS

Executarea codului

Cea mai importantă provocare este executarea codului Python:

Python Gateway în InterSystems IRIS

Interogarea folosită isc.py.msg.ExecutionRequest, iată proprietățile sale:

  • Code - Cod Python.
  • SeparateLines — dacă se împarte codul în linii pentru execuție. $c(10) (n) este folosit pentru a separa șiruri. Vă rugăm să rețineți că NU este recomandat să procesați întregul mesaj deodată, această funcție este destinată doar procesării def și expresii similare cu mai multe linii. Mod implicit 0.
  • Variables — o listă de variabile, separate prin virgulă, care vor fi adăugate la răspuns.
  • Serialization — Cum să serializeze variabilele pe care dorim să le returnăm. Opțiuni: Str, Repr, JSON, Pickle и Dill, Mod implicit Str.

În cazul nostru, setăm doar proprietatea Code, astfel încât toate celelalte proprietăți folosesc valorile implicite. O setăm prin apel process.GetAnnotation("Import pandas"), care în timpul execuției returnează o adnotare după ce a fost efectuată înlocuirea variabilei. La urma urmei, codul import pandas as pd va fi transmis la Python. GetAnnotation poate fi util pentru obținerea de scripturi Python cu mai multe linii, dar nu există restricții cu privire la această metodă de obținere a codului. Puteți seta proprietatea Code în orice mod convenabil pentru tine.

Obținerea variabilelor

O altă provocare interesantă folosind isc.py.msg.ExecutionRequest - Correlation Matrix: Tabular:

Python Gateway în InterSystems IRIS

Acesta calculează Matricea de corelație pe partea Python și extrage variabila corrmat înapoi la InterSystems IRIS în format JSON, setând proprietățile cererii:

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

Putem vedea rezultatele în Visual Trace:

Python Gateway în InterSystems IRIS

Și dacă avem nevoie de această valoare în BP, o putem obține astfel: callresponse.Variables.GetAt("corrmat").

transfer de date

În continuare, să vorbim despre transferul de date de la InterSystems IRIS la Python; toate cererile de transfer de date implementează interfața isc.py.msg.DataRequestcare oferă următoarele proprietăți:

  • Variable — o variabilă Python în care sunt scrise datele.
  • Type — tip variabilă: dataframe (cadru de date panda) sau list.
  • Namespace — zona din care primim datele. Punga de plastic isc.py ar trebui să fie disponibile în acest domeniu. Aceasta poate fi o zonă fără suport de produs.

Pe baza acestei interfețe, sunt implementate 4 clase de solicitări:

  • isc.py.msg.QueryRequest - setați proprietatea Query pentru a trimite o interogare SQL.
  • isc.py.msg.ClassRequest - setați proprietatea Class pentru a transmite date de clasă.
  • isc.py.msg.TableRequest - setați proprietatea Table pentru a transfera datele din tabel.
  • isc.py.msg.GlobalRequest - setați proprietatea Global pentru transferul global de date.

În procesul de testare, priviți activitatea RAWUnde isc.py.msg.QueryRequest arătate î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 argumente:

  • Mask — Sunt salvate doar variabilele care se potrivesc cu masca. Sprijinit * и ?... Exemplu: "Data*, Figure?"... Mod implicit *.
  • MaxLength — Lungimea maximă a variabilei stocate. Dacă serializarea unei variabile este mai lungă, aceasta va fi ignorată. Setați la 0 pentru a obține variabile de orice lungime. Mod implicit $$$MaxStringLength.
  • Name — Nume context (opțional).
  • Description — Descrierea contextului (opțional).

Se intoarce Ens.StringResponse с Id context salvat. În procesul de testare, priviți activitatea Save Context.

Cerere aferentă isc.py.msg.RestoreRequest încarcă contextul din InterSystems IRIS în Python:

  • ContextId - identificator de context.
  • Clear — ștergeți contextul înainte de a restabili.

Jupiter Notebook

Jupiter Notebook este o aplicație web cu sursă deschisă care vă permite să creați și să publicați caiete care conțin cod, vizualizări și text. Python Gateway vă permite să vizualizați și să editați procesele BPL sub forma unui notebook Jupyter. Vă rugăm să rețineți că executorul normal Python 3 este utilizat în prezent.

Această extensie presupune că adnotările conțin cod Python și utilizează numele activităților ca titluri precedente. Acum este posibil să se dezvolte procese de afaceri PythonGateway în Jupyter Notebook. Iată ce este posibil:

  • Creați noi procese de afaceri
  • Ștergeți procesele de afaceri
  • Creați activități noi
  • Schimbați activități
  • Ștergeți activități

Aici video demonstrativ. Și câteva capturi de ecran:

Process Explorer

Python Gateway în InterSystems IRIS

Editor de procese

Python Gateway în InterSystems IRIS

Instalare

  1. Veți avea nevoie de InterSystems IRIS 2019.2+.
  2. Instalați PythonGateway v0.8+ (doar necesar isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints и isc.py.ens.ProcessUtils).
  3. Actualizați codul ObjectScript din depozit.
  4. urmări do ##class(isc.py.util.Jupyter).Install() și urmați instrucțiunile.

Documentație.

Constatări

MLToolkit este un set de instrumente al căror scop este să combine modele și un mediu tranzacțional, astfel încât modelele construite să poată fi utilizate cu ușurință direct în procesele dvs. de afaceri. Python Gateway face parte din MLToolkit și oferă integrare cu limbajul Python, permițându-vă să orchestrați orice algoritm de învățare automată creați în Python (mediul principal pentru mulți oameni de știință ai datelor), să utilizați numeroase biblioteci gata făcute pentru a crea rapid IA analitică adaptivă, robotică / Soluții ML pe platforma InterSystems IRIS.

referințe

MLToolkit

Grupul de utilizatori MLToolkit este un depozit privat GitHub creat ca parte a organizației corporative GitHub InterSystems. Este destinat utilizatorilor externi care instalează, învață sau folosesc deja componente MLToolkit, inclusiv Python Gateway. Grupul are o serie de cazuri implementate (cu cod sursă și date de testare) în domeniile de marketing, producție, medicină și multe alte industrii. Pentru a vă alătura grupului de utilizatori ML Toolkit, vă rugăm să trimiteți un scurt e-mail la următoarea adresă: [e-mail protejat] și includeți următoarele informații în scrisoarea dvs.:

  • Nume de utilizator GitHub
  • Organizare (lucrezi sau studiezi)
  • Poziția (poziția dvs. reală în organizația dvs., fie „Student” fie „Independent”).
  • țară

Pentru cei care au citit articolul și sunt interesați de capacitățile InterSystems IRIS ca platformă de dezvoltare sau găzduire a inteligenței artificiale și a motoarelor de învățare automată, vă invităm să discutați posibile scenarii care sunt de interes pentru întreprinderea dumneavoastră. Vom fi bucuroși să analizăm nevoile companiei dumneavoastră și să stabilim împreună un plan de acțiune; Adresa de e-mail de contact a echipei noastre de experți AI/ML – [e-mail protejat].

Sursa: www.habr.com

Adauga un comentariu