Python Gateway në InterSystems IRIS

Ky artikull ka të bëjë me Python Gateway, një projekt i komunitetit me burim të hapur për platformën e të dhënave InterSystems IRIS. Ky projekt ju lejon të orkestroni çdo algoritëm të mësimit të makinerisë të krijuar në Python (mjedisi kryesor për shumë shkencëtarë të të dhënave), të përdorni biblioteka të shumta të gatshme për të krijuar shpejt zgjidhje adaptive, robotike analitike AI / ML në platformën InterSystems IRIS. Në këtë artikull, unë do të tregoj se si InterSystems IRIS mund të orkestrojë proceset në Python, të komunikojë me efikasitet të dhëna të dyanshme dhe të krijojë procese inteligjente biznesi.

plan

  1. Hyrje.
  2. Mjetet.
  3. Instalimit.
  4. API.
  5. Ndërveprueshmëria.
  6. Fletore Jupyter.
  7. Përfundime.
  8. Lidhjet.
  9. MLToolkit.

Paraqitje

Python është një gjuhë programimi e nivelit të lartë, me qëllim të përgjithshëm që synon të përmirësojë produktivitetin e zhvilluesve dhe lexueshmërinë e kodit. Në këtë seri artikujsh, unë do të diskutoj mundësitë e përdorimit të Python në platformën InterSystems IRIS, me fokusin kryesor të këtij artikulli përdorimin e Python si një gjuhë për krijimin dhe drejtimin e modeleve të mësimit të makinerive.

Mësimi i makinerisë (ML) është një klasë e metodave të inteligjencës artificiale, tipari karakteristik i së cilës nuk është zgjidhja e drejtpërdrejtë e një problemi, por mësimi në procesin e zgjidhjes së shumë problemeve të ngjashme.

Algoritmet dhe modelet e mësimit të makinerisë po bëhen më të zakonshme. Ka shumë arsye për këtë, por gjithçka varet nga aksesueshmëria, thjeshtësia dhe arritja e rezultateve praktike. A është grupimi apo edhe modelimi i rrjeteve nervore një teknologji e re?

Sigurisht që jo, por në ditët e sotme nuk ka nevojë të shkruhen qindra mijëra rreshta kodi për të ekzekutuar një model të vetëm, dhe kostoja e krijimit dhe përdorimit të modeleve po bëhet gjithnjë e më pak.

Mjetet po evoluojnë - ndërsa ne nuk kemi mjete AI/ML plotësisht të përqendruara në GUI, progresi që kemi parë me shumë klasa të tjera të sistemeve të informacionit, si BI (nga shkrimi i kodit deri te përdorimi i kornizave dhe zgjidhjeve të konfigurueshme me qendër GUI), është vërehet edhe në mjetet për krijimin e AI/ML. Tashmë kemi kaluar fazën e shkrimit të kodit dhe sot përdorim korniza për të ndërtuar dhe trajnuar modele.

Përmirësime të tjera, të tilla si aftësia për të shpërndarë një model të trajnuar paraprakisht, ku përdoruesi përfundimtar thjesht duhet të përfundojë trajnimin e modelit mbi të dhënat e tij specifike, gjithashtu e bëjnë më të lehtë fillimin me mësimin e makinerive. Këto përparime e bëjnë mësimin e makinerisë shumë më të lehtë si për profesionistët ashtu edhe për kompanitë në përgjithësi.

Nga ana tjetër, ne po mbledhim gjithnjë e më shumë të dhëna. Me një platformë të unifikuar të të dhënave si InterSystems IRIS, i gjithë ky informacion mund të përgatitet menjëherë dhe të përdoret si hyrje në modelet e mësimit të makinerive.

Me kalimin në cloud, nisja e projekteve AI/ML po bëhet më e lehtë se kurrë. Ne mund të konsumojmë vetëm burimet që na nevojiten. Për më tepër, falë paralelizimit të ofruar nga platformat cloud, ne mund të kursejmë kohën e shpenzuar.

Por çfarë ndodh me rezultatet? Këtu gjërat bëhen më të ndërlikuara. Ka shumë mjete për ndërtimin e modeleve, të cilat do t'i diskutoj në vijim. Ndërtimi i një modeli të mirë nuk është i lehtë, por çfarë më pas? Marrja e një fitimi nga përdorimi i një modeli biznesi është gjithashtu një detyrë jo e parëndësishme. Rrënja e problemit është ndarja e ngarkesave analitike dhe transaksionale të punës dhe modeleve të të dhënave. Kur trajnojmë një model, zakonisht e bëjmë atë në bazë të të dhënave historike. Por vendi për modelin e ndërtuar është në përpunimin e të dhënave transaksionale. Çfarë dobie ka modeli më i mirë i zbulimit të transaksioneve mashtruese nëse e drejtojmë një herë në ditë? Mashtruesit janë larguar prej kohësh me paratë. Ne duhet ta trajnojmë modelin mbi të dhënat historike, por gjithashtu duhet ta zbatojmë atë në kohë reale në të dhënat e reja hyrëse, në mënyrë që proceset tona të biznesit të mund të veprojnë sipas parashikimeve të bëra nga modeli.

Paketa e veglave ML është një grup mjetesh që synojnë të bëjnë pikërisht këtë: unifikimin e modeleve dhe një mjedis transaksioni në mënyrë që modelet e ndërtuara të mund të përdoren lehtësisht drejtpërdrejt në proceset e biznesit tuaj. Python Gateway është pjesë e ML Toolkit dhe ofron integrim me gjuhën Python (ngjashëm me mënyrën se si R Gateway, duke qenë pjesë e ML Toolkit ofron integrim me gjuhën R).

mjete

Përpara se të vazhdojmë, do të doja të përshkruaj disa mjete dhe biblioteka të Python që do t'i përdorim më vonë.

Teknologji

  • Python është një gjuhë programimi e interpretuar, e nivelit të lartë, me qëllime të përgjithshme. Avantazhi kryesor i gjuhës është biblioteka e saj e madhe e bibliotekave matematikore, ML dhe AI. Ashtu si ObjectScript, ajo është një gjuhë e orientuar nga objekti, por gjithçka përcaktohet në mënyrë dinamike dhe jo statike. Gjithashtu çdo gjë është një objekt. Artikujt e mëvonshëm supozojnë një njohje kalimtare me gjuhën. Nëse dëshironi të filloni të mësoni, ju rekomandoj të filloni me dokumentacionin.
  • Për ushtrimet tona të mëvonshme, vendosni Python 3.6.7 64 bit.
  • IDE: Unë përdor PyCharm, por në përgjithësi ato много. Nëse përdorni Atelier, ekziston një shtojcë Eclipse për zhvilluesit e Python. Nëse jeni duke përdorur VS Code, ekziston një shtesë për Python.
  • Notebook: Në vend të një IDE, ju mund të shkruani dhe ndani skriptet tuaja në fletore online. Më e popullarizuara prej tyre është Jupiteri.

Bibliotekat

Këtu është një listë (jo shteruese) e bibliotekave të mësimit të makinerisë:

  • Me gunga - një paketë themelore për llogaritjet e sakta.
  • Pandas — strukturat e të dhënave me performancë të lartë dhe mjetet e analizës së të dhënave.
  • matplotlib - krijimi i grafikëve.
  • I lindur në det — vizualizimi i të dhënave bazuar në matplotlib.
  • Mësoj — metodat e mësimit të makinerive.
  • XGBoost — Algoritmet e mësimit të makinerive brenda kornizës së metodologjisë së rritjes së gradientit.
  • Gensim - NLP.
  • Keras - rrjetet nervore.
  • Rrjedhja e tensionit — një platformë për krijimin e modeleve të mësimit të makinerive.
  • PyTorch është një platformë për krijimin e modeleve të mësimit të makinerive, e fokusuar në Python.
  • Një gjarper - PMML nga modele të ndryshme.

Teknologjitë AI/ML e bëjnë biznesin më efikas dhe më të adaptueshëm. Për më tepër, sot këto teknologji po bëhen më të lehta për t'u zhvilluar dhe zbatuar. Filloni të mësoni rreth teknologjive AI/ML dhe se si ato mund ta ndihmojnë organizatën tuaj të rritet.

Instalim

Ka disa mënyra për të instaluar dhe përdorur Python Gateway:

  • sistemit operativ
    • Dritaret
    • Linux
    • mushama
  • prerës
    • Përdorni një imazh nga DockerHub
    • Krijoni pamjen tuaj

Pavarësisht nga mënyra e instalimit, do t'ju duhet kodi burimor. Vendi i vetëm për të shkarkuar kodin është faqja e publikimeve. Ai përmban lëshime të qëndrueshme të testuara, thjesht merrni atë më të fundit. Për momentin është 0.8, por me kalimin e kohës do të ketë të reja. Mos e klononi/shkarkoni depon, shkarkoni versionin më të fundit.

sistemit operativ

Nëse po instaloni Python Gateway në një sistem operativ, atëherë së pari (pavarësisht nga sistemi operativ) duhet të instaloni Python. Për këtë:

  1. Instaloni Python 3.6.7 64 bit. Rekomandohet të instaloni Python në drejtorinë e paracaktuar.
  2. Instaloni modulin dill: pip install dill.
  3. Shkarkoni kodin ObjectScript (d.m.th. do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) në çdo zonë me produkte. Në rast se dëshironi që një zonë ekzistuese të mbështesë produktet, ekzekutoni: write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. Vend thirrje DLL/SO/DYLIB në dosje bin shembullin tuaj InterSystems IRIS. Skedari i bibliotekës duhet të jetë i disponueshëm në shtegun e kthyer write ##class(isc.py.Callout).GetLib().

Dritaret

  1. Sigurohuni që variabla e mjedisit PYTHONHOME tregon për Python 3.6.7.
  2. Sigurohuni që ndryshorja e mjedisit të sistemit është PATH përmban një variabël PYTHONHOME (ose drejtoria ku tregon).

Linux (Debian/Ubuntu)

  1. Kontrolloni që ndryshorja e mjedisit është PATH ai përmban /usr/lib и /usr/lib/x86_64-linux-gnu. Përdor skedarin /etc/environment për të vendosur variablat e mjedisit.
  2. Në rast gabimesh undefined symbol: _Py_TrueStruct vendosni cilësimin PythonLib. gjithashtu në README ekziston një seksion për zgjidhjen e problemeve.

mushama

  1. Aktualisht vetëm Python 3.6.7 mbështetet python.org. Kontrolloni variablin PATH.

Nëse keni ndryshuar variablat e mjedisit, rinisni produktin tuaj InterSystems.

prerës

Përdorimi i kontejnerëve ka një sërë përparësish:

  • Transportueshmëria
  • efikasitet
  • Izolimi
  • Lehtësia
  • Pandryshueshmëria

Shikoni këtë seri artikujsh për më shumë informacion rreth përdorimit të Docker me produktet InterSystems.

Të gjitha ndërtimet e Python Gateway janë aktualisht të bazuara në kontejnerë 2019.4.

Imazhi gati

Vraponi: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latestpër të shkarkuar dhe ekzekutuar Python Gateway me InterSystems IRIS Community Edition. Kjo eshte e gjitha.

Krijoni pamjen tuaj

Për të ndërtuar një imazh docker, ekzekutoni në rrënjën e depove: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
Si parazgjedhje, imazhi është ndërtuar bazuar në imazhin store/intersystems/iris-community:2019.4.0.383.0, megjithatë mund ta ndryshoni këtë duke vendosur një variabël IMAGE.
Për të ndërtuar nga InterSystems IRIS, ekzekutoni: `docker build --build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 --force-rm --tag intersystemscommunity/irispy:latest ".

Pas kësaj, mund të ekzekutoni imazhin e dokerit:

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

Nëse po përdorni një imazh të bazuar në InterSystems IRIS Community Edition, mund ta hiqni tastin.

Komente

  • Procesi i testimit isc.py.test.Process ruan një numër imazhesh në një drejtori të përkohshme. Ju mund të dëshironi ta ndryshoni këtë shteg në drejtorinë e montuar. Për ta bërë këtë, modifikoni cilësimin WorkingDir duke specifikuar direktorinë e montuar.
  • Për të hyrë në ekzekutimin e terminalit: docker exec -it irispy sh.
  • Qasja në Portalin e Menaxhimit të Sistemit duke u identifikuar SuperUser/SYS.
  • Për të ndaluar kontejnerin, drejtoni: docker stop irispy && docker rm --force irispy.

Verifikimi i instalimit

Pasi të keni instaluar Python Gateway, ia vlen të kontrolloni nëse funksionon. Ekzekutoni këtë kod në terminalin InterSystems IRIS:

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

Rezultati duhet të jetë: HELLO — Vlera e ndryshores Python x. Nëse statusi i kthimit sc është një gabim ose var bosh, kontrollo Readme - Seksioni i zgjidhjes së problemeve.

API

Python Gateway është instaluar dhe ju keni verifikuar që funksionon. Është koha për të filluar përdorimin e tij!
Ndërfaqja kryesore për Python është isc.py.Main. Ai ofron grupet e mëposhtme të metodave (të gjitha kthehen %Status):

  • Ekzekutimi i kodit
  • Transferimi i të dhënave
  • Filiali

Ekzekutimi i kodit

Këto metoda ju lejojnë të ekzekutoni kodin arbitrar të Python.

SimpleString

SimpleString - kjo është metoda kryesore. Ajo merr 4 argumente opsionale:

  • code - rreshti i kodit për të ekzekutuar. Karakteri i furnizimit të linjës: $c(10).
  • returnVariable — emri i ndryshores për t'u kthyer.
  • serialization - si të serializohet returnVariable. 0 - vargu (i parazgjedhur), 1 - repr.
  • result — Referenca ByRef për ndryshoren në të cilën është shkruar vlera returnVariable.

Më sipër bëmë:

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

Në këtë shembull, ne i caktojmë një ndryshore Python x vlerë Hello dhe duan të kthejnë vlerën e një ndryshoreje Python x në një ndryshore ObjectScript var.

Ekzekutimi i Kodit

ExecuteCode është një alternativë më e sigurt dhe më pak kufizuese SimpleString.
Linjat në platformën InterSystems IRIS janë të kufizuara në 3 karaktere dhe nëse dëshironi të ekzekutoni një pjesë më të gjatë të kodit, duhet të përdorni threads.
Pranohen dy argumente:

  • code - një linjë ose rrjedhë e kodit Python që do të ekzekutohet.
  • variable — (opsionale) cakton rezultatin e ekzekutimit code këtë variabël Python.

Shembull për t'u përdorur:

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

Në këtë shembull, ne shumëzojmë 2 me 3 dhe shkruajmë rezultatin në një variabël Python y.

Transferimi i të dhënave

Kaloni të dhënat në dhe nga Python.

Python -> InterSystems IRIS

Ka 4 mënyra për të marrë vlerën e një variabli Python në InterSystems IRIS, në varësi të serializimit që ju nevojitet:

  • String për lloje të thjeshta të dhënash dhe korrigjim.
  • Repr për ruajtjen e objekteve të thjeshta dhe korrigjimin e gabimeve.
  • JSON për manipulim të lehtë të të dhënave në anën InterSystems IRIS.
  • Pickle për të ruajtur objektet.

Këto metoda ju lejojnë të rikuperoni variablat nga Python si një varg ose rrjedhje.

  • GetVariable(variable, serialization, .stream, useString) - marr serialization e ndryshueshme variable в stream. nëse useString është 1 dhe serializimi vendoset në një varg, pastaj kthehet një varg dhe jo një rrymë.
  • GetVariableJson(variable, .stream, useString) — merrni serializimin JSON të një ndryshoreje.
  • GetVariablePickle(variable, .stream, useString, useDill) -merr serializimin Pickle (ose Dill) të një ndryshoreje.

Le të përpiqemi të marrim variablin tonë y.

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

InterSystems IRIS -> Python

Ngarkimi i të dhënave nga InterSystems IRIS në Python.

  • ExecuteQuery(query, variable, type, namespace) - krijon një grup të dhënash (pandas dataframe ose list) nga pyetësori sql dhe e vendos atë në një variabël Python variable. Qese plastike isc.py duhet të jetë në dispozicion në zonë namespace — kërkesa do të ekzekutohet aty.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) - ngarkon të dhënat globale global nga nënshkrimi start tek end në Python si një variabël tipi type: list, ose panda dataframe. Përshkrimi i argumenteve opsionale mask labels në dispozicion në dokumentacionin dhe depon e klasës Dokumentet e transferimit të të dhënave.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) - ngarkon të dhënat e klasës class nga id start tek end në Python si një variabël tipi type: list, ose panda dataframe. properties — një listë (e ndarë me presje) e vetive të klasës që duhet të ngarkohen në grupin e të dhënave. Maska të mbështetura * и ?. e parazgjedhur - * (të gjitha pronat). Prona %%CLASSNAME injoruar.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) - ngarkon të dhënat e tabelës table nga id start tek end në Python.

ExecuteQuery — universale (çdo pyetje e saktë SQL do t'i kalohet Python-it). Megjithatë, ExecuteGlobal dhe mbështjellësit e saj ExecuteClass и ExecuteTable punoni me një sërë kufizimesh. Ata janë shumë më të shpejtë (3-5 herë më shpejt se shoferi ODBC dhe 20 herë më i shpejtë ExecuteQuery). Më shumë informacion në Dokumentet e transferimit të të dhënave.
Të gjitha këto metoda mbështesin transferimin e të dhënave nga çdo zonë. Qese plastike isc.py duhet të jetë i disponueshëm në zonën e synuar.

ExecuteQuery

ExecuteQuery(request, variable, type, namespace) — transferimi i rezultateve të çdo pyetjeje të saktë SQL në Python. Kjo është metoda më e ngadaltë e transferimit të të dhënave. Përdoreni nëse ExecuteGlobal dhe mbështjellësit e tij nuk janë të disponueshëm.

Argumentet:

  • query - pyetje sql.
  • variable - emri i ndryshores Python në të cilën janë shkruar të dhënat.
  • type - list ose Pandat dataframe.
  • namespace - zona në të cilën do të ekzekutohet kërkesa.

ExecuteGlobal

ExecuteGlobal(global, variable, type, start, end, mask, labelels, namespace) - kalimi i një globale në Python.

Argumentet:

  • global - emër global pa ^
  • variable - emri i ndryshores Python në të cilën janë shkruar të dhënat.
  • type - list ose Pandat dataframe.
  • start - nënshkrimi i parë i globalit. Domosdoshmërisht %Integer.
  • end - nënshkrimi i fundit i globales. Domosdoshmërisht %Integer.
  • mask - maskë e vlerës globale. Maska mund të jetë më e shkurtër se numri i fushave në globale (në këtë rast fushat në fund do të anashkalohen). Si të formatoni një maskë:
    • + kaloni vlerën ashtu siç është.
    • - kapërceje vlerën.
    • b - Lloji Boolean (0 - False, të gjitha të tjerat - True).
    • d — Data (nga $horolog, në Windows nga viti 1970, në Linux nga viti 1900).
    • t — Koha ($horolog, sekonda pas mesnate).
    • m — Vula kohore (vargu i formatit VIT-MUAJ-DITË ORA:MINUTE:SECOND).
  • labels — %Lista e emrave të kolonave. Elementi i parë është emri i nënshkrimit.
  • namespace - zona në të cilën do të ekzekutohet kërkesa.

ExecuteClass

Mbështilleni ExecuteGlobal. Bazuar në përcaktimin e klasës, përgatit një thirrje ExecuteGlobal dhe e thërret atë.

ExecuteClass(class, variable, type, start, end, properties, namespace) - kalimi i të dhënave të klasës në Python.

Argumentet:

  • class - emri i klasës
  • variable - emri i ndryshores Python në të cilën janë shkruar të dhënat.
  • type - list ose Pandat dataframe.
  • start — ID-ja e fillimit.
  • end - ID përfundimtare
  • properties — një listë (e ndarë me presje) e vetive të klasës që duhet të ngarkohen në grupin e të dhënave. Maska të mbështetura * и ?. e parazgjedhur - * (të gjitha pronat). Prona %%CLASSNAME injoruar.
  • namespace - zona në të cilën do të ekzekutohet kërkesa.

Të gjitha vetitë kalohen siç janë përveç tipareve të tipit %Date, %Time, %Boolean и %TimeStamp - ato konvertohen në klasat përkatëse Python.

Ekzekutimi Tabela

Mbështilleni ExecuteClass. Përkthen emrin e tabelës në emrin e klasës dhe thërret ExecuteClass. Nënshkrimi:

ExecuteTable(table, variable, type, start, end, properties, namespace) - kalimi i të dhënave të tabelës në Python.

Argumentet:

  • table - emri i tabelës.
    Të gjitha argumentet e tjera kalohen siç janë ExecuteClass.

Vërejtje

  • ExecuteGlobal, ExecuteClass и ExecuteTable punoni po aq shpejt.
  • ExecuteGlobal 20 herë më shpejt se ExecuteQuery në grupe të mëdha të dhënash (koha e transferimit >0.01 sekonda).
  • ExecuteGlobal, ExecuteClass и ExecuteTable punoni në globalët me këtë strukturë: ^global(key) = $lb(prop1, prop2, ..., propN) ku key - një numër i plotë.
  • Për ExecuteGlobal, ExecuteClass и ExecuteTable gamën e mbështetur të vlerave %Date korrespondon me diapazonin mktime dhe varet nga OS (dritaret: 1970-01-01, linux 1900-01-01, mushama). Përdorni %TimeStamppër të transferuar të dhëna jashtë këtij diapazoni ose për të përdorur kornizën e të dhënave të pandas sepse ky është një kufizim vetëm në listë.
  • Për ExecuteGlobal, ExecuteClass и ExecuteTable të gjitha argumentet përveç burimit të të dhënave (global, klasë ose tabelë) dhe ndryshore janë opsionale.

shembuj

Klasa testuese isc.py.test.Person përmban një metodë që demonstron të gjitha opsionet e transferimit të të dhënave:

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)

Thirrni metodën do ##class(isc.py.test.Person).Test() për të parë se si funksionojnë të gjitha metodat e transferimit të të dhënave.

Metodat ndihmëse

  • GetVariableInfo(variable, serialization, .defined, .type, .length) — merrni informacion në lidhje me variablin: nëse është i përcaktuar, klasën e tij dhe gjatësinë e serializimit.
  • GetVariableDefined(variable, .defined) — nëse ndryshorja është e përcaktuar.
  • GetVariableType(variable, .type) — merrni klasën e ndryshores.
  • GetStatus() - merrni dhe hiqni përjashtimin e fundit në anën e Python.
  • GetModuleInfo(module, .imported, .alias) — merrni variablin e modulit dhe statusin e importit.
  • GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments) — merrni informacion rreth funksionit.

Ndërveprimi

Ju keni mësuar se si të telefononi Python Gateway nga terminali, tani le të fillojmë ta përdorim atë në prodhim. Baza për të bashkëvepruar me Python në këtë mënyrë është isc.py.ens.Operation. Na lejon:

  • Ekzekutoni kodin në Python
  • Ruaj/Rivendo kontekstin e Python
  • Ngarkoni dhe merrni të dhëna nga Python

Në thelb, një operacion Python është një mbështjellës isc.py.Main. Operacioni isc.py.ens.Operation ofron mundësinë për të bashkëvepruar me procesin Python nga produktet InterSystems IRIS. Janë mbështetur pesë pyetje:

  • isc.py.msg.ExecutionRequest për të ekzekutuar kodin Python. Kthimet isc.py.msg.ExecutionResponse me rezultatin e ekzekutimit dhe vlerat e variablave të kërkuar.
  • isc.py.msg.StreamExecutionRequest për të ekzekutuar kodin Python. Kthimet isc.py.msg.StreamExecutionResponse rezultati i ekzekutimit dhe vlerat e variablave të kërkuar. Analoge isc.py.msg.ExecutionRequest, por pranon dhe kthen transmetime në vend të vargjeve.
  • isc.py.msg.QueryRequest për të transmetuar rezultatin e ekzekutimit të një pyetjeje SQL. Kthimet Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest për kalimin e të dhënave globale/klase/tabele. Kthimet Ens.Response.
  • isc.py.msg.SaveRequest për të ruajtur kontekstin e Python. Kthimet Ens.StringResponse me ID-në e kontekstit.
  • isc.py.msg.RestoreRequest për të rivendosur kontekstin Python.

    Përveç kësaj, isc.py.ens.Operation ka dy cilësime:

    • Initializer — zgjedhjen e një klase që zbaton ndërfaqen isc.py.init.Abstract. Mund të përdoret për të ngarkuar funksione, module, klasa, etj. Ai ekzekutohet një herë kur fillon procesi.
    • PythonLib - (Vetëm Linux) nëse shihni gabime gjatë ngarkimit, vendosni vlerën e tij në libpython3.6m.so apo edhe në rrugën e plotë drejt bibliotekës Python.

Krijimi i proceseve të biznesit

Ekzistojnë dy klasa në dispozicion që lehtësojnë zhvillimin e proceseve të biznesit:

  • isc.py.ens.ProcessUtils ju lejon të nxirrni shënime nga aktivitetet me zëvendësim të ndryshoreve.
  • isc.py.util.BPEmulator e bën të lehtë testimin e proceseve të biznesit me Python. Mund të ekzekutojë një proces biznesi (pjesë Python) në procesin aktual.

Zëvendësimi i variablave

Të gjitha proceset e biznesit të trashëguara nga isc.py.ens.ProcessUtils, mund të përdorë metodën GetAnnotation(name) për të marrë vlerën e shënimit të aktivitetit me emrin e saj. Shënimi i aktivitetit mund të përmbajë variabla që do të llogariten në anën InterSystems IRIS përpara se të kalohen te Python. Këtu është sintaksa për zëvendësimin e variablave:

  • ${class:method:arg1:...:argN} - thirrja e metodës
  • #{expr} - ekzekutoni kodin në gjuhën ObjectScript.

Një shembull është i disponueshëm në procesin e testimit të biznesit isc.py.test.Process, për shembull, në aktivitet Correlation Matrix: Graph: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). Në këtë shembull:

  • #{process.WorkDirectory} kthen vetinë WorkDirectory të objektit process, e cila është një shembull i klasës isc.py.test.Process ato. procesi aktual i biznesit.
  • ${%PopulateUtils:Integer:1:100} quan një metodë Integer klasë %PopulateUtils, duke kaluar argumente 1 и 100, duke kthyer një numër të plotë të rastësishëm në interval 1...100.

Testoni procesin e biznesit

Produktet e testimit dhe proceset e testimit të biznesit janë të disponueshme si parazgjedhje si pjesë e Portës së Python. Për t'i përdorur ato:

  1. Në terminalin OS, ekzekutoni: pip install pandas matplotlib seaborn.
  2. Në terminalin IRIS InterSystems, ekzekutoni: do ##class(isc.py.test.CannibalizationData).Import() për të plotësuar të dhënat e testit.
  3. Lansoni produkte isc.py.test.Production.
  4. Lloji i kërkesës për dërgim Ens.Request в isc.py.test.Process.

Le të shohim se si funksionojnë të gjitha së bashku. Hapur isc.py.test.Process në redaktorin e BPL:

Python Gateway në InterSystems IRIS

Ekzekutimi i kodit

Sfida më e rëndësishme është ekzekutimi i kodit Python:

Python Gateway në InterSystems IRIS

Pyetja e përdorur isc.py.msg.ExecutionRequest, këtu janë vetitë e tij:

  • Code - Kodi Python.
  • SeparateLines — nëse do të ndahet kodi në rreshta për ekzekutim. $c(10) (n) përdoret për të ndarë vargjet. Ju lutemi vini re se NUK rekomandohet përpunimi i të gjithë mesazhit menjëherë, ky funksion synohet vetëm të përpunohet def dhe shprehje të ngjashme me shumë rreshta. E paracaktuar 0.
  • Variables — një listë e variablave të ndarë me presje që do t'i shtohen përgjigjes.
  • Serialization — Si të serializojmë variablat që duam të kthejmë. Opsione: Str, Repr, JSON, Pickle и Dill, i paracaktuar Str.

Në rastin tonë, ne vendosim vetëm pronën Code, kështu që të gjitha vetitë e tjera përdorin vlerat e paracaktuara. E vendosëm duke telefonuar process.GetAnnotation("Import pandas"), i cili në kohën e ekzekutimit kthen një shënim pasi është kryer zëvendësimi i ndryshores. Në fund të fundit, kodi import pandas as pd do t'i kalohet Python. GetAnnotation mund të jetë i dobishëm për marrjen e skripteve Python me shumë rreshta, por nuk ka kufizime në këtë metodë të marrjes së kodit. Ju mund të vendosni pronën Code në çdo mënyrë të përshtatshme për ju.

Marrja e variablave

Një tjetër sfidë interesante duke përdorur isc.py.msg.ExecutionRequest - Correlation Matrix: Tabular:

Python Gateway në InterSystems IRIS

Ai llogarit Matricën e Korrelacionit në anën e Python dhe nxjerr variablin corrmat kthehu te InterSystems IRIS në formatin JSON duke vendosur vetitë e kërkesës:

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

Ne mund t'i shohim rezultatet në Visual Trace:

Python Gateway në InterSystems IRIS

Dhe nëse na duhet kjo vlerë në BP, mund ta marrim si kjo: callresponse.Variables.GetAt("corrmat").

Transferimi i të dhënave

Më pas, le të flasim për transferimin e të dhënave nga InterSystems IRIS në Python; të gjitha kërkesat për transferimin e të dhënave zbatojnë ndërfaqen isc.py.msg.DataRequesti cili ofron vetitë e mëposhtme:

  • Variable - një variabël Python në të cilin shkruhen të dhënat.
  • Type - Lloji i ndryshores: dataframe (korniza e të dhënave panda) ose list.
  • Namespace — zona nga e cila marrim të dhënat. Qese plastike isc.py duhet të jenë të disponueshme në këtë zonë. Kjo mund të jetë një zonë pa mbështetje produkti.

Bazuar në këtë ndërfaqe, zbatohen 4 klasa kërkesash:

  • isc.py.msg.QueryRequest - vendosni pronën Query për të dërguar një pyetje SQL.
  • isc.py.msg.ClassRequest - vendosni pronën Class për të kaluar të dhënat e klasës.
  • isc.py.msg.TableRequest - vendos veti Table për të transferuar të dhënat e tabelës.
  • isc.py.msg.GlobalRequest - vendos veti Global për transferimin global të të dhënave.

Në procesin e testimit, shikoni aktivitetin RAWKu isc.py.msg.QueryRequest treguar në veprim.

Python Gateway në InterSystems IRIS

Ruajtja/Rivendosja e kontekstit të Python

Më në fund, ne mund të ruajmë kontekstin Python në InterSystems IRIS, për ta bërë këtë ne do të dërgojmë isc.py.msg.SaveRequest me argumente:

  • Mask — Ruhen vetëm variablat që përputhen me maskën. Mbështetur * и ?. Shembull: "Data*, Figure?". E paracaktuar *.
  • MaxLength — Gjatësia maksimale e variablit të ruajtur. Nëse serializimi i një ndryshoreje është më i gjatë, ai do të injorohet. Vendoseni në 0 për të marrë variabla të çdo gjatësie. E paracaktuar $$$MaxStringLength.
  • Name — Emri i kontekstit (opsionale).
  • Description — Përshkrimi i kontekstit (opsionale).

Kthehet Ens.StringResponse с Id konteksti i ruajtur. Në procesin e testimit, shikoni aktivitetin Save Context.

Kërkesa e lidhur isc.py.msg.RestoreRequest ngarkon kontekstin nga InterSystems IRIS në Python:

  • ContextId — identifikuesi i kontekstit.
  • Clear — pastroni kontekstin përpara se të rivendosni.

Fletore Jupyter

Fletore Jupyter është një aplikacion ueb me burim të hapur që ju lejon të krijoni dhe publikoni fletore që përmbajnë kod, vizualizim dhe tekst. Python Gateway ju lejon të shikoni dhe modifikoni proceset BPL në formën e një Notebook Jupyter. Ju lutemi vini re se ekzekutuesi normal i Python 3 përdoret aktualisht.

Kjo shtesë supozon se shënimet përmbajnë kodin Python dhe përdor emrat e aktiviteteve si tituj të mëparshëm. Tani është e mundur të zhvillohen proceset e biznesit PythonGateway në Jupyter Notebook. Ja çfarë është e mundur:

  • Krijoni procese të reja biznesi
  • Fshi proceset e biznesit
  • Krijoni aktivitete të reja
  • Ndryshoni aktivitetet
  • Fshi aktivitetet

Këtu video demo. Dhe disa pamje nga ekrani:

Proces Explorer

Python Gateway në InterSystems IRIS

Redaktori i procesit

Python Gateway në InterSystems IRIS

Instalim

  1. Do t'ju duhet InterSystems IRIS 2019.2+.
  2. Instaloni PythonGateway v0.8+ (vetëm kërkohet isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints и isc.py.ens.ProcessUtils).
  3. Përditësoni kodin ObjectScript nga depoja.
  4. Ekzekutuar do ##class(isc.py.util.Jupyter).Install() dhe ndiqni udhëzimet.

Records.

Gjetjet

MLToolkit është një grup mjetesh qëllimi i të cilave është të kombinojë modelet dhe një mjedis transaksional në mënyrë që modelet e ndërtuara të mund të përdoren lehtësisht drejtpërdrejt në proceset e biznesit tuaj. Python Gateway është pjesë e MLToolkit dhe ofron integrim me gjuhën Python, duke ju lejuar të orkestroni çdo algoritëm të mësimit të makinës të krijuar në Python (mjedisi kryesor për shumë shkencëtarë të të dhënave), të përdorni biblioteka të shumta të gatshme për të krijuar shpejt AI analitike adaptive, robotike / Zgjidhjet ML në platformën InterSystems IRIS.

Referencat

MLToolkit

Grupi i përdoruesve MLToolkit është një depo private GitHub e krijuar si pjesë e organizatës GitHub të korporatës InterSystems. Ai është menduar për përdoruesit e jashtëm që instalojnë, mësojnë ose po përdorin tashmë komponentët MLToolkit, duke përfshirë Portën Python. Grupi ka një sërë rastesh të implementuara (me kod burim dhe të dhëna testimi) në fushat e marketingut, prodhimit, mjekësisë dhe shumë industrive të tjera. Për t'u bashkuar me Grupin e Përdoruesve të ML Toolkit, ju lutemi dërgoni një email të shkurtër në adresën e mëposhtme: [email mbrojtur] dhe përfshini informacionin e mëposhtëm në letrën tuaj:

  • Emri i përdoruesit të GitHub
  • Organizimi (ju punoni ose studioni)
  • Pozicioni (pozicioni juaj aktual në organizatën tuaj, ose "Student" ose "I pavarur").
  • Vend

Për ata që e kanë lexuar artikullin dhe janë të interesuar për aftësitë e InterSystems IRIS si një platformë për zhvillimin ose pritjen e motorëve të inteligjencës artificiale dhe të mësimit të makinerive, ju ftojmë të diskutoni skenarë të mundshëm që janë me interes për ndërmarrjen tuaj. Ne do të jemi të lumtur të analizojmë nevojat e kompanisë suaj dhe të përcaktojmë së bashku një plan veprimi; Adresa e emailit të kontaktit të ekipit tonë të ekspertëve AI/ML – [email mbrojtur].

Burimi: www.habr.com

Shto një koment