Python Gateway u InterSystems IRIS

Ovaj članak govori o Python Gatewayu, projektu zajednice otvorenog koda za podatkovnu platformu InterSystems IRIS. Ovaj projekt vam omogućuje da orkestrirate sve algoritme strojnog učenja stvorene u Pythonu (glavno okruženje za mnoge Data Scientists), koristite brojne gotove knjižnice za brzo stvaranje prilagodljivih, robotskih analitičkih AI/ML rješenja na InterSystems IRIS platformi. U ovom ću članku pokazati kako InterSystems IRIS može orkestrirati procese u Pythonu, učinkovito komunicirati dvosmjerne podatke i kreirati inteligentne poslovne procese.

plan

  1. Uvod.
  2. Alati.
  3. Montaža.
  4. API-ja.
  5. Interoperabilnost.
  6. Jupyterova bilježnica.
  7. Zaključci.
  8. Linkovi.
  9. MLToolkit.

Uvod

Python je programski jezik opće namjene visoke razine usmjeren na poboljšanje produktivnosti programera i čitljivosti koda. U ovoj seriji članaka raspravljat ću o mogućnostima korištenja Pythona na InterSystems IRIS platformi, s glavnim fokusom ovog članka na korištenju Pythona kao jezika za stvaranje i pokretanje modela strojnog učenja.

Strojno učenje (ML) je klasa metoda umjetne inteligencije čija karakteristična značajka nije izravno rješavanje problema, već učenje u procesu rješavanja mnogih sličnih problema.

Algoritmi i modeli strojnog učenja sve su češći. Mnogo je razloga za to, ali sve se svodi na dostupnost, jednostavnost i postizanje praktičnih rezultata. Je li klasteriranje ili čak modeliranje neuronske mreže nova tehnologija?

Naravno da ne, ali danas nema potrebe za pisanjem stotina tisuća redaka koda za pokretanje jednog modela, a troškovi izrade i korištenja modela postaju sve manji.

Alati se razvijaju - iako nemamo AI/ML alate u potpunosti usmjerene na GUI, napredak koji smo vidjeli s mnogim drugim klasama informacijskih sustava, kao što je BI (od pisanja koda do korištenja okvira i konfigurabilnih rješenja usmjerenih na GUI) je također uočeno u alatima za stvaranje AI/ML. Već smo prošli fazu pisanja koda i danas koristimo okvire za izgradnju i obuku modela.

Ostala poboljšanja, kao što je mogućnost distribucije unaprijed obučenog modela gdje krajnji korisnik jednostavno mora završiti obuku modela na svojim specifičnim podacima, također olakšavaju početak rada sa strojnim učenjem. Ova poboljšanja čine učenje strojnog učenja puno lakšim i za profesionalce i za tvrtke općenito.

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

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

Ali što je s rezultatima? Tu se stvari kompliciraju. Postoji mnogo alata za izradu modela, o kojima ću govoriti u nastavku. Izgradnja dobrog modela nije laka, ali što dalje? Ostvarivanje profita korištenjem poslovnog modela također nije trivijalan zadatak. Korijen problema je odvajanje analitičkih i transakcijskih radnih opterećenja i podatkovnih modela. Kada treniramo model, obično to radimo na povijesnim podacima. Ali mjesto za konstruirani model je u transakcijskoj obradi podataka. Što će nam najbolji model za otkrivanje lažnih transakcija ako ga pokrećemo jednom dnevno? Prevaranti su odavno otišli s novcem. Moramo uvježbati model na povijesnim podacima, ali ga također moramo primijeniti u stvarnom vremenu na nove dolazne podatke kako bi naši poslovni procesi mogli djelovati prema predviđanjima modela.

ML Toolkit je skup alata koji ima za cilj učiniti upravo to: objediniti modele i transakcijsko okruženje tako da se izgrađeni modeli mogu jednostavno koristiti izravno u vašim poslovnim procesima. Python Gateway dio je ML Toolkita i pruža integraciju s Python jezikom (slično kao što R Gateway, budući da je dio ML Toolkita, pruža integraciju s R jezikom).

alat

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

Tehnologija

  • Python je interpretirani programski jezik opće namjene visoke razine. Glavna prednost jezika je njegova velika biblioteka matematičkih, ML i AI biblioteka. Kao i ObjectScript, to je objektno orijentirani jezik, ali je sve definirano dinamički, a ne statički. Također je sve objekt. Kasniji članci pretpostavljaju prolazno poznavanje jezika. Ako želite početi učiti, preporučujem da počnete s dokumentacija.
  • Za naše sljedeće vježbe, set Python 3.6.7 64 bit.
  • IDE: Koristim PyCharm, ali općenito oni много. Ako koristite Atelier, postoji Eclipse dodatak za Python programere. Ako koristite VS Code, postoji proširenje za Python.
  • Bilježnica: Umjesto IDE-a, možete pisati i dijeliti svoje skripte u mrežnim bilježnicama. Najpopularniji od njih je Jupiter.

Knjižnice

Evo (neiscrpnog) popisa biblioteka strojnog učenja:

  • numpy — osnovni paket za precizne izračune.
  • pande — podatkovne strukture visokih performansi i alati za analizu podataka.
  • matplotlib — izrada grafikona.
  • Pomorski — vizualizacija podataka temeljena na matplotlibu.
  • Sklearn — metode strojnog učenja.
  • XGBoost — algoritmi strojnog učenja u okviru metodologije povećanja gradijenta.
  • Gensim — NLP.
  • Keras - neuronske mreže.
  • Tenzor protok — platforma za izradu modela strojnog učenja.
  • PyTorch je platforma za kreiranje modela strojnog učenja, fokusirana na Python.
  • Nyoka - PMML iz raznih modela.

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

Instalacija

Postoji nekoliko načina za instaliranje i korištenje Python Gatewaya:

  • operativni sustav
    • Windows
    • Linux
    • Mac
  • Lučki radnik
    • Koristite sliku s DockerHuba
    • Stvorite vlastiti izgled

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

operativni sustav

Ako instalirate Python Gateway na operativni sustav, onda prvo (bez obzira na operativni sustav) trebate instalirati Python. Za ovo:

  1. Instalirajte Python 3.6.7 64 bit. Preporuča se 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. Mjesto oblačić DLL/SO/DYLIB u mapu bin vašu InterSystems IRIS instancu. Datoteka biblioteke mora biti dostupna na vraćenoj stazi 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 okruženja sustava PATH sadrži varijablu PYTHONHOME (ili imenik na koji pokazuje).

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 okoline.
  2. U slučaju grešaka undefined symbol: _Py_TrueStruct postavite postavku PythonLib. također u ročitaj postoji odjeljak 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, ponovno pokrenite svoj InterSystems proizvod.

Lučki radnik

Korištenje spremnika ima niz prednosti:

  • pokretnost
  • efikasnost
  • izolacija
  • Lakoća
  • Nepromjenljivost

Pogledaj ovo serija članaka za više informacija o korištenju Dockera s InterSystems proizvodima.

Sve verzije Python Gatewaya trenutno se temelje na spremniku 2019.4.

Spremna slika

Trčanje: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latestza preuzimanje i pokretanje Python Gatewaya s InterSystems IRIS Community Edition. To je sve.

Stvorite vlastiti izgled

Da biste izgradili docker sliku, pokrenite u korijenu repozitorija: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
Prema zadanim postavkama, slika se gradi na temelju slike store/intersystems/iris-community:2019.4.0.383.0, ali to 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 ovoga možete pokrenuti docker sliku:

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 temeljenu na InterSystems IRIS Community Edition, možete izostaviti ključ.

Komentari

  • Proces testiranja isc.py.test.Process sprema određeni broj slika u privremeni direktorij. Možda ćete htjeti promijeniti ovu putanju do montiranog direktorija. Da biste to učinili, uredite postavku WorkingDir navodeći montirani direktorij.
  • Za pristup terminalu pokrenite: docker exec -it irispy sh.
  • Pristup Portalu za upravljanje sustavom putem prijave SuperUser/SYS.
  • Da biste zaustavili spremnik, pokrenite: docker stop irispy && docker rm --force irispy.

Provjera instalacije

Nakon što ste instalirali Python Gateway, vrijedi provjeriti radi li. Izvršite 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 status povratka sc je greška ili var prazno, provjeri Readme - odjeljak za rješavanje problema.

API

Python Gateway je instaliran i potvrdili ste da radi. Vrijeme je da ga počnete koristiti!
Glavno sučelje za Python je isc.py.Main. Nudi sljedeće grupe metoda (sve povratne %Status):

  • Izvršenje koda
  • Prijenos podataka
  • Podružnica

Izvršenje koda

