Python Gateway v InterSystems IRIS

Ta stran je namenjena Python Gateway — skupnostnemu projektu z odprtokodnim programjem za podatkovno platformo InterSystems IRIS. Ta projekt omogoča orkestracijo vseh algoritmov strojnega učenja, ustvarjenih v jeziku Python (glavno okolje za številne podatkovne znanstvenike), in uporabo številnih že pripravljenih knjižnic za hitro ustvarjanje prilagodljivih, robotiziranih analitičnih AI/ML rešitev na platformi InterSystems IRIS. V tem članku bom pokazal, kako lahko InterSystems IRIS orkestrira procese v jeziku Python, učinkovito izvede dvosmerni prenos podatkov in ustvari pametne poslovne procese.

Načrt

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

Uvod

Python je visokonavzni programski jezik splošne rabe, usmerjen v povečanje produktivnosti razvijalca in berljivosti kode. V tej seriji člankov bom predstavil možnosti uporabe jezika Python na platformi InterSystems IRIS, pri čemer je 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, ki se odlikujejo po tem, da ne rešujejo naloge neposredno, temveč se učijo v procesu reševanja številnih podobnih nalog.

Algoritmi in modeli strojnega učenja postajajo vse bolj razširjeni. Razlogov je mnogo, toda vsi se nanašajo na dostopnost, preprostost in dosego praktičnih rezultatov. Je klastirizacija ali celo nevralno mrežno modeliranje nova tehnologija?

Seveda ne, vendar trenutno ni potrebno napisati stotine tisoč vrstic kode, da bi zagnali en model, stroški za ustvarjanje in uporabo modelov pa postajajo vse manjši.

Orodja se razvijajo — medtem ko nimamo popolnoma GUI usmerjenih AI/ML orodij, napredek, ki smo mu priča pri mnogih drugih razredih informacijskih sistemov, na primer BI (od pisanja kode do uporabe okvirov in GUI usmerjenih rešitev), se kaže tudi v orodjih za ustvarjanje AI/ML. Že smo presegli fazo pisanja kode in danes uporabljamo okvire za gradnjo in usposabljanje modelov.

Druge izboljšave, kot je možnost širjenja predizobražene modela, ko končni uporabnik preprosto dopolni usposabljanje modela s svojimi specifičnimi podatki, prav tako poenostavljajo začetek uporabe strojnega učenja. Te dosežke znatno olajšajo učenje strojnega učenja, tako za strokovnjake kot za podjetja na splošno.

Po drugi strani pa zbiramo vse več podatkov. Hvala enotni podatkovni platformi, kot je InterSystems IRIS, se lahko vse te informacije takoj pripravijo in uporabijo kot izhodni podatki za modele strojnega učenja.

Z prehodom na oblak je zagon AI/ML projektov lažji kot kdajkoli. Porabimo lahko le tiste vire, ki jih potrebujemo. Poleg tega, zahvaljujoč paralelizaciji, ki jo ponujajo oblaki, lahko prihranimo čas.

Ampak kakšni so rezultati? Tukaj postane vse bolj zapleteno. Obstaja veliko orodij za gradnjo modelov, o katerih bom govoril naprej. Zgraditi dober model ni preprosto, toda kaj potem? Pridobitev koristi od uporabe modela v podjetju je prav tako nenavadna naloga. Koren težave je v razdelitvi analitičnih in transakcijskih obremenitev ter modelov podatkov. Ko učimo model, to običajno počnemo na zgodovinskih podatkih. Toda prostor za zgrajen model je v transakcijskem obdelovanju podatkov. Kakšna korist je od najboljšega modela za odkritje goljufivih transakcij, če ga izvajamo enkrat na dan? Goljufije so že zdavnaj pobegnile z denarjem. Potrebujemo, da model usposobimo na zgodovinskih podatkih, vendar ga moramo tudi uporabljati v realnem času na novih podatkih, da naši poslovni procesi delujejo v skladu s napovedmi, ki jih model pripravi.

