Python Gateway i InterSystems IRIS

Denne artikel handler om Python Gateway — et community-projekt med åbent kildekode til InterSystems IRIS dataplatform. Dette projekt gør det muligt at orkestrere alle maskinlæringsalgoritmer, der er skrevet i Python (den primære platform for mange dataforskere), og anvende mange færdige biblioteker til hurtigt at skabe adaptive, robotiserede analytiske AI/ML-løsninger på InterSystems IRIS-platformen. I denne artikel vil jeg vise, hvordan InterSystems IRIS kan orkestrere processer i Python, effektivt muliggøre tovejs dataoverførsel og skabe intelligente forretningsprocesser.

Plan

  1. Introduktion.
  2. Værktøjer.
  3. Installation.
  4. API.
  5. Interoperabilitet.
  6. Jupyter Notebook.
  7. Konklusioner.
  8. Links.
  9. MLToolkit.

Introduktion

Python er et høj-niveau programmeringssprog for almindelig brug, der fokuserer på at forbedre udviklerens produktivitet og læsbarheden af koden. I denne serie af artikler vil jeg tale om anvendelsesmulighederne for Python på InterSystems IRIS-platformen, hvor denne artikel har fokus på anvendelsen af Python som sprog for oprettelse og brug af maskinlæringsmodeller.

Maskinlæring (ML) er en klasse af metoder inden for kunstig intelligens, hvor kendetegnet ikke er direkte løsning på opgaver, men læring ved at løse mange lignende opgaver.

Algoritmer og modeller for maskinlæring bliver stadig mere udbredte. Der er mange grunde til dette, men det hele kommer ned til tilgængelighed, enkelhed og opnåelse af praktiske resultater. Er clustering eller endda neuralt netværksmodellering en ny teknologi?

Selvfølgelig ikke, men i øjeblikket er der ikke behov for at skrive hundredtusindvis af linjer kode for at køre en model, og omkostningerne ved at oprette og anvende modeller bliver mindre og mindre.

Værktøjerne udvikler sig — selvom vi ikke har fuldt GUI-orienterede AI/ML-værktøjer, observerer vi den samme udvikling som set med mange andre klasser af informationssystemer, såsom BI (fra kode til brug af frameworks og GUI-orienterede konfigurerbare løsninger), der også ses i værktøjer til oprettelse af AI/ML. Vi er allerede forbi kode-skrivningsfasen og bruger i dag frameworks til at opbygge og træne modeller.

Andre forbedringer, såsom muligheden for at distribuere fortrænede modeller, når slutbrugeren bare skal afslutte træningen af modellen på sine specifikke data, gør det også lettere at komme i gang med maskinlæring. Disse fremskridt letter betydeligt læringen af maskinlæring både direkte for specialister og for virksomheder generelt.

På den anden side samler vi flere og flere data. Takket være en samlet dataplatform som InterSystems IRIS kan al denne information straks forberedes og anvendes som inputdata til maskinlæringsmodeller.

Med overgangen til cloud bliver lanceringen af AI/ML-projekter lettere end nogensinde. Vi kan kun forbruge de ressourcer, vi har brug for. Desuden, takket være paralleliseringen, der tilbydes af cloudplatforme, kan vi spare tid.

Men hvordan står det til med resultaterne? Her bliver det mere kompliceret. Der findes mange værktøjer til at bygge modeller, som jeg vil tale om senere. At bygge en god model er ikke enkelt, men hvad så? At få afkast af at bruge modellen i virksomheden er også en ikke-triviel opgave. Problemet ligger i adskillelsen af analytiske og transaktionelle belastninger samt datamodeller. Når vi træner en model, gør vi det typisk på historiske data. Men en bygget models plads er i den transaktionelle databehandling. Hvad nytter det at have den bedste model til at opdage svigagtige transaktioner, hvis vi kun kører den én gang om dagen? Svindlerne er allerede forsvundet med pengene. Vi skal træne modellen på historiske data, men vi skal også anvende den i realtid på nye indkommende data, så vores forretningsprocesser kan handle i overensstemmelse med de forudsigelser, modellen laver.

ML Toolkit er et sæt værktøjer, hvis mål er netop dette: at forene modeller og den transaktionelle miljø, så de byggede modeller nemt kan anvendes direkte i dine forretningsprocesser. Python Gateway er en del af ML Toolkit og sikrer integration med Python-sproget (ligesom R Gateway, der er en del af ML Toolkit, sikrer integration med R-sproget).

Værktøjer

Før vi fortsætter, vil jeg gerne beskrive nogle værktøjer og biblioteker til Python, som vi senere vil bruge.

Teknologier

  • Python er et fortolket, højniveau programmeringssprog til generelle formål. Den primære fordel ved sproget er det store bibliotek af matematiske, ML- og AI-biblioteker. Ligesom ObjectScript er det et objektorienteret sprog, men alt defineres dynamisk og ikke statisk. Alt er også et objekt. Senere artikler forudsætter en overfladisk bekendtskab med sproget. Hvis du ønsker at starte med at lære, anbefaler jeg at begynde med dokumentationen.
  • For vores næste øvelser skal du installere Python 3.6.7 64 bit.
  • IDE: Jeg bruger PyCharm, men generelt er der også mange. Hvis du bruger Atelier, findes der en Eclipse-plugin til Python-udviklere. Hvis du bruger VS Code, findes der en udvidelse til Python.
  • Notebook: I stedet for et IDE kan du skrive og dele dine scripts i online-notebooks. Den mest populære er Jupyter.

Biblioteker

Her er en (ikke-udtømmende) liste over biblioteker til maskinlæring:

  • Numpy — den fundamentale pakke til præcise beregninger.
  • Pandas — højtydende datastrukturer og datanalyseværktøjer.
  • Matplotlib — til graftegning.
  • Seaborn — datavisualisering baseret på matplotlib.
  • Sklearn — metoder til maskinlæring.
  • XGBoost — algoritmer til maskinlæring inden for gradient boosting-metodologi.
  • Gensim — NLP.
  • Keras — neurale netværk.
  • Tensorflow — en platform til at bygge modeller til maskinlæring.
  • PyTorch — en platform til at bygge modeller til maskinlæring, der er fokuseret på Python.
  • Nyoka — PMML fra forskellige modeller.

AI/ML-teknologier gør det muligt at gøre forretningen mere effektiv og tilpasningsdygtig. Desuden bliver disse teknologier i dag lettere at udvikle og implementere. Begynd at lære AI/ML-teknologier og hvordan de kan hjælpe din organisation med at vokse.

Installation

Der er flere måder at installere og bruge Python Gateway på:

  • OS
    • Windows
    • Linux
    • Mac
  • Docker
    • Brug et billede fra DockerHub
    • Opret dit eget billede

Uanset hvilken installationsmetode du vælger, skal du bruge kildekoden. Det eneste sted at downloade koden er udgivelsessiden. Den indeholder testede stabile versioner, så tag bare den nyeste. I øjeblikket er det 0.8, men der vil komme nye versioner over tid. Klon eller upload ikke opbevaringen, download den seneste udgivelse.

OS

Hvis du installerer Python Gateway på operativsystemet, skal du først (uanset operativsystemet) installere Python. For dette:

  1. Installer Python 3.6.7 64 bit. Det anbefales at installere Python i standardmappen.
  2. Installer modulet dill: pip install dill.
  3. Download ObjectScript-koden (dvs. do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) til enhver namespace med produkter. Hvis du ønsker, at den eksisterende namespace skal understøtte produkter, skal du udføre: write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. Placér callout DLL/SO/DYLIB til mappen bin din Instance af InterSystems IRIS. Biblioteksfilen skal være tilgængelig på stien, der returneres write ##class(isc.py.Callout).GetLib().

Windows

  1. Sørg for, at miljøvariablen PYTHONHOME peger på Python 3.6.7.
  2. Sørg for, at systemmiljøvariablen PATH indeholder variablen PYTHONHOME (eller den mappe, den peger på).

Linux (Debian/Ubuntu)

  1. Kontrollér hermed, at miljøvariablen PATH indeholder /usr/lib og /usr/lib/x86_64-linux-gnu. Brug filen /etc/environment til at indstille miljøvariabler.
  2. I tilfælde af fejl undefined symbol: _Py_TrueStruct skal du indstille parameteren PythonLib. Derudover er der Readme en sektion til fejlfinding.

Mac

  1. I øjeblikket understøttes kun Python 3.6.7 fra Python.org. Kontroller variablen PATH.

Hvis du har ændret miljøvariabler, skal du genstarte dit produkt InterSystems.

Docker

Brugen af containere har flere fordele:

  • Bærbarhed
  • Effektivitet
  • Isolation
  • Letvægts
  • Immutabilitet

Tag et kig på denne artikelserie for mere information om brugen af Docker med InterSystems-produkter.

Alle builds af Python Gateway er i øjeblikket baseret på containere. 2019.4.

Klar billede

Udfør: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latest, for at downloade og starte Python Gateway med InterSystems IRIS Community Edition. Det er det hele.

Opret dit eget billede

For at bygge docker-billedet skal du udføre i rodmappen af dit repository: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
Som standard bygges billedet baseret på billedet store/intersystems/iris-community:2019.4.0.383.0, men du kan ændre dette ved at indstille variablen IMAGE.
For at bygge fra InterSystems IRIS skal du udføre: `docker build —build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 —force-rm —tag intersystemscommunity/irispy:latest`.

Derefter kan du starte docker-billedet:

docker run -d 
  -p 52773:52773 
  -v //:/mount 
  --name irispy 
  intersystemscommunity/irispy:latest 
  --key /mount/iris.key

Hvis du bruger et billede baseret på InterSystems IRIS Community Edition, skal du muligvis ikke angive nøglen.

Comments

  • Testprocessen isc.py.test.Process gemmer en række billeder i en midlertidig mappe. Du vil muligvis ændre denne sti til en monteret mappe. For at gøre dette skal du redigere indstillingen WorkingDir ved at angive den monterede mappe.
  • For at få adgang til terminalen skal du køre: docker exec -it irispy sh.
  • Adgang til System Management Portal med login SuperUser/SYS.
  • For at stoppe containeren, kør: docker stop irispy && docker rm --force irispy.

Tjek installationen

Når du har installeret Python Gateway, er det en god idé at kontrollere, om den fungerer. Kør denne kode i terminalen InterSystems IRIS:

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 — værdien af Python-variablen x. Hvis den returnerede status sc er en fejl eller var tom, skal du kontrollere Readme — Troubleshooting section.

API

Python Gateway er installeret, og du har bekræftet, at den fungerer. Det er tid til at begynde at bruge den!
Hovedgrænsefladen til Python er isc.py.Main. Den tilbyder følgende grupper af metoder (alle returnerer %Status):

  • Udførelse af kode
  • Overførsel af data
  • Hjælpemidler

Udførelse af kode

Disse metoder giver mulighed for at udføre vilkårlig Python-kode.

SimpleString

SimpleString — er den primære metode. Den accepterer 4 valgfrie argumenter:

  • code — koden der skal udføres. Linjeskift: $c(10).
  • returnVariable — navnet på variablen til retur.
  • serialization — hvordan der skal serialiseres. returnVariable. 0 — string (standard), 1 — repr.
  • resultat — ByRef reference til variablen, hvor værdien skrives returnVariable.

Ovenfor har vi udført:

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

I dette eksempel tildeler vi Python-variablen x værdien Hej og ønsker at returnere værdien af Python-variablen x til ObjectScript-variablen var.

ExecuteCode

ExecuteCode er et mere sikkert og mindre begrænset alternativ SimpleString.
Strenge i InterSystems IRIS-platformen er begrænset til 3.641.144 tegn, og hvis du vil udføre en længere kode, skal du bruge streams.
Det accepterer to argumenter:

  • code — en streng eller stream af Python-kode til udførelse.
  • variable — (valgfrit) tildeler resultatet af udførelsen code til denne Python-variabel.

Brug eksempel:

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

I dette eksempel multiplicerer vi 2 med 3 og gemmer resultatet i Python-variablen y.

Overførsel af data

Overfør data til Python og tilbage.

Python -> InterSystems IRIS

Der er 4 måder at få værdien af en Python-variabel i InterSystems IRIS, afhængigt af den serialisering, du har brug for:

  • Streng til simple datatyper og debugging.
  • Repr til opbevaring af enkle objekter og debugging.
  • JSON til let manipulation af data på InterSystems IRIS siden.
  • Pickle til gemme objekter.

Disse metoder gør det muligt at hente variabler fra Python som strenge eller streams.

  • GetVariable(variable, serialization, .stream, useString) — hent serialization variabel variable i stream. Hvis useString er lig med 1, og serialiseringen placeres i en streng, så returneres en streng og ikke en stream.
  • GetVariableJson(variable, .stream, useString) — hent JSON serialiseringen af variabel.
  • GetVariablePickle(variable, .stream, useString, useDill) - hent Pickle (eller Dill) serialiseringen af variabel.

Lad os prøve at hente vores variabel y.

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

InterSystems IRIS -> Python

Vi læser data fra InterSystems IRIS til Python.

  • ExecuteQuery(query, variable, type, namespace) — opretter et datasæt (pandas dataframe eller list) fra SQL-forespørgslen og sætter det i Python-variabel. variable. Pakken isc.py skal være tilgængelig i domænet namespace — der hvor forespørgslen vil blive udført.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) — indlæser data fra globalen global fra delindekset start op til end til Python som en variabel af typen type: list, eller pandas dataframe. Beskrivelsen af de valgfrie argumenter mask og labels er tilgængelig i klassedokumentationen og i depotet Data Transfer docs.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) — indlæser data fra klassen klasse fra id start op til end til Python som en variabel af typen type: list, eller pandas dataframe. properties — en liste (adskilt af komma) af klasseegenskaber, som skal indlæses i datasættet. Masker understøttes. * og ?. Som standard — * (alle egenskaber). Egenskaben %%CLASSNAME ignoreres.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) — indlæser data fra tabellen table fra id start op til end til Python.

ExecuteQuery — er universel (enhver gyldig SQL-forespørgsel vil blive sendt til Python). Men, ExecuteGlobal og dens wrappers ExecuteClass og ExecuteTable har en række begrænsninger. De er meget hurtigere (3-5 gange hurtigere end ODBC-driveren og 20 gange hurtigere ExecuteQuery). Yderligere information i Data Transfer docs.
Alle disse metoder understøtter dataoverførsel fra ethvert domæne. Pakken isc.py skal være tilgængelig i det målrettede domæne.

ExecuteQuery

ExecuteQuery(request, variable, type, namespace) — overførsel af resultaterne af enhver gyldig SQL-forespørgsel til Python. Dette er den langsomste metode til dataoverførsel. Brug den, hvis ExecuteGlobal og dens wrappers ikke er tilgængelige.

Argumenter:

  • query — SQL-forespørgsel.
  • variable — navnet på Python variablen, hvori dataene skrives.
  • type — list eller Pandas dataframe.
  • namespace — domænet, hvor forespørgslen vil blive udført.

ExecuteGlobal

ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) — overførsel af globalen til Python.

Argumenter:

  • global — navnet på globalen uden ^
  • variable — navnet på Python variablen, hvori dataene skrives.
  • type — list eller Pandas dataframe.
  • start — første delindeks på globalen. Obligatorisk %Integer.
  • end — sidste delindeks på globalen. Obligatorisk %Integer.
  • mask — masken for globale værdier. Masken kan være kortere end antallet af felter i globalen (i så fald vil felterne i slutningen blive udeladt). Sådan formatteres masken:
    • + overfør værdien som den er.
    • - spring værdien over.
    • b — Boolesk type (0 — False, alt andet — Sand).
    • d — Dato (fra $horolog, på Windows fra 1970, på Linux fra 1900).
    • t — Tid ($horolog, sekunder efter midnat).
    • m — Tidsstempel (streng i formatet ÅR-MÅNED-DAG TIME:MINUT:SEKUND).
  • labels — %Liste af kolonne-navne. Det første element — navnet på subscriptet.
  • namespace — domænet, hvor forespørgslen vil blive udført.

ExecuteClass

Wrapper over ExecuteGlobal. Baseret på klassedefinitionen forbereder den kaldet ExecuteGlobal og kalder det.

ExecuteClass(class, variable, type, start, end, properties, namespace) — overførsel af klassedata i Python.

Argumenter:

  • klasse — klassens navn
  • variable — navnet på Python variablen, hvori dataene skrives.
  • type — list eller Pandas dataframe.
  • start — start Id.
  • end — slut Id
  • properties — en liste (adskilt af komma) af klasseegenskaber, som skal indlæses i datasættet. Masker understøttes. * og ?. Som standard — * (alle egenskaber). Egenskaben %%CLASSNAME ignoreres.
  • namespace — domænet, hvor forespørgslen vil blive udført.

Alle egenskaber overføres som de er, undtagen egenskaber for typer te, %Tid, %Boolsk og %Tidsstempel — de konverteres til de tilsvarende Python-klasser.

ExecuteTable

Wrapper over ExecuteClass. Translaterer tabelnavnet til klassens navn og kalder ExecuteClass. Signatur:

ExecuteTable(table, variable, type, start, end, properties, namespace) — overførsel af tabeldata i Python.

Argumenter:

  • table — tabelens navn.
    Alle andre argumenter overføres som de er til ExecuteClass.

Noter

  • ExecuteGlobal, ExecuteClass og ExecuteTable arbejder ligeså hurtigt.
  • ExecuteGlobal 20 gange hurtigere end ExecuteQuery på store datasæt (overførselstid mere end >0.01 sekunder).
  • ExecuteGlobal, ExecuteClass og ExecuteTable arbejder på globaler med denne struktur: ^global(nøgle) = $lb(prop1, prop2, ..., propN) hvor nøgle — heltal.
  • For ExecuteGlobal, ExecuteClass og ExecuteTable understøttet værdiramme te svarer til intervallet mktime og afhænger af OS (windows: 1970-01-01, Linux 1900-01-01, mac). Brug %Tidsstempeltil at overføre data uden for dette interval eller brug pandas dataframe, da dette er en begrænsning kun for listen.
  • For ExecuteGlobal, ExecuteClass og ExecuteTable alle argumenter undtagen datakilden (globalen, klassen eller tabellen) og variablen er valgfrie.

Eksempler

Testklasse isc.py.test.Person indeholder en metode, der demonstrerer alle muligheder for dataoverførsel:

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"

// Generelle argumenter
set variable = "df"
set type = "dataframe"
set start = 1
set end = $g(^isc.py.test.PersonD, start)

// Metode 0: ExecuteGlobal uden argumenter
set sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 0, type)

// Metode 1: ExecuteGlobal med argumenter
// Når globalen sendes, angives feltnavnene manuelt
// globalKey - navnet på subscriptet
set labels = $lb("globalKey", "Navn", "Fødselsdato", "TS", "RandomTid", "AlderÅr", "AlderDecimal", "AlderDobbelt", "Bool")

// mask indeholder en element mindre end labels fordi "globalKey" - navnet på subskriftet
// Vi springer %%CLASSNAME over
set mask = "-+dmt+++b"

set sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 1, type, start, end, mask, labels)

// Metode 2: ExecuteClass
set sc = ##class(isc.py.Main).ExecuteClass(class, variable _ 2, type, start, end)

// Metode 3: ExecuteTable
set sc = ##class(isc.py.Main).ExecuteTable(table, variable _ 3, type, start, end)

// Metode 4: ExecuteTable
set sc = ##class(isc.py.Main).ExecuteQuery(query, variable _ 4, type)

Kald metoden do ##class(isc.py.test.Person).Test() for at se, hvordan alle metoder til dataoverførsel fungerer.

Hjælpefunktioner

  • GetVariableInfo(variable, serialization, .defined, .type, .length) — få information om variablen: om den er defineret, dens klasse og længden af serialisering.
  • GetVariableDefined(variable, .defined) — er variablen defineret.
  • GetVariableType(variable, .type) — få klassens type for variablen.
  • GetStatus() — få og fjern den seneste undtagelse på Python-siden.
  • GetModuleInfo(module, .imported, .alias) — få information om modulets variabel og importstatus.
  • GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments) — få information om funktionen.

Interoperabilitet

Du har lært at kalde Python Gateway fra terminalen, nu begynder vi at bruge det i produktion. Grundlaget for interaktionen med Python i denne tilstand er isc.py.ens.Operation. Det giver os mulighed for:

  • At udføre kode i Python
  • At gemme/gendanne Python-konteksten
  • At indlæse og hente data fra Python

I princippet er Python-operationen en indpakning over isc.py.Main. Operationen isc.py.ens.Operation muliggør interaktion med Python-processen fra InterSystems IRIS-produkter. Fem forespørgsler understøttes:

  • isc.py.msg.ExecutionRequest til at udføre Python-koden. Returnerer isc.py.msg.ExecutionResponse med resultatet af udførelsen og værdierne af de ønskede variabler.
  • isc.py.msg.StreamExecutionRequest til at udføre Python-koden. Returnerer isc.py.msg.StreamExecutionResponse resultatet af udførelsen og værdierne af de ønskede variabler. Analog isc.py.msg.ExecutionRequest, men accepterer og returnerer streams i stedet for strenge.
  • isc.py.msg.QueryRequest til at overføre resultatet af SQL-forespørgslen. Returnerer Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest til at overføre data til globaler/klasse/tabeller. Returnerer Ens.Response.
  • isc.py.msg.SaveRequest til at gemme Python-konteksten. Returnerer Ens.StringResponse med konteksts-id.
  • isc.py.msg.RestoreRequest til at gendanne Python-konteksten.

    Derudover, isc.py.ens.Operation har to indstillinger:

    • Initializer — valg af klasse, der implementerer interfacet isc.py.init.Abstract. Den kan bruges til at indlæse funktioner, moduler, klasser osv. Den udføres én gang ved opstart af processen.
    • PythonLib — (kun for Linux) hvis du ser fejl ved indlæsning, skal du sætte den til libpython3.6m.so eller endda den fulde sti til Python-biblioteket.

Oprettelse af forretningsprocesser

Der er to klasser, der gør det lettere at udvikle forretningsprocesser:

  • isc.py.ens.ProcessUtils giver mulighed for at udtrække annotationer fra aktiviteter med variableudskiftning.
  • isc.py.util.BPEmulator gør det nemt at teste forretningsprocesser med Python. Den kan udføre forretningsprocessen (dele på Python-sprog) i den aktuelle proces.

Variabeludskiftning

Alle forretningsprocesser, der er arvet fra isc.py.ens.ProcessUtils, kan bruge metoden GetAnnotation(name) til at få værdien af aktiviteten annotation efter dens navn. Aktivitetens annotation kan indeholde variable, som vil blive beregnet på InterSystems IRIS-siden, før de sendes til Python. Her er syntaksen for variabeludskiftning:

  • ${class:method:arg1:...:argN} — kald metode
  • #{expr} — udføre kode i ObjectScript.

Et eksempel er tilgængeligt i testforretningsprocessen isc.py.test.Process, for eksempel i aktiviteten Korrelationsmatrix: Grafik: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). I dette eksempel:

  • #{process.WorkDirectory} returnerer egenskaben WorkDirectory for objektet process, som er en instans af klassen isc.py.test.Process dvs. den aktuelle forretningsproces.
  • ${%PopulateUtils:Integer:1:100} trykkes, kaldes metoden Integer klassen %PopulateUtils, ved at sende argumenter 1 og 100, returnerer et tilfældigt heltal i intervallet 1...100.

Testforretningsprocessen

Testprodukter og testforretningsprocessen er tilgængelige som standard som en del af Python Gateway. For at bruge dem:

  1. Udfør i OS-terminalen: pip install pandas matplotlib seaborn.
  2. Udfør i InterSystems IRIS-terminalen: do ##class(isc.py.test.CannibalizationData).Import() for at udfylde testdata.
  3. Start produktet isc.py.test.Production.
  4. Send en forespørgsel af typen Ens.Request i isc.py.test.Process.

Lad os se, hvordan det hele fungerer sammen. Åbn isc.py.test.Process i BPL-editoren:

Python Gateway i InterSystems IRIS

Udførelse af kode

Den vigtigste kald er udførelsen af Python-koden:

Python Gateway i InterSystems IRIS

Bruger forespørgslen isc.py.msg.ExecutionRequest, her er dens egenskaber:

  • Kode — Python-kode.
  • SeparateLines — om koden skal opdeles i linjer til udførelse. $c(10) (n) bruges til at adskille linjer. Bemærk, at det ikke anbefales at behandle beskeden helt på én gang; denne funktion er kun beregnet til behandling def og lignende flerlinjede udtryk. Som standard 0.
  • Variabler — en kommasepareret liste af variabler, der vil blive tilføjet til svaret.
  • Serialization — Hvordan man serialiserer de variabler, vi ønsker at returnere. Muligheder: Str, Repr, JSON, Pickle og Dill, som standard Str.

I vores tilfælde indstiller vi kun egenskaben Kode, så alle andre egenskaber bruger standardværdier. Vi indstiller den ved at kalde process.GetAnnotation("Import pandas"), som under udførelsen returnerer annotationen efter udførelsen af variabel substitution. Til sidst vil koden import pandas as pd blive sendt til Python. GetAnnotation kan være nyttig til at hente flerlinjede Python-scripts, men der er ingen begrænsninger for denne metode til at hente koden. Du kan indstille egenskaben Kode på enhver måde, der er behagelig for dig.

Hentning af variabler

Endnu et interessant kald ved hjælp af isc.py.msg.ExecutionRequest — Korrelationsmatrix: Tabellarisk:

Python Gateway i InterSystems IRIS

Den beregner korrelationsmatrixen på Python-siden og trækker variablen corrmat tilbage til InterSystems IRIS i JSON-format ved at indstille forespørgselsegenskaber:

  • Variabler: "corrmat"
  • Serialization: "JSON"

Vi kan se resultaterne i Visual Trace:

Python Gateway i InterSystems IRIS

Og hvis vi har brug for denne værdi i BP, kan den hentes sådan: callresponse.Variables.GetAt("corrmat").

Overførsel af data

Lad os derefter tale om at overføre data fra InterSystems IRIS til Python; alle dataoverførselsanmodninger implementerer interface isc.py.msg.DataRequest, som tilbyder følgende egenskaber:

  • Variable — Python-variablen hvor dataene skrives.
  • Type — typen af variablen: dataframe (pandas dataframe) eller list.
  • Namespace — området fra hvilket vi henter data. Pakken isc.py skal være tilgængelig i dette område. Dette kan være et område uden produktsupport.

Baseret på dette interface er der implementeret 4 klasser af anmodninger:

  • isc.py.msg.QueryRequest — sæt din egenskab Query til at overføre SQL-anmodningen.
  • isc.py.msg.ClassRequest — sæt din egenskab Class til at overføre klassedata.
  • isc.py.msg.TableRequest — sæt din egenskab Table til at overføre tabeldata.
  • isc.py.msg.GlobalRequest — sæt din egenskab Global til at overføre globaledata.

I testprocessen, se aktiviteten RAW, hvor isc.py.msg.QueryRequest vist i aktion.

Python Gateway i InterSystems IRIS

Gem/restituer Python-konteksten

Endelig kan vi gemme Python-konteksten i InterSystems IRIS; for at gøre dette sender vi isc.py.msg.SaveRequest med argumenterne:

  • Mask — Kun variabler, der tilfredsstiller masken, gemmes. Understøttede * og ?. Eksempel: "Data*, Figure?". Som standard *.
  • MaxLength — Den maksimale længde af den gemte variabel. Hvis serialiseringen af variablen overstiger denne længde, ignoreres den. Sæt 0 for at for at få variabler i enhver længde. Som standard $$$MaxStringLength.
  • Navn — Navn på konteksten (valgfrit).
  • Beskrivelse — Beskrivelse af konteksten (valgfrit).

Returnerer Ens.StringResponse med Id den gemte kontekst. I testprocessen kan du se aktiviteten Gem kontekst.

Den relevante anmodning isc.py.msg.RestoreRequest loader konteksten fra InterSystems IRIS til Python:

  • ContextId — kontekstens identifikator.
  • Ryd — ryd konteksten før genoprettelse.

Jupyter Notebook

Jupyter Notebook — er en webapplikation med åbent kildekode, der gør det muligt at oprette notebooks indeholdende kode, visualiseringer og tekst og offentliggøre dem. Python Gateway giver mulighed for at se og redigere BPL-processer som Jupyter Notebook. Bemærk, at den nuværende version bruger Python 3 som standard executor.

Denne udvidelse forudsætter, at annotationerne indeholder Python-kode og bruger aktivitetsnavne som overordnede overskrifter. Det er nu muligt at udvikle business processer PythonGateway i Jupyter Notebook. Her er hvad der er muligt:

  • Oprette nye forretningsprocesser
  • Slette forretningsprocesser
  • Oprette nye aktiviteter
  • Ændre aktiviteter
  • Slette aktiviteter

Her er demonstrationsvideo. Og nogle skærmbilleder:

Procesudforsker

Python Gateway i InterSystems IRIS

Procesredigerer

Python Gateway i InterSystems IRIS

Installation

  1. Du skal have InterSystems IRIS 2019.2+.
  2. Installer PythonGateway v0.8+ (kræver kun isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints og isc.py.ens.ProcessUtils).
  3. Opdater ObjectScript-koden fra lageret.
  4. Kør do ##class(isc.py.util.Jupyter).Install() og følg instruktionerne.

Dokumentation.

Konklusioner

MLToolkit er et værktøjssæt, hvis mål er at integrere modeller og transaktionelle miljøer, så de opbyggede modeller nemt kan bruges direkte i dine forretningsprocesser. Python Gateway er en del af MLToolkit og muliggør integration med Python-sproget og gør det muligt at orkestrere enhver maskinlæringsalgoritme lavet i Python (den primære platform for mange dataforskere), samt at bruge mange forudbyggede biblioteker til hurtigt at udvikle adaptive, automatiserede analytiske AI/ML-løsninger på InterSystems IRIS-platformen.

Links

MLToolkit

MLToolkit-brugergruppen er et privat GitHub-repositorium, oprettet som en del af Den Corporate GitHub-organisation InterSystems. Den henvender sig til eksterne brugere, der installerer, undersøger eller allerede bruger komponenter fra MLToolkit, herunder Python Gateway. Gruppen tilbyder en række implementerede use cases (med kildekode og testdata) inden for marketing, produktion, medicin og mange andre områder. For at deltage i ML Toolkit-brugergruppen bedes du sende en kort e-mail til følgende adresse: MLToolkit@intersystems.com og angiv følgende oplysninger i din e-mail:

  • GitHub-brugernavn
  • Organisation (hvor du arbejder eller studerer)
  • Position (din faktiske stilling i din organisation, eller "Studerende" eller "Selvstændig").
  • Land

Til dem, der har læst artiklen og er interesseret i mulighederne med InterSystems IRIS som platform for udvikling eller hosting af AI- og maskinlæringsmekanismer, tilbyder vi at drøfte mulige scenarier af interesse for din virksomhed. Vi vil gerne analysere dine virksomheders behov og sammen definere en handlingsplan; kontakt e-mailadressen til vores AI/ML ekspertteam er MLToolkit@intersystems.com.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster