Python Gateway f'InterSystems IRIS

Dan l-artikolu huwa dwar Python Gateway, proġett komunitarju ta' sors miftuħ għall-pjattaforma tad-dejta InterSystems IRIS. Dan il-proġett jippermettilek li orkestra kwalunkwe algoritmi ta' tagħlim tal-magni maħluqa f'Python (l-ambjent ewlieni għal ħafna Xjentisti tad-Data), tuża bosta libreriji lesti biex toħloq malajr soluzzjonijiet adattivi u robotiċi analitiċi AI / ML fuq il-pjattaforma InterSystems IRIS. F'dan l-artikolu, ser nuri kif InterSystems IRIS jista 'jorkestra proċessi f'Python, jikkomunika b'mod effiċjenti data f'żewġ direzzjonijiet, u joħloq proċessi kummerċjali intelliġenti.

Pjan

  1. Introduzzjoni.
  2. Għodda.
  3. Installazzjoni.
  4. API
  5. Interoperabbiltà.
  6. Notebook Jupyter.
  7. Konklużjonijiet.
  8. Links.
  9. MLToolkit.

Introduzzjoni

Python huwa lingwa ta 'programmar ta' livell għoli u għal skopijiet ġenerali mmirata biex ittejjeb il-produttività tal-iżviluppatur u l-leġibbiltà tal-kodiċi. F'din is-sensiela ta' artikoli, ser niddiskuti l-possibbiltajiet tal-użu ta' Python fuq il-pjattaforma InterSystems IRIS, bil-fokus ewlieni ta' dan l-artikolu jkun l-użu ta' Python bħala lingwa għall-ħolqien u t-tħaddim ta' mudelli ta' tagħlim tal-magni.

It-tagħlim tal-magni (ML) huwa klassi ta 'metodi ta' intelliġenza artifiċjali, li l-karatteristika tagħha mhix is-soluzzjoni diretta ta 'problema, iżda t-tagħlim fil-proċess li jsolvi ħafna problemi simili.

L-algoritmi u l-mudelli tat-tagħlim bil-magni qed isiru aktar komuni. Hemm ħafna raġunijiet għal dan, iżda kollox niżel għall-aċċessibbiltà, is-sempliċità u l-kisba ta’ riżultati prattiċi. Il-clustering jew saħansitra l-immudellar tan-netwerk newrali huwa teknoloġija ġdida?

Naturalment le, imma llum il-ġurnata m'hemmx għalfejn tikteb mijiet ta' eluf ta' linji ta' kodiċi biex tmexxi mudell wieħed, u l-ispiża tal-ħolqien u l-użu tal-mudelli qed issir dejjem inqas.

L-għodod qed jevolvu - filwaqt li m'għandniex għodod AI/ML kompletament iċċentrati fuq GUI, il-progress li rajna b'ħafna klassijiet oħra ta' sistemi ta' informazzjoni, bħal BI (mill-kitba tal-kodiċi għall-użu ta' oqfsa u soluzzjonijiet konfigurabbli iċċentrati fuq GUI), huwa osservat ukoll f'għodod għall-ħolqien ta 'AI/ML. Diġà għaddejna mill-istadju tal-kitba tal-kodiċi u llum nużaw oqfsa biex nibnu u nħarrġu mudelli.

Titjib ieħor, bħall-abbiltà li jqassam mudell imħarreġ minn qabel fejn l-utent aħħari sempliċement irid itemm it-taħriġ tal-mudell fuq id-dejta speċifika tiegħu, jagħmilha wkoll aktar faċli biex tibda bit-tagħlim tal-magni. Dawn l-avvanzi jagħmlu t-tagħlim tal-magni tat-tagħlim ħafna aktar faċli kemm għall-professjonisti kif ukoll għall-kumpaniji in ġenerali.

Min-naħa l-oħra, qed niġbru aktar u aktar data. Bi pjattaforma tad-dejta unifikata bħal InterSystems IRIS, din l-informazzjoni kollha tista’ tiġi ppreparata u użata immedjatament bħala input għal mudelli ta’ tagħlim bil-magni.

Biċ-ċaqliq lejn il-cloud, it-tnedija ta 'proġetti AI/ML qed issir aktar faċli minn qatt qabel. Nistgħu nikkunsmaw biss ir-riżorsi li għandna bżonn. Barra minn hekk, grazzi għall-parallelizzazzjoni offruta mill-pjattaformi tal-cloud, nistgħu niffrankaw il-ħin li nqattgħu.

Imma xi ngħidu għar-riżultati? Dan huwa fejn l-affarijiet isiru aktar ikkumplikati. Hemm ħafna għodod għall-bini ta 'mudelli, li se niddiskuti li jmiss. Il-bini ta’ mudell tajjeb mhuwiex faċli, imma x’imiss? Li tagħmel profitt mill-użu ta 'mudell ta' negozju hija wkoll kompitu mhux trivjali. L-għerq tal-problema hija s-separazzjoni tal-piżijiet tax-xogħol analitiċi u transazzjonali, u l-mudelli tad-dejta. Meta nħarrġu mudell, ġeneralment nagħmluh fuq data storika. Iżda l-post għall-mudell mibni huwa fl-ipproċessar tad-dejta transazzjonali. X'inhu tajjeb l-aħjar mudell ta 'skoperta ta' tranżazzjonijiet frawdolenti jekk inħaddmuh darba kuljum? Il-scammers ilhom li telqu bil-flus. Irridu nħarrġu l-mudell fuq dejta storika, iżda rridu napplikawha wkoll f'ħin reali fuq dejta ġdida li tidħol sabiex il-proċessi tan-negozju tagħna jkunu jistgħu jaġixxu fuq it-tbassir magħmul mill-mudell.

L-ML Toolkit huwa sett ta’ għodod li għandu l-għan li jagħmel dan: jgħaqqad mudelli u ambjent transazzjonali sabiex il-mudelli mibnija jkunu jistgħu jintużaw faċilment direttament fil-proċessi tan-negozju tiegħek. Python Gateway huwa parti mill-ML Toolkit u jipprovdi integrazzjoni mal-lingwa Python (simili għal kif R Gateway, li tkun parti mill-ML Toolkit jipprovdi integrazzjoni mal-lingwa R).

Għodda tal-għodda

Qabel ma nkomplu, nixtieq niddeskrivi ftit għodod u libreriji Python li ser nużaw aktar tard.

Teknoloġija

  • Python huwa lingwa ta' programmazzjoni interpretata, ta' livell għoli u għal skopijiet ġenerali. Il-vantaġġ ewlieni tal-lingwa hija l-librerija kbira tagħha ta 'libreriji matematiċi, ML u AI. Bħal ObjectScript, hija lingwa orjentata lejn l-oġġetti, iżda kollox huwa definit b'mod dinamiku aktar milli b'mod statiku. Ukoll kollox huwa oġġett. Artikli aktar tard jassumu familjarità li tgħaddi mal-lingwa. Jekk trid tibda titgħallem, nirrakkomanda li tibda minn dokumentazzjoni.
  • Għall-eżerċizzji sussegwenti tagħna, issettja Python 3.6.7 64 bit.
  • IDE: Jien nuża PyCharm, iżda b'mod ġenerali huma много. Jekk tuża Atelier, hemm plugin Eclipse għall-iżviluppaturi Python. Jekk qed tuża VS Code, hemm estensjoni għal Python.
  • Notebook: Minflok IDE, tista 'tikteb u taqsam l-iskripts tiegħek f'notebooks onlajn. L-aktar popolari minnhom huwa jupyter.

Libreriji

Hawnhekk hawn lista (mhux eżawrjenti) tal-libreriji tat-tagħlim tal-magni:

  • numpy — pakkett fundamentali għal kalkoli preċiżi.
  • pandas — strutturi ta' dejta ta' prestazzjoni għolja u għodod ta' analiżi tad-dejta.
  • matplotlib — ħolqien ta' graphs.
  • Imwieled fil-baħar — viżwalizzazzjoni tad-dejta bbażata fuq matplotlib.
  • Sklearn — metodi ta' tagħlim bil-magni.
  • XGBoost — algoritmi ta' tagħlim tal-magni fil-qafas tal-metodoloġija ta' spinta tal-gradjent.
  • Ġensim — NLP.
  • Keras - netwerks newrali.
  • Fluss tat-tensjoni — pjattaforma għall-ħolqien ta' mudelli ta' tagħlim bil-magni.
  • PyTorch hija pjattaforma għall-ħolqien ta 'mudelli ta' tagħlim tal-magni, iffukati fuq Python.
  • Nyoka - PMML minn diversi mudelli.

It-teknoloġiji AI/ML jagħmlu n-negozju aktar effiċjenti u adattabbli. Barra minn hekk, illum dawn it-teknoloġiji qed isiru aktar faċli biex jiġu żviluppati u implimentati. Ibda titgħallem dwar it-teknoloġiji AI/ML u kif jistgħu jgħinu lill-organizzazzjoni tiegħek tikber.

Installazzjoni

Hemm diversi modi kif tinstalla u tuża Python Gateway:

  • OS
    • twieqi
    • Linux
    • Mac
  • Docker
    • Uża immaġni minn DockerHub
    • Oħloq id-dehra tiegħek

Irrispettivament mill-metodu ta 'installazzjoni, ser ikollok bżonn il-kodiċi tas-sors. L-uniku post biex tniżżel il-kodiċi huwa paġna rilaxxi. Fiha rilaxxi stabbli ttestjati, ħu biss l-aħħar waħda. Bħalissa huwa 0.8, iżda maż-żmien se jkun hemm oħrajn ġodda. Tikklonax/tniżżilx ir-repożitorju, niżżel l-aħħar rilaxx.

OS

Jekk qed tinstalla Python Gateway fuq sistema operattiva, allura l-ewwel (irrispettivament mis-sistema operattiva) trid tinstalla Python. Għal din:

  1. Installa Python 3.6.7 64 bit. Huwa rakkomandat li tinstalla Python fid-direttorju default.
  2. Installa l-modulu dill: pip install dill.
  3. Niżżel il-kodiċi ObjectScript (i.e. do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) għal kwalunkwe żona bi prodotti. Fil-każ li trid żona eżistenti biex tappoġġja l-prodotti, mexxi: write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. Poġġi callout DLL/SO/DYLIB għal folder bin l-istanza tiegħek ta' InterSystems IRIS. Il-fajl tal-librerija għandu jkun disponibbli fil-mogħdija lura write ##class(isc.py.Callout).GetLib().

twieqi

  1. Kun żgur li l-ambjent varjabbli PYTHONHOME jindika Python 3.6.7.
  2. Kun żgur li l-varjabbli tal-ambjent tas-sistema hija PATH fih varjabbli PYTHONHOME (jew id-direttorju li jindika).

Linux (Debian/Ubuntu)

  1. Iċċekkja li l-varjabbli ambjentali hija PATH fih /usr/lib и /usr/lib/x86_64-linux-gnu. Uża fajl /etc/environment biex jiġu stabbiliti varjabbli ambjentali.
  2. F'każ ta' żbalji undefined symbol: _Py_TrueStruct issettja l-issettjar PythonLib. ukoll fi README hemm taqsima Issolvi l-problemi.

Mac

  1. Bħalissa Python 3.6.7 biss huwa appoġġjat python.org. Iċċekkja l-varjabbli PATH.

Jekk biddilt il-varjabbli ambjentali, ibda mill-ġdid il-prodott InterSystems tiegħek.

Docker

L-użu ta 'kontenituri għandu numru ta' vantaġġi:

  • Portabbiltà
  • Effettività
  • Insulazzjoni
  • Ħeffa
  • Immutabilità

Iċċekkja dan sensiela ta’ artikli għal aktar informazzjoni dwar l-użu ta’ Docker mal-prodotti InterSystems.

Il-bini kollha ta' Python Gateway bħalissa huma bbażati fuq kontenitur 2019.4.

Immaġni lesta

Mexxi: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latestbiex tniżżel u tħaddem Python Gateway ma' InterSystems IRIS Community Edition. Dak kollox.

Oħloq id-dehra tiegħek

Biex tibni immaġni docker, ħaddem fl-għerq tar-repożitorju: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
B'mod awtomatiku, l-immaġni hija mibnija bbażata fuq l-immaġni store/intersystems/iris-community:2019.4.0.383.0, madankollu tista' tibdel dan billi tistabbilixxi varjabbli IMAGE.
Biex tibni minn InterSystems IRIS, mexxi: `docker build --build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 --force-rm --tag intersystemscommunity/irispy:latest ".

Wara dan tista' tħaddem l-immaġni docker:

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

Jekk qed tuża immaġni bbażata fuq InterSystems IRIS Community Edition, tista' tħalli barra ċ-ċavetta.

Kummenti

  • Proċess tat-test isc.py.test.Process jiffranka numru ta' immaġini f'direttorju temporanju. Inti tista 'tixtieq li tibdel din it-triq għad-direttorju mmuntat. Biex tagħmel dan, editja l-issettjar WorkingDir tispeċifika d-direttorju immuntat.
  • Biex taċċessa t-terminal run: docker exec -it irispy sh.
  • Aċċess għall-Portal tal-Ġestjoni tas-Sistema permezz tal-login SuperUser/SYS.
  • Biex twaqqaf il-kontenitur, mexxi: docker stop irispy && docker rm --force irispy.

Verifika tal-installazzjoni

Ladarba tkun installa Python Gateway, ta 'min tivverifika li qed jaħdem. Esegwi dan il-kodiċi fit-terminal InterSystems IRIS:

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

Ir-riżultat għandu jkun: HELLO — Valur varjabbli Python x. Jekk l-istatus tar-ritorn sc huwa żball jew var vojta, iċċekkja Aqrame - Taqsima tas-soluzzjoni tal-problemi.

API

Python Gateway huwa installat u vverifikajt li jaħdem. Wasal iż-żmien li tibda tużah!
L-interface ewlenija għal Python hija isc.py.Main. Joffri l-gruppi ta’ metodi li ġejjin (kollha ritorn %Status):

  • Eżekuzzjoni tal-Kodiċi
  • Trasferiment tad-dejta
  • Awżiljarju

Eżekuzzjoni tal-Kodiċi

Dawn il-metodi jippermettulek tesegwixxi kodiċi Python arbitrarju.

SimpleString

SimpleString - dan huwa l-metodu ewlieni. Huwa jieħu 4 argumenti fakultattivi:

  • code — linja ta' kodiċi li trid tesegwixxi. Karattru ta' l-għalf tal-linja: $c(10).
  • returnVariable — isem il-varjabbli li trid tirritorna.
  • serialization - kif serialize returnVariable. 0 — string (default), 1 — repr.
  • result — ByRef referenza għall-varjabbli li fiha jinkiteb il-valur returnVariable.

Hawn fuq għamilna:

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

F'dan l-eżempju, aħna nassenjaw għal varjabbli Python x tifsira Hello u trid tirritorna l-valur ta 'varjabbli Python x għal varjabbli ObjectScript var.

Eżegwixxi Kodiċi

ExecuteCode hija alternattiva aktar sigura u inqas restrittiva SimpleString.
Linji fil-pjattaforma InterSystems IRIS huma limitati għal 3 karattru, u jekk trid tesegwixxi biċċa itwal ta 'kodiċi, għandek bżonn tuża ħjut.
Żewġ argumenti huma aċċettati:

  • code — linja jew nixxiegħa ta' kodiċi Python li trid tiġi esegwita.
  • variable — (mhux obbligatorju) jassenja r-riżultat tal-eżekuzzjoni code din il-varjabbli Python.

Eżempju għall-użu:

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

F'dan l-eżempju, aħna mmultiplika 2 bi 3 u niktbu r-riżultat għal varjabbli Python y.

Trasferiment tad-dejta

Għaddi d-dejta lejn u minn Python.

Python -> InterSystems IRIS

Hemm 4 modi kif tikseb il-valur ta' varjabbli Python f'InterSystems IRIS, skont is-serjelizzazzjoni li għandek bżonn:

  • String għal tipi ta' data sempliċi u debugging.
  • Repr għall-ħażna ta 'oġġetti sempliċi u debugging.
  • JSON għal manipulazzjoni faċli tad-dejta fuq in-naħa ta’ InterSystems IRIS.
  • Pickle biex isalva l-oġġetti.

Dawn il-metodi jippermettulek tirkupra varjabbli minn Python bħala string jew flussi.

  • GetVariable(variable, serialization, .stream, useString) - tikseb serialization varjabbli variable в stream. Jekk useString hija 1 u s-serialization titqiegħed fuq string, imbagħad string tiġi rritornata u mhux stream.
  • GetVariableJson(variable, .stream, useString) — Ikseb serialization JSON ta 'varjabbli.
  • GetVariablePickle(variable, .stream, useString, useDill) -get Pickle (jew Dill) serialization ta 'varjabbli.

Ejja nippruvaw niksbu l-varjabbli tagħna y.

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

InterSystems IRIS -> Python

Tagħbija tad-dejta minn InterSystems IRIS f'Python.

  • ExecuteQuery(query, variable, type, namespace) - toħloq sett ta' dejta (pandas dataframe jew list) mill-mistoqsija sql u tistabbilixxiha għal varjabbli Python variable. Borża tal-plastik isc.py għandhom ikunu disponibbli fiż-żona namespace — it-talba tiġi esegwita hemmhekk.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) - jgħabbi dejta globali global mis-sottoskritt start li end f'Python bħala varjabbli tat-tip type: list, jew pandas dataframe. Deskrizzjoni ta' argumenti fakultattivi mask u, labels disponibbli fid-dokumentazzjoni u r-repożitorju tal-klassi Dokumenti tat-Trasferiment tad-Data.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) - tagħbija data tal-klassi class minn id start li end f'Python bħala varjabbli tat-tip type: list, jew pandas dataframe. properties — lista (separata b'virgola) ta' proprjetajiet ta' klassi li jeħtieġ li jiġu mgħobbija fis-sett tad-dejta. Maskri appoġġjati * и ?. Default - * (il-proprjetajiet kollha). Proprjetà %%CLASSNAME injorat.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) - Tagħbijiet tabella data table minn id start li end f'Python.

ExecuteQuery — universali (kwalunkwe mistoqsija SQL korretta tiġi mgħoddija lil Python). Madankollu, ExecuteGlobal u l-tgeżwir tagħha ExecuteClass и ExecuteTable taħdem b'numru ta' restrizzjonijiet. Huma ħafna aktar mgħaġġla (3-5 darbiet aktar mgħaġġla mis-sewwieq ODBC u 20 darba aktar mgħaġġla ExecuteQuery). Aktar informazzjoni fuq Dokumenti tat-Trasferiment tad-Data.
Dawn il-metodi kollha jappoġġjaw it-trasferiment tad-dejta minn kwalunkwe żona. Borża tal-plastik isc.py għandhom ikunu disponibbli fiż-żona fil-mira.

ExecuteQuery

ExecuteQuery(request, variable, type, namespace) — it-trasferiment tar-riżultati ta' kwalunkwe mistoqsija SQL korretta lil Python. Dan huwa l-aktar metodu ta 'trasferiment tad-data bil-mod. Użaha jekk ExecuteGlobal u t-tgeżwir tiegħu mhumiex disponibbli.

Argumenti:

  • query - mistoqsija sql.
  • variable — l-isem tal-varjabbli Python li fiha tinkiteb id-dejta.
  • type - list jew Pandas dataframe.
  • namespace — iż-żona li fiha se titwettaq it-talba.

ExecuteGlobal

ExecuteGlobal(global, variable, type, start, end, mask, labelels, namespace) - tgħaddi globali f'Python.

Argumenti:

  • global - isem globali mingħajr ^
  • variable — l-isem tal-varjabbli Python li fiha tinkiteb id-dejta.
  • type - list jew Pandas dataframe.
  • start — l-ewwel sottoskritt tal-globali. Neċessarjament %Integer.
  • end — l-aħħar sottoskritt tal-globali. Neċessarjament %Integer.
  • mask — maskra tal-valur globali. Il-maskra tista 'tkun iqsar min-numru ta' oqsma fil-globali (f'liema każ l-oqsma fl-aħħar se jinqabżu). Kif tifformattja maskra:
    • + jgħaddi l-valur kif inhu.
    • - aqbeż il-valur.
    • b — Tip Boolean (0 - False, il-bqija kollha - True).
    • d — Data (minn $horolog, fuq Windows mill-1970, fuq Linux mill-1900).
    • t — Ħin ($horolog, sekondi wara nofsillejl).
    • m — Timestamp (sekwenza tal-format SENA-XAHAR-JUM SIEGĦA:MINUTA:SEKONDA).
  • labels — %Lista ta' ismijiet ta' kolonni. L-ewwel element huwa l-isem tas-sottoskritt.
  • namespace — iż-żona li fiha se titwettaq it-talba.

ExecuteClass

Kebbeb fuq ExecuteGlobal. Ibbażat fuq id-definizzjoni tal-klassi, jipprepara sejħa ExecuteGlobal u jsejjaħlu.

ExecuteClass(class, variable, type, start, end, properties, namespace) - tgħaddi dejta tal-klassi f'Python.

Argumenti:

  • class - isem tal-klassi
  • variable — l-isem tal-varjabbli Python li fiha tinkiteb id-dejta.
  • type - list jew Pandas dataframe.
  • start — ID tal-bidu.
  • end — finali Id
  • properties — lista (separata b'virgola) ta' proprjetajiet ta' klassi li jeħtieġ li jiġu mgħobbija fis-sett tad-dejta. Maskri appoġġjati * и ?. Default - * (il-proprjetajiet kollha). Proprjetà %%CLASSNAME injorat.
  • namespace — iż-żona li fiha se titwettaq it-talba.

Il-proprjetajiet kollha huma mgħoddija kif inhu ħlief proprjetajiet tat-tip %Date, %Time, %Boolean и %TimeStamp - huma kkonvertiti fil-klassijiet Python korrispondenti.

ExecuteTable

Kebbeb fuq ExecuteClass. Tittraduċi l-isem tal-mejda fl-isem tal-klassi u sejħiet ExecuteClass. Firma:

ExecuteTable(table, variable, type, start, end, properties, namespace) - tgħaddi d-dejta tat-tabella lil Python.

Argumenti:

  • table — isem it-tabella.
    L-argumenti l-oħra kollha jgħaddu kif inhu ExecuteClass.

Noti

  • ExecuteGlobal, ExecuteClass и ExecuteTable taħdem bl-istess mod malajr.
  • ExecuteGlobal 20 darba aktar mgħaġġla minn ExecuteQuery fuq settijiet kbar tad-dejta (ħin tat-trasferiment > 0.01 sekondi).
  • ExecuteGlobal, ExecuteClass и ExecuteTable taħdem fuq globali b'din l-istruttura: ^global(key) = $lb(prop1, prop2, ..., propN) fejn key — numru sħiħ.
  • Għal ExecuteGlobal, ExecuteClass и ExecuteTable firxa ta' valuri appoġġjata %Date jikkorrispondi għall-firxa mktime u jiddependi fuq l-OS (twieqi: 1970-01-01, Linux 1900-01-01, mac). Użu %TimeStampbiex tittrasferixxi data barra din il-firxa jew tuża pandas dataframe minħabba din hija limitazzjoni ta' lista biss.
  • Għal ExecuteGlobal, ExecuteClass и ExecuteTable l-argumenti kollha ħlief is-sors tad-dejta (globali, klassi jew tabella) u l-varjabbli huma fakultattivi.

eżempji

Klassi tat-test isc.py.test.Person fih metodu li juri l-għażliet kollha tat-trasferiment tad-dejta:

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)

Sejħa l-metodu do ##class(isc.py.test.Person).Test() biex tara kif jaħdmu l-metodi kollha tat-trasferiment tad-data.

Metodi Helper

  • GetVariableInfo(variable, serialization, .defined, .type, .length) — tikseb informazzjoni dwar il-varjabbli: jekk hijiex definita, il-klassi tagħha u t-tul tas-serializzazzjoni.
  • GetVariableDefined(variable, .defined) — jekk il-varjabbli hijiex definita.
  • GetVariableType(variable, .type) — ikseb il-klassi tal-varjabbli.
  • GetStatus() - Ikseb u neħħi l-aħħar eċċezzjoni fuq in-naħa Python.
  • GetModuleInfo(module, .imported, .alias) — tikseb l-istatus tal-varjabbli tal-modulu u l-importazzjoni.
  • GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments) — tikseb informazzjoni dwar il-funzjoni.

Interoperabbiltà

Tgħallimt kif issejjaħ Python Gateway mit-terminal, issa ejja nibdew nużawh fil-produzzjoni. Il-bażi għall-interazzjoni ma 'Python f'dan il-mod hija isc.py.ens.Operation. Jippermettilna:

  • Eżegwixxi kodiċi f'Python
  • Issejvja/Irrestawra l-kuntest Python
  • Tagħbija u tirċievi data minn Python

Bażikament, operazzjoni Python hija tgeżwir fuq isc.py.Main. Operazzjoni isc.py.ens.Operation jipprovdi l-abbiltà li jinteraġixxi mal-proċess Python mill-prodotti InterSystems IRIS. Ħames mistoqsijiet huma appoġġjati:

  • isc.py.msg.ExecutionRequest biex tesegwixxi kodiċi Python. Ritorni isc.py.msg.ExecutionResponse bir-riżultat tal-eżekuzzjoni u l-valuri tal-varjabbli mitluba.
  • isc.py.msg.StreamExecutionRequest biex tesegwixxi kodiċi Python. Ritorni isc.py.msg.StreamExecutionResponse ir-riżultat tal-eżekuzzjoni u l-valuri tal-varjabbli mitluba. Analogu isc.py.msg.ExecutionRequest, iżda jaċċetta u jirritorna streams minflok strings.
  • isc.py.msg.QueryRequest biex jittrasmetti r-riżultat tal-eżekuzzjoni ta' mistoqsija SQL. Ritorni Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest biex tgħaddi data globali/klassi/tabella. Ritorni Ens.Response.
  • isc.py.msg.SaveRequest biex issalva l-kuntest Python. Ritorni Ens.StringResponse bl-ID tal-kuntest.
  • isc.py.msg.RestoreRequest biex tirrestawra l-kuntest Python.

    Barra minn hekk, isc.py.ens.Operation għandha żewġ settings:

    • Initializer — għażla ta' klassi li timplimenta l-interface isc.py.init.Abstract. Jista 'jintuża biex jgħabbi funzjonijiet, moduli, klassijiet, eċċ. Huwa esegwit darba meta jibda l-proċess.
    • PythonLib - (Linux biss) jekk tara żbalji waqt it-tagħbija, issettja l-valur tagħha għal libpython3.6m.so jew saħansitra fit-triq sħiħa lejn il-librerija Python.

Ħolqien ta 'proċessi tan-negozju

Hemm żewġ klassijiet disponibbli li jiffaċilitaw l-iżvilupp tal-proċessi tan-negozju:

  • isc.py.ens.ProcessUtils jippermettilek estratt annotazzjonijiet minn attivitajiet b'sostituzzjoni varjabbli.
  • isc.py.util.BPEmulator jagħmilha faċli biex jiġu ttestjati proċessi tan-negozju b'Python. Jista 'jesegwixxi proċess tan-negozju (partijiet Python) fil-proċess attwali.

Sostituzzjoni Varjabbli

Il-proċessi kollha tan-negozju ntirtu minn isc.py.ens.ProcessUtils, jistgħu jużaw il-metodu GetAnnotation(name) biex tikseb il-valur tal-annotazzjoni tal-attività b'isimha. L-annotazzjoni tal-attività jista' jkun fiha varjabbli li se jiġu kkalkulati fuq in-naħa tal-InterSystems IRIS qabel ma jiġu mgħoddija lil Python. Hawnhekk hawn is-sintassi għas-sostituzzjoni varjabbli:

  • ${class:method:arg1:...:argN} - sejħa tal-metodu
  • #{expr} — tesegwixxi kodiċi fil-lingwa ObjectScript.

Eżempju huwa disponibbli fil-proċess tan-negozju tat-test isc.py.test.Process, pereżempju, fl-attività Correlation Matrix: Graph: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). F'dan l-eżempju:

  • #{process.WorkDirectory} jirritorna l-proprjetà WorkDirectory tal-oġġett process, li hija eżempju tal-klassi isc.py.test.Process dawk. proċess tan-negozju kurrenti.
  • ${%PopulateUtils:Integer:1:100} jitlob metodu Integer klassi %PopulateUtils, tgħaddi l-argumenti 1 и 100, li jirritorna numru sħiħ każwali fil-medda 1...100.

Proċess tan-negozju tat-test

Prodotti tat-test u proċessi tan-negozju tat-test huma disponibbli awtomatikament bħala parti mill-Python Gateway. Biex tużahom:

  1. Fit-terminal tal-OS, mexxi: pip install pandas matplotlib seaborn.
  2. Fit-terminal InterSystems IRIS, mexxi: do ##class(isc.py.test.CannibalizationData).Import() biex timla d-data tat-test.
  3. Tnedija prodotti isc.py.test.Production.
  4. Ibgħat it-tip ta' talba Ens.Request в isc.py.test.Process.

Ejja naraw kif jaħdem kollox flimkien. Miftuħa isc.py.test.Process fl-editur tal-BPL:

Python Gateway f'InterSystems IRIS

Eżekuzzjoni tal-Kodiċi

L-aktar sfida importanti hija l-eżekuzzjoni tal-kodiċi Python:

Python Gateway f'InterSystems IRIS

Mistoqsija użata isc.py.msg.ExecutionRequest, hawn huma l-proprjetajiet tiegħu:

  • Code — Kodiċi Python.
  • SeparateLines — jekk għandux jaqsam il-kodiċi f'linji għall-eżekuzzjoni. $c(10) (n) tintuża biex tissepara kordi. Jekk jogħġbok innota li MHUX rakkomandat li tipproċessa l-messaġġ kollu f'daqqa, din il-funzjoni hija maħsuba biss biex tipproċessa def u espressjonijiet simili multiline. Default 0.
  • Variables — lista ta' varjabbli separati minn virgoli li se jiġu miżjuda mar-rispons.
  • Serialization — Kif serialize l-varjabbli li rridu nirritornaw. Għażliet: Str, Repr, JSON, Pickle и Dill, default Str.

Fil-każ tagħna, aħna nissettjaw biss il-proprjetà Code, għalhekk il-proprjetajiet l-oħra kollha jużaw il-valuri awtomatiċi. Nissettjawha billi nċemplu process.GetAnnotation("Import pandas"), li waqt ir-runtime jirritorna annotazzjoni wara li tkun saret sostituzzjoni varjabbli. Wara kollox, il-kodiċi import pandas as pd se jiġi mgħoddi lil Python. GetAnnotation jista 'jkun utli għall-kisba ta' skripts Python b'ħafna linji, iżda m'hemm l-ebda restrizzjonijiet fuq dan il-metodu ta 'kisba tal-kodiċi. Tista 'tissettja l-proprjetà Code b'xi mod konvenjenti għalik.

Jkollna Varjabbli

Sfida oħra interessanti bl-użu isc.py.msg.ExecutionRequest - Correlation Matrix: Tabular:

Python Gateway f'InterSystems IRIS

Jikkalkula l-Matriċi ta 'Korrelazzjoni fuq in-naħa ta' Python u estratti l-varjabbli corrmat lura għal InterSystems IRIS fil-format JSON billi tistabbilixxi l-proprjetajiet tat-talba:

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

Nistgħu naraw ir-riżultati f'Viżwali Traċċa:

Python Gateway f'InterSystems IRIS

U jekk għandna bżonn dan il-valur fil-BP, nistgħu niksbuh bħal dan: callresponse.Variables.GetAt("corrmat").

Trasferiment tad-dejta

Sussegwentement, ejja nitkellmu dwar it-trasferiment tad-dejta minn InterSystems IRIS għal Python; it-talbiet kollha għat-trasferiment tad-dejta jimplimentaw l-interface isc.py.msg.DataRequestli jipprovdi l-proprjetajiet li ġejjin:

  • Variable — varjabbli Python li fiha tinkiteb id-dejta.
  • Type — tip varjabbli: dataframe (pandas dataframe) jew list.
  • Namespace — iż-żona li minnha nirċievu d-dejta. Borża tal-plastik isc.py għandhom ikunu disponibbli f'dan il-qasam. Dan jista 'jkun żona mingħajr appoġġ tal-prodott.

Ibbażat fuq din l-interface, 4 klassijiet ta’ talbiet huma implimentati:

  • isc.py.msg.QueryRequest - issettja l-proprjetà Query biex tibgħat mistoqsija SQL.
  • isc.py.msg.ClassRequest - issettja l-proprjetà Class biex jgħaddi data tal-klassi.
  • isc.py.msg.TableRequest - issettja proprjetà Table biex tittrasferixxi data tal-mejda.
  • isc.py.msg.GlobalRequest - issettja proprjetà Global għat-trasferiment globali tad-dejta.

Fil-proċess tat-test, ħares lejn l-attività RAWfejn isc.py.msg.QueryRequest murija fl-azzjoni.

Python Gateway f'InterSystems IRIS

Iffrankar/Restawrar Kuntest Python

Fl-aħħarnett, nistgħu naħżnu l-kuntest Python f'InterSystems IRIS, biex nagħmlu dan aħna nibagħtu isc.py.msg.SaveRequest bl-argumenti:

  • Mask — Jiġu salvati biss il-varjabbli li jaqblu mal-maskra. Appoġġjati * и ?. Eżempju: "Data*, Figure?"... Default *.
  • MaxLength — It-tul massimu tal-varjabbli maħżun. Jekk is-serialization ta 'varjabbli hija itwal, se tiġi injorata. Issettja għal 0 biex tikseb varjabbli ta' kwalunkwe tul. Default $$$MaxStringLength.
  • Name — Isem tal-kuntest (mhux obbligatorju).
  • Description — Deskrizzjoni tal-kuntest (mhux obbligatorju).

Ritorni Ens.StringResponse с Id kuntest salvat. Fil-proċess tat-test, ħares lejn l-attività Save Context.

Talba relatata isc.py.msg.RestoreRequest jgħabbi l-kuntest minn InterSystems IRIS f'Python:

  • ContextId — identifikatur tal-kuntest.
  • Clear — ċara l-kuntest qabel ir-restawr.

Notebook Jupyter

Notebook Jupyter hija applikazzjoni tal-web sors miftuħ li tippermettilek toħloq u tippubblika notebooks li fihom kodiċi, viżwalizzazzjonijiet u test. Python Gateway jippermettilek tara u teditja proċessi BPL fil-forma ta' Jupyter Notebook. Jekk jogħġbok innota li l-eżekutur normali Python 3 bħalissa qed jintuża.

Din l-estensjoni tassumi li l-annotazzjonijiet fihom kodiċi Python u tuża l-ismijiet tal-attivitajiet bħala titoli preċedenti. Issa huwa possibbli li jiġu żviluppati proċessi tan-negozju PythonGateway f'Jupyter Notebook. Hawn x'inhu possibbli:

  • Oħloq proċessi kummerċjali ġodda
  • Ħassar proċessi tan-negozju
  • Oħloq attivitajiet ġodda
  • Ibdel l-attivitajiet
  • Ħassar attivitajiet

Hawnhekk video demo. U ftit screenshots:

Proċess Explorer

Python Gateway f'InterSystems IRIS

Editur tal-proċess

Python Gateway f'InterSystems IRIS

Installazzjoni

  1. Ikollok bżonn InterSystems IRIS 2019.2+.
  2. Installa PythonGateway v0.8+ (meħtieġ biss isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints и isc.py.ens.ProcessUtils).
  3. Aġġorna l-kodiċi ObjectScript mir-repożitorju.
  4. Eżegwixxi do ##class(isc.py.util.Jupyter).Install() u segwi l-istruzzjonijiet.

Dokumentazzjoni.

Sejbiet

MLToolkit huwa sett ta 'għodod li l-għan tagħhom huwa li jgħaqqdu mudelli u ambjent transazzjonali sabiex il-mudelli mibnija jkunu jistgħu jintużaw faċilment direttament fil-proċessi tan-negozju tiegħek. Python Gateway huwa parti minn MLToolkit u jipprovdi integrazzjoni mal-lingwa Python, li jippermettilek orkestra kwalunkwe algoritmi ta' tagħlim tal-magni maħluqa f'Python (l-ambjent ewlieni għal ħafna Xjentisti tad-Data), tuża bosta libreriji lesti biex toħloq malajr AI analitika adattiva u robotika / Soluzzjonijiet ML fuq il-pjattaforma InterSystems IRIS.

referenzi

MLToolkit

Il-grupp ta' utenti MLToolkit huwa repożitorju privat ta' GitHub maħluq bħala parti mill-organizzazzjoni korporattiva GitHub ta' InterSystems. Huwa maħsub għal utenti esterni li jinstallaw, jitgħallmu, jew diġà qed jużaw komponenti MLToolkit, inkluż il-Python Gateway. Il-grupp għandu numru ta 'każijiet implimentati (b'kodiċi tas-sors u dejta tat-test) fl-oqsma tal-kummerċjalizzazzjoni, il-manifattura, il-mediċina u ħafna industriji oħra. Biex tissieħeb mal-Grupp ta' Utenti tal-ML Toolkit, jekk jogħġbok ibgħat email qasira fl-indirizz li ġej: [protett bl-email] u inkludi l-informazzjoni li ġejja fl-ittra tiegħek:

  • Isem tal-utent GitHub
  • Organizzazzjoni (int taħdem jew tistudja)
  • Pożizzjoni (il-pożizzjoni attwali tiegħek fl-organizzazzjoni tiegħek, jew "Student" jew "Indipendenti").
  • Pajjiż

Għal dawk li qraw l-artiklu u huma interessati fil-kapaċitajiet ta 'InterSystems IRIS bħala pjattaforma għall-iżvilupp jew il-hosting ta' intelliġenza artifiċjali u magni tat-tagħlim tal-magni, nistednuk tiddiskuti xenarji possibbli li huma ta 'interess għall-intrapriża tiegħek. Inkunu kuntenti li nanalizzaw il-ħtiġijiet tal-kumpanija tiegħek u niddeterminaw flimkien pjan ta 'azzjoni; L-indirizz elettroniku ta' kuntatt tat-tim tagħna ta' esperti AI/ML - [protett bl-email].

Sors: www.habr.com

Żid kumment