Python Gateway an InterSystems IRIS

Dësen Artikel ass iwwer Python Gateway, en Open Source Gemeinschaftsprojet fir d'InterSystems IRIS Datenplattform. Dëse Projet erlaabt Iech all Maschinn Léieren Algorithmen ze orchestréieren, déi am Python erstallt ginn (d'Haaptëmfeld fir vill Datewëssenschaftler), benotzt vill fäerdeg Bibliothéike fir séier adaptiv, robotesch analytesch AI / ML Léisungen op der InterSystems IRIS Plattform ze kreéieren. An dësem Artikel wäert ech weisen wéi InterSystems IRIS Prozesser am Python orchestréiere kann, effizient zwee-Wee Daten kommunizéieren an intelligent Geschäftsprozesser erstellen.

Plang

  1. Aféierung.
  2. Tools.
  3. Installatioun.
  4. API.
  5. Interoperabilitéit.
  6. Jupyter Notizbuch.
  7. Conclusiounen.
  8. Linken.
  9. MLToolkit.

Aféierung

Python ass eng héich-Niveau, allgemeng Zweck Programméierungssprooch fir d'Entwécklerproduktivitéit a Code Liesbarkeet ze verbesseren. An dëser Serie vun Artikelen wäert ech d'Méiglechkeeten diskutéieren fir Python op der InterSystems IRIS Plattform ze benotzen, mam Haaptfokus vun dësem Artikel ass d'Benotzung vu Python als Sprooch fir Maschinnléieremodeller ze kreéieren an ze lafen.

Machine Learning (ML) ass eng Klass vu kënschtlechen Intelligenzmethoden, déi charakteristesch Feature vun deenen net déi direkt Léisung vun engem Problem ass, mee Léieren am Prozess vu vill ähnlechen Probleemer ze léisen.

Maschinn Léieren Algorithmen a Modeller ginn ëmmer méi heefeg. Et gi vill Grënn dofir, awer et geet alles erof op Accessibilitéit, Einfachheet a praktesch Resultater erreechen. Ass Clustering oder souguer neuralt Netzwierk Modelléierung eng nei Technologie?

Natierlech net, awer hautdesdaags ass et net néideg Honnerte vun Dausende vu Codezeilen ze schreiwen fir en eenzege Modell ze lafen, an d'Käschte fir Modeller ze kreéieren an ze benotzen ginn ëmmer manner.

Tools evoluéieren - wärend mir net voll GUI-centric AI / ML Tools hunn, ass de Fortschrëtt, dee mir mat villen anere Klassen vun Informatiounssystemer gesinn hunn, sou wéi BI (vum Schreiwen vum Code fir Kaderen ze benotzen an GUI-centric konfiguréierbar Léisungen), ass och observéiert an Tools fir AI / ML ze kreéieren. Mir hunn d'Etapp vum Schreiwen vum Code scho passéiert an haut benotze mir Kaderen fir Modeller ze bauen an ze trainéieren.

Aner Verbesserungen, wéi d'Fäegkeet fir e pre-trainéierte Modell ze verdeelen, wou den Endbenotzer einfach de Modell op hir spezifesch Donnéeën ofgeschloss muss, maachen et och méi einfach mat Maschinnléieren unzefänken. Dës Fortschrëtter maachen Léieren Maschinn Léieren vill méi einfach souwuel fir Fachleit a fir Firmen am Allgemengen.

Op der anerer Säit sammele mir ëmmer méi Daten. Mat enger vereenegt Datenplattform wéi InterSystems IRIS, all dës Informatioun kann direkt virbereet ginn an als Input fir Maschinnléieremodeller benotzt ginn.

Mat der Beweegung an d'Cloud gëtt d'Start vun AI / ML Projeten méi einfach wéi jee. Mir kënnen nëmmen déi Ressourcen konsuméieren déi mir brauchen. Ausserdeem, dank der Paralleliséierung, déi vu Cloudplattformen ugebuede gëtt, kënne mir Zäit spueren.

Awer wat iwwer d'Resultater? Dëst ass wou d'Saache méi komplizéiert ginn. Et gi vill Tools fir Modeller ze bauen, déi ech nächst diskutéieren. E gudde Modell bauen ass net einfach, awer wat ass dann? Profit ze maachen aus dem Gebrauch vun engem Geschäftsmodell ass och eng net-trivial Aufgab. D'Wurzel vum Problem ass d'Trennung vun analyteschen an transaktiounen Aarbechtslaascht, an Datemodeller. Wa mir e Modell trainéieren, maache mir et normalerweis op historeschen Donnéeën. Awer d'Plaz fir de gebaute Modell ass an der Transaktiounsdatenveraarbechtung. Wat gutt ass dee beschten betrügereschen Transaktiounserkennungsmodell wa mir et eemol am Dag lafen? D'Scammers si scho laang mat de Suen fortgaang. Mir mussen de Modell op historesch Donnéeën trainéieren, awer mir mussen et och an Echtzäit op nei erakommen Donnéeën applizéieren, sou datt eis Geschäftsprozesser op d'Prognosen vum Modell handelen.

De ML Toolkit ass eng Rei vun Tools déi zielt just dat ze maachen: Modeller an en Transaktiounsëmfeld vereenegen sou datt déi gebaute Modeller einfach direkt an Äre Geschäftsprozesser benotzt kënne ginn. Python Gateway ass Deel vum ML Toolkit a bitt Integratioun mat der Python Sprooch (ähnlech wéi R Gateway, Deel vum ML Toolkit bitt Integratioun mat der R Sprooch).

Tools

Ier mer weidergoen, wëll ech e puer Python Tools a Bibliothéiken beschreiwen, déi mir spéider benotzen.

vun den Technologien

  • Python ass eng interpretéiert, héich-Niveau, allgemeng Zweck Programméierungssprooch. Den Haaptvirdeel vun der Sprooch ass seng grouss Bibliothéik vu mathematesch, ML an AI Bibliothéiken. Wéi ObjectScript ass et eng objektorientéiert Sprooch, awer alles ass dynamesch anstatt statesch definéiert. Och alles ass en Objet. Spéider Artikelen huelen un datt d'Sprooch iwwergaang ass. Wann Dir wëllt ufänken ze léieren, ech recommandéieren mat Dokumentatioun.
  • Fir eis spéider Übungen, setzen Python 3.6.7 64 bëssen.
  • IDE: Ech benotzen PyCharm, mee am Allgemengen si много. Wann Dir Atelier benotzt, gëtt et en Eclipse Plugin fir Python Entwéckler. Wann Dir VS Code benotzt, gëtt et eng Extensioun fir Python.
  • Notizbuch: Amplaz vun enger IDE kënnt Dir Är Scripten an Online Notizbicher schreiwen an deelen. De stäerkste populär vun hinnen ass jupyter.

Bibliothéiken

Hei ass eng (net ustrengend) Lëscht vu Maschinnléierebibliothéiken:

  • Knaschteg - e fundamentale Package fir präzis Berechnungen.
  • Pandas - Héichleistungsdatenstrukturen an Datenanalyse-Tools.
  • matplotlib - Kreatioun vu Grafiken.
  • seaborn - Datenvisualiséierung baséiert op Matplotlib.
  • Sklern - Maschinn Léieren Methoden.
  • XGBoost - Maschinn Léieren Algorithmen am Kader vun der Gradient Boost Methodologie.
  • Gensim - NLP.
  • Keras - neural Netzwierker.
  • tensor Flux - eng Plattform fir Maschinnléiermodeller ze kreéieren.
  • PyTorch ass eng Plattform fir Maschinn Léieren Modeller ze kreéieren, fokusséiert op Python.
  • Nyoka - PMML aus verschiddene Modeller.

AI / ML Technologien maachen d'Geschäft méi effizient an adaptéierbar. Ausserdeem ginn dës Technologien haut méi einfach ze entwéckelen an ëmzesetzen. Start iwwer AI / ML Technologien ze léieren a wéi se Är Organisatioun hëllefe kënnen ze wuessen.

Kader

Et gi verschidde Weeër fir Python Gateway z'installéieren an ze benotzen:

  • OS
    • Windows
    • Linux
    • Mac
  • Docker
    • Benotzt e Bild vun DockerHub
    • Erstellt Ären eegene Look

Onofhängeg vun der Installatiounsmethod, braucht Dir de Quellcode. Déi eenzeg Plaz fir de Code erofzelueden ass verëffentlecht Säit. Et enthält getest stabil Verëffentlechungen, huelt just déi lescht. Am Moment ass et 0.8, awer mat der Zäit ginn et neier. Klon / luet de Repository net erof, luet déi lescht Verëffentlechung erof.

OS

Wann Dir Python Gateway op engem Betribssystem installéiert, da musst Dir als éischt (onofhängeg vum Betribssystem) Python installéieren. Dofir:

  1. Installéiert Python 3.6.7 64 Bit. Et ass recommandéiert Python am Standardverzeechnes z'installéieren.
  2. Installéiert de Modul dill: pip install dill.
  3. Luet den ObjectScript Code erof (d.h. do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) zu all Beräich mat Produkter. Am Fall wou Dir e existente Gebitt wëllt fir Produkter z'ënnerstëtzen, lafen: write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. Plaz Uruff DLL/SO/DYLIB an den Dossier bin Är InterSystems IRIS Instanz. D'Bibliothéiksdatei muss am zréckgeschéckte Wee verfügbar sinn write ##class(isc.py.Callout).GetLib().

Windows

  1. Vergewëssert Iech datt d'Ëmweltvariabel PYTHONHOME weist op Python 3.6.7.
  2. Vergewëssert Iech datt de System Ëmfeld Variabel ass PATH enthält eng Variabel PYTHONHOME (oder de Verzeechnes op deen et weist).

Linux (Debian/Ubuntu)

  1. Kontrolléiert datt d'Ëmweltvariabel ass PATH enthält /usr/lib и /usr/lib/x86_64-linux-gnu. Benotzt Datei /etc/environment Ëmweltvariablen ze setzen.
  2. Am Fall vu Feeler undefined symbol: _Py_TrueStruct setzen d'Astellung PythonLib. och an Readme et gëtt eng Troubleshooting Sektioun.

Mac

  1. Momentan gëtt nëmmen Python 3.6.7 ënnerstëtzt Python.org. Kontrolléiert d'Variabel PATH.

Wann Dir Ëmfeldvariablen geännert hutt, start Ären InterSystems Produkt nei.

Docker

D'Benotzung vu Container huet eng Rei Virdeeler:

  • Portabilitéit
  • Effektivitéit
  • Isolatioun
  • Liichtegkeet
  • Onverännerlechkeet

Check aus dëser Serie vun Artikelen fir méi Informatioun iwwer d'Benotzung vun Docker mat InterSystems Produkter.

All Python Gateway baut am Moment Container baséiert 2019.4.

Bereet Bild

Run: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latestPython Gateway mat InterSystems IRIS Community Edition erofzelueden an auszeféieren. Dat ass alles.

Erstellt Ären eegene Look

Fir en Docker-Bild ze bauen, lafen an der Root vum Repository: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
Par défaut gëtt d'Bild op Basis vum Bild gebaut store/intersystems/iris-community:2019.4.0.383.0, Dir kënnt dëst awer änneren andeems Dir eng Variabel setzt IMAGE.
Fir aus InterSystems IRIS ze bauen, lafen: `docker build --build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 --force-rm --tag intersystemscommunity/irispy:läscht ".

Duerno kënnt Dir den Docker-Bild ausféieren:

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

Wann Dir e Bild benotzt baséiert op der InterSystems IRIS Community Edition, kënnt Dir de Schlëssel ausgoen.

Comments

  • Test Prozess isc.py.test.Process späichert eng Zuel vu Biller an engem temporäre Verzeichnis. Dir wëllt dëse Wee an de montéierte Verzeichnis änneren. Fir dëst ze maachen, ännert d'Astellung WorkingDir spezifizéiert de montéierte Verzeichnis.
  • Fir Zougang zum Terminal lafen: docker exec -it irispy sh.
  • Zougang zum System Management Portal duerch Login SuperUser/SYS.
  • Fir de Container ze stoppen, lafen: docker stop irispy && docker rm --force irispy.

D'Installatioun z'iwwerpréiwen

Wann Dir Python Gateway installéiert hutt, ass et derwäert ze kontrolléieren ob et funktionnéiert. Fëllt dëse Code am InterSystems IRIS Terminal aus:

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

D'Resultat sollt sinn: HELLO - Python Variabel Wäert x. Wann de Retour Status sc ass e Feeler oder var eidel, kontrolléieren Readme - Troubleshooting Sektioun.

API

Python Gateway ass installéiert an Dir hutt verifizéiert datt et funktionnéiert. Et ass Zäit et ze benotzen!
D'Haaptrei Interface zu Python ass isc.py.Main. Et bitt déi folgend Gruppe vu Methoden (all zréck %Status):

  • Code Ausféierung
  • Datenübertragung
  • Duechtergesellschaft

Code Ausféierung

Dës Methoden erlaben Iech arbiträr Python Code auszeféieren.

Einfach String

SimpleString - dëst ass d'Haaptmethod. Et brauch 4 fakultativ Argumenter:

  • code - Zeil vum Code fir auszeféieren. Zeilfeed Charakter: $c(10).
  • returnVariable - Numm vun der Variabel fir zréckzekommen.
  • serialization - wéi serialiséieren returnVariable. 0 - String (Standard), 1 - repr.
  • result - ByRef Referenz op d'Variabel an där de Wäert geschriwwe gëtt returnVariable.

Mir hunn uewen gemaach:

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

An dësem Beispill ginn mir eng Python Variabel zou x Bedeitung Hello a wëllt de Wäert vun enger Python Variabel zréckginn x zu enger ObjectScript Variabel var.

ExecuteCode

ExecuteCode ass eng méi sécher a manner restriktiv Alternativ SimpleString.
Linnen an der InterSystems IRIS Plattform sinn limitéiert op 3 Zeechen, a wann Dir e méi laangt Stéck Code ausféiere wëllt, musst Dir Threads benotzen.
Zwee Argumenter ginn ugeholl:

  • code - eng Linn oder Stream vum Python Code fir auszeféieren.
  • variable - (optional) gëtt d'Resultat vun der Ausféierung zou code dëser Python Variabel.

Beispill fir ze benotzen:

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

An dësem Beispill multiplizéieren mir 2 mat 3 a schreiwen d'Resultat op eng Python Variabel y.

Datenübertragung

Gitt Daten an a vu Python.

Python -> InterSystems IRIS

Et gi 4 Weeër fir de Wäert vun enger Python Variabel an InterSystems IRIS ze kréien, ofhängeg vun der Serialiséierung déi Dir braucht:

  • String fir einfach Daten Zorte an Debugging.
  • Repr fir einfach Objeten ze späicheren an Debugging.
  • JSON fir einfach Datemanipulatioun op der InterSystems IRIS Säit.
  • Pickle Objeten ze retten.

Dës Methoden erlaben Iech Variablen aus Python als String oder Streams ze recuperéieren.

  • GetVariable(variable, serialization, .stream, useString) - kréien serialization variabel variable в stream. Wann useString ass 1 an d'Serialiséierung gëtt op engem String gesat, da gëtt e String zréck an net e Stroum.
  • GetVariableJson(variable, .stream, useString) - Kritt JSON Serialiséierung vun enger Variabel.
  • GetVariablePickle(variable, .stream, useString, useDill) -kréien Pickle (oder Dill) serialization vun enger Variabel.

Loosst eis probéieren eis Variabel ze kréien y.

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

InterSystems IRIS -> Python

Lueden Daten vun InterSystems IRIS an Python.

  • ExecuteQuery(query, variable, type, namespace) - erstellt en Dataset (Pandas dataframe oder list) vun der sql Ufro a setzt se op eng Python Variabel variable. Plastikstut isc.py muss an der Géigend verfügbar sinn namespace - d'Demande gëtt do ausgefouert.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) - lued global Daten global aus Abonnement start ze end am Python als Typ Variabel type: listoder Pandas dataframe. Beschreiwung vun fakultativ Argumenter mask an labels verfügbar an der Klassdokumentatioun a Repository Daten Transfert Dokumenter.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) - lued Klass Daten class vun id start ze end am Python als Typ Variabel type: listoder Pandas dataframe. properties - eng Lëscht (getrennt duerch Komma) vun Klasseneigenschaften déi an den Dateset gelueden musse ginn. Masken ënnerstëtzt * и ?. Default - * (all Eegeschafte). Immobilie %%CLASSNAME ignoréiert.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) - lued Dësch Daten table vun id start ze end am Python.

ExecuteQuery - universell (all korrekt SQL Ufro gëtt op Python weidergeleet). Allerdéngs, ExecuteGlobal a seng Wrappers ExecuteClass и ExecuteTable Aarbecht mat enger Rei vu Restriktiounen. Si si vill méi séier (3-5 Mol méi séier wéi den ODBC Chauffer an 20 Mol méi séier ExecuteQuery). Méi Informatiounen op Daten Transfert Dokumenter.
All dës Methoden ënnerstëtzen Datenübertragung aus all Beräich. Plastikstut isc.py muss am Zilberäich verfügbar sinn.

ExecuteQuery

ExecuteQuery(request, variable, type, namespace) - d'Resultater vun enger korrekter SQL Ufro op Python iwwerdroen. Dëst ass déi luesst Datenübertragungsmethod. Benotzt et wann ExecuteGlobal a seng Wrappers sinn net verfügbar.

Argumenter:

  • query - sql Ufro.
  • variable - den Numm vun der Python Variabel, an där d'Donnéeë geschriwwe sinn.
  • type - list oder Pandas dataframe.
  • namespace - de Beräich an deem d'Ufro ausgefouert gëtt.

ExecuteGlobal

ExecuteGlobal(global, variable, type, start, end, mask, labelels, namespace) - laanscht eng global am Python.

Argumenter:

  • global - global Numm ouni ^
  • variable - den Numm vun der Python Variabel, an där d'Donnéeë geschriwwe sinn.
  • type - list oder Pandas dataframe.
  • start - déi éischt Abonnement vun der globaler. Noutwendeg %Integer.
  • end - déi lescht Abonnement vun der globaler. Noutwendeg %Integer.
  • mask - global Wäert Mask. D'Mask ka méi kuerz sinn wéi d'Zuel vun de Felder am globalen (an deem Fall ginn d'Felder um Enn iwwersprangen). Wéi eng Mask formatéieren:
    • + pass de Wäert wéi ass.
    • - iwwersprangen Wäert.
    • b - Boolschen Typ (0 - False, de Rescht - True).
    • d - Datum (vu $horolog, op Windows ab 1970, op Linux ab 1900).
    • t - Zäit ($horolog, Sekonnen no Mëtternuecht).
    • m - Zäitstempel (Format String JOER-MONTH-DAY STONN: MINUTE: SECOND).
  • labels - %Lëscht vun de Kolonnennimm. Dat éischt Element ass den Numm vum Abonnement.
  • namespace - de Beräich an deem d'Ufro ausgefouert gëtt.

ExecuteClass

Wrap iwwer ExecuteGlobal. Baséiert op der Klass Definitioun, preparéieren engem Opruff ExecuteGlobal a rifft hien.

ExecuteClass(class, variable, type, start, end, properties, namespace) - Klassendaten am Python passéieren.

Argumenter:

  • class - Klass Numm
  • variable - den Numm vun der Python Variabel, an där d'Donnéeë geschriwwe sinn.
  • type - list oder Pandas dataframe.
  • start - Start ID.
  • end - Finale Id
  • properties - eng Lëscht (getrennt duerch Komma) vun Klasseneigenschaften déi an den Dateset gelueden musse ginn. Masken ënnerstëtzt * и ?. Default - * (all Eegeschafte). Immobilie %%CLASSNAME ignoréiert.
  • namespace - de Beräich an deem d'Ufro ausgefouert gëtt.

All Eegeschafte ginn passéiert wéi ass ausser Typeigenschaften %Date, %Time, %Boolean и %TimeStamp - si ginn an déi entspriechend Python Klassen ëmgewandelt.

ExecuteTable

Wrap iwwer ExecuteClass. Iwwersetzt den Dësch Numm an de Klass Numm an rifft ExecuteClass. Ënnerschrëft:

ExecuteTable(table, variable, type, start, end, properties, namespace) - Passë vun Dësch Donnéeën ze Python.

Argumenter:

  • table - Dësch Numm.
    All aner Argumenter ginn duerchgesat wéi et ass ExecuteClass.

Notizen

  • ExecuteGlobal, ExecuteClass и ExecuteTable schaffen gläich séier.
  • ExecuteGlobal 20 Mol méi séier wéi ExecuteQuery op grouss Datesätz (Transferzäit> 0.01 Sekonnen).
  • ExecuteGlobal, ExecuteClass и ExecuteTable Aarbecht op Globalen mat dëser Struktur: ^global(key) = $lb(prop1, prop2, ..., propN) wou key - eng ganz Zuel.
  • fir ExecuteGlobal, ExecuteClass и ExecuteTable ënnerstëtzt Gamme vu Wäerter %Date entsprécht Beräich mktime an hänkt vum OS of (Fënsteren: 1970-01-01, Linux 1900-01-01, Mac). Benotzt %TimeStampDaten ausserhalb vun dësem Beräich ze Transfert oder pandas dataframe benotzen well dëst ass eng Lëscht-nëmmen Limitatioun.
  • fir ExecuteGlobal, ExecuteClass и ExecuteTable all Argumenter ausser d'Datenquell (global, Klass oder Dësch) a Variabel sinn fakultativ.

Beispiller

Test Klass isc.py.test.Persoun enthält eng Method déi all Datentransferoptiounen demonstréiert:

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)

Call der Method do ##class(isc.py.test.Person).Test() fir ze kucken wéi all Datenübertragungsmethoden funktionnéieren.

Helfer Methoden

  • GetVariableInfo(variable, serialization, .defined, .type, .length) - kritt Informatiounen iwwer d'Variabel: ob et definéiert ass, seng Klass an d'Serialiséierungslängt.
  • GetVariableDefined(variable, .defined) - ob d'Variabel definéiert ass.
  • GetVariableType(variable, .type) - kréien d'Klass vun der Variabel.
  • GetStatus() - kréien an ewechzehuelen déi lescht Ausnam op der Python Säit.
  • GetModuleInfo(module, .imported, .alias) - kréien Modul Variabel an Import Status.
  • GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments) - kritt Informatiounen iwwer d'Funktioun.

Interoperabilitéit

Dir hutt geléiert wéi Dir Python Gateway vum Terminal nennt, loosst eis et elo an der Produktioun benotzen. D'Basis fir mat Python an dësem Modus ze interagéieren ass isc.py.ens.Operation. Et erlaabt eis:

  • Code am Python ausféieren
  • Spueren / Restauréieren Python Kontext
  • Lueden a kritt Daten vum Python

Prinzipiell ass eng Python Operatioun e Wrapper iwwer isc.py.Main. Operatioun isc.py.ens.Operation bitt d'Fäegkeet fir mam Python-Prozess vun InterSystems IRIS Produkter ze interagéieren. Fënnef Ufroe ginn ënnerstëtzt:

  • isc.py.msg.ExecutionRequest Python Code auszeféieren. Returns isc.py.msg.ExecutionResponse mam Ausféierungsresultat an de Wäerter vun den ugefrote Variablen.
  • isc.py.msg.StreamExecutionRequest Python Code auszeféieren. Returns isc.py.msg.StreamExecutionResponse d'Resultat vun der Ausféierung an d'Wäerter vun de gefrote Variabelen. Analog isc.py.msg.ExecutionRequest, awer akzeptéiert a bréngt Streams zréck anstatt Strings.
  • isc.py.msg.QueryRequest d'Resultat vun der Ausféierung vun enger SQL Ufro iwwerdroen. Returns Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest fir laanschtgoungen global / Klass / Dësch Donnéeën. Returns Ens.Response.
  • isc.py.msg.SaveRequest Python Kontext ze retten. Returns Ens.StringResponse mat Kontext ID.
  • isc.py.msg.RestoreRequest fir de Python Kontext ze restauréieren.

    Ausserdeem, isc.py.ens.Operation huet zwee Astellungen:

    • Initializer - wielt eng Klass déi den Interface implementéiert isc.py.init.Abstract. Et kann benotzt ginn fir Funktiounen, Moduler, Klassen, asw. Et gëtt eemol ausgefouert wann de Prozess ufänkt.
    • PythonLib - (Linux nëmmen) wann Dir Feeler gesitt beim Luede, setzt säi Wäert op libpython3.6m.so oder souguer am ganze Wee zu der Python Bibliothéik.

Kreatioun vu Geschäftsprozesser

Et ginn zwou Klassen verfügbar déi d'Entwécklung vu Geschäftsprozesser erliichteren:

  • isc.py.ens.ProcessUtils erlaabt Iech Annotatiounen aus Aktivitéiten mat variabelen Ersatz ze extrahieren.
  • isc.py.util.BPEmulator mécht et einfach Geschäftsprozesser mat Python ze testen. Et kann e Geschäftsprozess (Python Deeler) am aktuelle Prozess ausféieren.

Variabel Substitution

All Affär Prozesser ierflecher aus isc.py.ens.ProcessUtils, kann d'Method benotzen GetAnnotation(name) fir d'Aktivitéit Annotatiounswäert mam Numm ze kréien. D'Aktivitéitsannotatioun kann Variablen enthalen déi op der InterSystems IRIS Säit berechent ginn ier se op Python weidergeleet ginn. Hei ass d'Syntax fir variabel Ersatz:

  • ${class:method:arg1:...:argN} - Method Opruff
  • #{expr} - ausféieren Code an ObjectScript Sprooch.

E Beispill ass verfügbar am Testgeschäftsprozess isc.py.test.Process, zum Beispill, an Aktivitéit Correlation Matrix: Graph: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). An dësem Beispill:

  • #{process.WorkDirectory} gëtt d'WorkDirectory Eegeschafte vum Objet zréck process, wat eng Instanz vun der Klass ass isc.py.test.Process déi. aktuellen Geschäftsprozess.
  • ${%PopulateUtils:Integer:1:100} rifft eng Method Integer Grad %PopulateUtils, laanschtgoungen Argumenter 1 и 100, eng zoufälleg ganz Zuel am Beräich zréckginn 1...100.

Test Affär Prozess

Testprodukter an Testgeschäftsprozesser sinn als Standard als Deel vum Python Gateway verfügbar. Fir se ze benotzen:

  1. Am OS-Terminal lafen: pip install pandas matplotlib seaborn.
  2. Am InterSystems IRIS Terminal, lafen: do ##class(isc.py.test.CannibalizationData).Import() fir Testdaten auszefëllen.
  3. Lancéiere Produiten isc.py.test.Production.
  4. Schécken Ufro Typ Ens.Request в isc.py.test.Process.

Loosst eis kucken wéi dat alles zesumme funktionnéiert. Oppen isc.py.test.Process an der BPL Editor:

Python Gateway an InterSystems IRIS

Code Ausféierung

Déi wichtegst Erausfuerderung ass Python Code auszeféieren:

Python Gateway an InterSystems IRIS

Ufro benotzt isc.py.msg.ExecutionRequest, hei sinn seng Eegeschaften:

  • Code - Python Code.
  • SeparateLines - ob de Code an Zeilen opgedeelt gëtt fir d'Ausféierung. $c(10) (n) gëtt benotzt fir Strings ze trennen. Notéiert w.e.g. datt et NET recommandéiert ass de ganze Message gläichzäiteg ze veraarbechten, dës Funktioun ass nëmme geduecht fir ze veraarbecht def an ähnlech multiline Ausdrock. Default 0.
  • Variables - eng komma-getrennt Lëscht vu Variabelen déi an d'Äntwert bäigefüügt ginn.
  • Serialization - Wéi serialiséieren d'Variabelen déi mir wëllen zréckginn. Optiounen: Str, Repr, JSON, Pickle и Dill, Default Str.

An eisem Fall setzen mir nëmmen d'Propriétéit Code, also all aner Eegeschafte benotzen d'Standardwäerter. Mir setzen et duerch Uruff process.GetAnnotation("Import pandas"), déi bei der Runtime eng Annotatioun zréckginn nodeems d'variabel Substitutioun duerchgefouert gouf. No all, de Code import pandas as pd gëtt op Python weiderginn. GetAnnotation kann nëtzlech sinn fir Multi-Linn Python Scripten ze kréien, awer et gi keng Restriktiounen op dës Method fir Code ze kréien. Dir kënnt d'Propriétéit astellen Code op all Manéier bequem fir Iech.

Kréien Variablen

Aner interessant Erausfuerderung benotzt isc.py.msg.ExecutionRequest - Correlation Matrix: Tabular:

Python Gateway an InterSystems IRIS

Et berechent d'Korrelatiounsmatrix op der Python Säit an extrahéiert d'Variabel corrmat zréck op InterSystems IRIS am JSON Format andeems Dir d'Ufroeigenschaften setzt:

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

Mir kënnen d'Resultater am Visual Trace gesinn:

Python Gateway an InterSystems IRIS

A wa mir dëse Wäert an der BP brauchen, kënne mir et esou kréien: callresponse.Variables.GetAt("corrmat").

Datenübertragung

Als nächst schwätze mer iwwer d'Transfert vun Daten vun InterSystems IRIS op Python; all Ufroe fir Datentransfer implementéieren d'Interface isc.py.msg.DataRequestdéi folgend Eegeschafte ubitt:

  • Variable - eng Python Variabel, an déi Daten geschriwwe ginn.
  • Type - Variabel Typ: dataframe (Pandas Dataframe) oder list.
  • Namespace - de Beräich aus deem mir Daten kréien. Plastikstut isc.py soll an dësem Beräich verfügbar sinn. Dëst kann e Gebitt sinn ouni Produktsupport.

Baséierend op dësem Interface ginn 4 Klassen vun Ufroen ëmgesat:

  • isc.py.msg.QueryRequest - setzen d'Propriétéit Query fir eng SQL Ufro ze schécken.
  • isc.py.msg.ClassRequest - setzen d'Propriétéit Class Klassendaten ze passéieren.
  • isc.py.msg.TableRequest - setzen Propriétéit Table Dësch Daten ze Transfert.
  • isc.py.msg.GlobalRequest - setzen Propriétéit Global fir global Daten Transfert.

Am Testprozess kuckt d'Aktivitéit RAWwou isc.py.msg.QueryRequest an Aktioun gewisen.

Python Gateway an InterSystems IRIS

Spueren / Restauréieren Python Kontext

Endlech kënne mir de Python Kontext an InterSystems IRIS späicheren, fir dëst ze schécken wäerte mir schécken isc.py.msg.SaveRequest mat Argumenter:

  • Mask - Nëmme Variablen déi mat der Mask passen gi gespäichert. Ënnerstëtzt * и ?An. Beispill: "Data*, Figure?"... Default *.
  • MaxLength - Déi maximal Längt vun der gespäichert Variabel. Wann d'Serialiséierung vun enger Variabel méi laang ass, gëtt se ignoréiert. Setzt op 0 fir Variablen vun all Längt ze kréien. Default $$$MaxStringLength.
  • Name - Kontextnumm (fakultativ).
  • Description - Beschreiwung vum Kontext (optional).

Retouren Ens.StringResponse с Id gespäichert Kontext. Am Testprozess kuckt d'Aktivitéit Save Context.

Zesummenhang Ufro isc.py.msg.RestoreRequest lued Kontext vun InterSystems IRIS an Python:

  • ContextId - Kontext Identifizéierer.
  • Clear - läschen de Kontext virum Restauréieren.

Jupyter Notizbuch

Jupyter Notizbuch ass eng Open Source Webapplikatioun déi Iech erlaabt Notizbicher ze kreéieren an ze publizéieren déi Code, Visualiséierungen an Text enthalen. Python Gateway erlaabt Iech BPL Prozesser a Form vun engem Jupyter Notizbuch ze gesinn an z'änneren. Maacht weg datt den normale Python 3 Exekutor de Moment benotzt gëtt.

Dës Extensioun gëtt ugeholl datt d'Annotatiounen Python Code enthalen an d'Aktivitéitsnamen als virdrun Titelen benotzt. Et ass elo méiglech PythonGateway Geschäftsprozesser am Jupyter Notebook z'entwéckelen. Hei ass wat méiglech ass:

  • Erstellt nei Geschäftsprozesser
  • Läschen Affär Prozesser
  • Schafen nei Aktivitéiten
  • Änneren Aktivitéiten
  • Läschen Aktivitéiten

hei Demo Video. An e puer Screenshots:

Prozess Explorer

Python Gateway an InterSystems IRIS

Prozess Editor

Python Gateway an InterSystems IRIS

Kader

  1. Dir braucht InterSystems IRIS 2019.2+.
  2. Installéiere PythonGateway v0.8+ (nëmmen erfuerderlech isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints и isc.py.ens.ProcessUtils).
  3. Update den ObjectScript Code vum Repository.
  4. Ausféieren do ##class(isc.py.util.Jupyter).Install() a befollegt d'Uweisungen.

Dokumentatioun.

Conclusiounen

MLToolkit ass eng Rei vun Tools deenen hir Zil ass Modeller an eng Transaktiounsëmfeld ze kombinéieren sou datt déi gebaute Modeller einfach direkt an Äre Geschäftsprozesser benotzt kënne ginn. Python Gateway ass Deel vum MLToolkit a bitt Integratioun mat der Python Sprooch, wat Iech erlaabt all Maschinnléier Algorithmen ze orchestréieren, déi am Python erstallt ginn (d'Haaptëmfeld fir vill Datewëssenschaftler), benotzt vill fäerdeg Bibliothéike fir séier adaptiv, robotesch analytesch AI ze kreéieren / ML Léisungen op der InterSystems Plattform IRIS.

Referenze

MLToolkit

D'MLToolkit Benotzergrupp ass e private GitHub Repository erstallt als Deel vun der InterSystems Corporate GitHub Organisatioun. Et ass geduecht fir extern Benotzer déi installéieren, léieren oder scho MLToolkit Komponenten benotzen, dorënner de Python Gateway. D'Grupp huet eng Rei vun implementéiert Fäll (mat Quellcode an Testdaten) an de Beräicher Marketing, Fabrikatioun, Medizin a vill aner Industrien. Fir bei der ML Toolkit User Group matzemaachen, schéckt w.e.g. eng kuerz E-Mail op déi folgend Adress: [Email geschützt] an enthält déi folgend Informatioun an Ärem Bréif:

  • GitHub Benotzernumm
  • Organisatioun (Dir schafft oder studéiert)
  • Positioun (Är aktuell Positioun an Ärer Organisatioun, entweder "Student" oder "Onofhängeg").
  • Land

Fir déi, déi den Artikel gelies hunn an un d'Fähigkeiten vun InterSystems IRIS interesséiert sinn als Plattform fir kënschtlech Intelligenz a Maschinnléiermotoren z'entwéckelen oder ze hosten, invitéiere mir Iech fir méiglech Szenarien ze diskutéieren déi fir Är Entreprise interessant sinn. Mir wäerten frou d'Bedierfnesser vun Ärer Firma analyséieren a gemeinsam en Aktiounsplang bestëmmen; Kontakt E-Mail Adress vun eisem AI/ML Expert Team - [Email geschützt].

Source: will.com

Setzt e Commentaire