Python Gateway v InterSystems IRIS

Ta članek govori o Python Gateway, odprtokodnem skupnostnem projektu za podatkovno platformo InterSystems IRIS. Ta projekt vam omogoča, da orkestrirate vse algoritme strojnega učenja, ustvarjene v Pythonu (glavno okolje za številne podatkovne znanstvenike), uporabite številne že pripravljene knjižnice za hitro ustvarjanje prilagodljivih, robotskih analitičnih rešitev AI/ML na platformi InterSystems IRIS. V tem članku bom pokazal, kako lahko InterSystems IRIS orkestrira procese v Pythonu, učinkovito posreduje dvosmerne podatke in ustvarja inteligentne poslovne procese.

načrt

  1. Uvod.
  2. Orodja.
  3. Namestitev.
  4. API.
  5. Interoperabilnost.
  6. Jupyter Notebook.
  7. Sklepi.
  8. Povezave.
  9. MLToolkit.

Predstavitev

Python je visokonivojski programski jezik za splošne namene, namenjen izboljšanju produktivnosti razvijalcev in berljivosti kode. V tej seriji člankov bom razpravljal o možnostih uporabe Pythona na platformi InterSystems IRIS, pri čemer bo glavni poudarek tega članka uporaba Pythona kot jezika za ustvarjanje in izvajanje modelov strojnega učenja.

Strojno učenje (ML) je razred metod umetne inteligence, katerih značilnost ni neposredno reševanje problema, temveč učenje v procesu reševanja številnih podobnih problemov.

Algoritmi in modeli strojnega učenja postajajo vse pogostejši. Razlogov za to je veliko, vsi pa se spuščajo v dostopnost, enostavnost in doseganje praktičnih rezultatov. Ali je združevanje v gruče ali celo modeliranje nevronske mreže nova tehnologija?

Seveda ne, a dandanes ni več treba pisati več sto tisoč vrstic kode za izvajanje enega samega modela, stroški izdelave in uporabe modelov pa postajajo vse nižji.

Orodja se razvijajo – čeprav nimamo orodij AI/ML, ki so v celoti osredotočena na GUI, je napredek, ki smo ga opazili pri številnih drugih razredih informacijskih sistemov, kot je BI (od pisanja kode do uporabe ogrodij in konfigurabilnih rešitev, osredotočenih na GUI), opaziti tudi v orodjih za ustvarjanje AI/ML. Prešli smo že fazo pisanja kode in danes uporabljamo ogrodja za gradnjo in usposabljanje modelov.

Druge izboljšave, kot je možnost distribucije vnaprej usposobljenega modela, kjer mora končni uporabnik preprosto dokončati usposabljanje modela na svojih specifičnih podatkih, prav tako olajšajo začetek strojnega učenja. Zaradi teh napredkov je učenje strojnega učenja veliko lažje tako za strokovnjake kot za podjetja na splošno.

Po drugi strani pa zbiramo vedno več podatkov. Z enotno podatkovno platformo, kot je InterSystems IRIS, je mogoče vse te informacije takoj pripraviti in uporabiti kot vhodne podatke za modele strojnega učenja.

S prehodom v oblak je zagon projektov AI/ML lažji kot kdaj koli prej. Porabimo lahko le vire, ki jih potrebujemo. Poleg tega lahko zahvaljujoč paralelizaciji, ki jo ponujajo platforme v oblaku, prihranimo porabljen čas.

Kaj pa rezultati? Tukaj se stvari bolj zapletejo. Obstaja veliko orodij za izdelavo modelov, o katerih bom razpravljal v nadaljevanju. Izdelava dobrega modela ni enostavna, a kaj potem? Ustvarjanje dobička z uporabo poslovnega modela je prav tako nepomembna naloga. Koren problema je ločevanje analitičnih in transakcijskih delovnih obremenitev ter podatkovnih modelov. Ko treniramo model, to običajno počnemo na zgodovinskih podatkih. Toda mesto za konstruirani model je v transakcijski obdelavi podatkov. Kaj nam pomaga najboljši model za odkrivanje goljufivih transakcij, če ga izvajamo enkrat na dan? Prevaranti so že zdavnaj odšli z denarjem. Model moramo usposobiti na zgodovinskih podatkih, vendar ga moramo uporabiti tudi v realnem času na novih vhodnih podatkih, tako da lahko naši poslovni procesi delujejo na podlagi napovedi modela.

