Python Gateway hos InterSystems IRIS

Denne artikel handler om Python Gateway, et open source-fællesskabsprojekt for InterSystems IRIS-dataplatformen. Dette projekt giver dig mulighed for at orkestrere alle maskinlæringsalgoritmer, der er oprettet i Python (hovedmiljøet for mange dataforskere), bruge adskillige færdige biblioteker til hurtigt at skabe adaptive, robotanalytiske AI/ML-løsninger på InterSystems IRIS-platformen. I denne artikel vil jeg vise dig, hvordan InterSystems IRIS kan orkestrere Python-processer, udføre effektiv to-vejs dataoverførsel og skabe intelligente forretningsprocesser.

plan

  1. Introduktion.
  2. Værktøjer.
  3. Installation.
  4. API.
  5. Interoperabilitet.
  6. Jupyter notesbog.
  7. Konklusioner.
  8. Links.
  9. M.L. Toolkit.

Indledning

Python er et programmeringssprog til generelle formål på højt niveau, der fokuserer på at forbedre udviklerproduktivitet og kodelæsbarhed. I denne serie af artikler vil jeg fortælle om mulighederne for at bruge Python-sproget på InterSystems IRIS-platformen, mens hovedfokus i denne artikel er brugen af ​​Python som sprog til at skabe og anvende machine learning-modeller.

Maskinlæring (ML) er en klasse af kunstig intelligensmetoder, hvis karakteristiske træk ikke er den direkte løsning af et problem, men læring i processen med at løse mange lignende problemer.

Maskinlæringsalgoritmer og -modeller bliver mere og mere almindelige. Der er mange grunde til dette, men det hele handler om tilgængelighed, enkelhed og opnåelse af praktiske resultater. Er klyngedannelse eller endda neurale netværksmodellering en ny teknologi?

Selvfølgelig ikke, men i dag er der ingen grund til at skrive hundredtusindvis af linjer kode for at køre én model, og omkostningerne ved at skabe og bruge modeller bliver mindre og mindre.

Værktøjer udvikler sig - mens vi ikke har fuldt GUI-orienterede AI/ML-værktøjer, ses også de fremskridt, vi har set med mange andre klasser af informationssystemer som BI (fra at skrive kode til at bruge rammer og GUI-orienterede konfigurerbare løsninger). i AI/ML skabelsesværktøjer. Vi har allerede bestået stadiet med at skrive kode, og i dag bruger vi rammer til opbygning og træning af modeller.

Andre forbedringer, såsom muligheden for at udbrede en præ-trænet model, hvor slutbrugeren blot skal afslutte træningen af ​​modellen på deres specifikke data, gør det også nemmere at begynde at anvende machine learning. Disse fremskridt gør det meget lettere at lære maskinlæring, både for professionelle og for virksomheder som helhed.

På den anden side indsamler vi mere og mere data. Med en samlet dataplatform som InterSystems IRIS kan al denne information straks forberedes og bruges som input til maskinlæringsmodeller.

Med overgangen til skyen er det nemmere end nogensinde at lancere AI/ML-projekter. Vi kan kun forbruge de ressourcer, vi har brug for. Takket være den parallelisering, der tilbydes af cloud-platforme, kan vi desuden spare spildtid.

Men hvad med resultaterne? Det er her, tingene bliver mere komplicerede. Der er mange værktøjer til at bygge modeller, som jeg vil diskutere herefter. At bygge en god model er ikke let, men hvad så? At drage fordel af en virksomheds brug af modellen er også en ikke-triviel opgave. Roden til problemet er adskillelsen af ​​analytiske og transaktionelle arbejdsbelastninger og datamodeller. Når vi træner en model, gør vi det normalt på historiske data. Men stedet for den konstruerede model er i transaktionsdatabehandling. Hvad hjælper den bedste model til registrering af svigagtige transaktioner, hvis vi kører den en gang om dagen? Svindlerne er for længst gået afsted 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 agere i overensstemmelse med de forudsigelser, modellen giver.

ML Toolkit er et værktøjssæt, der gør netop det: at bringe modeller sammen og et transaktionsmiljø, så de modeller, du bygger, nemt kan bruges direkte i dine forretningsprocesser. Python Gateway er en del af ML Toolkit og giver integration med Python-sproget (svarende til R Gateway, at være en del af ML Toolkit giver integration med R-sproget).

værktøjer

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

Teknologi

  • Python er et fortolket, generel programmeringssprog på højt niveau. Den største fordel ved sproget er et stort bibliotek af matematiske, ML- og AI-biblioteker. Ligesom ObjectScript er det et objektorienteret sprog, men alt er defineret dynamisk, ikke statisk. Alt er også et objekt. Senere artikler forudsætter et forbigående kendskab til sproget. Hvis du vil i gang med at lære, anbefaler jeg at starte med dokumentation.
  • Til vores næste øvelser, sæt Python 3.6.7 64bit.
  • IDE: Jeg bruger PyCharm, men generelt много. Hvis du bruger Atelier, er der et Eclipse-plugin til Python-udviklere. Hvis du bruger VS Code, så er der en udvidelse til Python.
  • Notesbog: I stedet for en IDE kan du skrive og dele dine scripts i online notesbøger. Den mest populære af dem er jupyter.

Biblioteker

Her er en (delvis) liste over maskinlæringsbiblioteker:

  • numpy — en grundlæggende pakke til nøjagtige beregninger.
  • pandas — højtydende datastrukturer og dataanalyseværktøjer.
  • Matplotlib - Oprettelse af diagrammer.
  • Søfødt - datavisualisering baseret på matplotlib.
  • Sklearn — maskinlæringsmetoder.
  • XGBoost — maskinlæringsalgoritmer inden for Gradient Boosting-metoden.
  • Gensim - NLP.
  • Keras - neurale netværk.
  • Tensorflow er en platform til at skabe maskinlæringsmodeller.
  • PyTorch er en platform til at skabe maskinlæringsmodeller med fokus på Python.
  • Nyoka - PMML fra forskellige modeller.

AI/ML-teknologier gør virksomheden mere effektiv og tilpasningsdygtig. Desuden er disse teknologier i dag blevet lettere at udvikle og implementere. Begynd at lære om 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å:

  • operativsystem
    • Windows
    • Linux
    • Mac
  • Docker
    • Brug billedet fra DockerHub
    • Skab dit eget look

Uanset installationsmetoden skal du bruge kildekoden. Det eneste sted at downloade koden er udgivelser side. Den indeholder testede stabile udgivelser, bare tag den nyeste. I øjeblikket er det 0.8, men med tiden kommer der nye til. Undlad at klone/downloade depotet, download den seneste udgivelse.

operativsystem

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

  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 ethvert område med produkter. Hvis du vil have et eksisterende område til at understøtte produkter, skal du køre: write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. Placere billedforklaring DLL/SO/DYLIB til en mappe bin din InterSystems IRIS-instans. Biblioteksfilen skal være tilgængelig i den sti, der returneres af write ##class(isc.py.Callout).GetLib().

Windows

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

Linux (Debian/Ubuntu)

  1. Tjek, om miljøvariablen er PATH indeholder /usr/lib и /usr/lib/x86_64-linux-gnu. Brug fil /etc/environment at indstille miljøvariabler.
  2. I tilfælde af fejl undefined symbol: _Py_TrueStruct indstille indstillingen PythonLib... også i readme der er et afsnit om fejlfinding.

Mac

  1. I øjeblikket understøttes kun python 3.6.7 fra python.org. Tjek Variabel PATH.

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

Docker

Brug af beholdere har en række fordele:

  • Bærbarhed
  • effektivitet
  • Isolering
  • lethed
  • Uforanderlighed

Tjek dette ud en række artikler for mere information om brug af Docker med InterSystems produkter.

Alle Python Gateway-builds er i øjeblikket containerbaserede. 2019.4.

Klar billede

Løb: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latestat downloade og køre Python Gateway med InterSystems IRIS Community Edition. Det er alt.

Skab dit eget look

For at bygge et docker-image skal du køre i roden af ​​depotet: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
Som standard er billedet bygget ud fra 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 køres: `docker build --build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 --force-rm --tag intersystemscommunity/irispy:latest'.

Derefter kan du køre docker-billedet:

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

Hvis du bruger et billede baseret på InterSystems IRIS Community Edition, behøver du ikke at angive en nøgle.

Kommentarer

  • Testproces isc.py.test.Process gemmer et antal billeder i en midlertidig mappe. Du ønsker måske at ændre denne sti til en monteret mappe. For at gøre dette skal du redigere indstillingen WorkingDir angivelse af den monterede mappe.
  • For at få adgang til terminalen skal du køre: docker exec -it irispy sh.
  • Adgang til System Management Portal ved login SuperUser/SYS.
  • For at stoppe en container skal du køre: docker stop irispy && docker rm --force irispy.

Verifikation af installationen

Når du har installeret Python Gateway, er det værd at tjekke, om det virker. Kør denne kode 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 burde være HELLO - værdien af ​​Python-variablen x. Hvis returneringsstatus sc er en fejl eller var tom, tjek Readme – afsnittet om fejlfinding.

API

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

  • Kode udførelse
  • Dataoverførsel
  • Hjælpe

Kode udførelse

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

SimpleString

SimpleString er hovedmetoden. Det kræver 4 valgfrie argumenter:

  • code er den kodelinje, der skal udføres. Linjefeed karakter: $c(10).
  • returnVariable er navnet på den variabel, der skal returneres.
  • serialization - hvordan man serialiserer returnVariable. 0 - streng (standard), 1 - repr.
  • result - ByRef reference til den variabel, hvori værdien er skrevet returnVariable.

Ovenfor har vi gjort:

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

I dette eksempel tildeler vi en Python-variabel x значение Hello og ønsker at returnere værdien af ​​en Python-variabel x til en ObjectScript-variabel var.

ExecuteCode

ExecuteCode er et mere sikkert og mindre restriktivt alternativ SimpleString.
Linjer i InterSystems IRIS-platformen er begrænset til 3 tegn, og hvis du vil udføre et længere stykke kode, skal du bruge streams.
Det kræver to argumenter:

  • code — en streng eller strøm af Python-kode, der skal udføres.
  • variable - (valgfrit) tildeler resultatet af udførelsen code denne Python-variabel.

Foreslå at bruge:

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

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

Dataoverførsel

Send data til og fra Python.

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:

  • String til simple datatyper og fejlretning.
  • Repr til opbevaring af simple genstande og fejlretning.
  • JSON til nem datamanipulation på InterSystems IRIS-siden.
  • Pickle at gemme objekter.

Disse metoder giver dig mulighed for at modtage variabler fra Python som en streng eller som streams.

  • GetVariable(variable, serialization, .stream, useString) - få serialization variabel variable в stream. hvis useString er 1, og serialiseringen placeres i en streng, returneres en streng, ikke en strøm.
  • GetVariableJson(variable, .stream, useString) — få JSON-serialisering af en variabel.
  • GetVariablePickle(variable, .stream, useString, useDill) -Få en pickle (eller dild) serialisering af en variabel.

Lad os prøve at få vores variabel y.

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

InterSystems IRIS -> Python

Indlæser data fra InterSystems IRIS til Python.

  • ExecuteQuery(query, variable, type, namespace) - opretter et datasæt (pandas dataframe eller list) fra sql-forespørgsel og indstil den til python-variabel variable. Plastikpose isc.py skal være tilgængelig i området namespace - anmodningen vil blive udført der.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) - indlæser globale data global fra abonnement start til end i Python som typevariabel type: listeller pandaer dataframe. Beskrivelse af valgfri argumenter mask , labels tilgængelig i klassedokumentation og repository Dataoverførselsdokumenter.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) - indlæser klassedata class fra id start til end i Python som typevariabel type: listeller pandaer dataframe. properties — liste (adskilt med komma) over klasseegenskaber, der skal indlæses i datasættet. Masker understøttes * и ?. Standard - * (alle ejendomme). Ejendom %%CLASSNAME ignoreret.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) - indlæser tabeldata table fra id start til end i python.

ExecuteQuery - universel (enhver gyldig SQL-forespørgsel vil blive sendt til Python). Imidlertid, ExecuteGlobal og hans omslag ExecuteClass и ExecuteTable arbejde med en række restriktioner. De er meget hurtigere (3-5 gange hurtigere end ODBC-driveren og 20 gange hurtigere end ExecuteQuery). Mere information i Dataoverførselsdokumenter.
Alle disse metoder understøtter overførsel af data fra ethvert område. Plastikpose isc.py skal være tilgængelig i målområdet.

ExecuteQuery

ExecuteQuery(request, variable, type, namespace) - videregivelse af resultaterne af enhver gyldig SQL-forespørgsel til Python. Dette er den langsomste dataoverførselsmetode. Brug det hvis ExecuteGlobal og dens indpakning er ikke tilgængelig.

Argumenter:

  • query - sql forespørgsel.
  • variable - navnet på Python-variablen, som dataene er skrevet i.
  • typelist eller pandaer dataframe.
  • namespace - det område, hvor anmodningen vil blive udført.

Udfør Global

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

Argumenter:

  • global er navnet på den globale uden ^
  • variable - navnet på Python-variablen, som dataene er skrevet i.
  • typelist eller pandaer dataframe.
  • start — det første abonnement af den globale. Nødvendigvis %Integer.
  • end er det sidste abonnement på den globale. Nødvendigvis %Integer.
  • mask — maske af globale værdier. Masken kan være kortere end antallet af felter i den globale (i hvilket tilfælde felterne i slutningen springes over). Sådan formateres masken:
    • + videregive værdien som den er.
    • - spring værdi.
    • b - boolesk type (0False, resten - True).
    • d — Dato (fra $horolog, på Windows fra 1970, på Linux fra 1900).
    • t - Tid ($horolog, sekunder efter midnat).
    • m — Tidsstempel (ÅR-MÅNED-DAG TIME:MINUT:SECOND formatstreng).
  • labels - %Liste over kolonnenavne. Det første element er navnet på subscriptet.
  • namespace - det område, hvor anmodningen vil blive udført.

ExecuteClass

vikle over ExecuteGlobal. Forbereder et opkald baseret på klassedefinitionen ExecuteGlobal og ringer til ham.

ExecuteClass(class, variable, type, start, end, properties, namespace) - videregivelse af klassedata til Python.

Argumenter:

  • class - klassenavn
  • variable - navnet på Python-variablen, som dataene er skrevet i.
  • typelist eller pandaer dataframe.
  • start — start-id.
  • end - endeligt id
  • properties — liste (adskilt med komma) over klasseegenskaber, der skal indlæses i datasættet. Masker understøttes * и ?. Standard - * (alle ejendomme). Ejendom %%CLASSNAME ignoreret.
  • namespace - det område, hvor anmodningen vil blive udført.

Alle egenskaber videregives som de er undtagen typeegenskaber %Date, %Time, %Boolean и %TimeStamp - de konverteres til de tilsvarende Python-klasser.

ExecuteTable

vikle over ExecuteClass. Oversætter tabelnavnet til et klassenavn og kalder ExecuteClass. Underskrift:

ExecuteTable(table, variable, type, start, end, properties, namespace) - videregivelse af tabeldata til Python.

Argumenter:

  • table - tabelnavn.
    Alle andre argumenter videregives som de er. ExecuteClass.

Bemærkninger

  • ExecuteGlobal, ExecuteClass и ExecuteTable arbejde lige hurtigt.
  • ExecuteGlobal 20 gange hurtigere end ExecuteQuery på store datasæt (overførselstid >0.01 sekund).
  • ExecuteGlobal, ExecuteClass и ExecuteTable arbejde på globaler med denne struktur: ^global(key) = $lb(prop1, prop2, ..., propN) где key er et heltal.
  • for ExecuteGlobal, ExecuteClass и ExecuteTable understøttet værdiområde %Date svarer til rækkevidden mktime og afhænger af OSvinduer: 1970-01-01, linux 1900-01-01, mac). Brug %TimeStampat videregive data uden for dette område eller bruge pandas dataframe som denne begrænsning gælder kun for listen.
  • for ExecuteGlobal, ExecuteClass и ExecuteTable alle argumenter undtagen datakilde (global, klasse eller tabel) og variabel er valgfri.

Примеры

test klasse isc.py.test.Person indeholder en metode, der viser alle dataoverførselsmuligheder:

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)

opkaldsmetode do ##class(isc.py.test.Person).Test() for at se, hvordan alle dataoverførselsmetoder fungerer.

Hjælpermetoder

  • GetVariableInfo(variable, serialization, .defined, .type, .length) - få information om variablen: om den er defineret, klasse og serialiseringslængde.
  • GetVariableDefined(variable, .defined) - om variablen er defineret.
  • GetVariableType(variable, .type) - få klassen af ​​variablen.
  • GetStatus() - Hent og fjern den sidste undtagelse på Python-siden.
  • GetModuleInfo(module, .imported, .alias) — Hent modulvariabel og importstatus.
  • GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments) - få information om funktionen.

Interoperabilitet

Du har lært, hvordan du kalder Python Gateway fra terminalen, lad os nu begynde at bruge den i produktionen. Grundlaget for at interagere med Python i denne tilstand er isc.py.ens.Operation. Det giver os mulighed for:

  • Udfør Python-kode
  • Gem/gendan Python-kontekst
  • Indlæs og modtag data fra Python

Grundlæggende er en Pyhton-operation en indpakning isc.py.Main. Operation isc.py.ens.Operation tillader interaktion med Python-processen fra InterSystems IRIS-produkter. Fem anmodninger understøttes:

  • isc.py.msg.ExecutionRequest for at udføre Python-kode. vender tilbage isc.py.msg.ExecutionResponse med udførelsesresultatet og værdierne af de ønskede variabler.
  • isc.py.msg.StreamExecutionRequest for at udføre Python-kode. vender tilbage isc.py.msg.StreamExecutionResponse resultatet af eksekveringen 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 at overføre resultatet af udførelse af en SQL-forespørgsel. vender tilbage Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest at videregive globale/klasse/tabeldata. vender tilbage Ens.Response.
  • isc.py.msg.SaveRequest for at gemme Python-kontekst. vender tilbage Ens.StringResponse med kontekst-id.
  • isc.py.msg.RestoreRequest for at gendanne Python-konteksten.

    Desuden isc.py.ens.Operation har to indstillinger:

    • Initializer - at vælge en klasse, der implementerer grænsefladen isc.py.init.Abstract. Den kan bruges til at indlæse funktioner, moduler, klasser og lignende. Den udføres én gang, når processen starter.
    • PythonLib - (Kun Linux), hvis du ser opstartsfejl, skal du indstille værdien til libpython3.6m.so eller endda i den fulde sti til Python-biblioteket.

Oprettelse af forretningsprocesser

Der er to tilgængelige klasser, der letter udviklingen af ​​forretningsprocesser:

  • isc.py.ens.ProcessUtils giver dig mulighed for at udtrække annoteringer fra aktiviteter med variabel substitution.
  • isc.py.util.BPEmulator gør det nemt at teste forretningsprocesser med Python. Det kan udføre en forretningsproces (Python-dele) i den aktuelle proces.

Variabel substitution

Alle forretningsprocesser arvet fra isc.py.ens.ProcessUtils, kan bruge metoden GetAnnotation(name) for at få værdien af ​​en aktivitetsanmærkning ved dens navn. Aktivitetsannotationen kan indeholde variabler, der vil blive evalueret på InterSystems IRIS-siden, før de overføres til Python. Her er syntaksen for variabel substitution:

  • ${class:method:arg1:...:argN} - metodekald
  • #{expr} - eksekver kode i ObjectScript-sproget.

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

  • #{process.WorkDirectory} returnerer objektets egenskab WorkDirectory process, som er en forekomst af klassen isc.py.test.Process de der. nuværende forretningsproces.
  • ${%PopulateUtils:Integer:1:100} kalder en metode Integer klasse %PopulateUtils, bestå argumenter 1 и 100, returnerer et tilfældigt heltal i området 1...100.

Test forretningsproces

Testproduktionen og testforretningsprocessen er som standard tilgængelige som en del af Python Gateway. Sådan bruger du dem:

  1. Kør i OS-terminal: pip install pandas matplotlib seaborn.
  2. Kør i InterSystems IRIS-terminalen: do ##class(isc.py.test.CannibalizationData).Import() at udfylde testdata.
  3. Lancere produkter isc.py.test.Production.
  4. Send anmodningstype Ens.Request в isc.py.test.Process.

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

Python Gateway hos InterSystems IRIS

Kode udførelse

Det vigtigste kald er udførelsen af ​​Python-kode:

Python Gateway hos InterSystems IRIS

Anmodning brugt isc.py.msg.ExecutionRequest, her er dens egenskaber:

  • Code — Python-kode.
  • SeparateLines - om koden skal opdeles i linjer til udførelse. $c(10) (n) bruges til at adskille strenge. Bemærk at det IKKE anbefales at behandle hele beskeden på én gang, denne funktion er kun til behandling def og lignende multiline udtryk. Standard 0.
  • Variables er en kommasepareret liste over variabler, der vil blive tilføjet til svaret.
  • Serialization - Hvordan man serialiserer de variabler, vi ønsker at returnere. Muligheder: Str, Repr, JSON, Pickle и Dill, Standard Str.

I vores tilfælde sætter vi kun ejendommen Code, så alle andre egenskaber bruger deres standardværdier. Vi sætter det op ved at ringe process.GetAnnotation("Import pandas"), som ved kørsel returnerer en anmærkning efter at variabel substitution er blevet udført. Endelig koden import pandas as pd videregives til Python. GetAnnotation kan være nyttigt til at få multi-line Python-scripts, men der er ingen begrænsninger på denne måde at få kode på. Du kan indstille egenskaben Code på nogen måde, der er praktisk for dig.

Få variabler

En anden interessant udfordring ved at bruge isc.py.msg.ExecutionRequestCorrelation Matrix: Tabular:

Python Gateway hos InterSystems IRIS

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

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

Vi kan se resultaterne i Visual Trace:

Python Gateway hos InterSystems IRIS

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

Dataoverførsel

Lad os derefter tale om overførsel af data fra InterSystems IRIS til Python, alle dataoverførselsanmodninger implementerer grænsefladen isc.py.msg.DataRequest, som giver følgende egenskaber:

  • Variable er en Python-variabel, som dataene er skrevet til.
  • Type - variabel type: dataframe (pandas dataramme) eller list.
  • Namespace - det område, hvorfra vi modtager data. Plastikpose isc.py bør være tilgængelig i dette område. Dette kan være et område uden produktsupport.

Baseret på denne grænseflade implementeres 4 klasser af anmodninger:

  • isc.py.msg.QueryRequest - sæt ejendom Query at sende en SQL-forespørgsel.
  • isc.py.msg.ClassRequest - sæt ejendom Class at videregive klassedata.
  • isc.py.msg.TableRequest - sæt ejendom Table at videregive tabeldata.
  • isc.py.msg.GlobalRequest - sæt ejendom Global at overføre data globalt.

I testprocessen skal du se på aktiviteten RAWHvor isc.py.msg.QueryRequest vist i aktion.

Python Gateway hos InterSystems IRIS

Lagring/gendannelse af en Python-kontekst

Endelig kan vi gemme Python-konteksten i InterSystems IRIS, for at gøre dette, send isc.py.msg.SaveRequest med argumenter:

  • Mask — Kun variabler, der opfylder masken, gemmes. Understøttet * и ?. Et eksempel: "Data*, Figure?". Standard *.
  • MaxLength — Den maksimale længde af den lagrede variabel. Hvis serialiseringen af ​​en variabel er længere, vil den blive ignoreret. Indstil til 0 for at få variabler af enhver længde. Standard $$$MaxStringLength.
  • Name — Kontekstnavn (valgfrit).
  • Description — Beskrivelse af sammenhængen (valgfrit).

Vender tilbage Ens.StringResponse с Id gemt kontekst. I testprocessen skal du se på aktiviteten Save Context.

Relateret anmodning isc.py.msg.RestoreRequest indlæser en kontekst fra InterSystems IRIS til Python:

  • ContextId er kontekstidentifikatoren.
  • Clear — Ryd konteksten før gendannelse.

Jupyter Notebook

Jupyter Notebook er en open source-webapplikation, der giver dig mulighed for at oprette og udgive notesbøger, der indeholder kode, visualiseringer og tekst. Python Gateway giver dig mulighed for at se og redigere BPL-processer som en Jupyter Notebook. Bemærk, at den almindelige Python 3 executor i øjeblikket bruges.

Denne udvidelse antager, at annoteringer indeholder Python-kode og bruger aktivitetsnavne som forudgående titler. Det er nu muligt at udvikle PythonGateway forretningsprocesser i Jupyter Notebook. Her er hvad der er muligt:

  • Skab nye forretningsprocesser
  • Slet forretningsprocesser
  • Opret nye aktiviteter
  • Skift aktiviteter
  • Slet aktiviteter

her demo video. Og nogle skærmbilleder:

Process Explorer

Python Gateway hos InterSystems IRIS

Proces editor

Python Gateway hos InterSystems IRIS

Installation

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

Records.

Fund

MLToolkit er et sæt værktøjer, der har til formål at kombinere modeller og et transaktionsmiljø, så de opbyggede modeller nemt kan bruges direkte i dine forretningsprocesser. Python Gateway er en del af MLToolkit og giver integration med Python-sproget, så du kan orkestrere alle maskinlæringsalgoritmer, der er oprettet i Python (hovedmiljøet for mange dataforskere), bruge talrige færdiglavede biblioteker til hurtigt at skabe adaptiv, robotanalytisk AI / ML-løsninger på InterSystems platformen IRIS.

RЎSЃS <P "RєRё

MLToolkit

MLToolkit-brugergruppen er et privat GitHub-lager oprettet som en del af InterSystems virksomheds GitHub-organisation. Den henvender sig til eksterne brugere, der installerer, lærer eller allerede bruger MLToolkit-komponenter, inklusive Python Gateway. Koncernen har en række implementerede cases (med kildekode og testdata) inden for marketing, fremstilling, medicin og mange andre industrier. For at deltage i ML Toolkit-brugergruppen skal du sende en kort e-mail til følgende adresse: [e-mail beskyttet] og medtag følgende oplysninger i dit brev:

  • GitHub brugernavn
  • Organisation (du arbejder eller studerer)
  • Stilling (din faktiske position i din organisation, enten "Student" eller "Uafhængig").
  • Land

For dem, der har læst artiklen og er interesseret i InterSystems IRIS som en platform til at udvikle eller hoste kunstig intelligens og maskinlæringsmekanismer, inviterer vi dig til at diskutere mulige scenarier af interesse for din virksomhed. Vi vil let analysere din virksomheds behov og i fællesskab udarbejde en handlingsplan; kontakt e-mailadresse på vores AI/ML ekspertgruppe – [e-mail beskyttet].

Kilde: www.habr.com

Tilføj en kommentar