Python Gateway u InterSystems IRIS

Ovaj članak je o Python Gatewayu, projektu zajednice otvorenog koda za platformu podataka InterSystems IRIS. Ovaj projekat vam omogućava da orkestrirate bilo koje algoritme za mašinsko učenje kreirane u Pythonu (glavnom okruženju za mnoge Data Scientiste), koristite brojne gotove biblioteke za brzo kreiranje prilagodljivih, robotskih analitičkih AI / ML rešenja na InterSystems IRIS platformi. U ovom članku ću vam pokazati kako InterSystems IRIS može orkestrirati Python procese, izvoditi efikasnu dvosmjernu komunikaciju i kreirati inteligentne poslovne procese.

Plan

  1. Uvod.
  2. Alati.
  3. Instalacija
  4. API.
  5. Interoperabilnost.
  6. Jupyter Notebook.
  7. Zaključci.
  8. Linkovi.
  9. M.L.Toolkit

Uvod

Python je programski jezik opšte namjene visokog nivoa fokusiran na poboljšanje produktivnosti programera i čitljivosti koda. U ovoj seriji članaka govorit ću o mogućnostima korištenja jezika Python na platformi InterSystems IRIS, dok je glavni fokus ovog članka korištenje Pythona kao jezika za kreiranje i primjenu modela strojnog učenja.

Mašinsko učenje (ML) je klasa metoda umjetne inteligencije čija karakteristična karakteristika nije direktno rješenje problema, već učenje u procesu rješavanja mnogih sličnih problema.

Algoritmi i modeli mašinskog učenja postaju sve češći. Postoji mnogo razloga za to, ali sve se svodi na dostupnost, jednostavnost i postizanje praktičnih rezultata. Je li grupiranje ili čak modeliranje neuronskih mreža nova tehnologija?

Naravno da ne, ali danas nema potrebe pisati stotine hiljada linija koda za pokretanje jednog modela, a troškovi kreiranja i korištenja modela su sve manji i manji.

Alati se razvijaju - iako nemamo potpuno GUI orijentirane AI/ML alate, također se vidi napredak koji smo vidjeli s mnogim drugim klasama informacionih sistema poput BI (od pisanja koda do korištenja okvira i GUI orijentiranih konfigurabilnih rješenja) u alatima za kreiranje AI/ML. Već smo prošli fazu pisanja koda i danas koristimo okvire za izgradnju i obuku modela.

Druga poboljšanja, kao što je mogućnost propagiranja unaprijed obučenog modela gdje krajnji korisnik jednostavno mora završiti obuku modela na svojim specifičnim podacima, također olakšavaju početak primjene strojnog učenja. Ovaj napredak znatno olakšava učenje mašinskog učenja, kako za profesionalce tako i za kompanije u celini.

S druge strane, prikupljamo sve više podataka. Uz jedinstvenu platformu podataka kao što je InterSystems IRIS, sve ove informacije mogu se odmah pripremiti i koristiti kao ulaz za modele mašinskog učenja.

Sa prelaskom na oblak, pokretanje AI/ML projekata je lakše nego ikad. Možemo trošiti samo resurse koji su nam potrebni. Štaviše, zahvaljujući paralelizaciji koju nude platforme u oblaku, možemo uštedjeti izgubljeno vrijeme.

Ali šta je sa rezultatima? Ovdje se stvari komplikuju. Postoji mnogo alata za pravljenje modela, o kojima ću dalje govoriti. Izgraditi dobar model nije lako, ali šta dalje? Profitiranje od upotrebe modela od strane preduzeća takođe je netrivijalan zadatak. Koren problema je razdvajanje analitičkih i transakcijskih opterećenja i modela podataka. Kada treniramo model, obično to radimo na istorijskim podacima. Ali mesto za konstruisani model je u obradi transakcijskih podataka. Kakva je korist od najboljeg modela otkrivanja lažnih transakcija ako ga pokrećemo jednom dnevno? Prevaranti su odavno otišli sa novcem. Moramo obučiti model na povijesnim podacima, ali ga također moramo primijeniti u realnom vremenu na nove dolazne podatke kako bi naši poslovni procesi mogli djelovati u skladu s predviđanjima modela.

ML Toolkit je alat koji radi upravo to: spaja modele i transakcijsko okruženje tako da se modeli koje izgradite mogu lako koristiti direktno u vašim poslovnim procesima. Python Gateway je dio ML Toolkit-a i obezbjeđuje integraciju sa jezikom Python (slično R Gateway-u, budući da je dio ML Toolkita omogućava integraciju sa R ​​jezikom).

Toolkit

Prije nego što nastavimo, želio bih opisati nekoliko Python alata i biblioteka koje ćemo kasnije koristiti.

tehnologije

  • Python je interpretirani, opće namjene, programski jezik visokog nivoa. Glavna prednost jezika je velika biblioteka matematičkih, ML i AI biblioteka. Kao i ObjectScript, to je objektno orijentisani jezik, ali je sve definisano dinamički, a ne statički. Takođe, sve je objekat. Kasniji članci pretpostavljaju prolazno poznavanje jezika. Ako želite da počnete da učite, preporučujem da počnete sa dokumentaciju.
  • Za naše sljedeće vježbe, postavite Python 3.6.7 64-bit.
  • IDE: Koristim PyCharm, ali uopšteno много. Ako koristite Atelier, postoji dodatak Eclipse za Python programere. Ako koristite VS Code, postoji ekstenzija za Python.
  • Bilježnica: Umjesto IDE-a, možete pisati i dijeliti svoje skripte u onlajn bilježnicama. Najpopularniji od njih je Jupiter.

Biblioteke

Evo (djelomične) liste biblioteka za mašinsko učenje:

  • numpy — osnovni paket za tačne proračune.
  • Pandas — strukture podataka visokih performansi i alati za analizu podataka.
  • matplotlib - Kreiranje grafikona.
  • rođen na moru - vizualizacija podataka bazirana na matplotlib.
  • Sklearn — metode mašinskog učenja.
  • XGBoost — algoritmi mašinskog učenja u okviru metodologije Gradient Boosting.
  • Gensim — NLP.
  • Keras - neuronske mreže.
  • tenzorski tok je platforma za kreiranje modela mašinskog učenja.
  • PyTorch je platforma za kreiranje modela mašinskog učenja fokusiranih na Python.
  • Nyoka - PMML iz raznih modela.

AI/ML tehnologije čine poslovanje efikasnijim i prilagodljivijim. Štaviše, danas je ove tehnologije sve lakše razvijati i implementirati. Počnite učiti o AI/ML tehnologijama i kako one mogu pomoći vašoj organizaciji da raste.

postavljanje

Postoji nekoliko načina da instalirate i koristite Python Gateway:

  • OS
    • Windows
    • Linux
    • Mac
  • doker
    • Koristite sliku sa DockerHub-a
    • Kreirajte vlastitu sliku

Bez obzira na način instalacije, trebat će vam izvorni kod. Jedino mjesto za preuzimanje koda je stranica izdanja. Sadrži testirana stabilna izdanja, samo uzmite najnovije. Trenutno je 0.8, ali s vremenom će biti novih. Nemojte klonirati/preuzimati spremište, preuzmite najnovije izdanje.

OS

Ako instalirate Python Gateway na operativni sistem, tada ćete prvo (bez obzira na operativni sistem) morati instalirati Python. Za ovo:

  1. Instalirajte Python 3.6.7 64 bit. Preporučljivo je instalirati Python u zadani direktorij.
  2. Instalirajte modul dill: pip install dill.
  3. Preuzmite ObjectScript kod (tj. do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) u bilo koje područje s proizvodima. U slučaju da želite da postojeće područje podržava proizvode, pokrenite: write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. Place oblačić DLL/SO/DYLIB u folder bin vaša InterSystems IRIS instanca. Datoteka biblioteke mora biti dostupna na putanji koju vraća write ##class(isc.py.Callout).GetLib().

Windows

  1. Provjerite je li varijabla okruženja PYTHONHOME ukazuje na Python 3.6.7.
  2. Provjerite je li varijabla sistemskog okruženja PATH sadrži varijablu PYTHONHOME (ili direktorijum na koji ukazuje).

Linux (Debian/Ubuntu)

  1. Provjerite je li varijabla okruženja PATH sadrži /usr/lib и /usr/lib/x86_64-linux-gnu. Koristite datoteku /etc/environment za postavljanje varijabli okruženja.
  2. U slučaju grešaka undefined symbol: _Py_TrueStruct podesite postavku PythonLib... takođe u Readme postoji odjeljak za rješavanje problema.

Mac

  1. Trenutno je podržan samo Python 3.6.7 python.org. Provjerite varijablu PATH.

Ako ste promijenili varijable okruženja, ponovo pokrenite svoj InterSystems proizvod.

doker

Korištenje kontejnera ima niz prednosti:

  • Prenosivost
  • Efikasnost
  • Izolacija
  • lakoća
  • Nepromenljivost

Pogledaj ovo niz članaka za više informacija o korištenju Docker-a sa InterSystems proizvodima.

Sve Python Gateway verzije su trenutno bazirane na kontejnerima. 2019.4.

Gotova slika

trčanje: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latestda preuzmete i pokrenete Python Gateway sa InterSystems IRIS Community Edition. To je sve.

Kreirajte vlastitu sliku

Da biste napravili docker sliku, pokrenite u korijenu spremišta: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
Podrazumevano, slika se gradi na osnovu slike store/intersystems/iris-community:2019.4.0.383.0, međutim, ovo možete promijeniti postavljanjem varijable IMAGE.
Za izgradnju iz InterSystems IRIS-a pokrenite: `docker build --build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 --force-rm --tag intersystemscommunity/irispy:latest'.

Nakon toga, možete pokrenuti docker image:

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

Ako koristite sliku zasnovanu na InterSystems IRIS Community Edition, ne morate navesti ključ.

Комментарии

  • Test Proces isc.py.test.Process sprema određeni broj slika u privremeni direktorij. Možda biste željeli promijeniti ovu putanju u montirani direktorij. Da biste to učinili, uredite postavku WorkingDir specificirajući montirani direktorij.
  • Za pristup terminalu pokrenite: docker exec -it irispy sh.
  • Pristup portalu za upravljanje sistemom putem prijave SuperUser/SYS.
  • Da zaustavite kontejner, pokrenite: docker stop irispy && docker rm --force irispy.

Provjera instalacije

Nakon što instalirate Python Gateway, vrijedi provjeriti da li radi. Pokrenite ovaj kod u InterSystems IRIS terminalu:

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

Rezultat bi trebao biti HELLO - vrijednost Python varijable x. Ako je status povratka sc je greška ili var prazno, provjeri Readme—Odjeljak za rješavanje problema.

API

Python Gateway je instaliran i vi ste potvrdili da radi. Vrijeme je da ga počnete koristiti!
Glavni interfejs za Python je isc.py.Main. Nudi sljedeće grupe metoda (sve vraćaju %Status):

  • Izvršenje koda
  • Prijenos podataka
  • Pomoćni

Izvršenje koda

Ove metode vam omogućavaju da izvršite proizvoljan Python kod.

SimpleString

SimpleString je glavna metoda. Potrebna su 4 neobavezna argumenta:

  • code je linija koda za izvršenje. Line feed znak: $c(10).
  • returnVariable je ime varijable koju treba vratiti.
  • serialization - kako se serijalizira returnVariable. 0 - niz (podrazumevano), 1 - repr.
  • result - ByRef referenca na varijablu u kojoj je vrijednost zapisana returnVariable.

Gore smo uradili:

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

U ovom primjeru, mi dodjeljujemo Python varijablu x značenje Hello i želite da vratite vrijednost Python varijable x na varijablu ObjectScript var.

ExecuteCode

ExecuteCode je sigurnija i manje restriktivna alternativa SimpleString.
Linije u InterSystems IRIS platformi ograničene su na 3 karaktera, a ako želite da izvršite duži dio koda, morate koristiti streamove.
Potrebna su dva argumenta:

  • code — niz ili tok Python koda koji će se izvršiti.
  • variable - (opciono) dodeljuje rezultat izvršenja code ovu Python varijablu.

Predložite korištenje:

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

U ovom primjeru množimo 2 sa 3 i pohranjujemo rezultat u Python varijablu y.

Prijenos podataka

Prosljeđivanje podataka na Python i iz njega.

Python -> InterSystems IRIS

Postoje 4 načina da dobijete vrijednost Python varijable u InterSystems IRIS, ovisno o serijalizaciji koja vam je potrebna:

  • String za jednostavne tipove podataka i otklanjanje grešaka.
  • Repr za pohranjivanje jednostavnih objekata i otklanjanje grešaka.
  • JSON za jednostavnu manipulaciju podacima na strani InterSystems IRIS.
  • Pickle da sačuvate objekte.

Ove metode vam omogućavaju da primate varijable iz Pythona kao string ili kao tokove.

  • GetVariable(variable, serialization, .stream, useString) - uzmi serialization varijabilna variable в stream. Ako useString je 1 i serijalizacija se stavlja u niz, zatim se vraća string, a ne tok.
  • GetVariableJson(variable, .stream, useString) — dobiti JSON serijalizaciju varijable.
  • GetVariablePickle(variable, .stream, useString, useDill) -Nabavite Pickle (ili Dill) serijalizaciju varijable.

Pokušajmo dobiti našu varijablu y.

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

InterSystems IRIS -> Python

Učitavanje podataka iz InterSystems IRIS u Python.

  • ExecuteQuery(query, variable, type, namespace) - kreira skup podataka (pandas dataframe ili list) iz sql upita i postavite ga na python varijablu variable. Paket isc.py treba biti dostupan u tom području namespace - zahtjev će se tamo izvršiti.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) - učitava globalne podatke global iz indeksa start do end u Pythonu kao varijabla tipa type: listili pande dataframe. Opis neobaveznih argumenata mask i labels dostupno u klasnoj dokumentaciji i spremištu Dokumenti za prijenos podataka.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) - učitava podatke o klasi class od id start do end u Pythonu kao varijabla tipa type: listili pande dataframe. properties — lista (odvojena zarezom) svojstava klase koja će se učitati u skup podataka. Podržane maske * и ?. Zadano - * (sve nekretnine). Nekretnina %%CLASSNAME se ignorira.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) - učitava podatke tabele table od id start do end u pythonu.

ExecuteQuery - univerzalni (svaki važeći SQL upit će biti proslijeđen Pythonu). Kako god, ExecuteGlobal i njegove obloge ExecuteClass и ExecuteTable raditi uz niz ograničenja. Mnogo su brži (3-5 puta brži od ODBC drajvera i 20 puta brži od ExecuteQuery). Više informacija u Dokumenti za prijenos podataka.
Sve ove metode podržavaju prijenos podataka iz bilo kojeg područja. Plasticna kesa isc.py moraju biti dostupni u ciljnom području.

ExecuteQuery

ExecuteQuery(request, variable, type, namespace) - prosljeđivanje rezultata bilo kojeg važećeg SQL upita u Python. Ovo je najsporiji način prijenosa podataka. Koristite ga ako ExecuteGlobal a njegovi omoti nisu dostupni.

Argumenti:

  • query - sql upit.
  • variable - naziv Python varijable u koju su podaci upisani.
  • type - list ili pande dataframe.
  • namespace - područje u kojem će se zahtjev izvršiti.

ExecuteGlobal

ExecuteGlobal(global, variable, type, start, end, mask, labelels, namespace) - prosljeđivanje globalnog na Python.

Argumenti:

  • global je naziv globalnog bez ^
  • variable - naziv Python varijable u koju su podaci upisani.
  • type - list ili pande dataframe.
  • start — prvi indeks globalnog. Neophodno %Integer.
  • end je posljednji indeks globalnog. Neophodno %Integer.
  • mask — maska ​​globalnih vrednosti. Maska može biti kraća od broja polja u globalu (u tom slučaju će polja na kraju biti preskočena). Kako formatirati masku:
    • + proslijediti vrijednost kakva jeste.
    • - preskoči vrijednost.
    • b — Boolean tip (0 - False, sve ostalo - True).
    • d — Datum (iz $horolog, na Windowsu od 1970., na Linuxu od 1900.).
    • t - Vrijeme ($horolog, sekunde poslije ponoći).
    • m — Vremenska oznaka (GODINA-MJESEC-DAN SAT:MINUTA:DRUGI niz formata).
  • labels - %Lista naziva kolona. Prvi element je naziv indeksa.
  • namespace - područje u kojem će se zahtjev izvršiti.

ExecuteClass

zamotati ExecuteGlobal. Priprema poziv na osnovu definicije klase ExecuteGlobal i zove ga.

ExecuteClass(class, variable, type, start, end, properties, namespace) - prosljeđivanje podataka klase u Python.

Argumenti:

  • class - naziv klase
  • variable - naziv Python varijable u koju su podaci upisani.
  • type - list ili pande dataframe.
  • start — početna Id.
  • end - konačna id
  • properties — lista (odvojena zarezom) svojstava klase koja će se učitati u skup podataka. Podržane maske * и ?. Zadano - * (sve nekretnine). Nekretnina %%CLASSNAME se ignorira.
  • namespace - područje u kojem će se zahtjev izvršiti.

Sva svojstva se prosljeđuju kao što jesu osim svojstava tipa %Date, %Time, %Boolean и %TimeStamp - konvertuju se u odgovarajuće Python klase.

ExecuteTable

zamotati ExecuteClass. Prevodi ime tabele u ime klase i poziva ExecuteClass. Potpis:

ExecuteTable(table, variable, type, start, end, properties, namespace) - prosljeđivanje podataka tablice u Python.

Argumenti:

  • table - naziv tabele.
    Svi ostali argumenti se prenose takvi kakvi jesu. ExecuteClass.

Napomene

  • ExecuteGlobal, ExecuteClass и ExecuteTable rade podjednako brzo.
  • ExecuteGlobal 20 puta brže od ExecuteQuery na velikim skupovima podataka (vrijeme prijenosa >0.01 sekunde).
  • ExecuteGlobal, ExecuteClass и ExecuteTable rad na globalima sa ovom strukturom: ^global(key) = $lb(prop1, prop2, ..., propN) gdje key je cijeli broj.
  • Do ExecuteGlobal, ExecuteClass и ExecuteTable podržani raspon vrijednosti %Date odgovara opsegu mktime i zavisi od OS-aprozori: 1970-01-01, linux 1900-01-01, mac). Koristi %TimeStampda proslijedite podatke izvan ovog raspona ili koristite pandas dataframe kao ovo ograničenje je samo za listu.
  • Do ExecuteGlobal, ExecuteClass и ExecuteTable svi argumenti osim izvora podataka (globalni, klasa ili tablica) i varijable su opcioni.

primjeri

test klasa isc.py.test.Person sadrži metodu koja pokazuje sve opcije prijenosa podataka:

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)

metoda poziva do ##class(isc.py.test.Person).Test() da vidite kako funkcionišu sve metode prenosa podataka.

Pomoćne metode

  • GetVariableInfo(variable, serialization, .defined, .type, .length) - dobiti informacije o varijabli: da li je definirana, klasa i dužina serijalizacije.
  • GetVariableDefined(variable, .defined) - da li je varijabla definirana.
  • GetVariableType(variable, .type) - dobiti klasu varijable.
  • GetStatus() - nabavite i uklonite posljednji izuzetak na Python strani.
  • GetModuleInfo(module, .imported, .alias) — dobiti varijablu modula i status uvoza.
  • GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments) - dobiti informacije o funkciji.

Interoperabilnost

Naučili ste kako da pozovete Python Gateway sa terminala, sada počnimo da ga koristimo u proizvodnji. Osnova za interakciju sa Pythonom u ovom modu je isc.py.ens.Operation. Omogućava nam:

  • Izvršite Python kod
  • Sačuvaj/vrati Python kontekst
  • Učitavanje i primanje podataka iz Pythona

U osnovi, Pyhton operacija je omotač isc.py.Main. Operacija isc.py.ens.Operation omogućava interakciju sa Python procesom iz InterSystems IRIS proizvoda. Podržano je pet zahtjeva:

  • isc.py.msg.ExecutionRequest za izvršavanje Python koda. vraća isc.py.msg.ExecutionResponse sa rezultatom izvršenja i vrijednostima traženih varijabli.
  • isc.py.msg.StreamExecutionRequest za izvršavanje Python koda. vraća isc.py.msg.StreamExecutionResponse rezultat izvršenja i vrijednosti traženih varijabli. Analog isc.py.msg.ExecutionRequest, ali prihvata i vraća tokove umjesto nizova.
  • isc.py.msg.QueryRequest za prijenos rezultata izvršavanja SQL upita. vraća Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest za prosljeđivanje globalnih/klasnih/tabelih podataka. vraća Ens.Response.
  • isc.py.msg.SaveRequest da sačuvate Python kontekst. vraća Ens.StringResponse sa ID-om konteksta.
  • isc.py.msg.RestoreRequest da vratite Python kontekst.

    Osim toga, isc.py.ens.Operation ima dvije postavke:

    • Initializer - odabir klase koja implementira interfejs isc.py.init.Abstract. Može se koristiti za učitavanje funkcija, modula, klasa i slično. Izvršava se jednom kada proces započne.
    • PythonLib - (Samo za Linux) ako vidite greške pri pokretanju, postavite njegovu vrijednost na libpython3.6m.so ili čak u punom putu do Python biblioteke.

Kreiranje poslovnih procesa

Dostupne su dvije klase koje olakšavaju razvoj poslovnih procesa:

  • isc.py.ens.ProcessUtils omogućava vam da izvučete bilješke iz aktivnosti s promjenjivom zamjenom.
  • isc.py.util.BPEmulator olakšava testiranje poslovnih procesa sa Python-om. Može izvršiti poslovni proces (Python dijelovi) u trenutnom procesu.

Zamjena varijable

Svi poslovni procesi naslijeđeni od isc.py.ens.ProcessUtils, može koristiti metodu GetAnnotation(name) da dobijete vrijednost napomene aktivnosti prema njenom imenu. Bilješka aktivnosti može sadržavati varijable koje će biti procijenjene na strani InterSystems IRIS prije nego što budu proslijeđene Python-u. Evo sintakse za zamjenu varijable:

  • ${class:method:arg1:...:argN} - poziv metode
  • #{expr} - izvršiti kod u ObjectScript jeziku.

Primjer je dostupan u testnom poslovnom procesu isc.py.test.Process, na primjer, u aktivnosti Correlation Matrix: Graph: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). u ovom primjeru:

  • #{process.WorkDirectory} vraća svojstvo WorkDirectory objekta process, što je instanca klase isc.py.test.Process one. trenutni poslovni proces.
  • ${%PopulateUtils:Integer:1:100} poziva metodu Integer razred %PopulateUtils, prenos argumenata 1 и 100, vraća nasumični cijeli broj u rasponu 1...100.

Testirajte poslovni proces

Testna proizvodnja i poslovni proces testiranja su podrazumevano dostupni kao deo Python Gateway-a. Da ih koristite:

  1. U OS terminalu pokrenite: pip install pandas matplotlib seaborn.
  2. U InterSystems IRIS terminalu pokrenite: do ##class(isc.py.test.CannibalizationData).Import() za popunjavanje testnih podataka.
  3. Lansirajte proizvode isc.py.test.Production.
  4. Pošaljite vrstu zahtjeva Ens.Request в isc.py.test.Process.

Hajde da vidimo kako sve to zajedno funkcioniše. otvoren isc.py.test.Process u BPL editoru:

Python Gateway u InterSystems IRIS

Izvršenje koda

Najvažniji poziv je izvršavanje Python koda:

Python Gateway u InterSystems IRIS

Zahtjev korišten isc.py.msg.ExecutionRequest, evo njegovih osobina:

  • Code — Python kod.
  • SeparateLines - da li podijeliti kod na linije za izvršenje. $c(10) (n) se koristi za odvajanje nizova. Imajte na umu da se NE preporučuje obraditi cijelu poruku odjednom, ova funkcija je samo za obradu def i slični višelinijski izrazi. Default 0.
  • Variables je lista varijabli odvojenih zarezima koje će biti dodane odgovoru.
  • Serialization - Kako serijalizirati varijable koje želimo vratiti. Opcije: Str, Repr, JSON, Pickle и Dill, zadano Str.

U našem slučaju postavljamo samo svojstvo Code, tako da sva ostala svojstva koriste svoje zadane vrijednosti. Mi smo to postavili pozivom process.GetAnnotation("Import pandas"), koji u vrijeme izvođenja vraća napomenu nakon što je izvršena zamjena varijable. Konačno kod import pandas as pd će biti proslijeđen Python-u. GetAnnotation može biti korisno za dobijanje višelinijskih Python skripti, ali nema ograničenja za ovaj način dobijanja koda. Možete postaviti svojstvo Code na bilo koji način koji Vama odgovara.

Dobivanje varijabli

Još jedan zanimljiv izazov korištenja isc.py.msg.ExecutionRequest - Correlation Matrix: Tabular:

Python Gateway u InterSystems IRIS

Izračunava matricu korelacije na strani Pythona i izdvaja varijablu corrmat nazad na InterSystems IRIS u JSON formatu postavljanjem svojstava zahtjeva:

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

Rezultate možemo vidjeti u Visual Trace:

Python Gateway u InterSystems IRIS

A ako nam treba ova vrijednost u BP-u, ona se može dobiti ovako: callresponse.Variables.GetAt("corrmat").

Prijenos podataka

Zatim, hajde da pričamo o prenosu podataka sa InterSystems IRIS na Python, svi zahtevi za prenos podataka implementiraju interfejs isc.py.msg.DataRequest, koji pruža sljedeća svojstva:

  • Variable je Python varijabla u koju se zapisuju podaci.
  • Type - tip varijable: dataframe (pandas dataframe) ili list.
  • Namespace - područje iz koje primamo podatke. Plasticna kesa isc.py bi trebao biti dostupan u ovoj oblasti. Ovo može biti područje bez podrške za proizvod.

Na osnovu ovog interfejsa implementiraju se 4 klase zahteva:

  • isc.py.msg.QueryRequest - postavljeno svojstvo Query za slanje SQL upita.
  • isc.py.msg.ClassRequest - postavljeno svojstvo Class da prenese podatke o razredu.
  • isc.py.msg.TableRequest - postavljeno svojstvo Table za prosleđivanje podataka tabele.
  • isc.py.msg.GlobalRequest - postavljeno svojstvo Global za prijenos podataka globalno.

U procesu testiranja pogledajte aktivnost RAWgde isc.py.msg.QueryRequest prikazano na djelu.

Python Gateway u InterSystems IRIS

Čuvanje/vraćanje Python konteksta

Konačno, možemo pohraniti Python kontekst u InterSystems IRIS, da biste to učinili, pošaljite isc.py.msg.SaveRequest sa argumentima:

  • Mask — Samo varijable koje zadovoljavaju masku se čuvaju. Podržano * и ?... Primjer: "Data*, Figure?"... Default *.
  • MaxLength — Maksimalna dužina pohranjene varijable. Ako je serijalizacija varijable duža, ona će biti zanemarena. Postavite na 0 da biste dobili varijable bilo koje dužine. Default $$$MaxStringLength.
  • Name — Ime konteksta (opciono).
  • Description — Opis konteksta (opciono).

Povratak Ens.StringResponse с Id sačuvani kontekst. U procesu testiranja pogledajte aktivnost Save Context.

Povezani zahtjev isc.py.msg.RestoreRequest učitava kontekst iz InterSystems IRIS u Python:

  • ContextId je identifikator konteksta.
  • Clear — očistite kontekst prije vraćanja.

Jupyter Notebook

Jupyter Notebook je web aplikacija otvorenog koda koja vam omogućava da kreirate i objavite sveske koje sadrže kod, vizualizacije i tekst. Python Gateway vam omogućava da vidite i uređujete BPL procese kao Jupyter Notebook. Imajte na umu da se trenutno koristi običan Python 3 izvršitelj.

Ovo proširenje pretpostavlja da napomene sadrže Python kod i koriste nazive aktivnosti kao prethodne naslove. Sada je moguće razviti PythonGateway poslovne procese u Jupyter Notebook-u. Evo šta je moguće:

  • Kreirajte nove poslovne procese
  • Izbrišite poslovne procese
  • Kreirajte nove aktivnosti
  • Promijenite aktivnosti
  • Izbrišite aktivnosti

ovdje demo video. I nekoliko snimaka ekrana:

Process Explorer

Python Gateway u InterSystems IRIS

Editor procesa

Python Gateway u InterSystems IRIS

postavljanje

  1. Trebat će vam InterSystems IRIS 2019.2+.
  2. Instalirajte PythonGateway v0.8+ (zahteva samo isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints и isc.py.ens.ProcessUtils).
  3. Ažurirajte ObjectScript kod iz spremišta.
  4. Izvršiti do ##class(isc.py.util.Jupyter).Install() i slijedite upute.

Dokumentacija.

nalazi

MLToolkit je skup alata koji ima za cilj da kombinuje modele i transakcijsko okruženje tako da se izgrađeni modeli mogu lako koristiti direktno u vašim poslovnim procesima. Python Gateway je dio MLToolkit-a i pruža integraciju sa jezikom Python, omogućavajući vam da orkestrirate bilo koje algoritme za strojno učenje kreirane u Pythonu (glavno okruženje za mnoge Data Scientiste), koristite brojne gotove biblioteke za brzo kreiranje prilagodljive, robotske analitičke AI / ML rješenja na InterSystems platformi IRIS.

reference

MLToolkit

Korisnička grupa MLToolkit je privatno GitHub spremište kreirano kao dio InterSystems korporativne GitHub organizacije. Namijenjen je vanjskim korisnicima koji instaliraju, uče ili već koriste MLToolkit komponente, uključujući Python Gateway. Grupa ima veliki broj implementiranih slučajeva (sa izvornim kodom i test podacima) u oblastima marketinga, proizvodnje, medicine i mnogih drugih industrija. Da biste se pridružili korisničkoj grupi ML Toolkit-a, pošaljite kratku e-poštu na sljedeću adresu: [email zaštićen] i uključite sljedeće informacije u svoje pismo:

  • GitHub korisničko ime
  • Organizacija (radite ili studirate)
  • Pozicija (vaša stvarna pozicija u vašoj organizaciji, ili "Student" ili "Nezavisni").
  • zemlja

Za one koji su pročitali članak i zainteresovani su za InterSystems IRIS kao platformu za razvoj ili hostovanje mehanizama veštačke inteligencije i mašinskog učenja, pozivamo vas da razgovarate o mogućim scenarijima od interesa za vaše preduzeće. Mi ćemo spremno analizirati potrebe vašeg preduzeća i zajednički odrediti akcioni plan; kontakt adresa e-pošte naše ekspertske grupe za AI/ML – [email zaštićen].

izvor: www.habr.com

Dodajte komentar