Python Gateway en InterSystems IRIS

Tiu artikolo temas pri Python Gateway, malfermfonteca komunumprojekto por la InterSystems IRIS datenplatformo. Ĉi tiu projekto ebligas al vi reĝisori iujn ajn maŝinlernajn algoritmojn kreitajn en Python (la ĉefa medio por multaj Datumsciencistoj), uzi multajn pretajn bibliotekojn por rapide krei adaptajn, robotajn analizajn AI / ML-solvojn sur la InterSystems IRIS-platformo. En ĉi tiu artikolo, mi montros kiel InterSystems IRIS povas reĝisori procezojn en Python, efike komuniki dudirektajn datumojn kaj krei inteligentajn komercajn procezojn.

Plano

  1. Enkonduko
  2. Iloj.
  3. Instalado.
  4. API.
  5. Kunfunkciebleco.
  6. Jupyter Kajero.
  7. Konkludoj.
  8. Ligiloj.
  9. MLTilaro.

Enkonduko

Python estas altnivela, ĝeneraluzebla programlingvo celanta plibonigi la produktivecon de la programistoj kaj la legeblecon de la kodo. En ĉi tiu serio de artikoloj, mi diskutos la eblecojn uzi Python sur la InterSystems IRIS-platformo, kun la ĉefa fokuso de ĉi tiu artikolo estas la uzo de Python kiel lingvo por krei kaj funkciigi maŝinlernajn modelojn.

Maŝina lernado (ML) estas klaso de metodoj de artefarita inteligenteco, kies karakterizaĵo ne estas la rekta solvo de problemo, sed lernado en la procezo de solvado de multaj similaj problemoj.

Algoritmoj kaj modeloj de maŝinlernado iĝas pli oftaj. Estas multaj kialoj por tio, sed ĉio dependas de alirebleco, simpleco kaj atingado de praktikaj rezultoj. Ĉu clustering aŭ eĉ neŭrala reto modelado estas nova teknologio?

Kompreneble ne, sed nuntempe ne necesas skribi centojn da miloj da linioj de kodo por ruli ununuran modelon, kaj la kosto de kreado kaj uzado de modeloj estas pli kaj malpli.

Iloj evoluas - kvankam ni ne havas plene GUI-centrajn AI/ML-iloj, la progreso, kiun ni vidis kun multaj aliaj klasoj de informsistemoj, kiel ekzemple BI (de skribado de kodo ĝis uzado de kadroj kaj GUI-centraj agordeblaj solvoj), estas ankaŭ observite en iloj por krei AI/ML. Ni jam pasis la etapon de skribado de kodo kaj hodiaŭ ni uzas kadrojn por konstrui kaj trejni modelojn.

Aliaj plibonigoj, kiel ekzemple la kapablo distribui antaŭtrejnitan modelon kie la finuzanto simple devas fini trejni la modelon pri siaj specifaj datumoj, ankaŭ faciligas komenci kun maŝinlernado. Ĉi tiuj progresoj faciligas lernadon de maŝinlernado kaj por profesiuloj kaj kompanioj ĝenerale.

Aliflanke, ni kolektas pli kaj pli da datumoj. Kun unuigita datumplatformo kiel InterSystems IRIS, ĉiuj ĉi tiuj informoj povas esti tuj preparitaj kaj uzataj kiel enigaĵo al maŝinlernado-modeloj.

Kun la movo al la nubo, lanĉi AI/ML-projektojn fariĝas pli facila ol iam ajn. Ni povas nur konsumi la rimedojn, kiujn ni bezonas. Krome, danke al la paraleligo ofertita de nubaj platformoj, ni povas ŝpari tempon elspezitan.

Sed kio pri la rezultoj? Ĉi tie aferoj pli komplikas. Estas multaj iloj por konstrui modelojn, pri kiuj mi diskutos poste. Konstrui bonan modelon ne estas facila, sed kio poste? Profiti el uzado de komerca modelo ankaŭ estas ne-triviala tasko. La radiko de la problemo estas la apartigo de analizaj kaj transakciaj laborkvantoj, kaj datummodeloj. Kiam ni trejnas modelon, ni kutime faras ĝin sur historiaj datumoj. Sed la loko por la konstruita modelo estas en transakcia datumtraktado. Kio utilas la plej bona fraŭda transakcia detekto-modelo, se ni funkciigas ĝin unufoje tage? La skamantoj jam delonge foriris kun la mono. Ni devas trejni la modelon pri historiaj datumoj, sed ni ankaŭ devas apliki ĝin en reala tempo pri novaj envenantaj datumoj, por ke niaj komercaj procezoj povu agi sur la antaŭdiroj faritaj de la modelo.

La ML Toolkit estas aro de iloj kiuj celas fari ĝuste tion: unuigi modelojn kaj transakcian medion por ke la konstruitaj modeloj povas esti facile uzataj rekte en viaj komercaj procezoj. Python Gateway estas parto de la ML Toolkit kaj disponigas integriĝon kun la Python-lingvo (simila al kiel R Gateway, estante parto de la ML Toolkit disponigas integriĝon kun la R-lingvo).

Ilaro

Antaŭ ol ni daŭrigos, mi ŝatus priskribi kelkajn Python-ilojn kaj bibliotekojn, kiujn ni uzos poste.

de teknologio

  • Python estas interpretita, altnivela, ĝeneraluzebla programlingvo. La ĉefa avantaĝo de la lingvo estas ĝia granda biblioteko de matematikaj, ML kaj AI bibliotekoj. Kiel ObjectScript, ĝi estas objekto-orientita lingvo, sed ĉio estas difinita dinamike prefere ol statike. Ankaŭ ĉio estas objekto. Pli postaj artikoloj supozas preterpasan konatecon kun la lingvo. Se vi volas eklerni, mi rekomendas komenci per dokumentado.
  • Por niaj postaj ekzercoj, agordu Python 3.6.7 64 bitoj.
  • IDE: Mi uzas PyCharm, sed ĝenerale ili multe. Se vi uzas Atelier, ekzistas kromaĵo Eclipse por programistoj de Python. Se vi uzas VS Code, ekzistas etendo por Python.
  • Kajero: Anstataŭ IDE, vi povas skribi kaj dividi viajn skriptojn en interretaj kajeroj. La plej populara el ili estas Jupitero.

Bibliotekoj

Jen (ne ĝisfunda) listo de maŝinlernantaj bibliotekoj:

  • Numba — fundamenta pako por precizaj kalkuloj.
  • Pandoj — alt-efikecaj datumstrukturoj kaj datum-analizaj iloj.
  • matplotlib — kreado de grafikaĵoj.
  • Marnaskita — datuma bildigo bazita sur matplotlib.
  • Sklearn — maŝinlernadaj metodoj.
  • XGBoost — maŝinlernado-algoritmoj en la kadro de la metodologio de gradienta plifortigo.
  • Gensim — NLP.
  • Keras - neŭralaj retoj.
  • Tensorfluo — platformo por krei maŝinlernajn modelojn.
  • PyTorch estas platformo por krei maŝinlernajn modelojn, fokusitaj al Python.
  • Nyoka - PMML el diversaj modeloj.

AI/ML-teknologioj faras komercon pli efika kaj adaptebla. Krome, hodiaŭ ĉi tiuj teknologioj fariĝas pli facile disvolveblaj kaj efektivigeblaj. Komencu lerni pri AI/ML-teknologioj kaj kiel ili povas helpi vian organizon kreski.

fikso

Estas pluraj manieroj instali kaj uzi Python Gateway:

  • OS
    • fenestroj
    • linux
    • Makintoŝo
  • Docker
    • Uzu bildon de DockerHub
    • Kreu vian propran aspekton

Sendepende de la instala metodo, vi bezonos la fontkodon. La sola loko por elŝuti la kodon estas eldonoj paĝo. Ĝi enhavas provitajn stabilajn eldonojn, nur prenu la plej novan. Nuntempe ĝi estas 0.8, sed kun la tempo estos novaj. Ne klonu/elŝutu la deponejon, elŝutu la lastan eldonon.

OS

Se vi instalas Python Gateway sur operaciumo, tiam unue (sendepende de la operaciumo) vi devas instali Python. Por ĉi tio:

  1. Instalu Python 3.6.7 64 bitojn. Oni rekomendas instali Python en la defaŭlta dosierujo.
  2. Instalu la modulon dill: pip install dill.
  3. Elŝutu la ObjectScript-kodon (t.e. do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) al iu ajn areo kun produktoj. Se vi volas ekzistantan areon por subteni produktojn, rulu: write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. Loko voko DLL/SO/DYLIB al dosierujo bin via InterSystems IRIS-instanco. La bibliotekdosiero devas esti havebla en la vojo redonita write ##class(isc.py.Callout).GetLib().

fenestroj

  1. Certiĝu la mediovariablo PYTHONHOME montras al Python 3.6.7.
  2. Certiĝu, ke la sistema mediovariablo estas PATH enhavas variablon PYTHONHOME (aŭ la dosierujo al kiu ĝi montras).

Linukso (Debiano/Ubuntu)

  1. Kontrolu ke la mediovariablo estas PATH enhavas /usr/lib и /usr/lib/x86_64-linux-gnu. Uzu dosieron /etc/environment por agordi mediajn variablojn.
  2. En kazo de eraroj undefined symbol: _Py_TrueStruct starigu la agordon PythonLib. ankaŭ en README estas sekcio pri solvo de problemoj.

Makintoŝo

  1. Nuntempe nur Python 3.6.7 estas subtenata python.org. Kontrolu la variablon PATH.

Se vi ŝanĝis mediajn variablojn, rekomencu vian InterSystems-produkton.

Docker

Uzado de ujoj havas kelkajn avantaĝojn:

  • Portebleco
  • Efikeco
  • Izolado
  • Malpezeco
  • Neŝanĝebleco

Rigardu ĉi tion serio de artikoloj por pliaj informoj pri uzado de Docker kun InterSystems-produktoj.

Ĉiuj konstruoj de Python Gateway estas nuntempe ujo bazitaj 2019.4.

Preta bildo

Kuri: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latestpor elŝuti kaj ruli Python Gateway kun InterSystems IRIS Community Edition. Tio estas ĉio.

Kreu vian propran aspekton

Por konstrui docker-bildon, rulu en la radiko de la deponejo: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
Defaŭlte, la bildo estas konstruita surbaze de la bildo store/intersystems/iris-community:2019.4.0.383.0, tamen vi povas ŝanĝi ĉi tion agordante variablon IMAGE.
Por konstrui el InterSystems IRIS, rulu: `docker build --build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 --force-rm --tag intersystemscommunity/irispy:latest ".

Post ĉi tio vi povas ruli la docker-bildon:

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

Se vi uzas bildon bazitan sur InterSystems IRIS Community Edition, vi povas preterlasi la ŝlosilon.

komentoj

  • Procezo isc.py.test.Process konservas kelkajn bildojn al provizora dosierujo. Vi eble volas ŝanĝi ĉi tiun vojon al la muntita dosierujo. Por fari tion, redaktu la agordon WorkingDir specifi la muntitan dosierujon.
  • Por aliri la terminalan kuron: docker exec -it irispy sh.
  • Aliro al la Sistemadministrada Portalo per ensaluto SuperUser/SYS.
  • Por haltigi la ujon, kuru: docker stop irispy && docker rm --force irispy.

Kontrolante la instaladon

Post kiam vi instalis Python Gateway, indas kontroli, ke ĝi funkcias. Efektivigu ĉi tiun kodon en la terminalo InterSystems IRIS:

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

La rezulto devus esti: HELLO — Python-varia valoro x. Se la revena stato sc estas eraro aŭ var malplena, kontroli Legu min - Sekcio pri solvo de problemoj.

API

Python Gateway estas instalita kaj vi kontrolis, ke ĝi funkcias. Estas tempo komenci uzi ĝin!
La ĉefa interfaco al Python estas isc.py.Main. Ĝi ofertas la sekvajn grupojn de metodoj (ĉiuj revenas %Status):

  • Kodo-Ekzekuto
  • Transdono de datumoj
  • Helpa

Kodo-Ekzekuto

Ĉi tiuj metodoj permesas al vi ekzekuti arbitran Python-kodon.

SimpleString

SimpleString - jen la ĉefa metodo. Ĝi prenas 4 laŭvolajn argumentojn:

  • code — linio de kodo por ekzekuti. Linioflua signo: $c(10).
  • returnVariable — nomo de la redonenda variablo.
  • serialization - kiel seriigi returnVariable. 0 — ĉeno (defaŭlte), 1 — repr.
  • result — ByRef referenco al la variablo en kiu la valoro estas skribita returnVariable.

Supre ni faris:

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

En ĉi tiu ekzemplo, ni atribuas al Python-variablo x signifo Hello kaj volas redoni la valoron de Python-variablo x al ObjectScript variablo var.

ExecuteCode

ExecuteCode estas pli sekura kaj malpli restrikta alternativo SimpleString.
Linioj en la platformo InterSystems IRIS estas limigitaj al 3 signoj, kaj se vi volas efektivigi pli longan kodon, vi devas uzi fadenojn.
Du argumentoj estas akceptitaj:

  • code — linio aŭ fluo de Python-kodo plenumenda.
  • variable — (nedeviga) asignas la rezulton de ekzekuto code ĉi tiu Python-variablo.

Ekzemplo por uzi:

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

En ĉi tiu ekzemplo, ni multiplikas 2 per 3 kaj skribas la rezulton al Python-variablo y.

Transdono de datumoj

Transdonu datumojn al kaj de Python.

Python -> InterSystems IRIS

Estas 4 manieroj akiri la valoron de Python-variablo en InterSystems IRIS, depende de la seriigo, kiun vi bezonas:

  • String por simplaj datumtipoj kaj senararigado.
  • Repr por stoki simplajn objektojn kaj sencimigi.
  • JSON por facila manipulado de datumoj ĉe la flanko de InterSystems IRIS.
  • Pickle por konservi objektojn.

Ĉi tiuj metodoj permesas al vi preni variablojn de Python kiel ĉeno aŭ fluoj.

  • GetVariable(variable, serialization, .stream, useString) - akiri serialization variablo variable в stream. Se useString estas 1 kaj la seriigo estas metita sur ŝnuron, tiam ŝnuro estas resendita kaj ne fluo.
  • GetVariableJson(variable, .stream, useString) — akiri JSON seriigon de variablo.
  • GetVariablePickle(variable, .stream, useString, useDill) -get Pickle (aŭ Dill) seriigon de variablo.

Ni provu akiri nian variablon y.

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

InterSystems IRIS -> Python

Ŝargante datumojn de InterSystems IRIS en Python.

  • ExecuteQuery(query, variable, type, namespace) - kreas datumaron (pandoj dataframelist) de la sql-demando kaj agordas ĝin al Python-variablo variable. Plasta sako isc.py devas esti havebla en la areo namespace — la peto estos plenumita tie.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) - ŝarĝas tutmondajn datumojn global de abono start por end en Python kiel tipvariablo type: list, aŭ pandoj dataframe. Priskribo de laŭvolaj argumentoj mask kaj labels havebla en klasdokumentado kaj deponejo Dokumentoj pri Transdono de Datumoj.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) - ŝarĝas klasajn datumojn class de id start por end en Python kiel tipvariablo type: list, aŭ pandoj dataframe. properties — listo (apartita per komo) de klasaj propraĵoj, kiuj devas esti ŝargitaj en la datuman aron. Maskoj subtenataj * и ?. Defaŭlte - * (ĉiuj propraĵoj). Proprieto %%CLASSNAME ignorita.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) - ŝarĝas tabelajn datumojn table de id start por end en Python.

ExecuteQuery — universala (ĉiu ĝusta SQL-demando estos transdonita al Python). Tamen, ExecuteGlobal kaj ĝiaj envolvaĵoj ExecuteClass и ExecuteTable labori kun kelkaj limigoj. Ili estas multe pli rapidaj (3-5 fojojn pli rapidaj ol la ODBC-ŝoforo kaj 20 fojojn pli rapidaj ExecuteQuery). Pliaj informoj ĉe Dokumentoj pri Transdono de Datumoj.
Ĉiuj ĉi tiuj metodoj subtenas transdonon de datumoj de iu ajn areo. Plasta sako isc.py devas esti havebla en la cela areo.

ExecuteQuery

ExecuteQuery(request, variable, type, namespace) — translokigi la rezultojn de iu ĝusta SQL-demando al Python. Ĉi tiu estas la plej malrapida metodo de transigo de datumoj. Uzu ĝin se ExecuteGlobal kaj ĝiaj envolvaĵoj ne haveblas.

Argumentoj:

  • query - sql-demando.
  • variable — la nomo de la Python-variablo en kiu la datumoj estas skribitaj.
  • type - list aŭ Pandoj dataframe.
  • namespace — la areo en kiu la peto estos plenumita.

ExecuteGlobal

ExecuteGlobal(global, variable, type, start, end, mask, labelels, namespace) - pasi globalon en Python.

Argumentoj:

  • global - tutmonda nomo sen ^
  • variable — la nomo de la Python-variablo en kiu la datumoj estas skribitaj.
  • type - list aŭ Pandoj dataframe.
  • start — la unua subskribo de la globalo. Necese %Integer.
  • end — la lasta subskribo de la globalo. Necese %Integer.
  • mask — tutmonda valormasko. La masko povas esti pli mallonga ol la nombro da kampoj en la tutmonda (en kiu kazo la kampoj ĉe la fino estos preterlasitaj). Kiel formati maskon:
    • + pasigu la valoron kiel estas.
    • - salti valoron.
    • b — Bulea tipo (0 - False, ĉio cetera - True).
    • d — Dato (de $horolog, ĉe Vindozo de 1970, ĉe Linukso de 1900).
    • t — Tempo ($horolog, sekundoj post noktomezo).
    • m — Tempostampo (formata ĉeno JARO-MONATO-TAG HORO:MINUTO:SECONDO).
  • labels — % Listo de kolonnomoj. La unua elemento estas la nomo de la subíndice.
  • namespace — la areo en kiu la peto estos plenumita.

ExecuteClass

Volvu super ExecuteGlobal. Surbaze de la klasdifino, preparas vokon ExecuteGlobal kaj vokas lin.

ExecuteClass(class, variable, type, start, end, properties, namespace) - pasi klasajn datumojn en Python.

Argumentoj:

  • class - klasnomo
  • variable — la nomo de la Python-variablo en kiu la datumoj estas skribitaj.
  • type - list aŭ Pandoj dataframe.
  • start — komencanta ID.
  • end — fina Id
  • properties — listo (apartita per komo) de klasaj propraĵoj, kiuj devas esti ŝargitaj en la datuman aron. Maskoj subtenataj * и ?. Defaŭlte - * (ĉiuj propraĵoj). Proprieto %%CLASSNAME ignorita.
  • namespace — la areo en kiu la peto estos plenumita.

Ĉiuj ecoj estas pasigitaj kiel estas krom tipaj propraĵoj %Date, %Time, %Boolean и %TimeStamp - ili estas konvertitaj en la respondajn Python-klasojn.

ExecuteTable

Volvu super ExecuteClass. Tradukas la tabelnomon en la klasnomon kaj vokojn ExecuteClass. Subskribo:

ExecuteTable(table, variable, type, start, end, properties, namespace) - pasi tabelajn datumojn al Python.

Argumentoj:

  • table — tabelnomo.
    Ĉiuj aliaj argumentoj estas pasigitaj kiel al ExecuteClass.

Notoj

  • ExecuteGlobal, ExecuteClass и ExecuteTable labori same rapide.
  • ExecuteGlobal 20 fojojn pli rapide ol ExecuteQuery sur grandaj datumaj aroj (tempo de transigo > 0.01 sekundoj).
  • ExecuteGlobal, ExecuteClass и ExecuteTable labori pri globaloj kun ĉi tiu strukturo: ^global(key) = $lb(prop1, prop2, ..., propN) kie key — entjero.
  • Por ExecuteGlobal, ExecuteClass и ExecuteTable subtenata gamo de valoroj %Date respondas al intervalo mktime kaj dependas de la OS (fenestroj: 1970-01-01, linux 1900-01-01, Makintoŝo). Uzu %TimeStamptranslokigi datumojn ekster ĉi tiu gamo aŭ uzi pandas datumkadro ĉar ĉi tio estas nur-lista limigo.
  • Por ExecuteGlobal, ExecuteClass и ExecuteTable ĉiuj argumentoj krom la datumfonto (tutmonda, klaso aŭ tabelo) kaj variablo estas laŭvolaj.

ekzemploj

Testklaso isc.py.test.Person enhavas metodon montrantan ĉiujn opciojn pri transdono de datumoj:

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)

Voku la metodon do ##class(isc.py.test.Person).Test() por vidi kiel ĉiuj datumtransigo metodoj funkcias.

Helpaj Metodoj

  • GetVariableInfo(variable, serialization, .defined, .type, .length) — akiri informojn pri la variablo: ĉu ĝi estas difinita, ĝia klaso kaj seriiglongo.
  • GetVariableDefined(variable, .defined) — ĉu la variablo estas difinita.
  • GetVariableType(variable, .type) — akiri la klason de la variablo.
  • GetStatus() - akiri kaj forigi la lastan escepton ĉe la flanko de Python.
  • GetModuleInfo(module, .imported, .alias) — akiri modulan variablon kaj importi statuson.
  • GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments) — akiri informojn pri la funkcio.

Kunfunkciebleco

Vi lernis kiel voki Python Gateway de la terminalo, nun ni komencu uzi ĝin en produktado. La bazo por interagi kun Python en ĉi tiu reĝimo estas isc.py.ens.Operation. Ĝi permesas al ni:

  • Efektivigu kodon en Python
  • Konservi/Restarigi Python-kuntekston
  • Ŝarĝu kaj ricevu datumojn de Python

Esence, Python-operacio estas envolvaĵo super isc.py.Main. Operacio isc.py.ens.Operation disponigas la kapablon interagi kun la Python-procezo de InterSystems IRIS-produktoj. Kvin demandoj estas subtenataj:

  • isc.py.msg.ExecutionRequest por ekzekuti Python-kodon. Revenoj isc.py.msg.ExecutionResponse kun la ekzekutrezulto kaj la valoroj de la petitaj variabloj.
  • isc.py.msg.StreamExecutionRequest por ekzekuti Python-kodon. Revenoj isc.py.msg.StreamExecutionResponse la rezulto de ekzekuto kaj la valoroj de la petitaj variabloj. Analogo isc.py.msg.ExecutionRequest, sed akceptas kaj resendas fluojn anstataŭ ĉenojn.
  • isc.py.msg.QueryRequest por transdoni la rezulton de ekzekuto de SQL-demando. Revenoj Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest por transdoni tutmondajn/klasajn/tabelajn datumojn. Revenoj Ens.Response.
  • isc.py.msg.SaveRequest por konservi Python-kuntekston. Revenoj Ens.StringResponse kun kunteksta ID.
  • isc.py.msg.RestoreRequest restarigi la Python-kuntekston.

    Krome, isc.py.ens.Operation havas du agordojn:

    • Initializer — elektante klason kiu efektivigas la interfacon isc.py.init.Abstract. Ĝi povas esti uzata por ŝarĝi funkciojn, modulojn, klasojn ktp. Ĝi estas ekzekutita unufoje kiam la procezo komenciĝas.
    • PythonLib - (nur Linukso) se vi vidas erarojn dum ŝarĝo, agordu ĝian valoron al libpython3.6m.so aŭ eĉ en la plena vojo al la Python-biblioteko.

Kreado de komercaj procezoj

Estas du klasoj disponeblaj, kiuj faciligas la disvolviĝon de komercaj procezoj:

  • isc.py.ens.ProcessUtils ebligas al vi ĉerpi komentariojn el agadoj kun ŝanĝiĝema anstataŭigo.
  • isc.py.util.BPEmulator faciligas testi komercajn procezojn kun Python. Ĝi povas efektivigi komercan procezon (Python-partoj) en la nuna procezo.

Variebla Anstataŭigo

Ĉiuj komercaj procezoj hereditaj de isc.py.ens.ProcessUtils, povas uzi la metodon GetAnnotation(name) por ricevi la aktivan komentadvaloron laŭ ĝia nomo. La agadkomentado povas enhavi variablojn, kiuj estos kalkulitaj ĉe la flanko de InterSystems IRIS antaŭ ol esti transdonitaj al Python. Jen la sintakso por varia anstataŭigo:

  • ${class:method:arg1:...:argN} - metodovoko
  • #{expr} — ekzekuti kodon en ObjectScript-lingvo.

Ekzemplo haveblas en la testa komerca procezo isc.py.test.Process, ekzemple, en agado Correlation Matrix: Graph: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). En ĉi tiu ekzemplo:

  • #{process.WorkDirectory} redonas la posedaĵon WorkDirectory de la objekto process, kiu estas ekzemplo de la klaso isc.py.test.Process tiuj. nuna komerca procezo.
  • ${%PopulateUtils:Integer:1:100} nomas metodo Integer klaso %PopulateUtils, pasigante argumentojn 1 и 100, revenante hazardan entjeron en la intervalo 1...100.

Testa komerca procezo

Testaj produktoj kaj testaj komercaj procezoj estas disponeblaj defaŭlte kiel parto de la Python Gateway. Por uzi ilin:

  1. En la OS-terminalo, rulu: pip install pandas matplotlib seaborn.
  2. En la terminalo InterSystems IRIS, rulu: do ##class(isc.py.test.CannibalizationData).Import() por plenigi testajn datumojn.
  3. Lanĉi produktojn isc.py.test.Production.
  4. Sendu peton tipon Ens.Request в isc.py.test.Process.

Ni vidu kiel ĉio funkcias kune. Malfermu isc.py.test.Process en la BPL-redaktisto:

Python Gateway en InterSystems IRIS

Kodo-Ekzekuto

La plej grava defio estas ekzekuti Python-kodon:

Python Gateway en InterSystems IRIS

Demando uzata isc.py.msg.ExecutionRequest, jen ĝiaj propraĵoj:

  • Code — Python-kodo.
  • SeparateLines — ĉu dividi la kodon en liniojn por ekzekuto. $c(10) (n) estas uzata por apartigi ŝnurojn. Bonvolu noti, ke NE rekomendas procesi la tutan mesaĝon samtempe, ĉi tiu funkcio nur intencas prilabori def kaj similaj plurliniaj esprimoj. Defaŭlte 0.
  • Variables — komo-disigita listo de variabloj kiuj estos aldonitaj al la respondo.
  • Serialization — Kiel seriigi la variablojn, kiujn ni volas redoni. Opcioj: Str, Repr, JSON, Pickle и Dill, defaŭlte Str.

En nia kazo, ni nur starigas la posedaĵon Code, do ĉiuj aliaj propraĵoj uzas la defaŭltajn valorojn. Ni fiksas ĝin per vokado process.GetAnnotation("Import pandas"), kiu ĉe rultempo resendas komenton post kiam ŝanĝiĝema anstataŭigo estis farita. Post ĉio, la kodo import pandas as pd estos transdonita al Python. GetAnnotation povas esti utila por akiri plurliniajn Python-skriptojn, sed ne ekzistas limigoj pri ĉi tiu metodo por akiri kodon. Vi povas agordi la posedaĵon Code iel oportune por vi.

Akiro de Variabloj

Alia interesa defio uzi isc.py.msg.ExecutionRequest - Correlation Matrix: Tabular:

Python Gateway en InterSystems IRIS

Ĝi kalkulas la Korelacian Matricon ĉe la flanko de Python kaj ĉerpas la variablon corrmat reen al InterSystems IRIS en JSON-formato agordante la petajn trajtojn:

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

Ni povas vidi la rezultojn en Visual Trace:

Python Gateway en InterSystems IRIS

Kaj se ni bezonas ĉi tiun valoron en la BP, ni povas akiri ĝin jene: callresponse.Variables.GetAt("corrmat").

Transdono de datumoj

Poste, ni parolu pri translokigo de datumoj de InterSystems IRIS al Python; ĉiuj petoj por transdono de datumoj efektivigas la interfacon isc.py.msg.DataRequestkiu disponigas la sekvajn trajtojn:

  • Variable — Python-variablo en kiu datumoj estas skribitaj.
  • Type — varia tipo: dataframe (panda datumkadro) aŭ list.
  • Namespace — la areo de kiu ni ricevas datumojn. Plasta sako isc.py devus esti havebla en ĉi tiu areo. Ĉi tio povas esti areo sen produkta subteno.

Surbaze de ĉi tiu interfaco, 4 klasoj de petoj estas efektivigitaj:

  • isc.py.msg.QueryRequest - starigu la posedaĵon Query por sendi SQL-demandon.
  • isc.py.msg.ClassRequest - starigu la posedaĵon Class pasigi klasajn datumojn.
  • isc.py.msg.TableRequest - agordi posedaĵon Table transdoni tabelajn datumojn.
  • isc.py.msg.GlobalRequest - agordi posedaĵon Global por tutmonda transdono de datumoj.

En la testa procezo, rigardu la agadon RAWkie isc.py.msg.QueryRequest montrata en ago.

Python Gateway en InterSystems IRIS

Konservado/Restarigi Python Kuntekston

Fine, ni povas konservi la Python-kuntekston en InterSystems IRIS, por fari tion ni sendos isc.py.msg.SaveRequest kun argumentoj:

  • Mask — Nur variabloj kiuj kongruas kun la masko estas konservitaj. Subtenita * и ?. Ekzemplo: "Data*, Figure?"... Defaŭlte *.
  • MaxLength — La maksimuma longo de la stokita variablo. Se la seriigo de variablo estas pli longa, ĝi estos ignorita. Agordu al 0 por ricevi variablojn de ajna longo. Defaŭlte $$$MaxStringLength.
  • Name — Kunteksta nomo (laŭvola).
  • Description — Priskribo de la kunteksto (nedeviga).

Revenas Ens.StringResponse с Id konservita kunteksto. En la testa procezo, rigardu la agadon Save Context.

Rilata peto isc.py.msg.RestoreRequest ŝarĝas kuntekston de InterSystems IRIS en Python:

  • ContextId — kunteksta identigilo.
  • Clear — purigi la kuntekston antaŭ restarigi.

Kajero Jupyter

Kajero Jupyter estas malfermfonta TTT-aplikaĵo, kiu ebligas al vi krei kaj publikigi kajerojn enhavantajn kodon, bildigojn kaj tekston. Python Gateway permesas al vi vidi kaj redakti BPL-procezojn en la formo de Jupyter Notebook. Bonvolu noti, ke la normala ekzekutisto Python 3 estas nuntempe uzata.

Ĉi tiu etendaĵo supozas, ke komentarioj enhavas Python-kodon kaj uzas agadnomojn kiel antaŭajn titolojn. Nun eblas disvolvi komercajn procezojn PythonGateway en Jupyter Notebook. Jen kio eblas:

  • Krei novajn komercajn procezojn
  • Forigi komercajn procezojn
  • Krei novajn agadojn
  • Ŝanĝi agadojn
  • Forigi agadojn

tie demo-video. Kaj kelkaj ekrankopioj:

Proceza Esploristo

Python Gateway en InterSystems IRIS

Proceza redaktilo

Python Gateway en InterSystems IRIS

fikso

  1. Vi bezonos InterSystems IRIS 2019.2+.
  2. Instalu PythonGateway v0.8+ (nur bezonata isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints и isc.py.ens.ProcessUtils).
  3. Ĝisdatigu la ObjectScript-kodon el la deponejo.
  4. Ekzekutu do ##class(isc.py.util.Jupyter).Install() kaj sekvu la instrukciojn.

Dokumentado.

trovoj

MLToolkit estas aro de iloj, kies celo estas kombini modelojn kaj transakcian medion, por ke la konstruitaj modeloj estu facile uzataj rekte en viaj komercaj procezoj. Python Gateway estas parto de MLToolkit kaj provizas integriĝon kun la Python-lingvo, ebligante vin reĝisori ajnajn maŝinlernajn algoritmojn kreitajn en Python (la ĉefa medio por multaj Datumsciencistoj), uzi multajn pretajn bibliotekojn por rapide krei adaptan, robotan analizan AI / ML-solvoj sur la InterSystems-platformo IRIS.

referencoj

MLTilaro

La uzantgrupo MLToolkit estas privata GitHub-deponejo kreita kiel parto de la kompania GitHub-organizo de InterSystems. Ĝi estas destinita por eksteraj uzantoj kiuj instalas, lernas aŭ jam uzas MLToolkit-komponentojn, inkluzive de la Python Gateway. La grupo havas kelkajn efektivigitajn kazojn (kun fontkodo kaj testdatenoj) en la kampoj de merkatado, fabrikado, medicino kaj multaj aliaj industrioj. Por aliĝi al la Uzantgrupo de ML Toolkit, bonvolu sendi mallongan retpoŝton al la sekva adreso: [retpoŝte protektita] kaj inkluzivu la jenajn informojn en via letero:

  • GitHub uzantnomo
  • Organizo (vi laboras aŭ studas)
  • Pozicio (via reala pozicio en via organizo, ĉu "Studento" aŭ "Sendependa").
  • lando

Por tiuj, kiuj legis la artikolon kaj interesiĝas pri la kapabloj de InterSystems IRIS kiel platformo por disvolvi aŭ gastigi artefaritan inteligentecon kaj maŝinlernajn motorojn, ni invitas vin diskuti eblajn scenarojn, kiuj interesas vian entreprenon. Ni volonte analizos la bezonojn de via kompanio kaj kune determini agadplanon; Kontakta retadreso de nia fakteamo AI/ML - [retpoŝte protektita].

fonto: www.habr.com

Aldoni komenton