Ove metode vam omogućuju izvršavanje proizvoljnog Python koda.

SimpleString

SimpleString - ovo je glavna metoda. Potrebna su 4 izborna argumenta:

  • code — linija koda za izvršenje. Znak za novi redak: $c(10).
  • returnVariable — ime varijable koju treba vratiti.
  • serialization - kako serijalizirati returnVariable. 0 — niz (zadano), 1 — repr.
  • result — ByRef referenca na varijablu u koju je vrijednost zapisana returnVariable.

Gore smo napravili:

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

U ovom primjeru dodjeljujemo Python varijabli x vrijednost Hello i želite vratiti vrijednost Python varijable x na ObjectScript varijablu var.

ExecuteCode

ExecuteCode je sigurnija i manje restriktivna alternativa SimpleString.
Linije u InterSystems IRIS platformi ograničene su na 3 znaka, a ako želite izvršiti duži dio koda, morate koristiti niti.
Prihvaćaju se dva argumenta:

  • code — linija ili tok Python koda koji će se izvršiti.
  • variable — (neobavezno) dodjeljuje rezultat izvršenja code ovu Python varijablu.

Primjer upotrebe:

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

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

Prijenos podataka

Proslijedite podatke ui iz Pythona.

Python -> InterSystems IRIS

Postoje 4 načina za dobivanje vrijednosti Python varijable u InterSystems IRIS-u, ovisno o serijalizaciji koja vam je potrebna:

  • String za jednostavne tipove podataka i otklanjanje pogrešaka.
  • Repr za pohranu jednostavnih objekata i otklanjanje pogrešaka.
  • JSON za jednostavnu manipulaciju podacima na InterSystems IRIS strani.
  • Pickle za spremanje objekata.

Ove vam metode omogućuju dohvaćanje varijabli iz Pythona kao niza ili tokova.

  • GetVariable(variable, serialization, .stream, useString) - dobiti serialization promjenjivo variable в stream, ako useString je 1 i serijalizacija se postavlja na niz, tada se vraća niz, a ne tok.
  • GetVariableJson(variable, .stream, useString) — dobiti JSON serijalizaciju varijable.
  • GetVariablePickle(variable, .stream, useString, useDill) -dobiti 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) - stvara skup podataka (pande dataframe ili list) iz sql upita i postavlja ga na Python varijablu variable. Plastična vrećica isc.py moraju biti dostupni u tom području namespace — tamo će se zahtjev izvršiti.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) - učitava globalne podatke global iz indeksa start na end u Pythonu kao varijabla tipa type: list, odnosno pande dataframe. Opis neobaveznih argumenata mask i labels dostupno u dokumentaciji klase i repozitoriju Dokumenti o prijenosu podataka.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) - učitava podatke klase class iz id start na end u Pythonu kao varijabla tipa type: list, odnosno pande dataframe. properties — popis (odvojen zarezom) svojstava klase koja se trebaju učitati u skup podataka. Podržane maske * и ?. Zadano - * (sva svojstva). Vlasništvo %%CLASSNAME ignorirani.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) - učitava tablične podatke table iz id start na end u Pythonu.

ExecuteQuery — univerzalni (svaki ispravan SQL upit bit će proslijeđen Pythonu). Međutim, ExecuteGlobal i njegove omote ExecuteClass и ExecuteTable raditi uz brojna ograničenja. Mnogo su brži (3-5 puta brži od ODBC drajvera i 20 puta brži ExecuteQuery). Više informacija na Dokumenti o prijenosu podataka.
Sve te metode podržavaju prijenos podataka s bilo kojeg područja. Plastična vrećica isc.py moraju biti dostupni u ciljnom području.

Izvrši upit

ExecuteQuery(request, variable, type, namespace) — prijenos rezultata bilo kojeg ispravnog 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 se upisuju podaci.
  • 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 globala u Pythonu.

Argumenti:

  • global - globalno ime bez ^
  • variable — naziv Python varijable u koju se upisuju podaci.
  • type - list ili Pande dataframe.
  • start — prvi indeks globalne. Obavezno %Integer.
  • end — zadnji indeks globala. Obavezno %Integer.
  • mask — maska ​​globalne vrijednosti. 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:
    • + proslijedite vrijednost kakva jest.
    • - preskoči vrijednost.
    • b — Booleov tip (0 - False, sve ostalo - True).
    • d — Datum (od $horolog, na Windowsima od 1970., na Linuxu od 1900.).
    • t — Vrijeme ($horolog, sekunde nakon ponoći).
    • m — Vremenska oznaka (niz formata GODINA-MJESEC-DAN SATI:MINUTE:DRUGE).
  • labels — %Popis naziva stupaca. Prvi element je naziv indeksa.
  • namespace — područje u kojem će se zahtjev izvršiti.

ExecuteClass

Zamotajte preko ExecuteGlobal. Na temelju definicije klase priprema poziv ExecuteGlobal i zove ga.

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

Argumenti:

  • class - naziv klase
  • variable — naziv Python varijable u koju se upisuju podaci.
  • type - list ili Pande dataframe.
  • start — startni ID.
  • end — konačni Id
  • properties — popis (odvojen zarezom) svojstava klase koja se trebaju učitati u skup podataka. Podržane maske * и ?. Zadano - * (sva svojstva). Vlasništvo %%CLASSNAME ignorirani.
  • namespace — područje u kojem će se zahtjev izvršiti.

Sva svojstva se prosljeđuju takva kakva jesu osim svojstava tipa %Date, %Time, %Boolean и %TimeStamp - pretvaraju se u odgovarajuće Python klase.

IzvršiTablica

Zamotajte preko ExecuteClass. Prevodi naziv tablice u naziv klase i poziva ExecuteClass. Potpis:

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

Argumenti:

  • table — naziv tablice.
    Svi ostali argumenti prosljeđuju se kako jesu ExecuteClass.

Bilješke

  • ExecuteGlobal, ExecuteClass и ExecuteTable raditi jednako brzo.
  • ExecuteGlobal 20 puta brže od ExecuteQuery na velikim skupovima podataka (vrijeme prijenosa >0.01 sekunde).
  • ExecuteGlobal, ExecuteClass и ExecuteTable raditi na globalima s ovom strukturom: ^global(key) = $lb(prop1, prop2, ..., propN) gdje key — cijeli broj.
  • za ExecuteGlobal, ExecuteClass и ExecuteTable podržani raspon vrijednosti %Date odgovara rasponu mktime i ovisi o OS-u (prozori: 1970-01-01, Linux 1900-01-01, ortak). Koristiti %TimeStampza prijenos podataka izvan ovog raspona ili koristiti pandas dataframe jer ovo je ograničenje samo za popis.
  • za ExecuteGlobal, ExecuteClass и ExecuteTable svi argumenti osim izvora podataka (globalno, klasa ili tablica) i varijable su opcijski.

Primjeri

Ispitna klasa isc.py.test.Person sadrži metodu koja pokazuje sve mogućnosti 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)

Nazovite metodu do ##class(isc.py.test.Person).Test() kako biste vidjeli kako funkcioniraju sve metode prijenosa podataka.

Pomoćne metode

  • GetVariableInfo(variable, serialization, .defined, .type, .length) — dobiti informacije o varijabli: je li definirana, njezinoj klasi i duljini serijalizacije.
  • GetVariableDefined(variable, .defined) — je li varijabla definirana.
  • GetVariableType(variable, .type) — dobiti klasu varijable.
  • GetStatus() - dobiti i ukloniti posljednju iznimku na strani Pythona.
  • 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 pozvati Python Gateway s terminala, a sada ga počnimo koristiti u proizvodnji. Osnova za interakciju s Pythonom u ovom načinu je isc.py.ens.Operation. Omogućuje nam:

  • Izvršite kod u Pythonu
  • Spremi/vrati Python kontekst
  • Učitaj i primi podatke iz Pythona

U osnovi, Python operacija je omotač isc.py.Main. Operacija isc.py.ens.Operation pruža mogućnost interakcije s Python procesom iz InterSystems IRIS proizvoda. Podržano je pet upita:

  • isc.py.msg.ExecutionRequest za izvođenje Python koda. Povratak isc.py.msg.ExecutionResponse s rezultatom izvršenja i vrijednostima traženih varijabli.
  • isc.py.msg.StreamExecutionRequest za izvođenje Python koda. Povratak isc.py.msg.StreamExecutionResponse rezultat izvršenja i vrijednosti traženih varijabli. Analogno isc.py.msg.ExecutionRequest, ali prihvaća i vraća tokove umjesto nizova.
  • isc.py.msg.QueryRequest za prijenos rezultata izvršavanja SQL upita. Povratak Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest za prosljeđivanje podataka globalne/klase/tablice. Povratak Ens.Response.
  • isc.py.msg.SaveRequest za spremanje Python konteksta. Povratak Ens.StringResponse s ID-om konteksta.
  • isc.py.msg.RestoreRequest za vraćanje Python konteksta.

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

    • Initializer — odabir klase koja implementira sučelje isc.py.init.Abstract. Može se koristiti za učitavanje funkcija, modula, klasa itd. Izvršava se jednom kada proces započne.
    • PythonLib - (Samo za Linux) ako vidite pogreške prilikom učitavanja, postavite njegovu vrijednost na libpython3.6m.so ili čak u punom putu do Python knjižnice.

Kreiranje poslovnih procesa

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

  • isc.py.ens.ProcessUtils omogućuje vam izdvajanje komentara iz aktivnosti sa zamjenom varijable.
  • isc.py.util.BPEmulator olakšava testiranje poslovnih procesa s Pythonom. Može izvršiti poslovni proces (dijelovi Pythona) u trenutnom procesu.

Zamjena varijable

Svi poslovni procesi naslijeđeni od isc.py.ens.ProcessUtils, može koristiti metodu GetAnnotation(name) da biste dobili vrijednost anotacije aktivnosti prema njezinom imenu. Bilješka aktivnosti može sadržavati varijable koje će se izračunati na strani InterSystems IRIS prije nego što se proslijede Pythonu. Evo sintakse za zamjenu varijable:

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

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, koji je instanca klase isc.py.test.Process oni. trenutni poslovni proces.
  • ${%PopulateUtils:Integer:1:100} poziva metodu Integer razred %PopulateUtils, donošenje argumenata 1 и 100, vraćajući nasumični cijeli broj u rasponu 1...100.

Testirajte poslovni proces

Testni proizvodi i testni poslovni procesi dostupni su prema zadanim postavkama kao dio Python Gatewaya. Da biste ih koristili:

  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. Lansirati proizvode isc.py.test.Production.
  4. Vrsta zahtjeva za slanje Ens.Request в isc.py.test.Process.

Pogledajmo kako sve to zajedno funkcionira. Otvoren isc.py.test.Process u BPL uređivaču:

Python Gateway u InterSystems IRIS

Izvršenje koda

Najvažniji izazov je izvršavanje Python koda:

Python Gateway u InterSystems IRIS

Upit korišten isc.py.msg.ExecutionRequest, evo njegovih svojstava:

  • Code — Python kod.
  • SeparateLines — treba li podijeliti kod u retke za izvršenje. $c(10) (n) koristi se za odvajanje nizova. Imajte na umu da se NE preporučuje obraditi cijelu poruku odjednom, ova je funkcija namijenjena samo obradi def i slični višeredni izrazi. Zadano 0.
  • Variables — popis varijabli odvojenih zarezima koje će se dodati odgovoru.
  • Serialization — Kako serijalizirati varijable koje želimo vratiti. Mogućnosti: Str, Repr, JSON, Pickle и Dill, zadano Str.

U našem slučaju samo postavljamo svojstvo Code, tako da sva ostala svojstva koriste zadane vrijednosti. Postavljamo pozivom process.GetAnnotation("Import pandas"), koji za vrijeme izvođenja vraća komentar nakon što je izvršena zamjena varijable. Uostalom kod import pandas as pd bit će proslijeđeno Pythonu. GetAnnotation može biti korisno za dobivanje Python skripti s više redaka, ali nema ograničenja za ovu metodu dobivanja koda. Možete postaviti svojstvo Code na bilo koji vama prikladan način.

Dobivanje varijabli

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

Python Gateway u InterSystems IRIS

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

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

Rezultate možemo vidjeti u Visual Traceu:

Python Gateway u InterSystems IRIS

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

Prijenos podataka

Zatim, razgovarajmo o prijenosu podataka iz InterSystems IRIS u Python; svi zahtjevi za prijenos podataka implementiraju sučelje isc.py.msg.DataRequestkoji osigurava sljedeća svojstva:

  • Variable — Python varijabla u koju se upisuju podaci.
  • Type — vrsta varijable: dataframe (pandas dataframe) ili list.
  • Namespace — područje s kojeg primamo podatke. Plastična vrećica isc.py trebao biti dostupan u ovom području. Ovo može biti područje bez podrške za proizvod.

Na temelju ovog sučelja implementirane su 4 klase zahtjeva:

  • isc.py.msg.QueryRequest - postaviti svojstvo Query za slanje SQL upita.
  • isc.py.msg.ClassRequest - postaviti svojstvo Class za prosljeđivanje podataka klase.
  • isc.py.msg.TableRequest - postavljeno svojstvo Table za prijenos podataka tablice.
  • isc.py.msg.GlobalRequest - postavljeno svojstvo Global za globalni prijenos podataka.

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

Python Gateway u InterSystems IRIS

Spremanje/vraćanje Python konteksta

Konačno, možemo spremiti Python kontekst u InterSystems IRIS, da bismo to učinili poslat ćemo isc.py.msg.SaveRequest s argumentima:

  • Mask — Spremaju se samo varijable koje odgovaraju maski. Podržano * и ?, Primjer: "Data*, Figure?"... Zadano *.
  • MaxLength — Maksimalna duljina pohranjene varijable. Ako je serijalizacija varijable duža, bit će zanemarena. Postavite na 0 da biste dobili varijable bilo koje duljine. Zadano $$$MaxStringLength.
  • Name — Naziv konteksta (neobavezno).
  • Description — Opis konteksta (nije obavezno).

Povrat Ens.StringResponse с Id spremljeni kontekst. U procesu testiranja pogledajte aktivnost Save Context.

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

  • ContextId — identifikator konteksta.
  • Clear — očistite kontekst prije obnavljanja.

Jupyterova bilježnica

Jupyterova bilježnica je web aplikacija otvorenog koda koja vam omogućuje stvaranje i objavljivanje bilježnica koje sadrže kod, vizualizacije i tekst. Python Gateway omogućuje pregled i uređivanje BPL procesa u obliku Jupyter Notebooka. Imajte na umu da se trenutno koristi uobičajeni Python 3 izvršni program.

Ovo proširenje pretpostavlja da bilješke sadrže Python kod i koriste nazive aktivnosti kao prethodne naslove. Sada je moguće razvijati PythonGateway poslovne procese u Jupyter Notebooku. Evo što je moguće:

  • Kreirajte nove poslovne procese
  • Brisanje poslovnih procesa
  • Kreirajte nove aktivnosti
  • Promijenite aktivnosti
  • Brisanje aktivnosti

ovdje je demo video. I nekoliko snimaka zaslona:

Istraživač procesa

Python Gateway u InterSystems IRIS

Uređivač procesa

Python Gateway u InterSystems IRIS

Instalacija

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

Документация.

Zaključci

MLToolkit je skup alata čiji je cilj kombinirati modele i transakcijsko okruženje tako da se izgrađeni modeli mogu lako koristiti izravno u vašim poslovnim procesima. Python Gateway je dio MLToolkita i pruža integraciju s jezikom Python, omogućujući vam da orkestrirate sve algoritme strojnog učenja stvorene u Pythonu (glavno okruženje za mnoge Data Scientists), koristite brojne gotove knjižnice za brzo stvaranje prilagodljive, robotske analitičke AI / ML rješenja na InterSystems platformi IRIS.

reference

MLToolkit

Korisnička grupa MLToolkit privatno je GitHub spremište stvoreno kao dio korporativne GitHub organizacije InterSystems. Namijenjen je vanjskim korisnicima koji instaliraju, uče ili već koriste MLToolkit komponente, uključujući Python Gateway. Grupa ima niz implementiranih slučajeva (s izvornim kodom i testnim podacima) u područjima marketinga, proizvodnje, medicine i mnogih drugih industrija. Da biste se pridružili korisničkoj grupi ML Toolkit, pošaljite kratku e-poruku na sljedeću adresu: [e-pošta zaštićena] i uključite sljedeće podatke u svoje pismo:

  • GitHub korisničko ime
  • Organizacija (radite ili studirate)
  • Položaj (vaš stvarni položaj u vašoj organizaciji, bilo "Student" ili "Neovisni").
  • Zemlja

Za one koji su pročitali članak i zainteresirani su za mogućnosti InterSystems IRIS-a kao platforme za razvoj ili hosting motora za umjetnu inteligenciju i strojno učenje, pozivamo vas da razgovarate o mogućim scenarijima koji su od interesa za vaše poduzeće. Rado ćemo analizirati potrebe Vaše tvrtke i zajedno utvrditi akcijski plan; Kontakt adresa e-pošte našeg AI/ML stručnog tima – [e-pošta zaštićena].

Izvor: www.habr.com

Dodajte komentar