ML Toolkit je nabor orodij, ki je zasnovan prav za to: združiti modele in transakcijsko okolje, da se zgrajeni modeli lahko enostavno uporabljajo neposredno v vaših poslovnih procesih. Python Gateway je del ML Toolkit in omogoča integracijo z jezikom Python (podobno kot R Gateway, ki je del ML Toolkit in omogoča integracijo z jezikom R).

Orodja

Preden nadaljujemo, bi želel opisati nekaj orodij in knjižnic za Python, ki jih bomo uporabili kasneje.

Tehnologije

  • Python je interpretiran, visoko nivojski jezik za splošno rabo. Glavna prednost jezika je obsežna knjižnica matematičnih, ML- in AI-knjižnic. Tako kot ObjectScript je to objektno orientiran jezik, a vse se določi dinamično, ne statično. Vse je tudi predmet. Kasnejši članki predlagajo površno seznanitev z jezikom. Če želite začeti z učenjem, priporočam, da začnete s dokumenti.
  • Za naše naslednje vaje namestite Python 3.6.7 64 bit.
  • IDE: Uporabljam PyCharm, vendar so na voljo tudi druga orodja. mnogi. Če uporabljate Atelier, obstaja Eclipse vtičnik za razvijalce v Pythonu. Če uporabljate VS Code, obstaja razširitev za Python.
  • Zvezek: namesto IDE lahko pišete in delite svoje skripte v spletnih zvezkih. Najbolj priljubljen med njimi je Jupyter.

Knjižnice

Tukaj je (nepopoln) seznam knjižnic za strojno učenje:

  • Numpy — temeljni paket za natančne izračune.
  • Pandas — visoko zmogljive podatkovne strukture in orodja za analizo podatkov.
  • Matplotlib — ustvarjanje grafikonov.
  • Seaborn — vizualizacija podatkov, ki temelji na matplotlib.
  • Sklearn — metode strojnega učenja.
  • XGBoost — algoritmi strojnega učenja v okviru metodologije gradientnega boostanja (Gradient Boosting).
  • Gensim — NLP.
  • Keras — nevronske mreže.
  • Tensorflow — platforma za ustvarjanje modelov strojnega učenja.
  • PyTorch — platforma za ustvarjanje modelov strojnega učenja, usmerjena na Python.
  • Nyoka — PMML iz različnih modelov.

Tehnologije AI/ML omogočajo podjetjem, da postanejo bolj učinkovita in prilagodljiva. Poleg tega postajajo te tehnologije danes enostavnejše za razvoj in uvedbo. Začnite raziskovati AI/ML tehnologije in kako lahko pomagajo vaši organizaciji rasti.

Namestitev

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

  • OS
    • Windows
    • Linux
    • Mac
  • Docker
    • Uporabite sliko iz DockerHub
    • Ustvarite svojo lastno sliko

Ne glede na način namestitve boste potrebovali izvorno kodo. Edino mesto za prenos kode je stran z izdajami. Vsebuje testirane stabilne izdaje, preprosto prenesite zadnjo. Trenutno je to 0.8, vendar bodo sčasoma na voljo nove različice. Ne kloonirajte/nalagajte repozitorija, temveč prenesite zadnjo izdajo.

OS

Če namestite 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 privzeto mapo.
  2. Namestite modul dill: pip install dill.
  3. Prenesite kodo ObjectScript (tj. do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) v katero koli področje s produkti. Če želite, da obstoječe področje podpira produkte, izvedite: write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. Postavite callout DLL/SO/DYLIB v mapo bin vašega primera InterSystems IRIS. Datoteka knjižnice mora biti dostopna na poti, vrnjeni z write ##class(isc.py.Callout).GetLib().

Windows

  1. Prepričajte se, da spremenljivka okolja PYTHONHOME pokaže na Python 3.6.7.
  2. Prepričajte se, da sistemska spremenljivka okolja PATH vsebuje spremenljivko PYTHONHOME (ali mapo, na katero kaže).

Linux (Debian/Ubuntu)

  1. Preverite, da spremenljivka okolja PATH vsebuje /usr/lib in /usr/lib/x86_64-linux-gnu. Uporabite datoteko /etc/environment za nastavitev spremenljivk okolja.
  2. V primeru napak undefined symbol: _Py_TrueStruct nastavite nastavitev PythonLib. Prav tako v Readme je razdelek za odpravljanje težav.

Mac

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

Če ste spreminjali spremenljivke okolja, ponovno zaženite svoj izdelek InterSystems.

Docker

Uporaba kontejnerjev ima vrsto prednosti:

  • Prijenosnost
  • Učinkovitost
  • Izolacija
  • Lahkost
  • Imutabilnost

Seznanite se s to serijo člankov za podrobnejše informacije o uporabi Dockerja s produkti InterSystems.

Vse različice Python Gateway so trenutno osnovane na kontejnerjih. 2019.4.

Končni slika

Izvedite: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latest, da prenesete in zaženete Python Gateway z izdajo Community Edition InterSystems IRIS. To je to.

Ustvarite svojo lastno sliko

Za izdelavo Docker slike izvedite v korenu repozitorija: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
Privzeto se slika gradi na osnovi slike store/intersystems/iris-community:2019.4.0.383.0, vendar jo lahko spremenite tako, da nastavite spremenljivko IMAGE.
Za gradnjo iz InterSystems IRIS izvedite: `docker build —build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 —force-rm —tag intersystemscommunity/irispy:latest.`

Po tem lahko zaženete Docker sliko:

docker run -d 
  -p 52773:52773 
  -v //:/mount 
  --name irispy 
  intersystemscommunity/irispy:latest 
  --key /mount/iris.key

Če uporabljate sliko, osnovano na Community Edition InterSystems IRIS, ključ morda ni potreben.

Komentarji

  • Preskusni postopek isc.py.test.Process shranjuje več slik v začasni imenik. Morda boste želeli spremeniti to pot v pritrjen imenik. To lahko storite tako, da uredite nastavitev WorkingDir z navedbo pritrjenega imenika.
  • Za dostop do terminala izvedite: docker exec -it irispy sh.
  • Dostop do Upravnega Portala Sistema z uporabniškim imenom SuperUser/SYS.
  • Da zaustavite vsebnik, izvedite: docker stop irispy && docker rm --force irispy.

Preverjanje namestitve

Potem ko ste namestili Python Gateway, je smiselno preveriti, ali deluje. Izvedite ta koda 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 mora biti: HELLO — vrednost Python spremenljivke. xČe je vrnjeni status sc napaka ali var prazno, preverite Readme — oddelek za odpravljanje težav..

API

Python Gateway je nameščen in ste se prepričali, da deluje. Čas je, da ga začnete uporabljati!
Glavni vmesnik za Python je isc.py.Main. Ponudil bo naslednje skupine metod (vse vračajo %Status):

  • Izvrševanje kode
  • Prenos podatkov
  • Pomožne

Izvrševanje kode

Te metode omogočajo izvajanje poljubne Python kode.

SimpleString

SimpleString — to je glavna metoda. Sprejema 4 neobvezne argumente:

  • code — niz kode za izvedbo. Znak za prelom vrstice: $c(10).
  • returnVariable — ime spremenljivke za vračilo.
  • serialization — kako serilizirati. returnVariable0 — niz (privzeto), 1 — repr.
  • result — ByRef referenca na spremenljivko, v katero se shrani vrednost. returnVariable.

Zgoraj smo izvedli:

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

V tem primeru dodeljujemo Python spremenljivki x i(j), ki je šifrirana z javnim ključem Zdravo in želimo vrniti vrednost Python spremenljivke x v spremenljivko ObjectScript. var.

ExecuteCode

ExecuteCode je varnejša in manj omejena alternativa. SimpleString.
Nizi v platformi InterSystems IRIS so omejeni na 3 641 144 znakov, in če želite izvesti daljši kos kode, morate uporabiti tokove.
Sprejema dve argumenti:

  • code — niz ali tok Python kode za izvajanje.
  • variable — (neobvezno) dodeli rezultat izvajanja code te spremenljivke Python.

Primer uporabe:

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

V tem primeru pomnožimo 2 in 3 ter shranimo rezultat v Python spremenljivko. y.

Prenos podatkov

Predajte podatke v Python in nazaj.

Python -> InterSystems IRIS

Obstajajo 4 načini, kako pridobiti vrednost Python spremenljivke v InterSystems IRIS, odvisno od serilizacije, ki jo potrebujete:

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

Te metode omogočajo pridobivanje spremenljivk iz Python kot nizov ali tokov.

  • GetVariable(variable, serialization, .stream, useString) — pridobi serialization varijabla variable u stream. Если useString je enako 1 in serializacija je v nizu, vrne niz, ne tok.
  • GetVariableJson(variable, .stream, useString) — pridobi JSON serializacijo spremenljivke.
  • GetVariablePickle(variable, .stream, useString, useDill) — pridobi Pickle (ali Dill) serializacijo spremenljivke.

Poskusimo pridobiti 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 (pandas dataframe ili list) iz sql poizvedbe in ga nastavi v Python spremenljivko. variable. Paket isc.py mora biti dostopen v območju namespace — tam bo poizvedba izvedena.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) — nalaga podatke iz globalne spremenljivke global iz subindeksa start do end v Python kot spremenljivko tipa type: list, bodisi pandas dataframe. Opis opcijskih argumentov mask in labels je na voljo v dokumentaciji razreda in repozitoriju Dokumenti za prenos podatkov.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) — nalaga podatke iz razreda class iz id start do end v Python kot spremenljivko tipa type: list, bodisi pandas dataframe. properties — seznam (ločilnik — vejica) lastnosti razreda, ki jih je treba naložiti v nabor podatkov. Podprti so maske. * in ?. Privzeto — * (vse lastnosti). Lastnost %%CLASSNAME je prezrta.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) — nalaga podatke iz tabele tabela iz id start do end v Python.

ExecuteQuery je univerzalen (vsaka veljavna SQL poizvedba bo poslana v Python). Vendar pa ExecuteGlobal in njegovi ovitki ExecuteClass in ExecuteTable delujejo z določenimi omejitvami. So precej hitrejši (3-5 krat hitrejši od ODBC gonilnika in 20 krat hitrejši ExecuteQuery). Dodatne informacije v Dokumenti za prenos podatkov.
Vse te metode podpirajo prenos podatkov iz katerega koli območja. Paket isc.py mora biti dostopen v ciljnem območju.

ExecuteQuery

ExecuteQuery(request, variable, type, namespace) — prenos rezultatov katere koli veljavne SQL poizvedbe v Python. To je najpočasnejša metoda prenosa podatkov. Uporabite jo, če ExecuteGlobal in njegovi ovitki niso na voljo.

Argumenti:

  • query — sql poizvedba.
  • variable — ime Python spremenljivke, v katero se zapišejo podatki.
  • type — list ali Pandas dataframe.
  • namespace — območje, v katerem bo poizvedba izvedena.

ExecuteGlobal

ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) — prenos globalne spremenljivke v Python.

Argumenti:

  • global — ime globalne spremenljivke brez ^
  • variable — ime Python spremenljivke, v katero se zapišejo podatki.
  • type — list ali Pandas dataframe.
  • start — prvi subindeks globalne spremenljivke. Obvezno %Integer.
  • end — zadnji subindeks globalne spremenljivke. Obvezno %Integer.
  • mask — obrazec vrednosti globalne spremenljivke. Obrazec je lahko krajší kot število polj v globalni spremenljivki (v tem primeru bodo polja na koncu izpuščena). Kako oblike obrazec:
    • + predložite vrednost takšno, kot je.
    • - izpustite to vrednost.
    • b — Logična vrsta (0 — False, vse ostalo — True).
    • d — Datum (iz $horolog, na Windows od 1970, na Linux od 1900).
    • t — Čas ($horolog, sekunde po polnoči).
    • m — Časovna oznaka (niz formata LETO-MESEC-DAN HOUR:MINUTE:SECOND).
  • labels — %Seznam imen stolpcev. Prvi element — ime podskripta.
  • namespace — območje, v katerem bo poizvedba izvedena.

ExecuteClass

Ohitika nad ExecuteGlobal. Na podlagi definicije razreda pripravi klic ExecuteGlobal in ga izvede.

ExecuteClass(class, variable, type, start, end, properties, namespace) — prenos podatkov razreda v Python.

Argumenti:

  • class — ime razreda
  • variable — ime Python spremenljivke, v katero se zapišejo podatki.
  • type — list ali Pandas dataframe.
  • start — začetni Id.
  • end — končni Id
  • properties — seznam (ločilnik — vejica) lastnosti razreda, ki jih je treba naložiti v nabor podatkov. Podprti so maske. * in ?. Privzeto — * (vse lastnosti). Lastnost %%CLASSNAME je prezrta.
  • namespace — območje, v katerem bo poizvedba izvedena.

Vse lastnosti se prenesejo takšne kot so razen lastnosti tipov te, %Čas, %Logična vrednost in %Časovna oznaka — te se pretvorijo v ustrezne razrede Python.

ExecuteTable

Ohitika nad ExecuteClass. Pretvori ime tabele v ime razreda in izvede ExecuteClass. Podpis:

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

Argumenti:

  • tabela — ime tabele.
    Vsi drugi argumenti se prenesejo takšni kot so v ExecuteClass.

Opombe

  • ExecuteGlobal, ExecuteClass in ExecuteTable delujejo enako hitro.
  • ExecuteGlobal 20-krat hitreje kot ExecuteQuery na velikih skladiščih podatkov (čas prenosa več kot >0.01 sekunde).
  • ExecuteGlobal, ExecuteClass in ExecuteTable delujejo na globalnih spremenljivkah s to strukturo: ^global(key) = $lb(prop1, prop2, ..., propN) kjer key — celo število.
  • Za ExecuteGlobal, ExecuteClass in ExecuteTable podprte vrednosti te ustrezajo obsegu mktime in so odvisne od operacijskega sistema (windows: 1970-01-01, linux 1900-01-01, mac). Uporabite %Časovna oznakaza prenos podatkov izven tega obsega ali uporabite pandas dataframe, saj je to omejitev samo za seznam.
  • Za ExecuteGlobal, ExecuteClass in ExecuteTable vsi argumenti, razen vira podatkov (globalne spremenljivke, razreda ali tabele) in spremenljivka so opcijski.

Primeri

Testni razred isc.py.test.Oseba 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)

Извикайте метода do ##class(isc.py.test.Person).Test() за да видите как функционират всички методи за предаване на данни.

Помощни методи

  • GetVariableInfo(variable, serialization, .defined, .type, .length) — получавате информация за променливата: дали е определена, клас и дължина на сериализация.
  • GetVariableDefined(variable, .defined) — дали променливата е определена.
  • GetVariableType(variable, .type) — получавате класа на променливата.
  • GetStatus() — получите и премахнете последното изключение от страна на Python.
  • GetModuleInfo(module, .imported, .alias) — получавате променливата на модула и статуса на импорта.
  • GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments) — получавате информация за функцията.

Interoperabilnost

Научихте се как да извиквате Python Gateway от терминала, сега ще започнем да го използваме в продукцията. Основата на взаимодействието с Python в този режим — isc.py.ens.Operation. Той ни позволява:

  • Да изпълняваме код на Python
  • Да запазваме/възстановяваме контекста на Python
  • Да зареждаме и получаваме данни от Python

Основно, операцията на Pyhton е обвивка около isc.py.Main. Операцията isc.py.ens.Operation дава възможност за взаимодействие с процеса на Python от продукциите на InterSystems IRIS. Поддържат се пет заявки:

  • isc.py.msg.ExecutionRequest за изпълнение на Python код. Връща isc.py.msg.ExecutionResponse с резултата от изпълнението и стойностите на запитаните променливи.
  • isc.py.msg.StreamExecutionRequest за изпълнение на Python код. Връща isc.py.msg.StreamExecutionResponse с резултата от изпълнението и стойностите на запитаните променливи. Подобно на isc.py.msg.ExecutionRequest, но приема и връща потоци вместо низове.
  • isc.py.msg.QueryRequest за предаване на резултата от изпълнението на SQL заявка. Връща Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest za prenos podatkov globalne/razreda/tabele. Vrača Ens.Response.
  • isc.py.msg.SaveRequest za shranjevanje konteksta Python. Vrača Ens.StringResponse z identifikatorjem konteksta.
  • isc.py.msg.RestoreRequest za obnovitev konteksta Python.

    Pored toga, isc.py.ens.Operation ima dve nastavitvi:

    • Initializer — izbira razreda, ki implementira vmesnik isc.py.init.Abstract. Uporabiti se lahko za nalaganje funkcij, modulov, razredov itd. Izvrši se enkrat ob zagonu postopka.
    • PythonLib — (samo za Linux) če opazite napake pri nalaganju, nastavi njegovo vrednost na libpython3.6m.so ali celo na polno pot do knjižnice Python.

Ustvarjanje poslovnih procesov

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

  • isc.py.ens.ProcessUtils omogoča pridobivanje anotacij iz aktivnosti s podstavitvijo spremenljivk.
  • isc.py.util.BPEmulator omogoča enostavno testiranje poslovnih procesov s Python. Izvrši lahko poslovni proces (deli v jeziku Python) v trenutnem postopku.

Nadomeščanje spremenljivk.

Vsi poslovni procesi, dedovani od isc.py.ens.ProcessUtils, lahko uporabijo metodo GetAnnotation(name) za pridobitev vrednosti anotacije aktivnosti po njenem imenu. Anotacija aktivnosti lahko vsebuje spremenljivke, ki bodo izračunane na strani InterSystems IRIS pred prenosom v Python. Tukaj je sintaksa podstavitve spremenljivk:

  • ${class:method:arg1:...:argN} — klic metode
  • #{expr} — izvršiti kodo v ObjectScript jeziku.

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

  • #{process.WorkDirectory} vrne lastnost WorkDirectory objekta proces, ki je instanca razreda isc.py.test.Process , torej trenutnega poslovnega procesa.
  • ${%PopulateUtils:Integer:1:100} izvede metodo Celo število klasa %PopulateUtils, pri čemer se predajajo argumenti 1 in 100, vrne naključno celo število v razponu 1...100.

Testni poslovni proces

Testni izdelki in testni poslovni proces sta na voljo privzeto kot del Python Gateway. Za njihovo uporabo:

  1. V terminalu OS izvedite: pip install pandas matplotlib seaborn.
  2. V terminalu InterSystems IRIS izvedite: do ##class(isc.py.test.CannibalizationData).Import() za izpolnitev testnih podatkov.
  3. Zaženite izdelek isc.py.test.Production.
  4. Pošlji zahtevo tipa Ens.Request u isc.py.test.Process.

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

Python Gateway v InterSystems IRIS

Izvrševanje kode

Najpomembnejši klic — izvršitev Python kode:

Python Gateway v InterSystems IRIS

Uporablja se zahteva isc.py.msg.ExecutionRequest, tukaj so njene lastnosti:

  • Koda — Python koda.
  • SeparateLines — ali naj se koda loči na vrstice za izvršitev. $c(10) (n) se uporablja za ločevanje vrstic. Upoštevajte, da NE priporočamo obdelave celotnega sporočila hkrati; ta funkcija je namenjena samo obdelavi def in podobnih večvrstičnih izrazov. Privzeto 0.
  • Spremenljivke — seznam spremenljivk, ločenih z vejicami, ki bodo dodane v odgovor.
  • Serializacija — kako serializirati spremenljivke, ki jih želimo vrniti. Možnosti: Str, Repr, JSON, Pickle in Dill, privzeto Str.

V našem primeru samo nastavljamo lastnost Koda, tako da vse druge lastnosti uporabljajo privzete vrednosti. Nastavljamo jo z navedbo process.GetAnnotation("Import pandas"), ki med izvajanjem vrne anotacijo po izvedbi zamenjave spremenljivk. Na koncu bo koda import pandas as pd poslana v Python. GetAnnotation je lahko koristna za pridobivanje večvrstičnih Python skriptov, vendar ni omejitev glede te metode pridobivanja kode. Lastnost lahko nastavite Koda na kakršenkoli način, ki vam ustreza.

Pridobivanje spremenljivk

Še en zanimiv izziv z uporabo isc.py.msg.ExecutionRequest — Korelacijska matrika: tabelarična:

Python Gateway v InterSystems IRIS

Izračuna Korelacijsko matriko na strani Pythona in pridobi spremenljivko corrmat nazaj v InterSystems IRIS v formatu JSON z nastavitvijo lastnosti poizvedbe:

  • Spremenljivke: "corrmat"
  • Serializacija: "JSON"

Rezultate lahko vidimo v Visual Trace:

Python Gateway v InterSystems IRIS

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

Prenos podatkov

Nato se bomo pogovarjali o prenosu podatkov iz InterSystems IRIS v Python; vsi poizvedbeni zahtevki za prenos podatkov uresničujejo vmesnik isc.py.msg.DataRequest, ki nudi naslednje lastnosti:

  • Variable — Python spremenljivka, v katero se zapisujejo podatki.
  • Tip — tip spremenljivke: dataframe (pandas dataframe) ali list.
  • Namespace — območje, iz katerega pridobivamo podatke. Paket isc.py mora biti dostopen v tem območju. To je lahko območje brez podpore za produkcijo.

Na podlagi tega vmesnika so bili implementirani 4 razredi zahtevkov:

  • isc.py.msg.QueryRequest — nastavite lastnost Query za prenos SQL poizvedbe.
  • isc.py.msg.ClassRequest — nastavite lastnost Razred za prenos podatkov razreda.
  • isc.py.msg.TableRequest — nastavite lastnost Таблица za prenos podatkov tabele.
  • isc.py.msg.GlobalRequest — nastavite lastnost Global za prenos podatkov globalne spremenljivke.

V testnem procesu si oglejte aktivnost RAW, gde isc.py.msg.QueryRequest prikazan v akciji.

Python Gateway v InterSystems IRIS

Shranjevanje/obnovitev Python konteksta

Nazadnje lahko shranimo Python kontekst v InterSystems IRIS; za to pošljemo isc.py.msg.SaveRequest z argumenti:

  • Maska — shranijo se samo spremenljivke, ki ustrezajo maske. Podprti so * in ?. Primer: "Data*, Figure?". Privzeto *.
  • MaxLength — Največja dolžina shranjene spremenljivke. Če je serializacija spremenljivke daljša, bo ta prezrta. Nastavite 0, da omogočite spremenljivke poljubne dolžine. Privzeto $$$MaxStringLength.
  • Ime — Ime konteksta (neobvezno).
  • Opis — Opis konteksta (neobvezno).

Vrne Ens.StringResponse z Id shranjenega konteksta. Med testnim procesom si oglejte aktivnost Shrani kontekst.

Ustrezno povpraševanje isc.py.msg.RestoreRequest naloži kontekst iz InterSystems IRIS v Python:

  • ContextId — identifikator konteksta.
  • Počisti — počisti kontekst pred obnovitvijo.

Jupyter Notebook

Jupyter Notebook — to je spletna aplikacija z odprtokodnim delovanjem, ki omogoča ustvarjanje zvezkov, ki vsebujejo kodo, vizualizacije in besedilo ter njihovo objavljanje. Python Gateway omogoča pregledovanje in urejanje BPL procesov v obliki Jupyter Notebook. Upoštevajte, da se trenutno uporablja običajen izvrševalec Python 3.

To razširitev predpostavlja, da anotacije vsebujejo kodo Python in uporabljajo imena aktivnosti kot predhodne naslove. Zdaj je mogoče razvijati poslovne procese PythonGateway v Jupyter Notebook. To je mogoče:

  • Ustvarjanje novih poslovnih procesov
  • Brisanje poslovnih procesov
  • Ustvarjanje novih aktivnosti
  • Sprememba aktivnosti
  • Brisanje aktivnosti

Evo demo video. In nekaj posnetkov zaslona:

Raziskovalec procesov

Python Gateway v InterSystems IRIS

Urejevalnik procesa

Python Gateway v InterSystems IRIS

Namestitev

  1. Potrebujete InterSystems IRIS 2019.2+.
  2. Namestite PythonGateway v0.8+ (zahteva le isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints in isc.py.ens.ProcessUtils).
  3. Posodobite kodo ObjectScript iz skladišča.
  4. Izvedite do ##class(isc.py.util.Jupyter).Install() in sledite navodilom.

Dokumentacija.

Zaključki

MLToolkit je niz orodij, katerega cilj je združevanje modelov in transakcijskega okolja, da bi bile zgrajene modele mogoče enostavno uporabljati neposredno v vaših poslovnih procesih. Python Gateway je del MLToolkit in omogoča integracijo z jezikom Python, kar omogoča orkestracijo vseh algoritmov strojnega učenja, ustvarjenih v jeziku Python (glavno okolje za številne podatkovne znanstvenike), ter uporabo številnih pripravljenih knjižnic za hitro ustvarjanje prilagodljivih, robotiziranih analitičnih AI/ML rešitev na platformi InterSystems IRIS.

Povezave

MLToolkit

Uporabniška skupina MLToolkit je zasebni GitHub repozitorij, ustanovljen kot del korporativne GitHub organizacije InterSystems. Namenjena je zunanjim uporabnikom, ki namestijo, raziskujejo ali že uporabljajo komponente MLToolkit, vključno s Python Gateway. V skupini je na voljo vrsta izvedenih primerov (z izvorno kodo in testnimi podatki) na področjih marketinga, proizvodnje, medicine in mnogih drugih panog. Da se pridružite skupini uporabnikov ML Toolkit, pošljite kratko sporočilo na elektronski naslov: MLToolkit@intersystems.com in v svojem sporočilu navedite naslednje informacije:

  • Uporabniško ime GitHub
  • Organizacija (kjer delate ali študirate)
  • Pozicija (vaša dejanska pozicija v vaši organizaciji, ali "Študent", ali "Neodvisni").
  • País

Tistim, ki so prebrali članek in jih zanima, kako lahko InterSystems IRIS služi kot platforma za razvoj ali gostovanje mehanizmov umetne inteligence in strojnega učenja, ponujamo priložnost za razpravo o morebitnih scenarijih, zanimivih za vaše podjetje. Z veseljem bomo analizirali potrebe vašega podjetja in skupaj opredelili akcijski načrt; kontaktni naslov naše strokovne skupine AI/ML je – MLToolkit@intersystems.com.

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster