Python Gateway i InterSystems IRIS

Denne artikkelen handler om Python Gateway, et åpen kildekode-fellesskapsprosjekt for InterSystems IRIS-dataplattformen. Dette prosjektet lar deg orkestrere alle maskinlæringsalgoritmer opprettet i Python (hovedmiljøet for mange dataforskere), bruke en rekke ferdige biblioteker for raskt å lage adaptive, robotanalytiske AI/ML-løsninger på InterSystems IRIS-plattformen. I denne artikkelen vil jeg vise hvordan InterSystems IRIS kan orkestrere prosesser i Python, effektivt kommunisere toveisdata og skape intelligente forretningsprosesser.

plan

  1. Introduksjon.
  2. Verktøy.
  3. Installasjon.
  4. API.
  5. Interoperabilitet.
  6. Jupyter notatbok.
  7. Konklusjoner.
  8. Linker.
  9. MLToolkit.

Innledning

Python er et overordnet programmeringsspråk for generell bruk rettet mot å forbedre utviklerens produktivitet og kodelesbarhet. I denne artikkelserien vil jeg diskutere mulighetene for å bruke Python på InterSystems IRIS-plattformen, med hovedfokus i denne artikkelen på bruken av Python som språk for å lage og kjøre maskinlæringsmodeller.

Maskinlæring (ML) er en klasse av metoder for kunstig intelligens, hvis karakteristiske trekk ikke er den direkte løsningen av et problem, men læring i prosessen med å løse mange lignende problemer.

Maskinlæringsalgoritmer og -modeller blir stadig mer vanlige. Det er mange grunner til dette, men alt handler om tilgjengelighet, enkelhet og å oppnå praktiske resultater. Er klynging eller til og med nevrale nettverksmodellering en ny teknologi?

Selvfølgelig ikke, men i dag er det ikke nødvendig å skrive hundretusenvis av linjer med kode for å kjøre en enkelt modell, og kostnadene ved å lage og bruke modeller blir mindre og mindre.

Verktøy utvikler seg - mens vi ikke har fullt GUI-sentriske AI/ML-verktøy, er fremgangen vi har sett med mange andre klasser av informasjonssystemer, som BI (fra å skrive kode til å bruke rammeverk og GUI-sentriske konfigurerbare løsninger) . også observert i verktøy for å lage AI/ML. Vi har allerede passert stadiet med å skrive kode, og i dag bruker vi rammeverk for å bygge og trene modeller.

Andre forbedringer, som for eksempel muligheten til å distribuere en forhåndstrent modell der sluttbrukeren rett og slett må trene opp modellen på sine spesifikke data, gjør det også lettere å komme i gang med maskinlæring. Disse fremskrittene gjør læring av maskinlæring mye enklere for både profesjonelle og bedrifter generelt.

På den annen side samler vi inn stadig mer data. Med en enhetlig dataplattform som InterSystems IRIS, kan all denne informasjonen umiddelbart klargjøres og brukes som input til maskinlæringsmodeller.

Med overgangen til skyen blir det enklere enn noen gang å lansere AI/ML-prosjekter. Vi kan bare bruke de ressursene vi trenger. Dessuten, takket være parallelliseringen som tilbys av skyplattformer, kan vi spare tid brukt.

Men hva med resultatene? Det er her ting blir mer komplisert. Det finnes mange verktøy for å bygge modeller, som jeg skal diskutere videre. Å bygge en god modell er ikke lett, men hva videre? Å tjene penger på å bruke en forretningsmodell er også en ikke-triviell oppgave. Roten til problemet er separasjonen av analytiske og transaksjonelle arbeidsbelastninger og datamodeller. Når vi trener en modell, gjør vi det vanligvis på historiske data. Men stedet for den konstruerte modellen er i transaksjonsdatabehandling. Hva hjelper den beste modellen for oppdagelse av falske transaksjoner hvis vi kjører den en gang om dagen? Svindlerne har for lengst satt igjen med pengene. Vi må trene modellen på historiske data, men vi må også bruke den i sanntid på nye innkommende data slik at forretningsprosessene våre kan handle på spådommene som modellen gir.

ML Toolkit er et sett med verktøy som tar sikte på å gjøre nettopp det: forene modeller og et transaksjonsmiljø slik at de bygde modellene enkelt kan brukes direkte i forretningsprosessene dine. Python Gateway er en del av ML Toolkit og gir integrasjon med Python-språket (i likhet med hvordan R Gateway, som en del av ML Toolkit gir integrasjon med R-språket).

Инструментарий

Før vi fortsetter, vil jeg gjerne beskrive noen Python-verktøy og biblioteker som vi skal bruke senere.

Teknologi

  • Python er et tolket, høynivå, generell programmeringsspråk. Den største fordelen med språket er dets store bibliotek med matematiske, ML- og AI-biblioteker. Som ObjectScript er det et objektorientert språk, men alt er definert dynamisk i stedet for statisk. Alt er også et objekt. Senere artikler antar en forbigående kjennskap til språket. Hvis du vil begynne å lære, anbefaler jeg å begynne med dokumentasjon.
  • For våre påfølgende øvelser, sett Python 3.6.7 64 bit.
  • IDE: Jeg bruker PyCharm, men generelt sett de много. Hvis du bruker Atelier, er det en Eclipse-plugin for Python-utviklere. Hvis du bruker VS-kode, er det en utvidelse for Python.
  • Notatbok: I stedet for en IDE kan du skrive og dele skriptene dine i nettbaserte notatbøker. Den mest populære av dem er jupyter.

biblioteker

Her er en (ikke-uttømmende) liste over maskinlæringsbiblioteker:

  • Klumpete — en grunnleggende pakke for nøyaktige beregninger.
  • pandaer — datastrukturer og dataanalyseverktøy med høy ytelse.
  • Matplotlib — opprettelse av grafer.
  • sjøfødt — datavisualisering basert på matplotlib.
  • Sklearn — Maskinlæringsmetoder.
  • Xgboost — maskinlæringsalgoritmer innenfor rammen av gradientforsterkende metodikk.
  • Gensim — NLP.
  • Keras - nevrale nettverk.
  • tensorflow — en plattform for å lage maskinlæringsmodeller.
  • PyTorch er en plattform for å lage maskinlæringsmodeller, fokusert på Python.
  • Nyouka - PMML fra ulike modeller.

AI/ML-teknologier gjør virksomheten mer effektiv og tilpasningsdyktig. Dessuten blir disse teknologiene i dag lettere å utvikle og implementere. Begynn å lære om AI/ML-teknologier og hvordan de kan hjelpe organisasjonen din med å vokse.

Installasjon

Det er flere måter å installere og bruke Python Gateway på:

  • operativsystem
    • Windows
    • Linux
    • Mac
  • Docker
    • Bruk et bilde fra DockerHub
    • Lag ditt eget utseende

Uavhengig av installasjonsmetoden, trenger du kildekoden. Det eneste stedet å laste ned koden er utgivelsessiden. Den inneholder testede stabile utgivelser, bare ta den siste. For øyeblikket er det 0.8, men over tid kommer det nye. Ikke klon/last ned depotet, last ned den nyeste utgivelsen.

operativsystem

Hvis du installerer Python Gateway på et operativsystem, må du først (uavhengig av operativsystemet) installere Python. For dette:

  1. Installer Python 3.6.7 64 bit. Det anbefales å installere Python i standardkatalogen.
  2. Installer modulen dill: pip install dill.
  3. Last ned ObjectScript-koden (dvs. do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) til ethvert område med produkter. Hvis du vil at et eksisterende område skal støtte produkter, kjør: write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. Plass bildetekst DLL/SO/DYLIB til mappe bin din InterSystems IRIS-forekomst. Bibliotekfilen må være tilgjengelig i banen som returneres write ##class(isc.py.Callout).GetLib().

Windows

  1. Sørg for at miljøvariabelen PYTHONHOME peker på Python 3.6.7.
  2. Sørg for at systemmiljøvariabelen er PATH inneholder en variabel PYTHONHOME (eller katalogen den peker til).

Linux (Debian/Ubuntu)

  1. Sjekk at miljøvariabelen er PATH inneholder /usr/lib и /usr/lib/x86_64-linux-gnu. Bruk fil /etc/environment for å angi miljøvariabler.
  2. Ved feil undefined symbol: _Py_TrueStruct angi innstillingen PythonLib. også i readme det er en feilsøkingsdel.

Mac

  1. Foreløpig støttes bare Python 3.6.7 python.org. Sjekk variabelen PATH.

Hvis du endret miljøvariabler, start InterSystems-produktet på nytt.

Docker

Å bruke containere har en rekke fordeler:

  • Bærbarhet
  • effektivitet
  • Isolasjon
  • Letthet
  • Uforanderlighet

Sjekk ut dette serie artikler for mer informasjon om bruk av Docker med InterSystems-produkter.

Alle Python Gateway-bygg er for tiden containerbasert 2019.4.

Klart bilde

Løpe: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latestfor å laste ned og kjøre Python Gateway med InterSystems IRIS Community Edition. Det er alt.

Lag ditt eget utseende

For å bygge et docker-bilde, kjør i roten av depotet: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
Som standard bygges bildet basert på bildet store/intersystems/iris-community:2019.4.0.383.0, men du kan endre dette ved å angi en variabel IMAGE.
For å bygge fra InterSystems IRIS, kjør: `docker build --build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 --force-rm --tag intersystemscommunity/irispy:latest ".

Etter dette kan du kjøre docker-bildet:

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

Hvis du bruker et bilde basert på InterSystems IRIS Community Edition, kan du utelate nøkkelen.

kommentarer

  • Testprosess isc.py.test.Process lagrer et antall bilder i en midlertidig katalog. Det kan være lurt å endre denne banen til den monterte katalogen. For å gjøre dette, rediger innstillingen WorkingDir spesifisere den monterte katalogen.
  • For å få tilgang til terminalkjøringen: docker exec -it irispy sh.
  • Tilgang til System Management Portal ved pålogging SuperUser/SYS.
  • For å stoppe beholderen, kjør: docker stop irispy && docker rm --force irispy.

Installasjonssjekk

Når du har installert Python Gateway, er det verdt å sjekke at det fungerer. Kjør denne koden i InterSystems IRIS-terminalen:

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

Resultatet skal være: HELLO — Python-variabelverdi x. Hvis returstatus sc er en feil eller var tom, sjekk Les meg - delen om feilsøking.

API

Python Gateway er installert og du har bekreftet at den fungerer. Det er på tide å begynne å bruke det!
Hovedgrensesnittet til Python er isc.py.Main. Den tilbyr følgende grupper av metoder (alle returnerer %Status):

  • Kodeutførelse
  • Dataoverføring
  • Auxiliary

Kodeutførelse

Disse metodene lar deg kjøre vilkårlig Python-kode.

SimpleString

SimpleString - dette er hovedmetoden. Det krever 4 valgfrie argumenter:

  • code — linje med kode som skal utføres. Linjematingstegn: $c(10).
  • returnVariable — navnet på variabelen som skal returneres.
  • serialization - hvordan serialiseres returnVariable. 0 — streng (standard), 1 — repr.
  • result — ByRef-referanse til variabelen som verdien er skrevet inn i returnVariable.

Ovenfor gjorde vi:

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

I dette eksemplet tilordner vi en Python-variabel x значение Hello og ønsker å returnere verdien til en Python-variabel x til en ObjectScript-variabel var.

Utfør kode

ExecuteCode er et sikrere og mindre restriktivt alternativ SimpleString.
Linjer i InterSystems IRIS-plattformen er begrenset til 3 641 144 tegn, og hvis du ønsker å kjøre et lengre kodestykke, må du bruke tråder.
To argumenter godtas:

  • code — en linje eller strøm med Python-kode som skal kjøres.
  • variable — (valgfritt) tildeler resultatet av utførelsen code denne Python-variabelen.

Eksempel å bruke:

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

I dette eksemplet multipliserer vi 2 med 3 og skriver resultatet til en Python-variabel y.

Dataoverføring

Send data til og fra Python.

Python -> InterSystems IRIS

Det er 4 måter å få verdien av en Python-variabel i InterSystems IRIS, avhengig av serialiseringen du trenger:

  • String for enkle datatyper og feilsøking.
  • Repr for lagring av enkle gjenstander og feilsøking.
  • JSON for enkel datamanipulering på InterSystems IRIS-siden.
  • Pickle å lagre objekter.

Disse metodene lar deg hente variabler fra Python som en streng eller strømmer.

  • GetVariable(variable, serialization, .stream, useString) - få serialization variabel variable в stream. om useString er 1 og serialiseringen er plassert på en streng, returneres en streng og ikke en strøm.
  • GetVariableJson(variable, .stream, useString) - få JSON-serialisering av en variabel.
  • GetVariablePickle(variable, .stream, useString, useDill) - få Pickle (eller Dill) serialisering av en variabel.

La oss prøve å få variabelen vår y.

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

InterSystems IRIS -> Python

Laster data fra InterSystems IRIS til Python.

  • ExecuteQuery(query, variable, type, namespace) - oppretter et datasett (pandas dataframe eller list) fra sql-spørringen og setter den til en Python-variabel variable. Plastpose isc.py skal være tilgjengelig i området namespace — anmodningen vil bli utført der.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) - laster globale data global fra abonnement start til end i Python som en typevariabel type: list, eller pandaer dataframe. Beskrivelse av valgfrie argumenter mask og labels tilgjengelig i klassedokumentasjon og arkiv Dataoverføringsdokumenter.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) - laster klassedata class fra id start til end i Python som en typevariabel type: list, eller pandaer dataframe. properties — en liste (atskilt med komma) over klasseegenskaper som må lastes inn i datasettet. Masker støttes * и ?. Standard - * (alle eiendommer). Eiendom %%CLASSNAME ignorert.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) - laster tabelldata table fra id start til end i Python.

ExecuteQuery - universell (enhver korrekt SQL-spørring vil bli sendt til Python). Derimot, ExecuteGlobal og dens omslag ExecuteClass и ExecuteTable arbeid med en rekke restriksjoner. De er mye raskere (3-5 ganger raskere enn ODBC-driveren og 20 ganger raskere ExecuteQuery). Mer informasjon på Dataoverføringsdokumenter.
Alle disse metodene støtter dataoverføring fra alle områder. Plastpose isc.py må være tilgjengelig i målområdet.

ExecuteQuery

ExecuteQuery(request, variable, type, namespace) — overføring av resultatene av en korrekt SQL-spørring til Python. Dette er den tregeste dataoverføringsmetoden. Bruk den hvis ExecuteGlobal og innpakningene er ikke tilgjengelige.

argumenter:

  • query - sql-spørring.
  • variable — navnet på Python-variabelen som dataene er skrevet inn i.
  • type - list eller pandaer dataframe.
  • namespace – området der forespørselen vil bli utført.

Utfør Global

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

argumenter:

  • global - globalt navn uten ^
  • variable — navnet på Python-variabelen som dataene er skrevet inn i.
  • type - list eller pandaer dataframe.
  • start — det første abonnementet til den globale. Nødvendigvis %Integer.
  • end — det siste abonnementet på den globale. Nødvendigvis %Integer.
  • mask — global verdimaske. Masken kan være kortere enn antall felt i den globale (i så fall vil feltene på slutten bli hoppet over). Slik formaterer du en maske:
    • + sende verdien som den er.
    • - hoppe over verdi.
    • b - boolsk type (0 - False, resten - True).
    • d — Dato (fra $horolog, på Windows fra 1970, på Linux fra 1900).
    • t — Tid ($horolog, sekunder etter midnatt).
    • m — Tidsstempel (formatstreng ÅR-MÅNED-DAG TIME:MINUTT:SEKUND).
  • labels — %Liste over kolonnenavn. Det første elementet er navnet på abonnementet.
  • namespace – området der forespørselen vil bli utført.

UtførKlasse

Pakk over ExecuteGlobal. Basert på klassedefinisjonen, forbereder en samtale ExecuteGlobal og ringer ham.

ExecuteClass(class, variable, type, start, end, properties, namespace) - sende klassedata i Python.

argumenter:

  • class - klassenavn
  • variable — navnet på Python-variabelen som dataene er skrevet inn i.
  • type - list eller pandaer dataframe.
  • start — start-ID.
  • end — endelig ID
  • properties — en liste (atskilt med komma) over klasseegenskaper som må lastes inn i datasettet. Masker støttes * и ?. Standard - * (alle eiendommer). Eiendom %%CLASSNAME ignorert.
  • namespace – området der forespørselen vil bli utført.

Alle egenskaper sendes som de er unntatt typeegenskaper %Date, %Time, %Boolean и %TimeStamp - de konverteres til de tilsvarende Python-klassene.

Utførtabell

Pakk over ExecuteClass. Oversetter tabellnavnet til klassenavnet og kaller ExecuteClass. Signatur:

ExecuteTable(table, variable, type, start, end, properties, namespace) - sende tabelldata til Python.

argumenter:

  • table — tabellnavn.
    Alle andre argumenter sendes som de er ExecuteClass.

Merknader

  • ExecuteGlobal, ExecuteClass и ExecuteTable jobbe like raskt.
  • ExecuteGlobal 20 ganger raskere enn ExecuteQuery på store datasett (overføringstid >0.01 sekunder).
  • ExecuteGlobal, ExecuteClass и ExecuteTable arbeid med globaler med denne strukturen: ^global(key) = $lb(prop1, prop2, ..., propN) der key - et heltall.
  • For ExecuteGlobal, ExecuteClass и ExecuteTable støttet verdiområde %Date tilsvarer rekkevidde mktime og avhenger av OS (vinduer: 1970-01-01, linux 1900-01-01, mac). Bruk %TimeStampå overføre data utenfor dette området eller bruke pandas dataramme fordi dette er en begrensning på listen.
  • For ExecuteGlobal, ExecuteClass и ExecuteTable alle argumenter unntatt datakilden (global, klasse eller tabell) og variabel er valgfrie.

Примеры

Testklasse isc.py.test.Person inneholder en metode som viser alle dataoverføringsalternativer:

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)

Kall metoden do ##class(isc.py.test.Person).Test() for å se hvordan alle dataoverføringsmetoder fungerer.

Hjelpemetoder

  • GetVariableInfo(variable, serialization, .defined, .type, .length) — få informasjon om variabelen: om den er definert, dens klasse og serialiseringslengde.
  • GetVariableDefined(variable, .defined) — om variabelen er definert.
  • GetVariableType(variable, .type) — få klassen til variabelen.
  • GetStatus() - hent og fjern det siste unntaket på Python-siden.
  • GetModuleInfo(module, .imported, .alias) — få modulvariabel og importstatus.
  • GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments) — få informasjon om funksjonen.

Interoperabilitet

Du har lært hvordan du ringer Python Gateway fra terminalen, la oss nå begynne å bruke den i produksjonen. Grunnlaget for å samhandle med Python i denne modusen er isc.py.ens.Operation. Det tillater oss:

  • Kjør kode i Python
  • Lagre/gjenopprett Python-kontekst
  • Last og motta data fra Python

I utgangspunktet er en Python-operasjon en innpakning isc.py.Main. Operasjon isc.py.ens.Operation gir muligheten til å samhandle med Python-prosessen fra InterSystems IRIS-produkter. Fem søk støttes:

  • isc.py.msg.ExecutionRequest for å kjøre Python-kode. Returnerer isc.py.msg.ExecutionResponse med utførelsesresultatet og verdiene til de forespurte variablene.
  • isc.py.msg.StreamExecutionRequest for å kjøre Python-kode. Returnerer isc.py.msg.StreamExecutionResponse resultatet av utførelse og verdiene til de forespurte variablene. Analog isc.py.msg.ExecutionRequest, men godtar og returnerer strømmer i stedet for strenger.
  • isc.py.msg.QueryRequest å overføre resultatet av å utføre en SQL-spørring. Returnerer Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest for å sende globale/klasse/tabelldata. Returnerer Ens.Response.
  • isc.py.msg.SaveRequest for å lagre Python-konteksten. Returnerer Ens.StringResponse med kontekst-ID.
  • isc.py.msg.RestoreRequest for å gjenopprette Python-konteksten.

    I tillegg, isc.py.ens.Operation har to innstillinger:

    • Initializer — velge en klasse som implementerer grensesnittet isc.py.init.Abstract. Den kan brukes til å laste funksjoner, moduler, klasser osv. Den utføres én gang når prosessen starter.
    • PythonLib - (kun Linux) hvis du ser feil under lasting, sett verdien til libpython3.6m.so eller til og med i hele banen til Python-biblioteket.

Oppretting av forretningsprosesser

Det er to tilgjengelige klasser som letter utviklingen av forretningsprosesser:

  • isc.py.ens.ProcessUtils lar deg trekke ut merknader fra aktiviteter med variabel substitusjon.
  • isc.py.util.BPEmulator gjør det enkelt å teste forretningsprosesser med Python. Den kan utføre en forretningsprosess (Python-deler) i den gjeldende prosessen.

Variabel substitusjon

Alle forretningsprosesser arvet fra isc.py.ens.ProcessUtils, kan bruke metoden GetAnnotation(name) for å få aktivitetsannoteringsverdien etter navnet. Aktivitetsannoteringen kan inneholde variabler som vil bli beregnet på InterSystems IRIS-siden før de sendes til Python. Her er syntaksen for variabelsubstitusjon:

  • ${class:method:arg1:...:argN} - metodekall
  • #{expr} — kjør kode i ObjectScript-språk.

Et eksempel er tilgjengelig i testforretningsprosessen isc.py.test.Processfor eksempel i aktivitet Correlation Matrix: Graph: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). I dette eksemplet:

  • #{process.WorkDirectory} returnerer WorkDirectory-egenskapen til objektet process, som er en forekomst av klassen isc.py.test.Process de. gjeldende forretningsprosess.
  • ${%PopulateUtils:Integer:1:100} kaller en metode Integer klasse %PopulateUtils, passerer argumenter 1 и 100, returnerer et tilfeldig heltall i området 1...100.

Test forretningsprosessen

Testprodukter og testforretningsprosesser er tilgjengelig som standard som en del av Python Gateway. Slik bruker du dem:

  1. I OS-terminalen, kjør: pip install pandas matplotlib seaborn.
  2. I InterSystems IRIS-terminalen, kjør: do ##class(isc.py.test.CannibalizationData).Import() for å fylle ut testdata.
  3. Lansere produkter isc.py.test.Production.
  4. Send forespørselstype Ens.Request в isc.py.test.Process.

La oss se hvordan det hele fungerer sammen. Åpen isc.py.test.Process i BPL-redaktøren:

Python Gateway i InterSystems IRIS

Kodeutførelse

Den viktigste utfordringen er å utføre Python-kode:

Python Gateway i InterSystems IRIS

Søket er brukt isc.py.msg.ExecutionRequest, her er egenskapene:

  • Code — Python-kode.
  • SeparateLines — om koden skal deles inn i linjer for utførelse. $c(10) (n) brukes til å skille strenger. Vær oppmerksom på at det IKKE anbefales å behandle hele meldingen på en gang, denne funksjonen er kun ment å behandle def og lignende flerlinjeuttrykk. Misligholde 0.
  • Variables — en kommadelt liste over variabler som vil bli lagt til svaret.
  • Serialization — Hvordan serialisere variablene som vi ønsker å returnere. Alternativer: Str, Repr, JSON, Pickle и Dill, standard Str.

I vårt tilfelle setter vi kun eiendommen Code, så alle andre egenskaper bruker standardverdiene. Vi setter det ved å ringe process.GetAnnotation("Import pandas"), som ved kjøring returnerer en merknad etter at variabelsubstitusjon er utført. Tross alt, koden import pandas as pd vil bli sendt til Python. GetAnnotation kan være nyttig for å skaffe flerlinjers Python-skript, men det er ingen begrensninger på denne metoden for å skaffe kode. Du kan angi egenskapen Code på noen måte som er praktisk for deg.

Få variabler

En annen interessant utfordring å bruke isc.py.msg.ExecutionRequest - Correlation Matrix: Tabular:

Python Gateway i InterSystems IRIS

Den beregner korrelasjonsmatrisen på Python-siden og trekker ut variabelen corrmat tilbake til InterSystems IRIS i JSON-format ved å angi forespørselsegenskapene:

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

Vi kan se resultatene i Visual Trace:

Python Gateway i InterSystems IRIS

Og hvis vi trenger denne verdien i BP, kan vi få den slik: callresponse.Variables.GetAt("corrmat").

Dataoverføring

Deretter, la oss snakke om overføring av data fra InterSystems IRIS til Python; alle forespørsler om dataoverføring implementerer grensesnittet isc.py.msg.DataRequestsom gir følgende egenskaper:

  • Variable — en Python-variabel som data skrives inn i.
  • Type — variabeltype: dataframe (pandas dataramme) eller list.
  • Namespace — området vi mottar data fra. Plastpose isc.py bør være tilgjengelig i dette området. Dette kan være et område uten produktstøtte.

Basert på dette grensesnittet implementeres 4 klasser av forespørsler:

  • isc.py.msg.QueryRequest - angi egenskapen Query for å sende en SQL-spørring.
  • isc.py.msg.ClassRequest - angi egenskapen Class å sende klassedata.
  • isc.py.msg.TableRequest - sette eiendom Table å overføre tabelldata.
  • isc.py.msg.GlobalRequest - sette eiendom Global for global dataoverføring.

I testprosessen, se på aktiviteten RAWDer isc.py.msg.QueryRequest vist i aksjon.

Python Gateway i InterSystems IRIS

Lagre/gjenopprette Python-kontekst

Til slutt kan vi lagre Python-konteksten i InterSystems IRIS, for å gjøre dette sender vi isc.py.msg.SaveRequest med argumenter:

  • Mask — Bare variabler som samsvarer med masken blir lagret. Støttes * и ?... Eksempel: "Data*, Figure?". Misligholde *.
  • MaxLength — Maksimal lengde på den lagrede variabelen. Hvis serialiseringen av en variabel er lengre, vil den bli ignorert. Sett til 0 for å få variabler av hvilken som helst lengde. Misligholde $$$MaxStringLength.
  • Name — Kontekstnavn (valgfritt).
  • Description — Beskrivelse av konteksten (valgfritt).

Returnerer Ens.StringResponse с Id lagret kontekst. I testprosessen, se på aktiviteten Save Context.

Relatert forespørsel isc.py.msg.RestoreRequest laster inn kontekst fra InterSystems IRIS til Python:

  • ContextId — kontekstidentifikator.
  • Clear — fjern konteksten før du gjenoppretter.

Jupyter Notebook

Jupyter Notebook er en åpen kildekode-nettapplikasjon som lar deg lage og publisere notatbøker som inneholder kode, visualiseringer og tekst. Python Gateway lar deg se og redigere BPL-prosesser i form av en Jupyter Notebook. Vær oppmerksom på at den vanlige Python 3-eksekutoren for øyeblikket brukes.

Denne utvidelsen forutsetter at merknader inneholder Python-kode og bruker aktivitetsnavn som foregående titler. Det er nå mulig å utvikle PythonGateway-forretningsprosesser i Jupyter Notebook. Her er hva som er mulig:

  • Lag nye forretningsprosesser
  • Slett forretningsprosesser
  • Lag nye aktiviteter
  • Endre aktiviteter
  • Slett aktiviteter

Her demo video. Og noen skjermbilder:

Prosessutforsker

Python Gateway i InterSystems IRIS

Prosessredaktør

Python Gateway i InterSystems IRIS

Installasjon

  1. Du trenger InterSystems IRIS 2019.2+.
  2. Installer PythonGateway v0.8+ (bare nødvendig isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints и isc.py.ens.ProcessUtils).
  3. Oppdater ObjectScript-koden fra depotet.
  4. Henrette do ##class(isc.py.util.Jupyter).Install() og følg instruksjonene.

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

Funn

MLToolkit er et sett med verktøy som har som mål å kombinere modeller og et transaksjonsmiljø slik at de bygde modellene enkelt kan brukes direkte i forretningsprosessene dine. Python Gateway er en del av MLToolkit og gir integrasjon med Python-språket, slik at du kan orkestrere alle maskinlæringsalgoritmer som er opprettet i Python (hovedmiljøet for mange dataforskere), bruke en rekke ferdige biblioteker for raskt å lage adaptiv, robotisk analytisk AI / ML-løsninger på InterSystems-plattformen IRIS.

referanser

MLToolkit

MLToolkit-brukergruppen er et privat GitHub-lager opprettet som en del av InterSystems bedrifts GitHub-organisasjon. Den er beregnet på eksterne brukere som installerer, lærer eller allerede bruker MLToolkit-komponenter, inkludert Python Gateway. Konsernet har en rekke implementerte case (med kildekode og testdata) innen markedsføring, produksjon, medisin og mange andre bransjer. For å bli med i ML Toolkit User Group, vennligst send en kort e-post til følgende adresse: [e-postbeskyttet] og ta med følgende informasjon i brevet ditt:

  • GitHub brukernavn
  • Organisasjon (du jobber eller studerer)
  • Stilling (din faktiske posisjon i organisasjonen din, enten "Student" eller "Uavhengig").
  • Land

For de som har lest artikkelen og er interessert i egenskapene til InterSystems IRIS som en plattform for utvikling eller vertskap for kunstig intelligens og maskinlæringsmotorer, inviterer vi deg til å diskutere mulige scenarier som er av interesse for din bedrift. Vi vil gjerne analysere behovene til din bedrift og i fellesskap fastsette en handlingsplan; Kontakt-e-postadresse til vårt AI/ML-ekspertteam – [e-postbeskyttet].

Kilde: www.habr.com

Legg til en kommentar