ML Toolkit je nabor orodij, katerih namen je narediti prav to: poenotiti modele in transakcijsko okolje, tako da je zgrajene modele mogoče enostavno uporabiti neposredno v vaših poslovnih procesih. Python Gateway je del orodja ML Toolkit in zagotavlja integracijo z jezikom Python (podobno kot R Gateway, ki je del orodja ML Toolkit, zagotavlja integracijo z jezikom R).

Orodje

Preden nadaljujemo, bi rad opisal nekaj orodij in knjižnic Python, ki jih bomo uporabili pozneje.

Tehnologija

  • Python je interpretiran programski jezik na visoki ravni za splošne namene. Glavna prednost jezika je velika knjižnica matematičnih, ML in AI knjižnic. Tako kot ObjectScript je objektno usmerjen jezik, vendar je vse definirano dinamično in ne statično. Tudi vse je predmet. Poznejši članki predvidevajo bežno poznavanje jezika. Če se želite začeti učiti, priporočam, da začnete z dokumentacijo.
  • Za naše nadaljnje vaje nastavite Python 3.6.7 64 bit.
  • IDE: Uporabljam PyCharm, ampak na splošno oni много. Če uporabljate Atelier, je na voljo vtičnik Eclipse za razvijalce Pythona. Če uporabljate kodo VS, obstaja razširitev za Python.
  • Beležnica: namesto v IDE lahko pišete in delite svoje skripte v spletnih zvezkih. Najbolj priljubljen med njimi je Jupiter.

Knjižnice

Tukaj je (nepopoln) seznam knjižnic strojnega učenja:

  • Številčen — osnovni paket za natančne izračune.
  • pand — visoko zmogljive podatkovne strukture in orodja za analizo podatkov.
  • matplotlib — izdelava grafov.
  • rojen na morju — vizualizacija podatkov na osnovi matplotlib.
  • Sklearn — metode strojnega učenja.
  • XGBoost — algoritmi strojnega učenja v okviru metodologije gradientnega povečevanja.
  • Gensim — NLP.
  • Keras - nevronske mreže.
  • Tenzorski tok — platforma za ustvarjanje modelov strojnega učenja.
  • PyTorch je platforma za ustvarjanje modelov strojnega učenja, osredotočena na Python.
  • Nyoka - PMML iz različnih modelov.

Tehnologije AI/ML naredijo poslovanje bolj učinkovito in prilagodljivo. Poleg tega je danes te tehnologije vse lažje razvijati in izvajati. Začnite se učiti o tehnologijah AI/ML in o tem, kako lahko pomagajo rasti vaši organizaciji.

Namestitev

Obstaja več načinov za namestitev in uporabo Python Gateway:

  • OS
    • Windows
    • Linux
    • Mac
  • Lučki delavec
    • Uporabite sliko iz DockerHub
    • Ustvarite svoj videz

Ne glede na način namestitve boste potrebovali izvorno kodo. Edino mesto za prenos kode je stran za objave. Vsebuje preizkušene stabilne izdaje, vzemite najnovejšo. Trenutno je 0.8, a čez čas bodo nove. Ne klonirajte/prenesite repozitorija, prenesite najnovejšo izdajo.

OS

Če nameščate Python Gateway v operacijski sistem, morate najprej (ne glede na operacijski sistem) namestiti Python. Za to:

  1. Namestite Python 3.6.7 64 bit. Priporočljivo je, da Python namestite v privzeti imenik.
  2. Namestite modul dill: pip install dill.
  3. Prenesite kodo ObjectScript (tj. do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) na katero koli območje z izdelki. Če želite, da obstoječe območje podpira izdelke, zaženite: write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. Kraj oblaček DLL/SO/DYLIB v mapo bin vaš primerek InterSystems IRIS. Datoteka knjižnice mora biti na voljo na vrnjeni poti write ##class(isc.py.Callout).GetLib().

Windows

  1. Prepričajte se, da spremenljivka okolja PYTHONHOME kaže na Python 3.6.7.
  2. Prepričajte se, da je spremenljivka sistemskega okolja PATH vsebuje spremenljivko PYTHONHOME (ali imenik, na katerega kaže).

Linux (Debian/Ubuntu)

  1. Preverite, ali je spremenljivka okolja PATH vsebuje /usr/lib и /usr/lib/x86_64-linux-gnu. Uporabi datoteko /etc/environment za nastavitev spremenljivk okolja.
  2. V primeru napak undefined symbol: _Py_TrueStruct nastavite nastavitev PythonLib. tudi v Readme obstaja razdelek Odpravljanje težav.

Mac

  1. Trenutno je podprt samo Python 3.6.7 python.org. Preverite spremenljivko PATH.

Če ste spremenili spremenljivke okolja, znova zaženite izdelek InterSystems.

Lučki delavec

Uporaba posod ima številne prednosti:

  • Prenosljivost
  • Učinkovitost
  • Izolacija
  • Lahkotnost
  • Nespremenljivost

Preverite to serija člankov za več informacij o uporabi Dockerja z izdelki InterSystems.

Vse gradnje Python Gateway trenutno temeljijo na vsebniku 2019.4.

Pripravljena slika

Teči: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latestza prenos in zagon Python Gateway z InterSystems IRIS Community Edition. To je vse.

Ustvarite svoj videz

Če želite zgraditi sliko dockerja, zaženite v korenu skladišča: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
Privzeto je slika zgrajena na podlagi slike store/intersystems/iris-community:2019.4.0.383.0, vendar lahko to spremenite z nastavitvijo spremenljivke IMAGE.
Če želite zgraditi iz InterSystems IRIS, zaženite: `docker build --build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 --force-rm --tag intersystemscommunity/irispy:latest ".

Po tem lahko zaženete sliko dockerja:

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

Če uporabljate sliko, ki temelji na InterSystems IRIS Community Edition, lahko ključ izpustite.

Komentarji

  • Postopek testiranja isc.py.test.Process shrani številne slike v začasni imenik. Morda boste želeli spremeniti to pot do nameščenega imenika. Če želite to narediti, uredite nastavitev WorkingDir določanje nameščenega imenika.
  • Za dostop do terminala zaženite: docker exec -it irispy sh.
  • Dostop do portala za upravljanje sistema s prijavo SuperUser/SYS.
  • Če želite ustaviti vsebnik, zaženite: docker stop irispy && docker rm --force irispy.

Preverjanje namestitve

Ko namestite Python Gateway, je vredno preveriti, ali deluje. Izvedite to kodo v terminalu InterSystems IRIS:

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

Rezultat bi moral biti: HELLO — Vrednost spremenljivke Python x. Če status vrnitve sc gre za napako oz var prazno, preveri Readme – razdelek za odpravljanje težav.

API

Python Gateway je nameščen in preverili ste, da deluje. Čas je, da ga začnete uporabljati!
Glavni vmesnik za Python je isc.py.Main. Ponuja naslednje skupine metod (vse vrnejo %Status):

  • Izvajanje kode
  • Prenos podatkov
  • Pomožno

Izvajanje kode

Te metode vam omogočajo izvajanje poljubne kode Python.

SimpleString

SimpleString - to je glavna metoda. Potrebuje 4 neobvezne argumente:

  • code — vrstica kode za izvedbo. Znak za premik vrstice: $c(10).
  • returnVariable — ime spremenljivke, ki jo želite vrniti.
  • serialization - kako serializirati returnVariable. 0 — niz (privzeto), 1 — repr.
  • result — Sklic ByRef na spremenljivko, v katero je zapisana vrednost returnVariable.

Zgoraj smo naredili:

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

V tem primeru dodelimo spremenljivki Python x vrednost Hello in želite vrniti vrednost spremenljivke Python x na spremenljivko ObjectScript var.

ExecuteCode

ExecuteCode je varnejša in manj omejujoča alternativa SimpleString.
Vrstice v platformi InterSystems IRIS so omejene na 3 znakov in če želite izvesti daljši del kode, morate uporabiti niti.
Sprejeta sta dva argumenta:

  • code — vrstica ali tok kode Python, ki naj se izvede.
  • variable — (neobvezno) dodeli rezultat izvedbe code to spremenljivko Python.

Primer uporabe:

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

V tem primeru pomnožimo 2 s 3 in rezultat zapišemo v spremenljivko Python y.

Prenos podatkov

Posredovanje podatkov v in iz Pythona.

Python -> InterSystems IRIS

Vrednost spremenljivke Python v InterSystems IRIS lahko pridobite na 4 načine, odvisno od serializacije, ki jo potrebujete:

  • String za preproste vrste podatkov in odpravljanje napak.
  • Repr za shranjevanje preprostih objektov in odpravljanje napak.
  • JSON za enostavno manipulacijo podatkov na strani InterSystems IRIS.
  • Pickle za shranjevanje predmetov.

Te metode vam omogočajo, da pridobite spremenljivke iz Pythona kot niz ali tokove.

  • GetVariable(variable, serialization, .stream, useString) - dobiti serialization spremenljivka variable в stream. Če useString je 1 in serializacija je postavljena na niz, potem je vrnjen niz in ne tok.
  • GetVariableJson(variable, .stream, useString) — pridobite JSON serializacijo spremenljivke.
  • GetVariablePickle(variable, .stream, useString, useDill) -dobi Pickle (ali Dill) serializacijo spremenljivke.

Poskusimo dobiti našo spremenljivko y.

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

InterSystems IRIS -> Python

Nalaganje podatkov iz InterSystems IRIS v Python.

  • ExecuteQuery(query, variable, type, namespace) - ustvari nabor podatkov (pande dataframe ali list) iz poizvedbe sql in jo nastavi na spremenljivko Python variable. Plastična vrečka isc.py mora biti na voljo na območju namespace — tam bo zahteva izvršena.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) - naloži globalne podatke global iz subscript start za end v Pythonu kot spremenljivka tipa type: list, ali pande dataframe. Opis neobveznih argumentov mask in labels na voljo v dokumentaciji in skladišču razreda Dokumenti o prenosu podatkov.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) - naloži podatke o razredu class iz id start za end v Pythonu kot spremenljivka tipa type: list, ali pande dataframe. properties — seznam (ločen z vejico) lastnosti razreda, ki jih je treba naložiti v nabor podatkov. Maske podprte * и ?. Privzeto - * (vse nepremičnine). Lastnina %%CLASSNAME prezrti.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) - naloži podatke tabele table iz id start za end v Pythonu.

ExecuteQuery — univerzalno (vsaka pravilna poizvedba SQL bo posredovana Pythonu). vendar ExecuteGlobal in njeni ovoji ExecuteClass и ExecuteTable delo s številnimi omejitvami. So veliko hitrejši (3-5-krat hitrejši od gonilnika ODBC in 20-krat hitrejši ExecuteQuery). Več informacij na Dokumenti o prenosu podatkov.
Vse te metode podpirajo prenos podatkov iz katerega koli območja. Plastična vrečka isc.py mora biti na voljo na ciljnem območju.

ExecuteQuery

ExecuteQuery(request, variable, type, namespace) — prenos rezultatov katere koli pravilne poizvedbe SQL v Python. To je najpočasnejši način prenosa podatkov. Uporabite ga, če ExecuteGlobal in njegovi ovoji niso na voljo.

Argumenti:

  • query - sql poizvedba.
  • variable — ime spremenljivke Python, v katero so zapisani podatki.
  • type - list ali pande dataframe.
  • namespace — območje, na katerem bo zahteva izvršena.

ExecuteGlobal

ExecuteGlobal(global, variable, type, start, end, mask, labelels, namespace) - posredovanje globala v Pythonu.

Argumenti:

  • global - globalno ime brez ^
  • variable — ime spremenljivke Python, v katero so zapisani podatki.
  • type - list ali pande dataframe.
  • start — prvi indeks global. Nujno %Integer.
  • end — zadnji indeks globala. Nujno %Integer.
  • mask — globalna vrednostna maska. Maska je lahko krajša od števila polj v globalu (v tem primeru bodo polja na koncu preskočena). Kako oblikovati masko:
    • + posredujte vrednost takšno, kot je.
    • - vrednost preskoka.
    • b — logični tip (0 - False, vse ostalo - True).
    • d — Datum (iz $horolog, v sistemu Windows od 1970, v sistemu Linux od 1900).
    • t — Čas ($horolog, sekunde po polnoči).
    • m — Časovni žig (oblika niza LETO-MESEC-DAN URA:MINUTA:DRUGA).
  • labels — %Seznam imen stolpcev. Prvi element je ime indeksa.
  • namespace — območje, na katerem bo zahteva izvršena.

ExecuteClass

Ovijte čez ExecuteGlobal. Na podlagi definicije razreda pripravi klic ExecuteGlobal in ga pokliče.

ExecuteClass(class, variable, type, start, end, properties, namespace) - posredovanje podatkov razreda v Pythonu.

Argumenti:

  • class - ime razreda
  • variable — ime spremenljivke Python, v katero so zapisani podatki.
  • type - list ali pande dataframe.
  • start — začetni ID.
  • end — končna id
  • properties — seznam (ločen z vejico) lastnosti razreda, ki jih je treba naložiti v nabor podatkov. Maske podprte * и ?. Privzeto - * (vse nepremičnine). Lastnina %%CLASSNAME prezrti.
  • namespace — območje, na katerem bo zahteva izvršena.

Vse lastnosti so posredovane takšne, kot so, razen lastnosti tipa %Date, %Time, %Boolean и %TimeStamp - se pretvorijo v ustrezne razrede Python.

ExecuteTable

Ovijte čez ExecuteClass. Prevede ime tabele v ime razreda in pokliče ExecuteClass. Podpis:

ExecuteTable(table, variable, type, start, end, properties, namespace) - posredovanje podatkov tabele v Python.

Argumenti:

  • table — ime tabele.
    Vsi drugi argumenti se posredujejo, kot so ExecuteClass.

Opombe

  • ExecuteGlobal, ExecuteClass и ExecuteTable delati enako hitro.
  • ExecuteGlobal 20-krat hitreje kot ExecuteQuery na velikih nizih podatkov (čas prenosa >0.01 sekunde).
  • ExecuteGlobal, ExecuteClass и ExecuteTable delajte na globalih s to strukturo: ^global(key) = $lb(prop1, prop2, ..., propN) če key — celo število.
  • Za ExecuteGlobal, ExecuteClass и ExecuteTable podprto območje vrednosti %Date ustreza obsegu mktime in odvisno od OS (okna: 1970-01-01, linux 1900-01-01, mac). Uporaba %TimeStampza prenos podatkov zunaj tega obsega ali uporabo pandas dataframe, ker to je omejitev samo na seznamu.
  • Za ExecuteGlobal, ExecuteClass и ExecuteTable vsi argumenti razen vira podatkov (globalno, razred ali tabela) in spremenljivke so neobvezni.

Primeri

Testni razred isc.py.test.Person vsebuje metodo, ki prikazuje vse možnosti prenosa podatkov:

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)

Pokličite metodo do ##class(isc.py.test.Person).Test() da vidite, kako delujejo vsi načini prenosa podatkov.

Pomožne metode

  • GetVariableInfo(variable, serialization, .defined, .type, .length) — pridobi informacije o spremenljivki: ali je definirana, njen razred in dolžina serializacije.
  • GetVariableDefined(variable, .defined) — ali je spremenljivka definirana.
  • GetVariableType(variable, .type) — pridobite razred spremenljivke.
  • GetStatus() - pridobite in odstranite zadnjo izjemo na strani Python.
  • GetModuleInfo(module, .imported, .alias) — pridobi spremenljivko modula in status uvoza.
  • GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments) — pridobite informacije o funkciji.

Interoperabilnost

Naučili ste se poklicati Python Gateway s terminala, zdaj pa ga začnimo uporabljati v proizvodnji. Osnova za interakcijo s Pythonom v tem načinu je isc.py.ens.Operation. Omogoča nam:

  • Izvedite kodo v Pythonu
  • Shrani/obnovi kontekst Python
  • Nalaganje in prejemanje podatkov iz Pythona

V bistvu je operacija Python ovoj isc.py.Main. Delovanje isc.py.ens.Operation nudi možnost interakcije s procesom Python iz izdelkov InterSystems IRIS. Podprtih je pet poizvedb:

  • isc.py.msg.ExecutionRequest za izvajanje kode Python. Vračila isc.py.msg.ExecutionResponse z rezultatom izvajanja in vrednostmi zahtevanih spremenljivk.
  • isc.py.msg.StreamExecutionRequest za izvajanje kode Python. Vračila isc.py.msg.StreamExecutionResponse rezultat izvajanja in vrednosti zahtevanih spremenljivk. Analogno isc.py.msg.ExecutionRequest, vendar sprejme in vrne tokove namesto nizov.
  • isc.py.msg.QueryRequest za prenos rezultata izvajanja poizvedbe SQL. Vračila Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest za posredovanje globalnih/razrednih/tabelnih podatkov. Vračila Ens.Response.
  • isc.py.msg.SaveRequest da shranite kontekst Python. Vračila Ens.StringResponse s kontekstnim ID-jem.
  • isc.py.msg.RestoreRequest za obnovitev konteksta Python.

    poleg tega isc.py.ens.Operation ima dve nastavitvi:

    • Initializer — izbira razreda, ki implementira vmesnik isc.py.init.Abstract. Uporablja se lahko za nalaganje funkcij, modulov, razredov itd. Izvede se enkrat, ko se proces začne.
    • PythonLib - (Samo za Linux) če opazite napake pri nalaganju, nastavite njegovo vrednost na libpython3.6m.so ali celo v celotni poti do knjižnice Python.

Izdelava poslovnih procesov

Na voljo sta dva razreda, ki olajšata razvoj poslovnih procesov:

  • isc.py.ens.ProcessUtils vam omogoča, da izvlečete opombe iz dejavnosti s spremenljivo zamenjavo.
  • isc.py.util.BPEmulator omogoča preprosto testiranje poslovnih procesov s Pythonom. Lahko izvede poslovni proces (dele Python) v trenutnem procesu.

Zamenjava spremenljivke

Vsi poslovni procesi podedovani od isc.py.ens.ProcessUtils, lahko uporabi metodo GetAnnotation(name) da dobite vrednost opombe dejavnosti po njenem imenu. Opomba dejavnosti lahko vsebuje spremenljivke, ki bodo izračunane na strani InterSystems IRIS, preden bodo posredovane Pythonu. Tukaj je sintaksa za zamenjavo spremenljivke:

  • ${class:method:arg1:...:argN} - klic metode
  • #{expr} — izvajanje kode v jeziku ObjectScript.

Primer je na voljo v testnem poslovnem procesu isc.py.test.Process, na primer v dejavnosti Correlation Matrix: Graph: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). V tem primeru:

  • #{process.WorkDirectory} vrne lastnost WorkDirectory objekta process, ki je primerek razreda isc.py.test.Process tiste. trenutni poslovni proces.
  • ${%PopulateUtils:Integer:1:100} pokliče metodo Integer Razred %PopulateUtils, posredovanje argumentov 1 и 100, ki vrne naključno celo število v obsegu 1...100.

Testni poslovni proces

Testni izdelki in testni poslovni procesi so privzeto na voljo kot del Python Gateway. Če jih želite uporabiti:

  1. V terminalu OS zaženite: pip install pandas matplotlib seaborn.
  2. V terminalu InterSystems IRIS zaženite: do ##class(isc.py.test.CannibalizationData).Import() za izpolnjevanje testnih podatkov.
  3. Lansirajte izdelke isc.py.test.Production.
  4. Pošlji vrsto zahteve Ens.Request в isc.py.test.Process.

Poglejmo, kako vse skupaj deluje. Odprto isc.py.test.Process v urejevalniku BPL:

Python Gateway v InterSystems IRIS

Izvajanje kode

Najpomembnejši izziv je izvajanje kode Python:

Python Gateway v InterSystems IRIS

Uporabljena poizvedba isc.py.msg.ExecutionRequest, tukaj so njegove lastnosti:

  • Code — Koda Python.
  • SeparateLines — ali naj se koda razdeli na vrstice za izvedbo. $c(10) (n) se uporablja za ločevanje nizov. Upoštevajte, da NI priporočljivo obdelati celotnega sporočila naenkrat, ta funkcija je namenjena samo obdelavi def in podobni večvrstični izrazi. Privzeto 0.
  • Variables — z vejicami ločen seznam spremenljivk, ki bodo dodane odgovoru.
  • Serialization — Kako serializirati spremenljivke, ki jih želimo vrniti. Opcije: Str, Repr, JSON, Pickle и Dill, privzeto Str.

V našem primeru nastavimo le lastnost Code, tako da vse druge lastnosti uporabljajo privzete vrednosti. Postavimo ga s klicem process.GetAnnotation("Import pandas"), ki v času izvajanja vrne opombo po izvedeni zamenjavi spremenljivke. Navsezadnje koda import pandas as pd bo posredovan Pythonu. GetAnnotation je lahko koristen za pridobivanje večvrstičnih skriptov Python, vendar ni nobenih omejitev za ta način pridobivanja kode. Lastnost lahko nastavite Code na kateri koli način, ki vam ustreza.

Pridobivanje spremenljivk

Še en zanimiv izziv uporabe isc.py.msg.ExecutionRequest - Correlation Matrix: Tabular:

Python Gateway v InterSystems IRIS

Izračuna korelacijsko matriko na strani Pythona in ekstrahira spremenljivko corrmat nazaj v InterSystems IRIS v formatu JSON z nastavitvijo lastnosti zahteve:

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

Rezultate lahko vidimo v Visual Trace:

Python Gateway v InterSystems IRIS

In če potrebujemo to vrednost v BP, jo lahko dobimo takole: callresponse.Variables.GetAt("corrmat").

Prenos podatkov

Nato se pogovorimo o prenosu podatkov iz InterSystems IRIS v Python; vse zahteve za prenos podatkov izvajajo vmesnik isc.py.msg.DataRequestki zagotavlja naslednje lastnosti:

  • Variable — spremenljivka Python, v katero se zapisujejo podatki.
  • Type — vrsta spremenljivke: dataframe (pandas dataframe) oz list.
  • Namespace — območje, s katerega prejemamo podatke. Plastična vrečka isc.py mora biti na voljo na tem območju. To je lahko območje brez podpore za izdelek.

Na podlagi tega vmesnika so implementirani 4 razredi zahtev:

  • isc.py.msg.QueryRequest - nastavite lastnost Query za pošiljanje poizvedbe SQL.
  • isc.py.msg.ClassRequest - nastavite lastnost Class za posredovanje podatkov razreda.
  • isc.py.msg.TableRequest - nastavljena lastnost Table za prenos podatkov tabele.
  • isc.py.msg.GlobalRequest - nastavljena lastnost Global za globalni prenos podatkov.

V testnem procesu si oglejte dejavnost RAWČe isc.py.msg.QueryRequest prikazano v akciji.

Python Gateway v InterSystems IRIS

Shranjevanje/obnavljanje konteksta Python

Končno lahko shranimo kontekst Python v InterSystems IRIS, za to bomo poslali isc.py.msg.SaveRequest z argumenti:

  • Mask — Shranijo se samo spremenljivke, ki se ujemajo z masko. Podprto * и ?... Primer: "Data*, Figure?". Privzeto *.
  • MaxLength — Največja dolžina shranjene spremenljivke. Če je serializacija spremenljivke daljša, bo prezrta. Nastavite na 0, da dobite spremenljivke poljubne dolžine. Privzeto $$$MaxStringLength.
  • Name — Ime konteksta (neobvezno).
  • Description — Opis konteksta (neobvezno).

Vrne Ens.StringResponse с Id shranjen kontekst. V testnem procesu si oglejte dejavnost Save Context.

Povezana zahteva isc.py.msg.RestoreRequest naloži kontekst iz InterSystems IRIS v Python:

  • ContextId — identifikator konteksta.
  • Clear — počistite kontekst pred obnovitvijo.

Jupyter Notebook

Jupyter Notebook je odprtokodna spletna aplikacija, ki vam omogoča ustvarjanje in objavljanje zvezkov, ki vsebujejo kodo, vizualizacije in besedilo. Python Gateway vam omogoča ogled in urejanje procesov BPL v obliki beležnice Jupyter. Upoštevajte, da se trenutno uporablja običajni izvajalec Python 3.

Ta razširitev predvideva, da opombe vsebujejo kodo Python in uporablja imena dejavnosti kot predhodne naslove. Zdaj je mogoče razviti poslovne procese PythonGateway v Jupyter Notebook. Evo, kaj je možno:

  • Ustvarite nove poslovne procese
  • Brisanje poslovnih procesov
  • Ustvarite nove dejavnosti
  • Spremenite dejavnosti
  • Izbriši dejavnosti

Tu demo video. In nekaj posnetkov zaslona:

Raziskovalec procesov

Python Gateway v InterSystems IRIS

Urejevalnik procesov

Python Gateway v InterSystems IRIS

Namestitev

  1. Potrebovali boste InterSystems IRIS 2019.2+.
  2. Namestite PythonGateway v0.8+ (obvezno samo isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints и isc.py.ens.ProcessUtils).
  3. Posodobite kodo ObjectScript iz repozitorija.
  4. Izvedite do ##class(isc.py.util.Jupyter).Install() in sledite navodilom.

Dokumentacija.

Ugotovitve

MLToolkit je nabor orodij, katerih cilj je združiti modele in transakcijsko okolje, tako da je zgrajene modele mogoče enostavno uporabiti neposredno v vaših poslovnih procesih. Python Gateway je del MLToolkit in zagotavlja integracijo z jezikom Python, kar vam omogoča, da orkestrirate vse algoritme strojnega učenja, ustvarjene v Pythonu (glavno okolje za številne podatkovne znanstvenike), uporabite številne že pripravljene knjižnice za hitro ustvarjanje prilagodljivega, robotskega analitičnega AI / ML rešitve na InterSystems platformi IRIS.

reference

MLToolkit

Uporabniška skupina MLToolkit je zasebni repozitorij GitHub, ustvarjen kot del organizacije GitHub podjetja InterSystems. Namenjen je zunanjim uporabnikom, ki nameščajo, se učijo ali že uporabljajo komponente MLToolkit, vključno s prehodom Python. Skupina ima številne implementirane primere (z izvorno kodo in testnimi podatki) na področjih marketinga, proizvodnje, medicine in mnogih drugih industrij. Če se želite pridružiti uporabniški skupini ML Toolkit, pošljite kratko e-pošto na naslednji naslov: [e-pošta zaščitena] in v svoje pismo vključite naslednje podatke:

  • GitHub uporabniško ime
  • Organizacija (delate ali študirate)
  • Položaj (vaš dejanski položaj v vaši organizaciji, bodisi "študent" ali "neodvisen").
  • Država

Vse tiste, ki ste prebrali članek in vas zanimajo zmogljivosti InterSystems IRIS kot platforme za razvoj ali gostovanje motorjev za umetno inteligenco in strojno učenje, vas vabimo, da razpravljate o možnih scenarijih, ki so zanimivi za vaše podjetje. Z veseljem bomo analizirali potrebe vašega podjetja in skupaj oblikovali akcijski načrt; Kontaktni e-poštni naslov naše ekipe strokovnjakov za AI/ML – [e-pošta zaščitena].

Vir: www.habr.com

Dodaj komentar