Python Gateway i InterSystems IRIS

Den här artikeln handlar om Python Gateway, ett community-projekt med öppen källkod för InterSystems IRIS-dataplattform. Detta projekt låter dig orkestrera alla maskininlärningsalgoritmer skapade i Python (huvudmiljön för många dataforskare), använda många färdiga bibliotek för att snabbt skapa adaptiva, robotanalytiska AI/ML-lösningar på InterSystems IRIS-plattform. I den här artikeln kommer jag att visa hur InterSystems IRIS kan orkestrera processer i Python, effektivt kommunicera tvåvägsdata och skapa intelligenta affärsprocesser.

planen

  1. Introduktion.
  2. Verktyg.
  3. Installation.
  4. API.
  5. Interoperabilitet.
  6. Jupyter anteckningsbok.
  7. Slutsatser.
  8. Länkar.
  9. MLToolkit.

Inledning

Python är ett högnivå, allmänt programmeringsspråk som syftar till att förbättra utvecklarens produktivitet och kodläsbarhet. I den här artikelserien kommer jag att diskutera möjligheterna att använda Python på InterSystems IRIS-plattformen, med huvudfokus för den här artikeln att använda Python som språk för att skapa och köra modeller för maskininlärning.

Maskininlärning (ML) är en klass av metoder för artificiell intelligens, vars karakteristiska drag inte är den direkta lösningen av ett problem, utan lärande i processen att lösa många liknande problem.

Maskininlärningsalgoritmer och -modeller blir allt vanligare. Det finns många anledningar till detta, men allt handlar om tillgänglighet, enkelhet och att uppnå praktiska resultat. Är klustring eller till och med neurala nätverksmodellering en ny teknik?

Naturligtvis inte, men nu för tiden finns det inget behov av att skriva hundratusentals rader kod för att köra en enda modell, och kostnaden för att skapa och använda modeller blir mindre och mindre.

Verktygen utvecklas - även om vi inte har helt GUI-centrerade AI/ML-verktyg, är de framsteg vi har sett med många andra klasser av informationssystem, som BI (från att skriva kod till att använda ramverk och GUI-centrerade konfigurerbara lösningar) , observeras även i verktyg för att skapa AI/ML. Vi har redan passerat stadiet att skriva kod och idag använder vi ramverk för att bygga och träna modeller.

Andra förbättringar, som möjligheten att distribuera en förtränad modell där slutanvändaren helt enkelt måste träna färdigt modellen på sin specifika data, gör det också lättare att komma igång med maskininlärning. Dessa framsteg gör inlärning av maskininlärning mycket enklare både för proffs och för företag i allmänhet.

Å andra sidan samlar vi in ​​mer och mer data. Med en enhetlig dataplattform som InterSystems IRIS kan all denna information omedelbart förberedas och användas som input till maskininlärningsmodeller.

Med övergången till molnet blir det enklare än någonsin att lansera AI/ML-projekt. Vi kan bara konsumera de resurser vi behöver. Dessutom, tack vare parallelliseringen som erbjuds av molnplattformar, kan vi spara tid.

Men hur är det med resultaten? Det är här saker och ting blir mer komplicerade. Det finns många verktyg för att bygga modeller, som jag kommer att diskutera härnäst. Att bygga en bra modell är inte lätt, men vad händer sedan? Att tjäna pengar på att använda en affärsmodell är också en icke-trivial uppgift. Roten till problemet är separationen av analytiska och transaktionella arbetsbelastningar och datamodeller. När vi tränar en modell gör vi det oftast på historiska data. Men platsen för den konstruerade modellen är i transaktionsdatabehandling. Vad hjälper den bästa modellen för upptäckt av bedrägliga transaktioner om vi kör den en gång om dagen? Bedragarna har sedan länge lämnat med pengarna. Vi behöver träna modellen på historisk data, men vi måste också tillämpa den i realtid på ny inkommande data så att våra affärsprocesser kan agera på de förutsägelser som modellen gör.

ML Toolkit är en uppsättning verktyg som syftar till att göra just det: förena modeller och en transaktionsmiljö så att de byggda modellerna enkelt kan användas direkt i dina affärsprocesser. Python Gateway är en del av ML Toolkit och tillhandahåller integration med Python-språket (liknande hur R Gateway, som en del av ML Toolkit ger integration med R-språket).

Verktyg

Innan vi fortsätter skulle jag vilja beskriva några Python-verktyg och bibliotek som vi kommer att använda senare.

Teknik

  • Python är ett tolkat, allmänt programmeringsspråk på hög nivå. Den största fördelen med språket är dess stora bibliotek av matematiska, ML- och AI-bibliotek. Precis som ObjectScript är det ett objektorienterat språk, men allt definieras dynamiskt snarare än statiskt. Allt är också ett objekt. Senare artiklar förutsätter en övergående förtrogenhet med språket. Om du vill börja lära dig rekommenderar jag att börja med dokumentation.
  • För våra efterföljande övningar, ställ in Python 3.6.7 64 bitar.
  • IDE: Jag använder PyCharm, men i allmänhet de много. Om du använder Atelier finns det ett Eclipse-plugin för Python-utvecklare. Om du använder VS Code finns det en tillägg för Python.
  • Anteckningsbok: Istället för en IDE kan du skriva och dela dina skript i anteckningsböcker online. Den mest populära av dem är jupyter.

bibliotek

Här är en (icke uttömmande) lista över maskininlärningsbibliotek:

  • numpy — Ett grundläggande paket för exakta beräkningar.
  • pandas — Högpresterande datastrukturer och dataanalysverktyg.
  • matplotlib — Skapande av grafer.
  • sjöfödd — datavisualisering baserad på matplotlib.
  • Sklearn — Maskininlärningsmetoder.
  • XGBoost — Maskininlärningsalgoritmer inom ramen för metoden för gradientförstärkning.
  • Gensim — NLP.
  • Keras - neurala nätverk.
  • Tensorflöde — en plattform för att skapa modeller för maskininlärning.
  • PyTorch är en plattform för att skapa modeller för maskininlärning, fokuserad på Python.
  • Nyoka - PMML från olika modeller.

AI/ML-teknik gör verksamheten mer effektiv och anpassningsbar. Dessutom blir dessa tekniker idag lättare att utveckla och implementera. Börja lära dig om AI/ML-tekniker och hur de kan hjälpa din organisation att växa.

Installation

Det finns flera sätt att installera och använda Python Gateway:

  • operativsystem
    • Windows
    • Linux
    • Mac
  • Hamnarbetare
    • Använd en bild från DockerHub
    • Skapa din egen look

Oavsett installationsmetod behöver du källkoden. Det enda stället att ladda ner koden är släpper sida. Den innehåller testade stabila utgåvor, ta bara den senaste. För tillfället är det 0.8, men med tiden kommer det nya. Klona/ladda inte ner förvaret, ladda ner den senaste versionen.

operativsystem

Om du installerar Python Gateway på ett operativsystem måste du först (oavsett operativsystem) installera Python. För detta:

  1. Installera Python 3.6.7 64 bitar. Det rekommenderas att installera Python i standardkatalogen.
  2. Installera modulen dill: pip install dill.
  3. Ladda ner ObjectScript-koden (dvs. do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) till alla områden med produkter. Om du vill att ett befintligt område ska stödja produkter, kör: write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. Plats bildtext DLL/SO/DYLIB till en mapp bin din InterSystems IRIS-instans. Biblioteksfilen måste vara tillgänglig i den returnerade sökvägen write ##class(isc.py.Callout).GetLib().

Windows

  1. Se till att miljövariabeln PYTHONHOME pekar på Python 3.6.7.
  2. Se till att systemmiljövariabeln är PATH innehåller en variabel PYTHONHOME (eller katalogen den pekar på).

Linux (Debian/Ubuntu)

  1. Kontrollera att miljövariabeln är PATH den innehåller /usr/lib и /usr/lib/x86_64-linux-gnu. Använd fil /etc/environment för att ställa in miljövariabler.
  2. Vid fel undefined symbol: _Py_TrueStruct ställ in inställningen PythonLib. Också i Viktigt det finns ett avsnitt om felsökning.

Mac

  1. För närvarande stöds endast Python 3.6.7 python.org. Kontrollera variabeln PATH.

Om du ändrade miljövariabler, starta om din InterSystems-produkt.

Hamnarbetare

Att använda behållare har ett antal fördelar:

  • Bärbarhet
  • effektivitet
  • Isolering
  • Lätthet
  • Oföränderlighet

Kolla in det här serie artiklar för mer information om hur du använder Docker med InterSystems produkter.

Alla Python Gateway-byggen är för närvarande containerbaserade 2019.4.

Klar bild

Springa: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latestför att ladda ner och köra Python Gateway med InterSystems IRIS Community Edition. Det är allt.

Skapa din egen look

För att bygga en docker-bild, kör i roten av förvaret: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
Som standard byggs bilden utifrån bilden store/intersystems/iris-community:2019.4.0.383.0, men du kan ändra detta genom att ställa in en variabel IMAGE.
För att bygga från InterSystems IRIS, kör: `docker build --build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 --force-rm --tag intersystemscommunity/irispy:latest ".

Efter detta kan du köra docker-bilden:

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

Om du använder en bild baserad på InterSystems IRIS Community Edition kan du utelämna nyckeln.

kommentarer

  • Testprocess isc.py.test.Process sparar ett antal bilder i en tillfällig katalog. Du kanske vill ändra den här sökvägen till den monterade katalogen. För att göra detta, redigera inställningen WorkingDir ange den monterade katalogen.
  • För att komma åt terminalkörningen: docker exec -it irispy sh.
  • Tillgång till System Management Portal genom inloggning SuperUser/SYS.
  • För att stoppa behållaren, kör: docker stop irispy && docker rm --force irispy.

Verifierar installationen

När du har installerat Python Gateway är det värt att kontrollera att det fungerar. Kör den här koden i InterSystems IRIS-terminal:

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

Resultatet bör bli: HELLO — Python-variabelvärde x. Om returstatus sc är ett fel eller var tom, kontrollera Readme - avsnittet Felsökning.

API

Python Gateway är installerad och du har verifierat att den fungerar. Det är dags att börja använda det!
Huvudgränssnittet till Python är isc.py.Main. Den erbjuder följande grupper av metoder (alla returnerar %Status):

  • Kodexekvering
  • Dataöverföring
  • Extra

Kodexekvering

Dessa metoder låter dig exekvera godtycklig Python-kod.

SimpleString

SimpleString - detta är huvudmetoden. Det krävs 4 valfria argument:

  • code — rad kod att exekvera. Radmatningstecken: $c(10).
  • returnVariable — Namnet på variabeln som ska returneras.
  • serialization - hur man serialiserar returnVariable. 0 — sträng (standard), 1 — repr.
  • result — ByRef referens till variabeln som värdet skrivs in i returnVariable.

Ovan gjorde vi:

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

I det här exemplet tilldelar vi en Python-variabel x betyder Hello och vill returnera värdet för en Python-variabel x till en ObjectScript-variabel var.

ExecuteCode

ExecuteCode är ett säkrare och mindre restriktivt alternativ SimpleString.
Rader i InterSystems IRIS-plattform är begränsade till 3 641 144 tecken, och om du vill exekvera en längre kod måste du använda trådar.
Två argument accepteras:

  • code — en rad eller ström av Python-kod som ska köras.
  • variable — (valfritt) tilldelar resultatet av utförandet code denna Python-variabel.

Exempel att använda:

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

I det här exemplet multiplicerar vi 2 med 3 och skriver resultatet till en Python-variabel y.

Dataöverföring

Skicka data till och från Python.

Python -> InterSystems IRIS

Det finns fyra sätt att få värdet av en Python-variabel i InterSystems IRIS, beroende på vilken serialisering du behöver:

  • String för enkla datatyper och felsökning.
  • Repr för lagring av enkla föremål och felsökning.
  • JSON för enkel datamanipulation på InterSystems IRIS-sidan.
  • Pickle för att spara objekt.

Dessa metoder låter dig hämta variabler från Python som en sträng eller strömmar.

  • GetVariable(variable, serialization, .stream, useString) - skaffa sig serialization variabel variable в stream. om useString är 1 och serialiseringen placeras på en sträng, då returneras en sträng och inte 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.

Låt oss försöka få vår variabel y.

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

InterSystems IRIS -> Python

Laddar data från InterSystems IRIS till Python.

  • ExecuteQuery(query, variable, type, namespace) - skapar en datauppsättning (pandas dataframe eller list) från sql-frågan och ställer in den till en Python-variabel variable. Plastpåse isc.py måste finnas i området namespace — begäran kommer att verkställas där.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) - laddar global data global från prenumeration start до end i Python som en typvariabel type: list, eller pandor dataframe. Beskrivning av valfria argument mask och labels tillgänglig i klassdokumentation och arkiv Dataöverföringsdokument.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) - laddar klassdata class från id start до end i Python som en typvariabel type: list, eller pandor dataframe. properties — en lista (avgränsad med komma) över klassegenskaper som måste laddas in i datamängden. Masker stöds * и ?. Standard - * (alla fastigheter). Fast egendom %%CLASSNAME ignoreras.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) - laddar tabelldata table från id start до end i Python.

ExecuteQuery — universal (alla korrekta SQL-frågor skickas till Python). Dock, ExecuteGlobal och dess omslag ExecuteClass и ExecuteTable arbeta med ett antal restriktioner. De är mycket snabbare (3-5 gånger snabbare än ODBC-drivrutinen och 20 gånger snabbare ExecuteQuery). Mer information på Dataöverföringsdokument.
Alla dessa metoder stöder dataöverföring från vilket område som helst. Plastpåse isc.py måste finnas i målområdet.

ExecuteQuery

ExecuteQuery(request, variable, type, namespace) — överföra resultaten av en korrekt SQL-fråga till Python. Detta är den långsammaste dataöverföringsmetoden. Använd den om ExecuteGlobal och dess omslag är inte tillgängliga.

Argument:

  • query - sql-fråga.
  • variable — namnet på Python-variabeln som data skrivs in i.
  • type - list eller pandor dataframe.
  • namespace — Det område där begäran kommer att verkställas.

ExecuteGlobal

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

Argument:

  • global - globalt namn utan ^
  • variable — namnet på Python-variabeln som data skrivs in i.
  • type - list eller pandor dataframe.
  • start — den första prenumerationen av den globala. Nödvändigtvis %Integer.
  • end — den sista prenumerationen av den globala. Nödvändigtvis %Integer.
  • mask — global värdemask. Masken kan vara kortare än antalet fält i den globala (i vilket fall kommer fälten i slutet att hoppas över). Så här formaterar du en mask:
    • + skicka värdet som det är.
    • - hoppa över värde.
    • b — boolesk typ (0 - False, resten - True).
    • d — Datum (från $horolog, på Windows från 1970, på Linux från 1900).
    • t — Tid ($horolog, sekunder efter midnatt).
    • m — Tidsstämpel (formatsträng ÅR-MÅNAD-DAG TIMME:MINUT:SEKUND).
  • labels — %Lista med kolumnnamn. Det första elementet är namnet på subskriptet.
  • namespace — Det område där begäran kommer att verkställas.

ExecuteClass

Linda över ExecuteGlobal. Baserat på klassdefinitionen, förbereder ett samtal ExecuteGlobal och ringer honom.

ExecuteClass(class, variable, type, start, end, properties, namespace) - skicka klassdata i Python.

Argument:

  • class - klassnamn
  • variable — namnet på Python-variabeln som data skrivs in i.
  • type - list eller pandor dataframe.
  • start — start-ID.
  • end — slutlig Id
  • properties — en lista (avgränsad med komma) över klassegenskaper som måste laddas in i datamängden. Masker stöds * и ?. Standard - * (alla fastigheter). Fast egendom %%CLASSNAME ignoreras.
  • namespace — Det område där begäran kommer att verkställas.

Alla egenskaper skickas som de är utom typegenskaper %Date, %Time, %Boolean и %TimeStamp - de konverteras till motsvarande Python-klasser.

ExecuteTable

Linda över ExecuteClass. Översätter tabellnamnet till klassnamnet och anropar ExecuteClass. Signatur:

ExecuteTable(table, variable, type, start, end, properties, namespace) - skicka tabelldata till Python.

Argument:

  • table — tabellnamn.
    Alla andra argument skickas som de är ExecuteClass.

Anmärkningar

  • ExecuteGlobal, ExecuteClass и ExecuteTable arbeta lika snabbt.
  • ExecuteGlobal 20 gånger snabbare än ExecuteQuery på stora datamängder (överföringstid >0.01 sekunder).
  • ExecuteGlobal, ExecuteClass и ExecuteTable arbeta med globaler med denna struktur: ^global(key) = $lb(prop1, prop2, ..., propN) där key — ett heltal.
  • för ExecuteGlobal, ExecuteClass и ExecuteTable stödda värdeintervall %Date motsvarar räckvidden mktime och beror på OS (fönster: 1970-01-01, linux 1900-01-01, mac). Använda sig av %TimeStampatt överföra data utanför detta intervall eller använda pandas dataram eftersom detta är en begränsning i listan.
  • för ExecuteGlobal, ExecuteClass и ExecuteTable alla argument utom datakällan (global, klass eller tabell) och variabeln är valfria.

Примеры

Testklass isc.py.test.Person innehåller en metod som visar alla dataöverföringsalternativ:

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)

Kalla metoden do ##class(isc.py.test.Person).Test() för att se hur alla dataöverföringsmetoder fungerar.

Hjälpmetoder

  • GetVariableInfo(variable, serialization, .defined, .type, .length) — få information om variabeln: om den är definierad, dess klass och serialiseringslängd.
  • GetVariableDefined(variable, .defined) — om variabeln är definierad.
  • GetVariableType(variable, .type) — få klassen för variabeln.
  • GetStatus() - hämta och ta bort det sista undantaget på Python-sidan.
  • GetModuleInfo(module, .imported, .alias) — hämta modulvariabel och importstatus.
  • GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments) — få information om funktionen.

Interoperabilitet

Du har lärt dig hur man anropar Python Gateway från terminalen, låt oss nu börja använda den i produktionen. Grunden för att interagera med Python i detta läge är isc.py.ens.Operation. Det tillåter oss:

  • Kör kod i Python
  • Spara/återställ Python-sammanhang
  • Ladda och ta emot data från Python

I grund och botten är en Python-operation ett omslag isc.py.Main. Drift isc.py.ens.Operation ger möjlighet att interagera med Python-processen från InterSystems IRIS-produkter. Fem frågor stöds:

  • isc.py.msg.ExecutionRequest för att köra Python-kod. Returnerar isc.py.msg.ExecutionResponse med exekveringsresultatet och värdena för de begärda variablerna.
  • isc.py.msg.StreamExecutionRequest för att köra Python-kod. Returnerar isc.py.msg.StreamExecutionResponse resultatet av exekveringen och värdena för de begärda variablerna. Analog isc.py.msg.ExecutionRequest, men accepterar och returnerar strömmar istället för strängar.
  • isc.py.msg.QueryRequest för att överföra resultatet av exekvering av en SQL-fråga. Returnerar Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest för att skicka global/klass/tabelldata. Returnerar Ens.Response.
  • isc.py.msg.SaveRequest för att spara Python-sammanhang. Returnerar Ens.StringResponse med kontext-ID.
  • isc.py.msg.RestoreRequest för att återställa Python-kontexten.

    Dessutom, isc.py.ens.Operation har två inställningar:

    • Initializer — välja en klass som implementerar gränssnittet isc.py.init.Abstract. Den kan användas för att ladda funktioner, moduler, klasser, etc. Den exekveras en gång när processen startar.
    • PythonLib - (Endast Linux) om du ser fel när du laddar, ställ in dess värde till libpython3.6m.so eller till och med i hela sökvägen till Python-biblioteket.

Skapande av affärsprocesser

Det finns två tillgängliga klasser som underlättar utvecklingen av affärsprocesser:

  • isc.py.ens.ProcessUtils låter dig extrahera kommentarer från aktiviteter med variabel substitution.
  • isc.py.util.BPEmulator gör det enkelt att testa affärsprocesser med Python. Den kan köra en affärsprocess (Python-delar) i den aktuella processen.

Variabel substitution

Alla affärsprocesser ärvt från isc.py.ens.ProcessUtils, kan använda metoden GetAnnotation(name) för att få aktivitetsnoteringsvärdet efter dess namn. Aktivitetskommentaren kan innehålla variabler som kommer att beräknas på InterSystems IRIS-sidan innan de skickas till Python. Här är syntaxen för variabelsubstitution:

  • ${class:method:arg1:...:argN} - metodanrop
  • #{expr} — exekvera kod i ObjectScript-språk.

Ett exempel finns i testaffärsprocessen isc.py.test.Processtill exempel i aktivitet Correlation Matrix: Graph: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). I det här exemplet:

  • #{process.WorkDirectory} returnerar egenskapen WorkDirectory för objektet process, som är en instans av klassen isc.py.test.Process de där. nuvarande affärsprocess.
  • ${%PopulateUtils:Integer:1:100} kallar en metod Integer klass %PopulateUtils, passerar argument 1 и 100, returnerar ett slumpmässigt heltal i intervallet 1...100.

Testa affärsprocess

Testprodukter och testverksamhetsprocesser är tillgängliga som standard som en del av Python Gateway. Så här använder du dem:

  1. I OS-terminalen, kör: pip install pandas matplotlib seaborn.
  2. I InterSystems IRIS-terminal, kör: do ##class(isc.py.test.CannibalizationData).Import() för att fylla i testdata.
  3. Lansera produkter isc.py.test.Production.
  4. Skicka begäran typ Ens.Request в isc.py.test.Process.

Låt oss se hur det hela fungerar tillsammans. Öppen isc.py.test.Process i BPL-redigeraren:

Python Gateway i InterSystems IRIS

Kodexekvering

Den viktigaste utmaningen är att köra Python-kod:

Python Gateway i InterSystems IRIS

Fråga använd isc.py.msg.ExecutionRequest, här är dess egenskaper:

  • Code — Python-kod.
  • SeparateLines — om koden ska delas upp i rader för exekvering. $c(10) (n) används för att separera strängar. Observera att det INTE rekommenderas att behandla hela meddelandet på en gång, denna funktion är endast avsedd att bearbeta def och liknande flerradsuttryck. Standard 0.
  • Variables — en kommaseparerad lista över variabler som kommer att läggas till i svaret.
  • Serialization — Hur man serialiserar de variabler som vi vill returnera. Alternativ: Str, Repr, JSON, Pickle и Dill, standard Str.

I vårt fall sätter vi bara fastigheten Code, så alla andra egenskaper använder standardvärdena. Vi ställer in det genom att ringa process.GetAnnotation("Import pandas"), som vid körning returnerar en anteckning efter att variabelsubstitution har utförts. När allt kommer omkring, koden import pandas as pd kommer att skickas till Python. GetAnnotation kan vara användbart för att erhålla flerradiga Python-skript, men det finns inga begränsningar för denna metod för att erhålla kod. Du kan ställa in egenskapen Code på något sätt som är bekvämt för dig.

Få variabler

En annan intressant utmaning att använda isc.py.msg.ExecutionRequest - Correlation Matrix: Tabular:

Python Gateway i InterSystems IRIS

Den beräknar korrelationsmatrisen på Python-sidan och extraherar variabeln corrmat tillbaka till InterSystems IRIS i JSON-format genom att ställa in förfrågningsegenskaperna:

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

Vi kan se resultaten i Visual Trace:

Python Gateway i InterSystems IRIS

Och om vi behöver det här värdet i BP kan vi få det så här: callresponse.Variables.GetAt("corrmat").

Dataöverföring

Låt oss sedan prata om att överföra data från InterSystems IRIS till Python; alla förfrågningar om dataöverföring implementerar gränssnittet isc.py.msg.DataRequestsom ger följande egenskaper:

  • Variable — en Python-variabel som data skrivs in i.
  • Type — variabeltyp: dataframe (pandas dataram) eller list.
  • Namespace — det område från vilket vi tar emot uppgifter. Plastpåse isc.py bör finnas på detta område. Detta kan vara ett område utan produktsupport.

Baserat på detta gränssnitt implementeras fyra klasser av förfrågningar:

  • isc.py.msg.QueryRequest - ställ in egenskapen Query för att skicka en SQL-fråga.
  • isc.py.msg.ClassRequest - ställ in egenskapen Class att skicka klassdata.
  • isc.py.msg.TableRequest - ange egendom Table för att överföra tabelldata.
  • isc.py.msg.GlobalRequest - ange egendom Global för global dataöverföring.

Titta på aktiviteten i testprocessen RAWvar isc.py.msg.QueryRequest visas i aktion.

Python Gateway i InterSystems IRIS

Spara/återställa Python-kontext

Slutligen kan vi spara Python-kontexten i InterSystems IRIS, för att göra detta skickar vi isc.py.msg.SaveRequest med argument:

  • Mask — Endast variabler som matchar masken sparas. Stöds * и ?. Exempel: "Data*, Figure?". Standard *.
  • MaxLength — Den maximala längden på den lagrade variabeln. Om serialiseringen av en variabel är längre kommer den att ignoreras. Sätt till 0 för att få variabler av valfri längd. Standard $$$MaxStringLength.
  • Name — Kontextnamn (valfritt).
  • Description — Beskrivning av sammanhanget (valfritt).

Returnerar Ens.StringResponse с Id sparat sammanhang. Titta på aktiviteten i testprocessen Save Context.

Relaterad begäran isc.py.msg.RestoreRequest laddar kontext från InterSystems IRIS till Python:

  • ContextId — Kontextidentifierare.
  • Clear — rensa sammanhanget innan du återställer.

Jupyter Notebook

Jupyter Notebook är ett webbprogram med öppen källkod som låter dig skapa och publicera anteckningsböcker som innehåller kod, visualiseringar och text. Python Gateway låter dig se och redigera BPL-processer i form av en Jupyter Notebook. Observera att den normala Python 3-exekutorn för närvarande används.

Det här tillägget förutsätter att kommentarer innehåller Python-kod och använder aktivitetsnamn som föregående titlar. Det är nu möjligt att utveckla PythonGateways affärsprocesser i Jupyter Notebook. Här är vad som är möjligt:

  • Skapa nya affärsprocesser
  • Ta bort affärsprocesser
  • Skapa nya aktiviteter
  • Ändra aktiviteter
  • Ta bort aktiviteter

Här demo video. Och några skärmdumpar:

Process Explorer

Python Gateway i InterSystems IRIS

Processredigerare

Python Gateway i InterSystems IRIS

Installation

  1. Du behöver InterSystems IRIS 2019.2+.
  2. Installera PythonGateway v0.8+ (endast nödvändigt isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints и isc.py.ens.ProcessUtils).
  3. Uppdatera ObjectScript-koden från förvaret.
  4. Kör do ##class(isc.py.util.Jupyter).Install() och följ instruktionerna.

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

Resultat

MLToolkit är en uppsättning verktyg vars mål är att kombinera modeller och en transaktionsmiljö så att de byggda modellerna enkelt kan användas direkt i dina affärsprocesser. Python Gateway är en del av MLToolkit och tillhandahåller integration med Python-språket, vilket gör att du kan orkestrera alla maskininlärningsalgoritmer skapade i Python (huvudmiljön för många dataforskare), använda många färdiga bibliotek för att snabbt skapa adaptiv, robotisk analytisk AI / ML-lösningar på InterSystems plattform IRIS.

referenser

MLToolkit

MLToolkit-användargruppen är ett privat GitHub-förråd skapat som en del av InterSystems företags GitHub-organisation. Den är avsedd för externa användare som installerar, lär sig eller redan använder MLToolkit-komponenter, inklusive Python Gateway. Gruppen har ett antal implementerade fall (med källkod och testdata) inom områdena marknadsföring, tillverkning, medicin och många andra industrier. För att gå med i ML Toolkit User Group, skicka ett kort e-postmeddelande till följande adress: [e-postskyddad] och inkludera följande information i ditt brev:

  • GitHub användarnamn
  • Organisation (du arbetar eller studerar)
  • Position (din faktiska position i din organisation, antingen "Student" eller "Oberoende").
  • land

För dem som har läst artikeln och är intresserade av funktionerna hos InterSystems IRIS som en plattform för att utveckla eller vara värd för artificiell intelligens och maskininlärningsmotorer, inbjuder vi dig att diskutera möjliga scenarier som är av intresse för ditt företag. Vi analyserar gärna ditt företags behov och fastställer gemensamt en handlingsplan; Kontakt e-postadress till vårt AI/ML-expertteam – [e-postskyddad].

Källa: will.com

Lägg en kommentar