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 möjliggör orkestrering av alla maskininlĂ€rningsalgoritmer som skapats i Python (den primĂ€ra miljön för mĂ„nga datavetare), och att anvĂ€nda ett flertal fĂ€rdiga bibliotek för att snabbt skapa anpassningsbara, robotiserade analytiska AI/ML-lösningar pĂ„ InterSystems IRIS-plattformen. I den hĂ€r artikeln kommer jag att visa hur InterSystems IRIS kan orkestrera processer pĂ„ Python, effektivt genomföra tvĂ„vĂ€gsdataöverföring och skapa intelligenta affĂ€rsprocesser.

Plan

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

Introduktion

Python Àr ett hög-nivÄ programmeringssprÄk för allmÀnna ÀndamÄl som fokuserar pÄ att öka utvecklarens produktivitet och kodens lÀsbarhet. I denna artikelserie kommer jag att diskutera möjligheterna att anvÀnda Python pÄ InterSystems IRIS-plattformen, dÀr huvudfokus för denna artikel Àr att anvÀnda Python för att skapa och tillÀmpa maskininlÀrningsmodeller.

MaskininlÀrning (ML) Àr en klass av metoder inom artificiell intelligens, vars kÀnnetecken Àr att de inte löser problem direkt utan lÀr sig genom att lösa ett antal liknande problem.

Algoritmer och modeller för maskininlĂ€rning blir alltmer vanliga. Anledningarna till detta Ă€r mĂ„nga, men allt handlar om tillgĂ€nglighet, enkelhet och att uppnĂ„ praktiska resultat. Är klustring eller till och med neuronĂ€r nĂ€tverksmodellering en ny teknologi?

SjÀlvklart inte, men idag Àr det inte nödvÀndigt att skriva hundratusentals rader kod för att köra en modell, och kostnaderna för att skapa och tillÀmpa modeller blir allt lÀgre.

Verktygen utvecklas — Ă€ven om vi inte har helt GUI-orienterade AI/ML-verktyg, sĂ„ ser vi samma framsteg som vi har sett inom mĂ„nga andra klasser av informationssystem, till exempel BI (frĂ„n kodskrivning till anvĂ€ndning av ramverk och GUI-orienterade konfigurerbara lösningar), Ă€ven i verktyg för att skapa AI/ML. Vi har redan passerat fasen av att skriva kod och anvĂ€nder idag ramverk för att bygga och trĂ€na modeller.

Andra förbÀttringar, som möjligheten att sprida en förutbildad modell, dÀr slutanvÀndaren bara mÄste slutföra trÀningen av modellen med sina specifika data, underlÀttar ocksÄ början av tillÀmpningen av maskininlÀrning. Dessa framsteg gör det betydligt lÀttare att lÀra sig maskininlÀrning, bÄde för specialister och för företag som helhet.

Å andra sidan samlar vi in ​​allt mer data. Tack vare en enhetlig dataplattform, sĂ„som InterSystems IRIS, kan all denna information omedelbart förberedas och anvĂ€ndas som grunddata för maskininlĂ€rningsmodeller.

Med övergÄngen till molnet blir lanseringen av AI/ML-projekt lÀttare Àn nÄgonsin. Vi kan anvÀnda endast de resurser som vi behöver. Dessutom, tack vare parallelliseringen som erbjuds av molnplattformar, kan vi spara tid.

Men hur Àr det med resultaten? HÀr blir allt mer komplicerat. Det finns mÄnga verktyg för att bygga modeller, vilket jag kommer att gÄ in pÄ senare. Att bygga en bra modell Àr inte enkelt, men vad hÀnder sen? Att fÄ företagets verksamhet att dra nytta av modellen Àr ocksÄ en utmanande uppgift. KÀrnan i problemet ligger i att separera analytiska och transaktionella belastningar, samt datamodeller. NÀr vi trÀnar en modell gör vi det vanligtvis pÄ historiska data. Men platsen för den byggda modellen Àr i den transaktionella databehandlingen. Vad Àr poÀngen med den bÀsta modellen för att upptÀcka bedrÀgliga transaktioner, om vi bara kör den en gÄng om dagen? Bedragarna har redan försvunnit med pengarna. Vi behöver trÀna modellen pÄ historiska data, men vi mÄste ocksÄ tillÀmpa den i realtid pÄ de nya inkommande data sÄ att vÄra affÀrsprocesser kan agera i enlighet med de förutsÀgelser som modellen gör.

ML Toolkit Àr en uppsÀttning verktyg vars syfte Àr just detta: att förena modeller och transaktionsmiljöer sÄ att byggda modeller enkelt kan anvÀndas direkt i dina affÀrsprocesser. Python Gateway Àr en del av ML Toolkit och möjliggör integration med Python-sprÄket (pÄ samma sÀtt som R Gateway, som Àr en del av ML Toolkit, möjliggör integration med R-sprÄket).

VerktygslÄda

Innan vi fortsÀtter, skulle jag vilja beskriva nÄgra verktyg och bibliotek för Python som vi kommer att anvÀnda senare.

Teknologier

  • Python Ă€r ett tolkat, hög-nivĂ„ programmeringssprĂ„k för allmĂ€n anvĂ€ndning. Den frĂ€msta fördelen med sprĂ„ket Ă€r det stora biblioteket av matematiska, ML- och AI-bibliotek. Precis som ObjectScript Ă€r det ett objektorienterat sprĂ„k, men allt definieras dynamiskt snarare Ă€n statiskt. Dessutom Ă€r allt ett objekt. Senare artiklar förutsĂ€tter ett flyktigt bekantskap med sprĂ„ket. Om du vill börja lĂ€ra dig rekommenderar jag att du börjar med dokumentationen.
  • För vĂ„ra kommande övningar, installera Python 3.6.7 64 bit.
  • IDE: Jag anvĂ€nder PyCharm, men det finns ocksĂ„ mĂ€n. Om du anvĂ€nder Atelier finns det en Eclipse-plugin för Python-utvecklare. Om du anvĂ€nder VS Code, finns det en extension för Python.
  • Notebook: istĂ€llet för en IDE kan du skriva och dela dina skript i online-notebooks. Den mest populĂ€ra Ă€r Jupyter.

Bibliotek

HÀr Àr en (ofullstÀndig) lista över bibliotek för maskininlÀrning:

  • Numpy — det grundlĂ€ggande paketet för exakta berĂ€kningar.
  • Pandas — högpresterande datatyper och verktyg för dataanalys.
  • Matplotlib — skapande av grafer.
  • Seaborn — datavisualisering baserat pĂ„ matplotlib.
  • Sklearn — maskininlĂ€rningsmetoder.
  • XGBoost — maskininlĂ€rningsalgoritmer inom ramen för metodologin för gradientboosting.
  • Gensim — NLP.
  • Keras — neurala nĂ€tverk.
  • Tensorflow — en plattform för att bygga maskininlĂ€rningsmodeller.
  • PyTorch — en plattform för att bygga maskininlĂ€rningsmodeller med fokus pĂ„ Python.
  • Nyoka — PMML frĂ„n olika modeller.

AI/ML-teknologier möjliggör att företag blir mer effektiva och anpassningsbara. Dessutom blir dessa teknologier idag enklare att utveckla och implementera. Börja studera AI/ML-teknologier och hur de kan hjÀlpa din organisation att vÀxa.

Installation

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

  • OS
    • Windows
    • Linux
    • Mac
  • Docker
    • AnvĂ€nd en bild frĂ„n DockerHub
    • Skapa din egen bild

Oavsett installationsmetod kommer du att behöva kÀllkoden. Den enda platsen för att ladda ner koden Àr versionssidan. Den innehÄller testade stabila utgÄvor, ta bara den senaste. Just nu Àr det 0.8, men fler kommer med tiden. Klona inte/ladda inte ner repository, ladda ner bara den senaste utgÄvan.

OS

NÀr du installerar Python Gateway pÄ ett operativsystem mÄste du först (oavsett operativsystem) installera Python. För att göra detta:

  1. Installera Python 3.6.7 64 bit. 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 valfritt namnutrymme med produkter. Om du vill att ett befintligt namnutrymme ska stödja produkter, kör: write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. Placera callout DLL/SO/DYLIB till mappen bin din instans av InterSystems IRIS. Biblioteksfilen mÄste vara tillgÀnglig pÄ en vÀg som Äterges av write ##class(isc.py.Callout).GetLib().

Windows

  1. Se till att miljövariabeln PYTHONHOME pekar pÄ Python 3.6.7.
  2. Kontrollera att systemets miljövariabler PATH innehÄller variabeln PYTHONHOME (eller katalogen som den pekar pÄ).

Linux (Debian/Ubuntu)

  1. Kontrollera att miljövariabeln PATH innehÄller /usr/lib och /usr/lib/x86_64-linux-gnu. AnvÀnd filen /etc/environment för att stÀlla in miljövariabler.
  2. Vid fel undefined symbol: _Py_TrueStruct stÀll in instÀllningen PythonLib. Det finns ocksÄ en Readme som har en avsnitt om felsökning.

Mac

  1. För nÀrvarande stöds bara Python 3.6.7 frÄn Python.org. Kontrollera variabeln PATH.

Om du har Àndrat miljövariabler, starta om din InterSystems-produkt.

Docker

AnvÀndning av containrar har flera fördelar:

  • Portabilitet
  • Effektivitet
  • Isolering
  • LĂ€ttviktighet
  • Immutabilitet

LÀs denna serie artiklar för mer information om att anvÀnda Docker med InterSystems-produkter.

Alla versioner av Python Gateway Àr för nÀrvarande baserade pÄ containrar. 2019.4.

FĂ€rdig bild

Kör: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latest, för att ladda ner och köra Python Gateway med InterSystems IRIS Community Edition. Det Àr allt.

Skapa din egen bild

För att bygga dockerbilden kör du i rotkatalogen för repositoriet: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
Standardbilden byggs baserat pÄ bilden store/intersystems/iris-community:2019.4.0.383.0, men du kan Àndra detta genom att stÀlla in variabeln 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 dockerbilden:

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

Om du anvÀnder en bild baserad pÄ InterSystems IRIS Community Edition, behöver du inte ange nyckeln.

Kommentarer

  • Testprocessen isc.py.test.Process sparar en rad bilder i en temporĂ€r katalog. Du kan vilja Ă€ndra denna sökvĂ€g till en monterad katalog. För att göra detta, redigera instĂ€llningen WorkingDir genom att ange den monterade katalogen.
  • För att fĂ„ tillgĂ„ng till terminalen, kör: docker exec -it irispy sh.
  • Åtkomst till System Management Portal med inloggning SuperUser/SYS.
  • För att stoppa containern, kör: docker stop irispy && docker rm --force irispy.

Verifiera installationen

Efter att du har installerat Python Gateway, bör du kontrollera att den fungerar. Kör denna kod i terminalen för InterSystems IRIS:

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

Det bör resultera i HELLO — vĂ€rdet pĂ„ Python-variabeln x. Om den returnerade statusen sc Ă€r ett fel eller var tom, kontrollera Readme — avsnitt för felsökning.

API

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

  • Körning av kod
  • Datatransmission
  • HjĂ€lpmetoder

Körning av kod

Dessa metoder möjliggör körning av godtycklig Python-kod.

SimpleString

SimpleString — Ă€r den primĂ€ra metoden. Den tar 4 valfria argument:

  • code — kodstrĂ€ng att köra. Radbrytning: $c(10).
  • returnVariable — namnet pĂ„ variabeln som ska returneras.
  • serialization — hur du ska seriellisera returnVariable. 0 — string (standard), 1 — repr.
  • result — ByRef-referens till variabeln dĂ€r vĂ€rdet skrivs. returnVariable.

Ovanför har vi kört:

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

I detta exempel tilldelar vi en Python-variabel x vÀrdet Hej och vill returnera vÀrdet pÄ Python-variabeln x till en ObjectScript-variabel var.

ExecuteCode

ExecuteCode Àr ett mer sÀkert och mindre begrÀnsat alternativ SimpleString.
StrÀngar pÄ InterSystems IRIS-plattformen Àr begrÀnsade till 3 641 144 tecken, och om du vill köra en lÀngre kodsnutt, mÄste du anvÀnda flöden.
Tar tvÄ argument:

  • code — strĂ€ng eller flöde av Python-kod att köra.
  • variable — (valfritt) tilldelar resultatet av körningen code denna Python-variabel.

Exempel att anvÀnda:

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

I detta exempel multiplicerar vi 2 med 3 och lagrar resultatet i en Python-variabel y.

Datatransmission

Skicka data till Python och tillbaka.

Python -> InterSystems IRIS

Det finns 4 sÀtt att fÄ vÀrdet pÄ en Python-variabel i InterSystems IRIS, beroende pÄ vilken serialisering du behöver:

  • StrĂ€ng för enkla datatyper och felsökning.
  • Repr för att lagra enkla objekt och för felsökning.
  • JSON för att enkelt manipulera data pĂ„ InterSystems IRIS-sidan.
  • Pickle för att spara objekt.

Dessa metoder gör det möjligt att hÀmta variabler frÄn Python som strÀngar eller flöden.

  • GetVariable(variable, serialization, .stream, useString) — hĂ€mta serialization variabeln variable pĂ„ stream. Om useString Ă€r 1 och serialisering placeras i en strĂ€ng, sĂ„ returneras en strĂ€ng istĂ€llet för ett flöde.
  • GetVariableJson(variable, .stream, useString) — hĂ€mta JSON-serialisering av variabeln.
  • GetVariablePickle(variable, .stream, useString, useDill) — hĂ€mta Pickle (eller Dill) serialisering av variabeln.

Vi ska försöka hÀmta vÄr variabel y.

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

InterSystems IRIS -> Python

Vi laddar data frÄn InterSystems IRIS till Python.

  • ExecuteQuery(query, variable, type, namespace) — skapar en dataset (pandas dataframe eller list) frĂ„n SQL-förfrĂ„gan och sĂ€tter den i Python-variabeln variable. Paketet isc.py mĂ„ste vara tillgĂ€ngligt i omrĂ„det namnrymd — dĂ€r frĂ„gan kommer att utföras.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) — laddar data frĂ„n globalen global frĂ„n subscriptet start till end till Python som en variabel av typen typ: list, eller pandas dataframe. Beskrivning av valfria argument mask och labels finns i dokumentationen för klassen och i förvaret Data Transfer docs.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) — laddar klassdata klass frĂ„n id start till end till Python som en variabel av typen typ: list, eller pandas dataframe. properties — lista (separator — kommatecken) av klassens egenskaper som ska laddas in i datasetet. Masker stöds * och ?. Som standard — * (alla egenskaper). Egenskapen %%CLASSNAME Ă€r instĂ€lld.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) — laddar tabelldata tabell frĂ„n id start till end in i Python.

ExecuteQuery — Ă€r universell (vilken som helst korrekt SQL-förfrĂ„gan kommer att skickas till Python). Men, ExecuteGlobal och dess omslag ExecuteClass och ExecuteTable har vissa begrĂ€nsningar. De Ă€r mycket snabbare (3-5 gĂ„nger snabbare Ă€n ODBC-drivrutinen och 20 gĂ„nger snabbare ExecuteQuery). Ytterligare information finns i Data Transfer docs.
Alla dessa metoder stöder datatransfer frÄn vilket omrÄde som helst. Paketet isc.py mÄste vara tillgÀngligt i mÄlomrÄdet.

ExecuteQuery

ExecuteQuery(request, variable, type, namespace) — överför resultat av vilken korrekt SQL-förfrĂ„gan till Python. Detta Ă€r den lĂ„ngsammaste metoden för datatransfer. AnvĂ€nd den om ExecuteGlobal och dess omslag inte Ă€r tillgĂ€ngliga.

Argument:

  • query — SQL-förfrĂ„gan.
  • variable — namnet pĂ„ Python-variabeln dĂ€r data sparas.
  • typ — list eller Pandas dataframe.
  • namnrymd — omrĂ„det dĂ€r frĂ„gan kommer att utföras.

ExecuteGlobal

ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) — överför globalen till Python.

Argument:

  • global — namnet pĂ„ globalen utan ^
  • variable — namnet pĂ„ Python-variabeln dĂ€r data sparas.
  • typ — list eller Pandas dataframe.
  • start — första subscriptet av globalen. Obligatoriskt %Integer.
  • end — sista subscriptet av globalen. Obligatoriskt %Integer.
  • mask — mask av globala vĂ€rden. Masken kan vara kortare Ă€n antalet fĂ€lt i globalen (i sĂ„ fall kommer fĂ€lten i slutet att ignoreras). SĂ„ hĂ€r formaterar du masken:
    • + skicka vĂ€rdet som det Ă€r.
    • - hoppa över vĂ€rdet.
    • b — Logisk typ (0 — Falskt, allt annat — Sant).
    • d — Datum (frĂ„n $horolog, pĂ„ Windows frĂ„n 1970, pĂ„ Linux frĂ„n 1900).
    • t — Tid ($horolog, sekunder efter midnatt).
    • m — TidsstĂ€mpel (strĂ€ng i formatet ÅR-MÅNAD-DAG TIMME:MINUT:SEKUND).
  • labels — %List över kolumnnamn. Första elementet — namnet pĂ„ subscriptet.
  • namnrymd — omrĂ„det dĂ€r frĂ„gan kommer att utföras.

ExecuteClass

Inpackning över ExecuteGlobal. Baserat pÄ klassdefinitionen förbereder den ett anrop ExecuteGlobal och anropar det.

ExecuteClass(class, variable, type, start, end, properties, namespace) — överföring av klassdata i Python.

Argument:

  • klass — klassnamn
  • variable — namnet pĂ„ Python-variabeln dĂ€r data sparas.
  • typ — list eller Pandas dataframe.
  • start — start Id.
  • end — slut Id
  • properties — lista (separator — kommatecken) av klassens egenskaper som ska laddas in i datasetet. Masker stöds * och ?. Som standard — * (alla egenskaper). Egenskapen %%CLASSNAME Ă€r instĂ€lld.
  • namnrymd — omrĂ„det dĂ€r frĂ„gan kommer att utföras.

Alla egenskaper överförs som de Ă€r utom typ-egenskaperna te, %Time, %Boolean och %TimeStamp — de konverteras till motsvarande Python-klasser.

ExecuteTable

Inpackning över ExecuteClass. ÖversĂ€tter tabellnamnet till klassnamn och anropar ExecuteClass. Signatur:

ExecuteTable(table, variable, type, start, end, properties, namespace) — överföring av tabelldata till Python.

Argument:

  • tabell — tabellnamn.
    Alla andra argument överförs som de Àr till ExecuteClass.

Anteckningar

  • ExecuteGlobal, ExecuteClass och ExecuteTable arbetar lika snabbt.
  • ExecuteGlobal 20 gĂ„nger snabbare Ă€n ExecuteQuery pĂ„ stora datamĂ€ngder (överföringstid mer Ă€n >0.01 sekunder).
  • ExecuteGlobal, ExecuteClass och ExecuteTable fungerar pĂ„ globaler med denna struktur: ^global(key) = $lb(prop1, prop2, ..., propN) w key — heltal.
  • För ExecuteGlobal, ExecuteClass och ExecuteTable stödd vĂ€rdeomrĂ„de te motsvarar intervallet mktime och beror pĂ„ operativsystemet (windows: 1970-01-01, linux 1900-01-01, mac). AnvĂ€nd %TimeStampför att överföra data utanför detta intervall eller anvĂ€nd pandas dataframe eftersom detta begrĂ€nsning endast gĂ€ller listan.
  • För ExecuteGlobal, ExecuteClass och ExecuteTable alla argument utom datakĂ€llan (global, klass eller tabell) och variabeln Ă€r valfria.

Exempel

Testklass isc.py.test.Person innehÄller en metod som visar alla alternativ för datöverföring:

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"

// AllmÀnna argument
set variable = "df"
set type = "dataframe"
set start = 1
set end = $g(^isc.py.test.PersonD, start)

// Metod 0: ExecuteGlobal utan argument
set sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 0, type)

// Metod 1: ExecuteGlobal med argument
// Vid överföring av globalen anges fÀltnamn för hand
// globalKey - namnet pÄ subskriptet
set labels = $lb("globalKey", "Namn", "Födelsedatum", "TS", "Slumptid", "År", "Decimaltal", "Dubbel", "Bool")

// mask innehÄller ett element mindre Àn labels eftersom "globalKey" Àr namnet pÄ subskripten
// Vi hoppar över %%CLASSNAME
set mask = "-+dmt+++b"

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

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

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

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

Anropa metoden do ##class(isc.py.test.Person).Test() för att se hur alla metoder för datatransfer fungerar.

HjÀlpmetoder

  • GetVariableInfo(variable, serialization, .defined, .type, .length) — hĂ€mta information om variabeln: om den Ă€r definierad, klass och lĂ€ngd av serialiseringen.
  • GetVariableDefined(variable, .defined) — Ă€r variabeln definierad.
  • GetVariableType(variable, .type) — hĂ€mta klass för variabeln.
  • GetStatus() — hĂ€mta och ta bort det senaste undantaget pĂ„ Python-sidan.
  • GetModuleInfo(module, .imported, .alias) — hĂ€mta modulens variabel och importstatus.
  • GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments) — hĂ€mta information om funktionen.

Interoperabilitet

Du har lĂ€rt dig att anropa Python Gateway frĂ„n terminalen, nu börjar vi anvĂ€nda den i produktion. Grunden för interaktionen med Python i detta lĂ€ge — isc.py.ens.Operation. Den gör det möjligt för oss att:

  • Köra Python-kod
  • Spara/Ă„terstĂ€lla Python-kontext
  • Ladda och hĂ€mta data frĂ„n Python

I princip Àr Python-operation en inslagning av isc.py.Main. Operationen isc.py.ens.Operation ger möjlighet att interagera med Python-processen frÄn InterSystems IRIS-produkterna. Fem typer av förfrÄgningar stöds:

  • isc.py.msg.ExecutionRequest för att köra Python-kod. Returnerar isc.py.msg.ExecutionResponse med resultatet av körningen och vĂ€rden för begĂ€rda variabler.
  • isc.py.msg.StreamExecutionRequest för att köra Python-kod. Returnerar isc.py.msg.StreamExecutionResponse resultatet av körningen och vĂ€rden för begĂ€rda variabler. Motsvarande isc.py.msg.ExecutionRequest, men tar emot och returnerar strömmar istĂ€llet för strĂ€ngar.
  • isc.py.msg.QueryRequest för att överföra resultatet av SQL-frĂ„gan. Returnerar Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest för datatransfer av global/kategori/tabell. Returnerar Ens.Response.
  • isc.py.msg.SaveRequest för att spara Python-kontext. Returnerar Ens.StringResponse med kontextidentifierare.
  • isc.py.msg.RestoreRequest för att Ă„terstĂ€lla Python-kontext.

    Dessutom, isc.py.ens.Operation har tvÄ instÀllningar:

    • Initializer — val av klass som implementerar grĂ€nssnittet isc.py.init.Abstract. Den kan anvĂ€ndas för att ladda funktioner, moduler, klasser etc. Den körs en gĂ„ng vid processens start.
    • PythonLib — (endast för Linux) om du ser fel vid laddning, stĂ€ll in dess vĂ€rde till libpython3.6m.so eller till och med till den fullstĂ€ndiga sökvĂ€gen till Python-biblioteket.

Skapande av affÀrsprocesser

Det finns tvÄ klasser som underlÀttar utvecklingen av affÀrsprocesser:

  • isc.py.ens.ProcessUtils möjliggör att extrahera annoteringar frĂ„n aktiviteter med variabelinsĂ€ttning.
  • isc.py.util.BPEmulator gjör att enkelt testa affĂ€rsprocesser med Python. Den kan utföra affĂ€rsprocesser (delar pĂ„ Python-sprĂ„k) i den aktuella processen.

VariabelersÀttning

Alla affÀrsprocesser som Àrver frÄn isc.py.ens.ProcessUtils, kan anvÀnda metoden GetAnnotation(name) för att hÀmta vÀrdet av aktivitetens annotering baserat pÄ dess namn. Aktivitetens annotering kan innehÄlla variabler som kommer berÀknas pÄ sidan av InterSystems IRIS innan de skickas till Python. HÀr Àr syntaxen för variabelinsÀttning:

  • ${class:method:arg1:...:argN} — anrop till metoden
  • #{expr} — exekvera kod i ObjectScript.

Ett exempel finns i den testade affÀrsprocessen isc.py.test.Process, t.ex. i aktiviteten Korrelationsmatris: Graf: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). I detta exempel:

  • #{process.WorkDirectory} returnerar egenskapen WorkDirectory frĂ„n objektet process, som Ă€r en instans av klassen isc.py.test.Process dvs. den aktuella affĂ€rsprocessen.
  • ${%PopulateUtils:Integer:1:100} anropar metoden Heltal klassen %PopulateUtils, genom att skicka argument 1 och 100, som returnerar ett slumpmĂ€ssigt heltal inom spannet 1...100.

TestaffÀrsprocess

Testprodukt och testaffÀrsprocess Àr som standard tillgÀngliga som en del av Python Gateway. För att anvÀnda dem:

  1. Kör följande i OS-terminalen: pip install pandas matplotlib seaborn.
  2. Kör följande i InterSystems IRIS-terminalen: do ##class(isc.py.test.CannibalizationData).Import() för att fylla i testdata.
  3. Kör produkten isc.py.test.Production.
  4. Skicka en begÀran av typen Ens.Request pÄ isc.py.test.Process.

LĂ„t oss se hur allt fungerar tillsammans. Öppna isc.py.test.Process i BPL-redigeraren:

Python Gateway i InterSystems IRIS

Körning av kod

Det viktigaste anropet Àr att exekvera Python-kod:

Python Gateway i InterSystems IRIS

AnvÀnds begÀran isc.py.msg.ExecutionRequest, hÀr Àr dess egenskaper:

  • Code — Python-kod.
  • SeparateLines — ska koden delas upp i rader för exekvering. $c(10) (n) anvĂ€nds för att separera rader. Observera att det INTE rekommenderas att bearbeta meddelandet helt pĂ„ en gĂ„ng, denna funktion Ă€r avsedd endast för behandling def och liknande fler-rads uttryck. Som standard 0.
  • Variabler — en kommaseparerad lista av variabler som kommer att lĂ€ggas till svaret.
  • Serialisering — Hur man serialiserar variabler som vi vill returnera. Alternativ: Str, Repr, JSON, Pickle och Dill, som standard Str.

I vÄrt fall stÀller vi bara in egenskapen Code, sÄ alla andra egenskaper anvÀnder standardvÀrden. Vi stÀller in den genom att anropa process.GetAnnotation("Import pandas"), vilket under körning returnerar annotationen efter att ha utfört variabelsubstitution. I slutÀndan kommer koden import pandas as pd att överföras till Python. GetAnnotation kan vara anvÀndbart för att fÄ fler-rads Python-skript, men det finns inga begrÀnsningar för detta sÀtt att hÀmta kod. Du kan stÀlla in egenskapen Code pÄ ett sÀtt som passar dig.

HĂ€mtning av variabler

Ännu en intressant utmaning med anvĂ€ndning av isc.py.msg.ExecutionRequest — Korrelationsmatris: Tabellarisk:

Python Gateway i InterSystems IRIS

Den berÀknar Korrelationsmatrisen pÄ Python-sidan och hÀmtar variabeln corrmat tillbaka till InterSystems IRIS i JSON-format, genom att stÀlla in frÄgeegenskaperna:

  • Variabler: "corrmat"
  • Serialisering: "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 det hÀmtas sÄ hÀr: callresponse.Variables.GetAt("corrmat").

Datatransmission

Nu ska vi prata om att överföra data frÄn InterSystems IRIS till Python, alla datatransferfrÄgor implementerar grÀnssnittet isc.py.msg.DataRequest, som tillhandahÄller följande egenskaper:

  • Variabel — Python-variabeln i vilken data skrivs.
  • Type — datatypes: dataframe (pandas dataframe) eller list.
  • Namespace — omrĂ„det frĂ„n vilket vi hĂ€mtar data. Paketet isc.py mĂ„ste vara tillgĂ€ngligt i detta omrĂ„de. Det kan vara ett omrĂ„de utan produktstöd.

Baserat pÄ detta grÀnssnitt har 4 klasser av frÄgor implementerats:

  • isc.py.msg.QueryRequest — stĂ€ll in egenskapen Query för att överföra SQL-frĂ„gan.
  • isc.py.msg.ClassRequest — stĂ€ll in egenskapen Klass för att överföra klassdata.
  • isc.py.msg.TableRequest — stĂ€ll in egenskapen Tabell för att överföra tabelldata.
  • isc.py.msg.GlobalRequest — stĂ€ll in egenskapen Global för att överföra globala data.

Under testprocessen, titta pÄ aktiviteten RAW, dÀr isc.py.msg.QueryRequest visad i aktion.

Python Gateway i InterSystems IRIS

Spara/ÅterstĂ€ll 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 uppfyller masken sparas. Stöder * och ?. Exempel: "Data*, Figure?". Som standard *.
  • MaxLength — Maximal lĂ€ngd för den lagrade variabeln. Om serialiseringen av variabeln Ă€r lĂ€ngre, kommer den att ignoreras. StĂ€ll in 0 för att tillĂ„ta variabler av valfri lĂ€ngd. StandardinstĂ€llning: $$$MaxStringLength.
  • Namn — Kontextnamn (valfritt).
  • Beskrivning — Kontextbeskrivning (valfritt).

Returnerar Ens.StringResponse med Id av den sparade kontexten. Under testprocessen, titta pÄ aktiviteten Spara kontext.

Relaterad begÀran isc.py.msg.RestoreRequest laddar kontext frÄn InterSystems IRIS i Python:

  • ContextId — kontextidentifierare.
  • Rensa — rensa kontexten innan Ă„terstĂ€llning.

Jupyter Notebook

Jupyter Notebook — detta Ă€r en öppen kĂ€llkodswebbapplikation som gör det möjligt att skapa notebookar som innehĂ„ller kod, visualiseringar och text och publicera dem. Python Gateway gör det möjligt att visa och redigera BPL-processer i form av Jupyter Notebook. Observera att en vanlig Python 3-executor för nĂ€rvarande anvĂ€nds.

Detta tillÀgg förutsÀtter att kommentarerna innehÄller Python-kod och anvÀnder aktiviteters namn som föregÄende rubriker. Nu Àr det möjligt att utveckla PythonGateway 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 Àr demo-video. Och nÄgra skÀrmdumpar:

Processutforskare

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+ (krÀvs endast isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints och isc.py.ens.ProcessUtils).
  3. Uppdatera ObjectScript-koden frÄn lagret.
  4. Kör do ##class(isc.py.util.Jupyter).Install() och följ anvisningarna.

Dokumentation.

Slutsatser

MLToolkit Àr en uppsÀttning verktyg vars syfte Àr att förena modeller och transaktionella miljöer 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 möjliggör orkestrering av vilken maskininlÀrningsalgoritm som helst, skapad pÄ Python (huvudmiljön för mÄnga datavetare), med hjÀlp av mÄnga fÀrdiga bibliotek för snabb utveckling av adaptiva, automatiserade analytiska AI/ML-lösningar pÄ InterSystems IRIS-plattformen.

LĂ€nkar

MLToolkit

MLToolkit-anvÀndargruppen Àr ett privat GitHub-repo, skapat som en del av företags-GitHub-organisationen InterSystems. Den Àr avsedd för externa anvÀndare som installerar, utforskar eller redan anvÀnder komponenter frÄn MLToolkit, inklusive Python Gateway. Gruppen erbjuder en mÀngd implementerade fallstudier (med kÀllkod och testdata) inom omrÄden som marknadsföring, produktion, medicin och mÄnga andra industrier. För att gÄ med i ML Toolkit-anvÀndargruppen, vÀnligen skicka ett kort meddelande via e-post till följande adress: MLToolkit@intersystems.com och ange följande uppgifter i ditt meddelande:

  • GitHub-anvĂ€ndarnamn
  • Organisation (dĂ€r du arbetar eller studerar)
  • Befattning (din faktiska titel inom din organisation, eller "Student", eller "Frilans").
  • Land

Till dem som har lÀst artikeln och Àr intresserade av möjligheterna med InterSystems IRIS som en plattform för utveckling eller hosting av AI- och maskininlÀrningslösningar erbjuder vi att diskutera möjliga scenarier av intresse för ert företag. Vi ser fram emot att analysera ert företags behov och tillsammans definiera en handlingsplan; kontaktadressen till vÄr AI/ML-expertgrupp Àr MLToolkit@intersystems.com.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster