Python Gateway InterSystems IRIS

Å is raksts ir veltÄ«ts Python Gateway — kopienas projektam ar atvērtā koda kodu datu platformai InterSystems IRIS. Å is projekts ļauj orÄ·estrēt jebkādus maŔīnmācīŔanās algoritmus, kas izstrādāti Python valodā (galvenā vide daudziem datu zinātniekiem), izmantot daudzās gatavās bibliotēkas, lai ātri izstrādātu pielāgotus, robota analÄ«tiskos AI/ML risinājumus uz InterSystems IRIS platformas. Å ajā rakstā es parādīŔu, kā InterSystems IRIS var orÄ·estrēt procesus Python valodā, efektÄ«vi nodroÅ”ināt divvirzienu datu pārsÅ«tīŔanu un radÄ«t inteliÄ£entus biznesa procesus.

Plāns

  1. Ievads.
  2. Rīki.
  3. Instalācija.
  4. API.
  5. Interoperabilitāte.
  6. Jupyter Notebook.
  7. Secinājumi.
  8. Saites.
  9. MLToolkit.

Ievads

Python ir augsta lÄ«meņa vispārējas lietoÅ”anas programmēŔanas valoda, kas vērsta uz izstrādātāja produktivitātes un koda lasāmÄ«bas paaugstināŔanu. Å ajā rakstu sērijā es pastāstīŔu par Python valodas pielietoÅ”anas iespējām InterSystems IRIS platformā, pievērÅ”oties tam, kā Python kalpo kā valoda maŔīnmācīŔanās modeļu izstrādei un pielietoÅ”anai.

MaŔīnmācīŔanās (ML) ir mākslīgā intelekta metožu klase, kuras raksturīga pazīme ir nevis tieŔa uzdevuma risināŔana, bet gan apmācība, risinot daudzus līdzīgus uzdevumus.

MaŔīnmācīŔanās algoritmi un modeļi kļūst arvien plaŔāk izmantoti. Iemeslu tam ir daudz, bet viss ir saistÄ«ts ar pieejamÄ«bu, vienkārŔību un praktisko rezultātu sasniegÅ”anu. Vai klasterizācija vai pat neironu tÄ«klu modelēŔana ir jauna tehnoloÄ£ija?

Protams, ka nē, bet Å”obrÄ«d nav nepiecieÅ”ams uzrakstÄ«t simtiem tÅ«kstoÅ”u koda rindu, lai palaistu vienu modeli, un izmaksas modeļu izstrādē un pielietoÅ”anā kļūst arvien mazākas.

RÄ«ki attÄ«stās — kamēr mums nav pilnÄ«bā GUI orientētu AI/ML rÄ«ku, tās progresu, ko mēs esam novērojuÅ”i ar daudziem citiem informācijas sistēmu veidiem, piemēram, BI (no koda rakstīŔanas lÄ«dz ietvaru un GUI orientētu konfigurējamu risinājumu izmantoÅ”anai), novērojam arÄ« AI/ML rÄ«ku izstrādē. Mēs jau esam pārvarējuÅ”i koda rakstīŔanas posmu un Å”odien izmantojam ietvarus modeļu izstrādei un apmācÄ«bai.

Citi uzlabojumi, piemēram, iespēja izplatÄ«t iepriekÅ” apmācÄ«tas modeļus, kad gala lietotājam vienkārÅ”i jāpabeidz modeļa apmācÄ«ba uz viņa specifiskajiem datiem, arÄ« atvieglo maŔīnmācīŔanās uzsākÅ”anu. Å ie sasniegumi ievērojami atvieglo maŔīnmācīŔanās apgūŔanu kā speciālistiem, tā arÄ« uzņēmumiem kopumā.

No otras puses, mēs vācam arvien vairāk datu. Pateicoties vienotai datu platformai, piemēram, InterSystems IRIS, visa Ŕī informācija var tÅ«lÄ«tēji tikt sagatavota un izmantota kā izejas dati maŔīnmācīŔanās modeļiem.

Pārejot uz mākoni, AI/ML projektu uzsākÅ”ana kļūst vieglāka nekā jebkad agrāk. Mēs varam patērēt tikai tos resursus, kas mums nepiecieÅ”ami. Turklāt, pateicoties paralelizācijai, ko piedāvā mākonÄ« balstÄ«tas platformas, mēs varam ietaupÄ«t laiku.

Bet kā ar rezultātiem? Å eit viss kļūst sarežģītāk. Ir daudz rÄ«ku modeļu izveidei, par kuriem es runāŔu tālāk. Izveidot labu modeli nav viegli, bet kas tālāk? GÅ«t peļņu no modeļa izmantoÅ”anas biznesā arÄ« nav vienkārÅ”a uzdevums. Problēmas sakne slēpjas analÄ«tisko un transakciju slodžu un datu modeļu nodalÄ«jumā. Kad mēs apmācām modeli, mēs to parasti darām uz vēsturiskajiem datiem. Taču vieta izveidotajam modelim ir transakciju datu apstrādē. Kas ir labākā krāpniecisko transakciju atklāŔanas modeļa labums, ja mēs to izpildām reizi dienā? Krāpnieki jau sen ir aizbēguÅ”i ar naudu. Mums jāapmāca modelis uz vēsturiskajiem datiem, bet mums arÄ« jāpiemēro tas reālā laikā uz jauniem ienākoÅ”ajiem datiem, lai mÅ«su biznesa procesi varētu darboties saskaņā ar modeļa veiktajiem prognozēm.

ML Toolkit ir rÄ«ku kopums, kura mērÄ·is ir tieÅ”i tas: apvienot modeļus un transakciju vidi, lai izveidotie modeļi bÅ«tu viegli izmantojami tieÅ”i jÅ«su biznesa procesos. Python Gateway ir daļa no ML Toolkit un nodroÅ”ina integrāciju ar Python valodu (analogiski tam, kā R Gateway, kas ir daļa no ML Toolkit, nodroÅ”ina integrāciju ar R valodu).

Rīku kopums

Pirms turpināŔanas es vēlētos aprakstÄ«t dažus rÄ«kus un bibliotēkas Python, kuras mēs izmantosim vēlāk.

Tehnoloģijas

  • Python ir interpretējama, augsta lÄ«meņa vispārējās nozÄ«mes programmēŔanas valoda. Galvenā valodas priekÅ”rocÄ«ba ir liela matemātisko, ML un AI bibliotēku krātuve. Tāpat kā ObjectScript, tā ir objektorientēta valoda, taču viss tiek noteikts dinamiski, nevis statiski. ArÄ« viss ir objekts. Vēlākie raksti paredz virspusēju iepazīŔanos ar valodu. Ja vēlaties sākt mācīŔanās procesu, es iesaku sākt ar dokumentācijā.
  • Lai veiktu mÅ«su turpmākos uzdevumus, instalējiet Python 3.6.7 64 bit.
  • IDE: Es izmantoju PyCharm, bet patiesÄ«bā ir daudz. Ja izmantojat Atelier, tad ir pieejams Eclipse spraudnis Python izstrādātājiem. Ja izmantojat VS Code, tad ir pieejams paplaÅ”inājums Python.
  • Notebook: vietā IDE jÅ«s varat rakstÄ«t un dalÄ«ties ar saviem skriptiem tieÅ”saistes piezÄ«mju grāmatās. Vispopulārākā no tām ir Jupyter.

Bibliotēkas

Å eit (nepilns) saraksts ar maŔīnmācīŔanās bibliotēm:

  • Numpy — fundamentāla pakete precÄ«zajiem aprēķiniem.
  • Pandas — augstas veiktspējas datu struktÅ«ras un datu analÄ«zes rÄ«ki.
  • Matplotlib — grafiku izveide.
  • Seaborn — vizualizācijas rÄ«ks, balstÄ«ts uz matplotlib.
  • Sklearn — maŔīnmācīŔanās metodes.
  • XGBoost — maŔīnmācīŔanās algoritmi gradienta palielināŔanas metodoloÄ£ijā (Gradient Boosting).
  • Gensim — NLP.
  • Keras — neironu tÄ«kli.
  • Tensorflow — platforma maŔīnmācīŔanās modeļu izveidei.
  • PyTorch — platforma maŔīnmācīŔanās modeļu izveidei, kas orientēta uz Python.
  • Nyoka — PMML no dažādiem modeļiem.

AI/ML tehnoloÄ£ijas ļauj padarÄ«t biznesu efektÄ«vāku un pielāgojamu. Turklāt Å”odien Ŕīs tehnoloÄ£ijas kļūst vieglāk izstrādājamas un Ä«stenojamas. Sāciet apgÅ«t AI/ML tehnoloÄ£ijas un to, kā tās var palÄ«dzēt jÅ«su organizācijai augt.

UzstādīŔana

Iespējamas vairākas metodes Python Gateway instalēŔanai un izmantoÅ”anai:

  • operētājsistēmu
    • Windows
    • Linux
    • Mac
  • Docker
    • Izmantojiet attēlu no DockerHub
    • Izveidojiet savu attēlu

NeatkarÄ«gi no instalācijas veida, jums bÅ«s nepiecieÅ”ams avota kods. VienÄ«gā vieta, kur lejupielādēt kodu, ir izlaidumu lapa. Tā satur pārbaudÄ«tus stabilus izlaidumus, vienkārÅ”i ņemiet pēdējo. Å obrÄ«d tas ir 0.8, bet laikam ejot, bÅ«s arÄ« jauni. Neklonējiet/neielādējiet repozitoriju, lejupielādējiet pēdējo izlaidumu.

operētājsistēmu

Ja, instalējat Python Gateway operētājsistēmā, vispirms (neatkarīgi no operētājsistēmas) jāinstalē Python. Lai to izdarītu:

  1. Instalējiet Python 3.6.7 64 bit. Ieteicams instalēt Python noklusējuma direktorijā.
  2. Instalējiet moduli dill: pip install dill.
  3. Lejupielādējiet ObjectScript kodu (t.i., do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) jebkurā jomā ar produktiem. Ja vēlaties, lai esoŔā joma atbalstÄ«tu produktus, veiciet: write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. Ievietojiet callout DLL/SO/DYLIB mapē bin jūsu InterSystems IRIS instancē. Bibliotēkas failam jābūt pieejamam ceļā, ko atgriež write ##class(isc.py.Callout).GetLib().

Windows

  1. Pārliecinieties, ka vides mainīgais PYTHONHOME norāda uz Python 3.6.7.
  2. Pārliecinieties, ka sistēmas vides mainīgais PATH satur mainīgo PYTHONHOME (vai direktoriju, uz kuru tas norāda).

Linux (Debian/Ubuntu)

  1. Pārbaudiet, vai vides mainīgais PATH ietver /usr/lib un /usr/lib/x86_64-linux-gnu. Izmantojiet failu /etc/environment lai iestatītu vides mainīgos.
  2. Ja rodas kļūdas undefined symbol: _Py_TrueStruct iestatiet iestatÄ«jumu PythonLib. ArÄ« sadaļā Readme ir sadaļa par problēmu risināŔanu.

Mac

  1. PaŔlaik atbalsta tikai Python 3.6.7 no Python.org. Pārbaudiet mainīgo PATH.

Ja esat mainījis vides mainīgos, restartējiet savu InterSystems produktu.

Docker

Konteineru izmantoŔanu pavada virkni priekŔrocību:

  • Paartraukums
  • Efektivitāte
  • Izolācija
  • Vieglums
  • NemainÄ«gums

IepazÄ«stieties ar Å”o rakstu sēriju lai iegÅ«tu sÄ«kāku informāciju par Docker izmantoÅ”anu ar InterSystems produktiem.

Visas Python Gateway versijas Ŕobrīd ir balstītas uz konteineriem 2019.4.

Gatavs attēls

Izpildiet: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latest, lai lejupielādētu un palaistu Python Gateway ar InterSystems IRIS Community Edition. Tas ir viss.

Izveidojiet savu attēlu

Lai izveidotu docker attēlu, veiciet noliktavā: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
Noklusējumā attēls tiek izveidots, pamatojoties uz attēlu store/intersystems/iris-community:2019.4.0.383.0, tomēr jūs varat to mainīt, uzstādot mainīgo IMAGE.
Lai izveidotu no InterSystems IRIS, veiciet: `docker build —build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 —force-rm —tag intersystemscommunity/irispy:latest`.

Pēc tam varat palaist docker attēlu:

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

Ja izmantojat attēlu, kas balstÄ«ts uz InterSystems IRIS Community Edition, jums var nebÅ«t nepiecieÅ”ams norādÄ«t atslēgu.

Komentāri

  • TestēŔanas process isc.py.test.Process saglabā attēlu secÄ«bu pagaidu katalogā. VarbÅ«t vēlaties mainÄ«t Å”o ceļu uz pieslēgto katalogu. Lai to izdarÄ«tu, rediģējiet iestatÄ«jumu WorkingDir norādot pieslēgto direktoriju.
  • Lai piekļūtu terminālim, izpildiet: docker exec -it irispy sh.
  • Piekļuve Sistēmas VadÄ«bas Portālam ar lietotājvārdu SuperUser/SYS.
  • Lai apturētu konteineru, izpildiet: docker stop irispy && docker rm --force irispy.

Instalācijas pārbaude

Kad esat instalējis Python Gateway, ir vērts pārbaudÄ«t, vai tas darbojas. Izpildiet Å”o kodu InterSystems IRIS terminālÄ«:

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

Rezultātā jābÅ«t izvadÄ«tas HELLO — Python mainÄ«gā vērtÄ«ba x. Ja atgrieztā statuss sc ir kļūda vai var ir tukÅ”a, pārbaudiet Readme — Problēmu novērÅ”anas sadaļu.

API

Python Gateway ir uzstādīts, un jūs esat pārliecinājuŔies, ka tas darbojas. Laiks sākt to izmantot!
Galvenais interfeiss uz Python ir isc.py.Main. Tas piedāvā Ŕādas metožu grupas (visas atgriež %Status):

  • Koda izpilde
  • Datu pārraide
  • PalÄ«gmetodes

Koda izpilde

Šīs metodes ļauj izpildīt izlasītu Python kodu.

SimpleString

SimpleString — tā ir galvenā metode. Tā pieņem 4 opciju argumentus:

  • code — kods, kas jāizpilda. Jaunās rindas simbols: $c(10).
  • returnVariable — mainÄ«gā nosaukums, kuru atgriezt.
  • serialization — kā serializēt returnVariable. 0 — string (noklusējums), 1 — repr.
  • rezultāts — ByRef atsauce uz mainÄ«go, kurā tiks ierakstÄ«ta vērtÄ«ba returnVariable.

IepriekÅ” mēs izpildÄ«jām:

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

Å ajā piemērā mēs pieŔķiram Python mainÄ«gajam x vērtÄ«ba Hello un vēlamies atgriezt Python mainÄ«gā vērtÄ«bu x ObjectScript mainÄ«gajā var.

ExecuteCode

ExecuteCode ir droŔāka un mazāk ierobežota alternatīva SimpleString.
Rindas InterSystems IRIS platformā ir ierobežotas līdz 3 641 144 simboliem, un, ja vēlaties izpildīt garāku kodu, jums jādarbina plūsmas.
Pieņem divus argumentus:

  • code — Python koda rinda vai plÅ«sma, kas jāizpilda.
  • variable — (pēc izvēles) pieŔķir izpildes rezultātu code Å”im Python mainÄ«gajam.

Piemērs izmantoÅ”anai:

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

Šajā piemērā mēs reizinām 2 ar 3 un ierakstām rezultātu Python mainīgajā y.

Datu pārraide

Pārraidiet datus Python un atpakaļ.

Python -> InterSystems IRIS

Ir 4 veidi, kā iegÅ«t Python mainÄ«gā vērtÄ«bu InterSystems IRIS, atkarÄ«bā no nepiecieÅ”amās serializācijas:

  • String vienkārÅ”u datu tipu un atkļūdoÅ”anai.
  • Repr vienkārÅ”u objektu glabāŔanai un atkļūdoÅ”anai.
  • JSON vieglai datu manipulācijai InterSystems IRIS pusē.
  • Pickle objektu saglabāŔanai.

Šīs metodes ļauj iegūt mainīgās vērtības no Python kā virknes vai plūsmas.

  • GetVariable(variable, serialization, .stream, useString) — iegÅ«t serialization mainÄ«go variable par plÅ«smaTransakcija useString ir 1 un serializācija tiek ierakstÄ«ta virknei, tad tiek atgriezta virkne, nevis plÅ«sma.
  • GetVariableJson(variable, .stream, useString) — iegÅ«t JSON serializāciju mainÄ«gajai.
  • GetVariablePickle(variable, .stream, useString, useDill) — iegÅ«t Pickle (vai Dill) serializāciju mainÄ«gajai.

Mēģināsim iegūt mūsu mainīgo. y.

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

InterSystems IRIS -> Python

Ielādējam datus no InterSystems IRIS uz Python.

  • ExecuteQuery(query, variable, type, namespace) — izveido datu kopu (pandas dataframe vai list) no SQL vaicājuma un iestata to Python mainÄ«gajā variable. Pakotne isc.py jābÅ«t pieejamai sadaļā namespace — tur tiks izpildÄ«ts vaicājums.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) — ielādē datus no globāla globāls no apakÅ”indeksa start lÄ«dz end Python kā mainÄ«gā tipa type: list, vai pandas dataframe. Opcionālo argumentu apraksts mask un labels ir pieejams klases dokumentācijā un repozitorijā Datu pārsÅ«tīŔanas dokumentācija.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) — ielādē datus no klases klase no id start lÄ«dz end Python kā mainÄ«gā tipa type: list, vai pandas dataframe. properties — saraksts (atdalÄ«tājs — komats) ar klases Ä«paŔībām, kuras jāpievieno datu kopai. Atbalsta maskas. * un ?. Noklusējuma — * (visas Ä«paŔības). ÄŖpaŔība %%CLASSNAME tiek ignorēts.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) — ielādē datus no tabulas galda no id start lÄ«dz end Python.

ExecuteQuery — universāls (jebkurÅ” derÄ«gs SQL vaicājums tiks nodots Python). Tomēr, ExecuteGlobal un tā apvērtnes ExecuteClass un ExecuteTable darbojas ar noteiktiem ierobežojumiem. Tie ir daudz ātrāki (3-5 reizes ātrāk nekā ODBC draiveris un 20 reizes ātrāk. ExecuteQuery). Papildu informācija ir Datu pārsÅ«tīŔanas dokumentācija.
Visas Ŕīs metodes atbalsta datu pārsÅ«tīŔanu no jebkuras jomas. Pakotne isc.py jābÅ«t pieejamai mērÄ·a jomā.

ExecuteQuery

ExecuteQuery(request, variable, type, namespace) — rezultātu pārsÅ«tīŔana no jebkura derÄ«ga SQL vaicājuma uz Python. Tas ir vislēnākā datu pārsÅ«tīŔanas metode. Izmantojiet to, ja ExecuteGlobal un tā apvērtnes nav pieejamas.

Argumenti:

  • vaicājums — SQL vaicājums.
  • variable — Python mainÄ«gā nosaukums, kurā tiek ierakstÄ«ti dati.
  • type — list vai Pandas dataframe.
  • namespace — joma, kurā tiks izpildÄ«ts vaicājums.

ExecuteGlobal

ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) — globāla pārsÅ«tīŔana uz Python.

Argumenti:

  • globāls — globāla nosaukums bez ^
  • variable — Python mainÄ«gā nosaukums, kurā tiek ierakstÄ«ti dati.
  • type — list vai Pandas dataframe.
  • start — globāla pirmā apakÅ”indeksa. Obligāti %Integer.
  • end — pēdējais globālās apakÅ”raksts. Objekti %Integer.
  • mask — globālās vērtÄ«bu maska. Masat var bÅ«t Ä«sāka nekā globālo lauku skaits (Å”ajā gadÄ«jumā lauki beigās tiks izlaisti). Kā formatēt masku:
    • + pārsÅ«tÄ«t vērtÄ«bu tā, kā tā ir.
    • - izlaist vērtÄ«bu.
    • b — LoÄ£iskais tips (0 — False, viss pārējais — True).
    • d — Datums (no $horolog, uz Windows no 1970, uz Linux no 1900).
    • t — Laiks ($horolog, sekundes pēc pusnakts).
    • m — Laika zÄ«mogs (gads-mēnesis-diena stunda:minÅ«te:sekunde).
  • labels — %List kolonnu nosaukumu. Pirmais elements — apakÅ”raksta nosaukums.
  • namespace — joma, kurā tiks izpildÄ«ts vaicājums.

ExecuteClass

Apmeklē ExecuteGlobal. Balstoties uz klases definīciju, sagatavo aicinājumu ExecuteGlobal un izsauc to.

ExecuteClass(class, variable, type, start, end, properties, namespace) — klases datu nodoÅ”ana Python.

Argumenti:

  • klase — klases nosaukums
  • variable — Python mainÄ«gā nosaukums, kurā tiek ierakstÄ«ti dati.
  • type — list vai Pandas dataframe.
  • start — sākuma Id.
  • end — beigu Id
  • properties — saraksts (atdalÄ«tājs — komats) ar klases Ä«paŔībām, kuras jāpievieno datu kopai. Atbalsta maskas. * un ?. Noklusējuma — * (visas Ä«paŔības). ÄŖpaŔība %%CLASSNAME tiek ignorēts.
  • namespace — joma, kurā tiks izpildÄ«ts vaicājums.

Visas Ä«paŔības tiek pārsÅ«tÄ«tas tā, kā tās ir, izņemot tipi te, %Time, %Boolean un %TimeStamp — tās tiek konvertētas atbilstoÅ”ajās Python klasēs.

ExecuteTable

Apmeklē ExecuteClass. PārvērÅ” tabulas nosaukumu par klases nosaukumu un izsauc ExecuteClass. Paraksts:

ExecuteTable(table, variable, type, start, end, properties, namespace) — tabulas datu nodoÅ”ana Python.

Argumenti:

  • galda — tabulas nosaukums.
    Visi citi argumenti tiek pārsūtīti tā, kā ir, uz ExecuteClass.

Pieraksti

  • ExecuteGlobal, ExecuteClass un ExecuteTable darbojas vienādi ātri.
  • ExecuteGlobal 20 reizes ātrāk nekā ExecuteQuery uz lieliem datu kopām (pārsÅ«tīŔanas laiks >0.01 sekundes).
  • ExecuteGlobal, ExecuteClass un ExecuteTable darbojas ar globālām struktÅ«rām: ^global(key) = $lb(prop1, prop2, ..., propN) kur key — vesels skaitlis.
  • Lai ExecuteGlobal, ExecuteClass un ExecuteTable atbalstÄ«tais vērtÄ«bu diapazons te atbilst diapazonam mktime un ir atkarÄ«gs no OS (windows: 1970-01-01, linux 1900-01-01, mac). Izmantojiet %TimeStamplai nosÅ«tÄ«tu datus ārpus Ŕī diapazona vai izmantojiet pandas dataframe, jo Å”is ierobežojums attiecas tikai uz sarakstu.
  • Lai ExecuteGlobal, ExecuteClass un ExecuteTable visi argumenti, izņemot datu avotu (globālo, klasi vai tabulu) un mainÄ«go, ir izvēles.

Piemēri

Testa klase isc.py.test.Person satur metodi, kas demonstrē visus datu nodoÅ”anas variantus:

iestādīt globālo = "isc.py.test.PersonD"
iestādīt klasi = "isc.py.test.Person"
iestādīt tabulu = "isc_py_test.Person"
iestādīt vaicājumu = "SELECT * FROM isc_py_test.Person"

// Vispārējie argumenti
iestādīt mainīgo = "df"
iestādīt tipu = "dataframe"
iestādīt sākumu = 1
iestādīt beigas = $g(^isc.py.test.PersonD, sākums)

// Metode 0: ExecuteGlobal bez argumentiem
iestādīt sc = ##class(isc.py.Main).ExecuteGlobal(globālais, mainīgais _ 0, tips)

// Metode 1: ExecuteGlobal ar argumentiem
// Pārsūtot globālu, laukus norāda manuāli
// globalKey - apakŔreizinātāja nosaukums
iestādīt etiķetes = $lb("globalKey", "Vārds", "DzimŔanas datums", "TS", "RandomTime", "VecumsGadi", "VecumsDecimal", "VecumsDouble", "Bool")

// maska satur par 1 elementu mazāk nekā etiķetes, jo "globalKey" - apakŔreizinātāja nosaukums
// Izlaižam %%CLASSNAME
iestādīt maska = "-+dmt+++b"

iestādīt sc = ##class(isc.py.Main).ExecuteGlobal(globālais, mainīgais _ 1, tips, sākums, beigas, maska, etiķetes)

// Metode 2: ExecuteClass
iestādīt sc = ##class(isc.py.Main).ExecuteClass(klase, mainīgais _ 2, tips, sākums, beigas)

// Metode 3: ExecuteTable
iestādīt sc = ##class(isc.py.Main).ExecuteTable(tabula, mainīgais _ 3, tips, sākums, beigas)

// Metode 4: ExecuteTable
iestādīt sc = ##class(isc.py.Main).ExecuteQuery(vaicājums, mainīgais _ 4, tips)

Izsauciet metodi do ##class(isc.py.test.Person).Test() lai redzētu, kā darbojas visi datu pārsÅ«tīŔanas metodes.

Palīgmetodes

  • GetVariableInfo(mainÄ«gais, serializācija, .definēts, .tips, .garums) — iegÅ«t informāciju par mainÄ«go: vai tas ir definēts, klase un serializācijas garums.
  • GetVariableDefined(mainÄ«gais, .definēts) — vai mainÄ«gais ir definēts.
  • GetVariableType(mainÄ«gais, .tips) — iegÅ«t mainÄ«gā klasi.
  • GetStatus() — iegÅ«t un dzēst pēdējo izņēmumu Python pusē.
  • GetModuleInfo(module, .importēts, .alias) — iegÅ«t moduļa mainÄ«go un importēŔanas statusu.
  • GetFunctionInfo(function, .definēts, .tips, .dokumenti, .paraksts, .argumenti) — iegÅ«t informāciju par funkciju.

Sadarbspēja

JÅ«s esat iemācÄ«jies izsaukt Python Gateway no termināla, tagad sāksim to izmantot produkcijā. Saziņas pamats ar Python Ŕādā režīmā ir isc.py.ens.Operation. Tas ļauj mums:

  • IzpildÄ«t kodu Python
  • Saglabāt\/Atjaunot Python kontekstu
  • Ielādēt un iegÅ«t datus no Python

Principā, Python operācija ir ietvars ap isc.py.Main. Operācija isc.py.ens.Operation ļauj mijiedarboties ar Python procesu no InterSystems IRIS produktiem. Atbalsta piecus pieprasījumus:

  • isc.py.msg.ExecutionRequest lai izpildÄ«tu Python kodu. Atgriež isc.py.msg.ExecutionResponse ar izpildes rezultātu un pieprasÄ«to mainÄ«go vērtÄ«bām.
  • isc.py.msg.StreamExecutionRequest lai izpildÄ«tu Python kodu. Atgriež isc.py.msg.StreamExecutionResponse izpildes rezultātu un pieprasÄ«to mainÄ«go vērtÄ«bām. LÄ«dzÄ«gi isc.py.msg.ExecutionRequest, bet pieņem un atgriež straumes vietā virknēm.
  • isc.py.msg.QueryRequest lai nodotu SQL pieprasÄ«juma izpildes rezultātu. Atgriež Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest lai pārsÅ«tÄ«tu datus globālai/klasei/tabulai. Atgriež Ens.Response.
  • isc.py.msg.SaveRequest lai saglabātu Python kontekstu. Atgriež Ens.StringResponse ar konteksta identifikatoru.
  • isc.py.msg.RestoreRequest lai atjaunotu Python kontekstu.

    Turklāt, isc.py.ens.Operation ir divi iestatījumi:

    • Initializer — klases izvēle, kas Ä«steno interfeisu isc.py.init.Abstract. To var izmantot funkciju, moduļu, klaÅ”u u.c. ielādēŔanai. Tas tiek veikts vienreiz procesa palaiÅ”anas brÄ«dÄ«.
    • PythonLib — (tikai Linux) ja redzat kļūdas ielādēŔanas laikā, iestādiet tā vērtÄ«bu libpython3.6m.so vai pat uz pilnu Python bibliotēkas ceļu.

Biznesa procesu izveide

Pieejami divi klase, kas atvieglo biznesa procesu izstrādi:

  • isc.py.ens.ProcessUtils ļauj izvilkt anotācijas no aktivitātēm, nomainot mainÄ«gās.
  • isc.py.util.BPEmulator ļauj viegli testēt biznesa procesus ar Python. Tas var izpildÄ«t biznesa procesu (daļas Python valodā) paÅ”reizējā procesā.

Mainīgo nomaiņa

Visi biznesa procesi, kas manto no isc.py.ens.ProcessUtils, var izmantot metodi GetAnnotation(name) lai iegÅ«tu aktivitātes anotācijas vērtÄ«bu pēc tās nosaukuma. Aktivitātes anotācija var saturēt mainÄ«gos, kuri tiks aprēķināti InterSystems IRIS pusē, pirms to nodoÅ”anas Python. LÅ«k, mainÄ«go nomaiņas sintakse:

  • ${class:method:arg1:...:argN} — metodika izsaukums
  • #{expr} — izpildÄ«t kodu ObjectScript valodā.

Piemērs pieejams testēŔanas biznesa procesā isc.py.test.Process, piemēram, aktivitātē Correlation Matrix: Graph: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). Å ajā piemērā:

  • #{process.WorkDirectory} atgriež objekta WorkDirectory Ä«paŔību process, kas ir klases isc.py.test.Process t.i., paÅ”reizējā biznesa procesa instances.
  • ${%PopulateUtils:Integer:1:100} izsauc metodi Integer klase %PopulateUtils, nododot argumentus 1 un 100, atgriežot nejauÅ”u veselu skaitli diapazonā 1...100.

TestēŔanas biznesa process

Testa produkti un testēŔanas biznesa process ir pieejami noklusējuma iestatÄ«jumiem kā daļa no Python Gateway. Lai tos izmantotu:

  1. Izpildiet terminālī OS: pip install pandas matplotlib seaborn.
  2. Izpildiet terminālī InterSystems IRIS: do ##class(isc.py.test.CannibalizationData).Import() lai aizpildītu testa datus.
  3. Palaižiet ražoŔanu isc.py.test.Production.
  4. Nosūtīt pieprasījumu tipa Ens.Request par isc.py.test.Process.

Apskatīsim, kā viss tas kopā darbojas. Atveriet isc.py.test.Process BPL redaktorā:

Python Gateway InterSystems IRIS

Koda izpilde

Visnopietnākais izsaukums ir Python koda izpilde:

Python Gateway InterSystems IRIS

Izmanto pieprasījumu isc.py.msg.ExecutionRequest, Ŕeit ir tā īpaŔības:

  • Kods — Python kods.
  • SeparateLines — vai sadalÄ«t kodu pa rindām izpildei. $c(10) (n) tiek izmantots rindu atdalīŔanai. LÅ«dzu, ņemiet vērā, ka NAV ieteicams apstrādāt ziņojumu uzreiz visu, Ŕī funkcija ir paredzēta tikai atseviŔķai apstrādei def un lÄ«dzÄ«giem daudzrindu izteiksmēm. Pēc noklusējuma 0.
  • Variables — komatu atdalÄ«ts mainÄ«go saraksts, kas tiks pievienots atbildei.
  • Serialization — Kā serializēt mainÄ«gus, kurus vēlamies atgriezt. Iespējas: Str, Repr, JSON, Pickle un Dill, pa noklusējumu Str.

MÅ«su gadÄ«jumā mēs tikai iestatām rekvizÄ«tu Kods, tāpēc visi pārējie rekvizÄ«ti izmanto noklusējuma vērtÄ«bas. Mēs to iestatām, izsaucot process.GetAnnotation("Import pandas"), kas izpildes laikā atgriež anotāciju pēc mainÄ«go substitÅ«cijas izpildes. Galu galā kods import pandas as pd tiks nodots Python. GetAnnotation var bÅ«t noderÄ«ga, lai iegÅ«tu daudzrindu Python skriptus, bet Ŕā kodu iegūŔanas veidam nav ierobežojumu. JÅ«s varat iestatÄ«t rekvizÄ«tu Kods jums ērtā veidā.

Mainīgo iegūŔana

Vēl viens interesants izaicinājums, izmantojot isc.py.msg.ExecutionRequest — Correlation Matrix: Tabular:

Python Gateway InterSystems IRIS

Tas aprēķina korrelācijas matricu Python pusē un izvelk mainīgo corrmat atsaka InterSystems IRIS JSON formātā, iestādot pieprasījuma rekvizītus:

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

Mēs varam redzēt rezultātus Visual Trace:

Python Gateway InterSystems IRIS

Un, ja Ŕī vērtÄ«ba bÅ«s nepiecieÅ”ama BPA, to var iegÅ«t Ŕādi: callresponse.Variables.GetAt("corrmat").

Datu pārraide

Tālāk runāsim par datu pārsūtīŔanu no InterSystems IRIS uz Python, visi datu pārsūtīŔanas pieprasījumi īsteno interfeisu isc.py.msg.DataRequest, kas nodroŔina Ŕādas īpaŔības:

  • Variable — Python mainÄ«gais, kurā tiek ierakstÄ«ti dati.
  • Type — mainÄ«gā tips: dataframe (pandas datu rāmis) vai list.
  • Namespace — joma, no kuras iegÅ«stam datus. Paketēm isc.py jābÅ«t pieejamām Å”ajā jomā. Tas var bÅ«t joma bez produkciju atbalsta.

Pamatojoties uz Ŕo interfeisu, ir ieviesti 4 pieprasījumu klases:

  • isc.py.msg.QueryRequest — iestatiet rekvizÄ«tu Query lai pārsÅ«tÄ«tu SQL pieprasÄ«jumu.
  • isc.py.msg.ClassRequest — iestatiet rekvizÄ«tu Class lai pārsÅ«tÄ«tu klases datus.
  • isc.py.msg.TableRequest — iestatÄ«t rekvizÄ«tu Table lai pārsÅ«tÄ«tu tabulas datus.
  • isc.py.msg.GlobalRequest — iestatÄ«t rekvizÄ«tu Global lai pārsÅ«tÄ«tu globālos datus.

Testa procesā pārskatiet aktivitāti RAW, kur isc.py.msg.QueryRequest parādīts darbībā.

Python Gateway InterSystems IRIS

Python konteksta saglabāŔana/atjaunoŔana

Visbeidzot, mēs varam saglabāt Python kontekstu InterSystems IRIS, lai to izdarītu, nosūtīsim isc.py.msg.SaveRequest ar argumentiem:

  • Mask — Saglabā tikai tos mainÄ«gos, kas atbilst masķē. Atbalsta * un ?. Piemērs: "Data*, Figure?". Pa noklusējumu *.
  • MaxLength — Maksimālais saglabājamās mainÄ«gās garums. Ja mainÄ«gās serializācija ir garāka, tad tā tiks ignorēta. Iestatiet 0, lai iegÅ«tu mainÄ«gās jebkura garuma. Noklusējuma $$$MaxStringLength.
  • Nosaukums — Konteksta nosaukums (pēc izvēles).
  • Apraksts — Konteksta apraksts (pēc izvēles).

Atgriež Ens.StringResponse ar Id saglabātā konteksta. TestēŔanas procesā pārbaudiet aktivitāti Save Context.

AtbilstoÅ”ais pieprasÄ«jums isc.py.msg.RestoreRequest ielādē kontekstu no InterSystems IRIS uz Python:

  • ContextId — konteksta identifikators.
  • Clear — notÄ«rÄ«t kontektu pirms atjaunoÅ”anas.

Jupyter Notebook

Jupyter Notebook — ir atvērtā koda web lietotne, kas ļauj izveidot piezÄ«mjdatorus, kuros ir kods, vizualizācijas un teksts, un tos publicēt. Python Gateway ļauj pārskatÄ«t un rediģēt BPL procesus Jupyter Notebook formātā. LÅ«dzu, ņemiet vērā, ka Å”obrÄ«d tiek izmantots standarta Python 3 ekzekutors.

Å is paplaÅ”inājums pieņem, ka anotācijas satur Python kodu un izmanto aktivitāŔu nosaukumus kā priekÅ”nosaukumus. Tagad ir iespējams izstrādāt biznesa procesus PythonGateway Jupyter Notebook. LÅ«k, kas ir iespējams:

  • Izveidot jaunas biznesa procedÅ«ras
  • Dzēst biznesa procesus
  • Izveidot jaunas aktivitātes
  • MainÄ«t aktivitātes
  • Dzēst aktivitātes

Šeit demo video. Un daži ekrānuzņēmumi:

Procesu pārlūks

Python Gateway InterSystems IRIS

Procesa redaktors

Python Gateway InterSystems IRIS

UzstādīŔana

  1. Jums būs nepiecieŔams InterSystems IRIS 2019.2+.
  2. Instalējiet PythonGateway v0.8+ (vajadzīgs tikai isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints un isc.py.ens.ProcessUtils).
  3. Atjauniniet ObjectScript kodu no repozitorija.
  4. Izpildiet do ##class(isc.py.util.Jupyter).Install() un sekojiet norādēm.

Dokumentācija.

Secinājumi

MLToolkit ir rÄ«ku kopums, kura mērÄ·is ir apvienot modeļus un transakciju vidi, lai izveidotie modeļi tiktu viegli izmantoti tieÅ”i jÅ«su biznesa procesos. Python Gateway ir daļa no MLToolkit un nodroÅ”ina integrāciju ar Python valodu, ļaujot orkestrēt jebkurus maŔīnmācīŔanās algoritmus, kas izstrādāti Python valodā (galvenā vide daudziem datu zinātniekiem), izmantot daudzas gatavas bibliotēkas ātrai adaptÄ«vu, automatizētu analÄ«tisku AI/ML risinājumu izstrādei platformā InterSystems IRIS.

Saites

MLToolkit

MLToolkit lietotāju grupa ir privāta GitHub repozitorija, izveidota kā daļa no uzņēmuma GitHub organizācijas InterSystems. Tā ir vērsta uz ārējiem lietotājiem, kuri instalē, pētÄ« vai jau izmanto MLToolkit komponentus, tostarp Python Gateway. Grupā pieejami vairāki Ä«stenoti gadÄ«jumi (ar avota kodu un testēŔanas datiem) marketinga, ražoÅ”anas, medicÄ«nas un daudzās citās nozarēs. Lai pievienotos MLToolkit lietotāju grupai, lÅ«dzu, nosÅ«tiet Ä«su ziņu uz e-pasta adresi: MLToolkit@intersystems.com un norādiet savā vēstulē Ŕādu informāciju:

  • GitHub lietotāja vārds
  • Organizācija (kur strādājat vai mācāties)
  • Amats (jÅ«su faktiskais amats jÅ«su organizācijā, vai "Students", vai "BrÄ«vmākslinieks").
  • Valsts

Visiem, kuri izlasÄ«juÅ”i rakstu un interesējas par InterSystems IRIS iespējām kā mākslÄ«gā intelekta un maŔīnmācīŔanās izstrādes vai mitināŔanas platformu, piedāvājam apspriest iespējamos scenārijus, kas interesē jÅ«su uzņēmumu. Mēs ar prieku analizēsim jÅ«su uzņēmuma vajadzÄ«bas un kopÄ«gi noteiksim darbÄ«bas plānu; mÅ«su AI/ML ekspertu grupas kontaktadrese ir MLToolkit@intersystems.com.

Avots: habr.com

Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem šŸ”„ Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem | ProHoster