Dieser Artikel widmet sich dem Python Gateway â einem Open-Source-Community-Projekt fĂŒr die InterSystems IRIS-Datenplattform. Dieses Projekt ermöglicht die Orchestrierung beliebiger Machine-Learning-Algorithmen, die in Python entwickelt wurden (der Hauptsprache vieler Data Scientists), und die Nutzung zahlreicher fertiger Bibliotheken zur schnellen Erstellung adaptiver, automatisierter analytischer AI/ML-Lösungen auf der InterSystems IRIS-Plattform. In diesem Artikel zeige ich, wie InterSystems IRIS Prozesse in Python orchestrieren, bidirektionalen Datenaustausch effizient durchfĂŒhren und intelligente GeschĂ€ftsprozesse erstellen kann.
Gliederung
- EinfĂŒhrung.
- Werkzeuge.
- Installation.
- API.
- InteroperabilitÀt.
- Jupyter Notebook.
- Fazit.
- Links.
- MLToolkit.
EinfĂŒhrung
Python ist eine hochgradige Programmiersprache fĂŒr allgemeine Zwecke, die darauf abzielt, die ProduktivitĂ€t der Entwickler und die Lesbarkeit des Codes zu erhöhen. In dieser Artikelreihe werde ich die Möglichkeiten der Anwendung der Sprache Python auf der InterSystems IRIS-Plattform erlĂ€utern, wobei der Schwerpunkt dieses Artikels auf der Anwendung von Python als Sprache zur Erstellung und Anwendung von Machine-Learning-Modellen liegt.
Maschinenlernen (ML) ist eine Klasse von Methoden der kĂŒnstlichen Intelligenz, deren charakteristisches Merkmal nicht das unmittelbare Lösen von Aufgaben ist, sondern das Lernen wĂ€hrend der Lösung zahlreicher Ă€hnlicher Probleme.
Algorithmen und Modelle des maschinellen Lernens werden immer verbreiteter. DafĂŒr gibt es viele GrĂŒnde, aber alles lĂ€uft auf VerfĂŒgbarkeit, Einfachheit und das Erreichen praktischer Ergebnisse hinaus. Ist Clusterbildung oder sogar die Netzwerkmodellierung eine neue Technologie?
NatĂŒrlich nicht, aber heutzutage ist es nicht mehr notwendig, Hunderttausende von Codezeilen zu schreiben, um ein einziges Modell zu starten, und die Kosten fĂŒr die Erstellung und Anwendung von Modellen werden immer geringer.
Die Werkzeuge entwickeln sich weiter â wĂ€hrend es noch keine vollstĂ€ndig GUI-orientierten AI/ML-Werkzeuge gibt, beobachten wir den gleichen Fortschritt, den wir bei vielen anderen Klassen von Informationssystemen, wie BI (von der Codierung bis zur Nutzung von Frameworks und GUI-basierten konfigurierbaren Lösungen), gesehen haben, auch in den Tools zur Erstellung von AI/ML. Wir haben die Phase der Codeerstellung bereits hinter uns gelassen und nutzen heute Frameworks, um Modelle zu erstellen und zu trainieren.
Weitere Verbesserungen, wie die Möglichkeit, ein vortrainiertes Modell zu verbreiten, bei dem der Endbenutzer lediglich das Training des Modells mit seinen spezifischen Daten abschlieĂen muss, erleichtern den Einstieg in die Anwendung von maschinellem Lernen. Diese Fortschritte machen das Erlernen von maschinellem Lernen sowohl fĂŒr Fachleute als auch fĂŒr Unternehmen insgesamt erheblich einfacher.
Auf der anderen Seite sammeln wir immer mehr Daten. Dank einer einheitlichen Datenplattform wie InterSystems IRIS kann all diese Informationen sofort aufbereitet und als Basisdaten fĂŒr Modelle des maschinellen Lernens verwendet werden.
Der Umstieg auf die Cloud macht den Start von AI/ML-Projekten einfacher als je zuvor. Wir können nur die Ressourcen konsumieren, die wir benötigen. DarĂŒber hinaus können wir dank der Parallelisierung, die von Cloud-Plattformen angeboten wird, Zeit sparen.
Wie sieht es jedoch mit den Ergebnissen aus? Hier wird es komplizierter. Es gibt viele Werkzeuge zum Erstellen von Modellen, ĂŒber die ich im Folgenden sprechen werde. Ein gutes Modell zu erstellen, ist nicht einfach, aber was kommt dann? Auch die Gewinnung von Nutzen fĂŒr das GeschĂ€ft aus der Nutzung des Modells ist keine triviale Aufgabe. Das Kernproblem liegt im Unterscheiden von analytischen und transaktionalen Lasten sowie den Datenmodellen. Wenn wir ein Modell trainieren, tun wir dies in der Regel mit historischen Daten. Aber der Platz fĂŒr das erstellte Modell liegt in der transaktionalen Datenverarbeitung. Was nĂŒtzt das beste Modell zur Erkennung von betrĂŒgerischen Transaktionen, wenn wir es einmal am Tag ausfĂŒhren? Die BetrĂŒger sind lĂ€ngst mit dem Geld verschwunden. Wir mĂŒssen das Modell mit historischen Daten trainieren, aber wir mĂŒssen es auch in Echtzeit auf neuen Eingangsdaten anwenden, damit unsere GeschĂ€ftsprozesse entsprechend den Prognosen, die das Modell erstellt hat, handeln können.
ML Toolkit â ein Set von Tools, das genau das Ziel hat: Modelle und Transaktionsumgebungen zusammenzufĂŒhren, sodass die erstellten Modelle direkt in Ihren GeschĂ€ftsprozessen eingesetzt werden können. Der Python Gateway ist Teil des ML Toolkits und ermöglicht die Integration mit der Programmiersprache Python (Ă€hnlich wie der R Gateway, der ebenfalls Teil des ML Toolkits ist und die Integration mit der Programmiersprache R ermöglicht).
Werkzeugset
Bevor wir fortfahren, möchte ich einige Werkzeuge und Bibliotheken fĂŒr Python beschreiben, die wir spĂ€ter verwenden werden.
Technologien
- Python ist eine interpretierte, hochgradige Programmiersprache fĂŒr allgemeine Zwecke. Der Hauptvorteil dieser Sprache ist die umfangreiche Bibliothek an mathematischen, ML- und AI-Bibliotheken. Wie ObjectScript ist es eine objektorientierte Sprache, jedoch wird alles dynamisch und nicht statisch definiert. Alles ist auch ein Objekt. SpĂ€tere Artikel setzen ein flĂŒchtiges VerstĂ€ndnis der Sprache voraus. Wenn Sie mit dem Lernen beginnen möchten, empfehle ich, mit .
- FĂŒr unsere kommenden Ăbungen installieren Sie .
- IDE: Ich benutze , aber im Allgemeinen gibt es viele . Wenn Sie Atelier verwenden, gibt es ein Eclipse-Plugin fĂŒr Entwickler in Python. Bei der Verwendung von VS Code steht Ihnen eine Erweiterung fĂŒr Python zur VerfĂŒgung.
- Notebook: Anstelle einer IDE können Sie Ihre Skripte in Online-Notebooks schreiben und teilen. Das beliebteste davon ist .
Bibliotheken
Hier ist eine (unvollstĂ€ndige) Liste von Bibliotheken fĂŒr maschinelles Lernen:
- â ein grundlegendes Paket fĂŒr prĂ€zise Berechnungen.
- â leistungsstarke Datenstrukturen und Analysetools.
- â Erstellung von Diagrammen.
- â datenvisualisierung basierend auf matplotlib.
- â Methoden des maschinellen Lernens.
- â Algorithmen fĂŒr maschinelles Lernen im Rahmen der Gradient Boosting-Methode.
- â NLP.
- â neuronale Netze.
- â eine Plattform zur Erstellung von Modellen fĂŒr maschinelles Lernen.
- â eine auf Python ausgerichtete Plattform zur Erstellung von Modellen fĂŒr maschinelles Lernen.
- â PMML aus verschiedenen Modellen.
AI/ML-Technologien ermöglichen es, Unternehmen effizienter und anpassungsfĂ€higer zu gestalten. DarĂŒber hinaus wird die Entwicklung und Implementierung dieser Technologien heute einfacher. Beginnen Sie mit dem Studium von AI/ML-Technologien und wie sie Ihrem Unternehmen beim Wachstum helfen können.
Installation von
Es gibt mehrere Möglichkeiten, das Python Gateway zu installieren und zu verwenden:
- dem Betriebssystem
- Windows
- Linux
- Mac
- Docker
- Verwenden Sie ein Image von DockerHub
- Erstellen Sie Ihr eigenes Image
UnabhÀngig von der Installationsmethode benötigen Sie den Quellcode. Der einzige Ort, um den Code herunterzuladen, ist die . Dort finden Sie getestete stabile Versionen, nehmen Sie einfach die neueste. Derzeit ist es 0.8, aber im Laufe der Zeit werden weitere erscheinen. Klonen oder laden Sie nicht das Repository herunter, sondern laden Sie die neueste Version herunter.
dem Betriebssystem
Wenn Sie das Python Gateway auf einem Betriebssystem installieren, mĂŒssen Sie zunĂ€chst (unabhĂ€ngig vom Betriebssystem) Python installieren. Dazu:
- . Es wird empfohlen, Python im Standardverzeichnis zu installieren.
- Installieren Sie das Modul
dill:pip install dill. - Laden Sie den ObjectScript-Code (d.h.
do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) in jeden Bereich mit Produktionen hoch. Falls Sie möchten, dass der bestehende Bereich Produktionen unterstĂŒtzt, fĂŒhren Sie Folgendes aus:write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1). - Platzieren Sie in den Ordner
binIhres InterSystems IRIS-Instances. Die Bibliotheksdatei muss unter dem Pfad verfĂŒgbar sein, der zurĂŒckgegeben wirdwrite ##class(isc.py.Callout).GetLib().
Windows
- Stellen Sie sicher, dass die Umgebungsvariable
PYTHONHOMEauf Python 3.6.7 verweist. - ĂberprĂŒfen Sie, ob die Systemumgebungsvariable
PATHdie Variable enthÀltPYTHONHOME(oder das Verzeichnis, auf das sie verweist).
Linux (Debian/Ubuntu)
- Stellen Sie sicher, dass die Umgebungsvariable
PATHenthÀlt/usr/libund/usr/lib/x86_64-linux-gnu. Verwenden Sie die Datei/etc/environmentum Umgebungsvariablen festzulegen. - Bei Fehlern
undefined symbol: _Py_TrueStructsetzen Sie die EinstellungPythonLib. AuĂerdem gibt es im einen Abschnitt zur Fehlersuche.
Mac
- Derzeit wird nur Python 3.6.7 von unterstĂŒtzt. ĂberprĂŒfen Sie die Umgebungsvariable
PATH.
Wenn Sie die Umgebungsvariablen geÀndert haben, starten Sie Ihr InterSystems-Produkt neu.
Docker
Die Verwendung von Containern bietet eine Reihe von Vorteilen:
- PortabilitÀt
- Effizienz
- Isolierung
- Leichtgewichtigkeit
- UnverÀnderlichkeit
Lesen Sie diese fĂŒr weitere Informationen zur Verwendung von Docker mit InterSystems-Produkten.
Alle Builds des Python Gateway basieren derzeit auf Containern. 2019.4.
Fertiges Image
FĂŒhren Sie aus: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latest, um das Python Gateway mit InterSystems IRIS Community Edition herunterzuladen und zu starten. Das war's.
Erstellen Sie Ihr eigenes Image
Um das Docker-Image zu erstellen, fĂŒhren Sie im Wurzelverzeichnis des Repositorys aus: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
StandardmĂ€Ăig wird das Image basierend auf dem Image erstellt store/intersystems/iris-community:2019.4.0.383.0, Sie können dies jedoch Ă€ndern, indem Sie die Variable IMAGE.
FĂŒr den Build aus InterSystems IRIS fĂŒhren Sie aus: `docker build âbuild-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 âforce-rm âtag intersystemscommunity/irispy:latest`.
Danach können Sie das Docker-Image starten:
docker run -d
-p 52773:52773
-v //:/mount
--name irispy
intersystemscommunity/irispy:latest
--key /mount/iris.keyWenn Sie ein auf der InterSystems IRIS Community Edition basierendes Image verwenden, mĂŒssen Sie möglicherweise keinen SchlĂŒssel angeben.
Kommentare
- Testprozess
isc.py.test.Processspeichert eine Reihe von Bildern in einem temporĂ€ren Verzeichnis. Möglicherweise möchten Sie diesen Pfad in ein eingebundenes Verzeichnis Ă€ndern. Bearbeiten Sie dazu die EinstellungWorkingDirund geben Sie das montierte Verzeichnis an. - Um auf das Terminal zuzugreifen, fĂŒhren Sie aus:
docker exec -it irispy sh. - Zugriff auf das System Management Portal mit dem Login
SuperUser/SYS. - Um den Container zu stoppen, fĂŒhren Sie aus:
docker stop irispy && docker rm --force irispy.
Installation ĂŒberprĂŒfen
Nachdem Sie das Python Gateway installiert haben, sollten Sie ĂŒberprĂŒfen, ob es funktioniert. FĂŒhren Sie diesen Code im InterSystems IRIS Terminal aus:
set sc = ##class(isc.py.Callout).Setup()
set sc = ##class(isc.py.Main).SimpleString("x='HELLO'", "x", , .var).
write varEs sollte ausgegeben werden Hallo â der Wert der Python-Variablen x. Wenn der Status zurĂŒckgegeben wird sc ein Fehler oder var leer ist, ĂŒberprĂŒfen Sie .
API
Der Python Gateway ist installiert und Sie haben sichergestellt, dass er funktioniert. Es ist Zeit, ihn zu nutzen!
Die Hauptschnittstelle zu Python ist isc.py.Main. Sie bietet die folgenden Methoden-Gruppen an (alle geben zurĂŒck %Status):
- CodeausfĂŒhrung
- DatenĂŒbergabe
- Hilfsfunktionen
CodeausfĂŒhrung
Diese Methoden ermöglichen die AusfĂŒhrung beliebigen Python-Codes.
SimpleString
SimpleString â ist die Hauptmethode. Sie akzeptiert 4 optionale Argumente:
codeâ der auszufĂŒhrende Code. Zeilenumbruch-Zeichen:$c(10).returnVariableâ der Name der zurĂŒckzugebenden Variablen.serializationâ wie serialisierenreturnVariable. 0 â string (Standardwert), 1 â repr.resultâ ByRef Verweis auf die Variable, in die der Wert geschrieben wirdreturnVariable.
Oben haben wir ausgefĂŒhrt:
set sc = ##class(isc.py.Main).SimpleString("x='HELLO'", "x", , .var).In diesem Beispiel weisen wir der Python-Variable x den Wert Hallo und möchten den Wert der Python-Variable x in einer ObjectScript-Variable zurĂŒckgeben var.
ExecuteCode
ExecuteCode ist eine sicherere und weniger eingeschrÀnkte Alternative SimpleString.
In der Plattform InterSystems IRIS sind Strings auf 3.641.144 Zeichen begrenzt. Wenn Sie einen lĂ€ngeren Code ausfĂŒhren möchten, mĂŒssen Sie Streams verwenden.
Es werden zwei Argumente akzeptiert:
codeâ Ein String oder ein Python-Code-Stream zur AusfĂŒhrung.variableâ (optional) weist das Ergebnis der AusfĂŒhrung dieser Python-Variablen zu.codeBeispiel verwenden:
set sc = ##class(isc.py.Main).ExecuteCode("2*3", "y").
In diesem Beispiel multiplizieren wir 2 mit 3 und speichern das Ergebnis in der Python-Variablen.Ăbertragen Sie Daten zwischen Python und InterSystems IRIS. y.
DatenĂŒbergabe
Python -> InterSystems IRIS
Es gibt vier Möglichkeiten, den Wert einer Python-Variablen in InterSystems IRIS zu erhalten, abhÀngig von der benötigten Serialisierung:
String
fĂŒr einfache Datentypen und Debugging.Reprzur Speicherung einfacher Objekte und fĂŒr Debugging.fĂŒr einfaches Manipulieren von Daten auf der Seite von InterSystems IRIS.JSONPicklezur Speicherung von Objekten.Diese Methoden ermöglichen es, Variablen aus Python als Strings oder Streams zu beziehen.
GetVariable(variable, serialization, .stream, useString)
â erhaltenstream.serializationVariablevariableinWennuseStringgleich 1 ist und die Serialisierung in einen String erfolgt, wird ein String und kein Stream zurĂŒckgegeben.GetVariableJson(variable, .stream, useString)â erhĂ€lt die JSON-Serialisierung der Variablen.GetVariablePickle(variable, .stream, useString, useDill)GetVariablePickle(variable, .stream, useString, useDill)- erhalten Sie die Pickle (oder Dill) Serialisierung einer Variablen.
Lassen Sie uns versuchen, unsere Variable abzurufen y.
set sc = ##class(isc.py.Main).GetVariable("y", , .val, 1)
write val
>6InterSystems IRIS -> Python
Wir laden Daten aus InterSystems IRIS in Python.
ExecuteQuery(query, variable, type, namespace)â erstellt einen Datensatz (pandasdataframeoderListe) aus einer SQL-Anfrage und speichert ihn in einer Python-Variable.variable. Das Paketisc.pymuss im NamensraumnamespaceverfĂŒgbar sein, wo die Anfrage ausgefĂŒhrt wird.ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace)â lĂ€dt Daten eines Globalsglobalaus dem Subskriptstartbis zuendin Python als einen Variablentyptype:Liste, oder pandas.dataframeDie Beschreibung der optionalen Argumentemaskundlabelsist in der Klassen- und Repository-Dokumentation verfĂŒgbar. .ExecuteClass(class, variable, type, start, end, properties, namespace)â lĂ€dt Daten einer Klasseclassvon IDstartbis zuendin Python als einen Variablentyptype:Liste, oder pandas.dataframe.propertiesâ eine Liste (getrennt durch Kommas) von Klasseneigenschaften, die in den Datensatz geladen werden sollen. Masken werden unterstĂŒtzt.*und?StandardmĂ€Ăig â*(alle Eigenschaften). Die Eigenschaft%%CLASSNAMEwird ignoriert.ExecuteTable(table, variable, type, start, end, properties, namespace)â lĂ€dt TabellendatenTabellevon IDstartbis zuendin Python.
ExecuteQuery â ist universell (jeder gĂŒltige SQL-Befehl wird an Python ĂŒbergeben). Allerdings, ExecuteGlobal und seine Wrapper ExecuteClass und ExecuteTable arbeiten mit einer Reihe von EinschrĂ€nkungen. Sie sind deutlich schneller (3-5 Mal schneller als ODBC-Treiber und 20 Mal schneller ExecuteQuery). Weitere Informationen finden Sie in .
Alle diese Methoden unterstĂŒtzen den Datentransfer aus jedem Bereich. Das Paket isc.py muss im Zielbereich verfĂŒgbar sein.
ExecuteQuery
ExecuteQuery(request, variable, type, namespace) â ĂŒbertrĂ€gt die Ergebnisse einer beliebigen gĂŒltigen SQL-Abfrage an Python. Dies ist die langsamste Methode zur DatenĂŒbertragung. Verwenden Sie sie, wenn ExecuteGlobal und seine Wrapper nicht verfĂŒgbar sind.
Argumente:
queryâ SQL-Abfrage.variableâ der Name der Python-Variable, in die die Daten geschrieben werden.typeâListeoder Pandasdataframe.namespaceâ der Bereich, in dem die Abfrage ausgefĂŒhrt wird.
ExecuteGlobal
ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) â ĂŒbertrĂ€gt das Globalobjekt an Python.
Argumente:
globalâ der Name des Globals ohne^variableâ der Name der Python-Variable, in die die Daten geschrieben werden.typeâListeoder Pandasdataframe.startâ der erste Subscript des Globals. Pflichtfeld%Integer.endâ der letzte Subscript des Globals. Pflichtfeld%Integer.maskâ die Maskierung der Globalwerte. Die Maske kann kĂŒrzer sein als die Anzahl der Felder im Global (in diesem Fall werden die Felder am Ende ĂŒbersprungen). So formatieren Sie die Maske:+Wert unverĂ€ndert ĂŒbertragen.-Wert ĂŒberspringen.bâ Boolescher Typ (0âFalse, alles andere âTrue).dâ Datum (aus $horolog, auf Windows ab 1970, auf Linux ab 1900).tâ Zeit ($horolog, Sekunden nach Mitternacht).mâ Zeitstempel (im Format JAHRES-MONAT-TAG STUNDE:MINUTE:SEKUNDE).
labelsâ %List der Spaltenbezeichnungen. Das erste Element ist der Name des Unterskripts.namespaceâ der Bereich, in dem die Abfrage ausgefĂŒhrt wird.
ExecuteClass
Wrapper um ExecuteGlobal. Bereitet basierend auf der Klassendefinition den Aufruf vor ExecuteGlobal und ruft ihn auf.
ExecuteClass(class, variable, type, start, end, properties, namespace) â Ăbertragung von Klassendaten in Python.
Argumente:
classâ Klassennamevariableâ der Name der Python-Variable, in die die Daten geschrieben werden.typeâListeoder Pandasdataframe.startâ Start-ID.endâ End-ID.propertiesâ eine Liste (getrennt durch Kommas) von Klasseneigenschaften, die in den Datensatz geladen werden sollen. Masken werden unterstĂŒtzt.*und?StandardmĂ€Ăig â*(alle Eigenschaften). Die Eigenschaft%%CLASSNAMEwird ignoriert.namespaceâ der Bereich, in dem die Abfrage ausgefĂŒhrt wird.
Alle Eigenschaften werden unverĂ€ndert ĂŒbergeben, auĂer den Eigenschaften der Typen %Date, %Uhrzeit, %Boolean und %Zeitstempel â sie werden in die entsprechenden Python-Klassen konvertiert.
ExecuteTable
Wrapper um ExecuteClass. ĂbertrĂ€gt den Tabellennamen in den Klassennamen und ruft ihn auf ExecuteClass. Signatur:
ExecuteTable(table, variable, type, start, end, properties, namespace) â Ăbertragung von Tabellendaten in Python.
Argumente:
Tabelleâ Tabellenname.
Alle anderen Argumente werden unverÀndert inExecuteClass.
Notizen
ExecuteGlobal,ExecuteClassundExecuteTablearbeiten gleich schnell.ExecuteGlobal20-mal schneller alsExecuteQuerybei groĂen DatensĂ€tzen (Ăbertragungszeit ĂŒber >0,01 Sekunden).ExecuteGlobal,ExecuteClassundExecuteTablearbeiten mit Globals mit dieser Struktur:^global(key) = $lb(prop1, prop2, ..., propN)wobeikeyâ ganze Zahl.- FĂŒr
ExecuteGlobal,ExecuteClassundExecuteTableunterstĂŒtzter Wertebereich%Dateentspricht dem Bereichmktimeund hĂ€ngt vom Betriebssystem ab (: 1970-01-01, 1900-01-01, ). Verwenden Sie%Zeitstempelum Daten auĂerhalb dieses Bereichs zu ĂŒbertragen, oder verwenden Sie pandas dataframe, da diese EinschrĂ€nkung nur fĂŒr die Liste gilt. - FĂŒr
ExecuteGlobal,ExecuteClassundExecuteTablealle Argumente auĂer der Datenquelle (Global, Klasse oder Tabelle) und die Variable sind optional.
Beispiele
Testklasse enthĂ€lt eine Methode, die alle Möglichkeiten zur DatenĂŒbertragung demonstriert:
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"
// Allgemeine Argumente
set variable = "df"
set type = "dataframe"
set start = 1
set end = $g(^isc.py.test.PersonD, start)
// Methode 0: ExecuteGlobal ohne Argumente
set sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 0, type)
// Methode 1: ExecuteGlobal mit Argumenten
// Bei der Ăbergabe des Globals werden die Feldnamen manuell festgelegt
// globalKey - Name des Subskripts
set labels = $lb("globalKey", "Name", "DOB", "TS", "RandomTime", "AgeYears", "AgeDecimal", "AgeDouble", "Bool")
// mask enthÀlt ein Element weniger als labels, da "globalKey" der Name des Subskripts ist
// Wir ĂŒberspringen %%CLASSNAME
set mask = "-+dmt+++b"
set sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 1, type, start, end, mask, labels)
// Methode 2: ExecuteClass
set sc = ##class(isc.py.Main).ExecuteClass(class, variable _ 2, type, start, end)
// Methode 3: ExecuteTable
set sc = ##class(isc.py.Main).ExecuteTable(table, variable _ 3, type, start, end)
// Methode 4: ExecuteTable
set sc = ##class(isc.py.Main).ExecuteQuery(query, variable _ 4, type)Rufen Sie die Methode auf do ##class(isc.py.test.Person).Test() um zu sehen, wie alle Methoden zur DatenĂŒbertragung funktionieren.
Hilfsmethoden
GetVariableInfo(variable, serialization, .defined, .type, .length)â Informationen ĂŒber die Variable abrufen: ob sie definiert ist, Klasse und Serialisierungsdauer.GetVariableDefined(variable, .defined)â Ist die Variable definiert?GetVariableType(variable, .type)â Erhalte den Variablenklassentyp.GetStatus()â Erhalte und entferne die letzte Ausnahme auf der Python-Seite.GetModuleInfo(module, .imported, .alias)â Erhalte die Modulvariable und den Importstatus.GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments)â Erhalte Informationen zur Funktion.
InteroperabilitÀt
Sie haben gelernt, wie man das Python Gateway aus dem Terminal aufruft. Jetzt werden wir beginnen, es in der Produktion zu verwenden. Die Grundlage der Interaktion mit Python in diesem Modus ist isc.py.ens.Operation. Es ermöglicht uns:
- Python-Code auszufĂŒhren
- Python-Kontext zu speichern/wiederherzustellen
- Daten aus Python zu laden und abzurufen
Im Grunde genommen ist die Python-Operation eine Abstraktionsschicht ĂŒber isc.py.Main. Die Operation isc.py.ens.Operation ermöglicht die Interaktion mit dem Python-Prozess aus Produkten von InterSystems IRIS. Es werden fĂŒnf Anfragen unterstĂŒtzt:
isc.py.msg.ExecutionRequestzum AusfĂŒhren von Python-Code. Es gibt zurĂŒckisc.py.msg.ExecutionResponsemit dem Ergebnis der AusfĂŒhrung und Werten der angeforderten Variablen.isc.py.msg.StreamExecutionRequestzum AusfĂŒhren von Python-Code. Es gibt zurĂŒckisc.py.msg.StreamExecutionResponsemit dem Ergebnis der AusfĂŒhrung und Werten der angeforderten Variablen. Ăhnlichisc.py.msg.ExecutionRequest, jedoch akzeptiert und liefert Ströme anstelle von Zeichenfolgen.isc.py.msg.QueryRequestzum Ăbermitteln des Ergebnisses der SQL-Abfrage. Es gibt zurĂŒckEns.Response.isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequestzur Ăbertragung von Daten fĂŒr Global-/Klassentabelle. Gibt zurĂŒckEns.Response.isc.py.msg.SaveRequestzum Speichern des Python-Kontextes. Gibt zurĂŒckEns.StringResponsemit der Kontext-ID.isc.py.msg.RestoreRequestzum Wiederherstellen des Python-Kontextes.DarĂŒber hinaus,
isc.py.ens.Operationhat zwei Einstellungen:Initializerâ Auswahl der Klasse, die das Interface implementiertisc.py.init.Abstract. Er kann verwendet werden, um Funktionen, Module, Klassen usw. zu laden. Er wird einmal beim Start des Prozesses ausgefĂŒhrt.PythonLibâ (nur fĂŒr Linux) wenn Sie beim Laden Fehler sehen, setzen Sie seinen Wert auflibpython3.6m.sooder sogar auf den vollstĂ€ndigen Pfad zur Python-Bibliothek.
Erstellung von GeschÀftsprozessen
Es stehen zwei Klassen zur VerfĂŒgung, die die Entwicklung von GeschĂ€ftsprozessen erleichtern:
isc.py.ens.ProcessUtilsermöglicht das Abrufen von Annotationen aus AktivitĂ€ten mithilfe von Variablen.isc.py.util.BPEmulatorermöglicht einfaches Testen von GeschĂ€ftsprozessen mit Python. Es kann einen GeschĂ€ftsprozess (Teile in Python) im aktuellen Prozess ausfĂŒhren.
Variablenersetzung
Alle GeschĂ€ftsprozesse, die von isc.py.ens.ProcessUtils, erben, können die Methode GetAnnotation(name) verwenden. um den AktivitĂ€tsannotationswert anhand seines Namens zu erhalten. Die AktivitĂ€tsannotation kann Variablen enthalten, die auf der Seite von InterSystems IRIS vor der Ăbergabe an Python berechnet werden. Hier ist die Syntax fĂŒr die Variablenersetzung:
${class:method:arg1:...:argN}â Aufruf einer Methode#{expr}â AusfĂŒhrung von Code in ObjectScript.
Ein Beispiel ist im TestgeschĂ€ftsprozess verfĂŒgbar isc.py.test.Process, zum Beispiel in der AktivitĂ€t Korrelationsmatrix: Diagramm: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). In diesem Beispiel:
#{process.WorkDirectory}gibt das WorkDirectory-Attribut des Objekts zurĂŒckprozess, das eine Instanz der Klasse istisc.py.test.Process, d.h. des aktuellen GeschĂ€ftsprozesses.${%PopulateUtils:Integer:1:100}die MethodeGanzzahlder Klasse%PopulateUtils, indem Argumente ĂŒbergeben werden1und100, die eine zufĂ€llige Ganzzahl im Bereich zurĂŒckgeben1...100.
TestgeschÀftsprozess
Testprodukte und der TestgeschĂ€ftsprozess sind standardmĂ€Ăig als Teil des Python Gateway verfĂŒgbar. Um sie zu verwenden:
- FĂŒhren Sie im OS-Terminal aus:
pip install pandas matplotlib seaborn. - FĂŒhren Sie im InterSystems IRIS-Terminal aus:
do ##class(isc.py.test.CannibalizationData).Import()um Testdaten zu fĂŒllen. - Starten Sie das Produkt
isc.py.test.Production. - Senden Sie eine Anfrage vom Typ
Ens.Requestinisc.py.test.Process.
Lassen Sie uns sehen, wie alles zusammen funktioniert. Ăffnen Sie isc.py.test.Process im BPL-Editor:

CodeausfĂŒhrung
Der wichtigste Aufruf ist die AusfĂŒhrung von Python-Code:

Verwendete Anfrage isc.py.msg.ExecutionRequest, hier sind die Eigenschaften:
Codeâ Python-Code.SeparateLinesâ Soll der Code fĂŒr die AusfĂŒhrung in Zeilen unterteilt werden?$c(10)(n) wird verwendet, um Zeilen zu trennen. Beachten Sie, dass es nicht empfohlen wird, die Nachricht auf einmal zu verarbeiten; diese Funktion ist nur zur Verarbeitungdefund Ă€hnlicher mehrzeiliger AusdrĂŒcke gedacht. StandardmĂ€Ăig0.Variablenâ eine durch Kommas getrennte Liste von Variablen, die zur Antwort hinzugefĂŒgt werden.Serializationâ Wie man die Variablen serialisiert, die wir zurĂŒckgeben möchten. Optionen:Str,zur Speicherung einfacher Objekte und fĂŒr Debugging.,JSON,zur Speicherung von Objekten.undDill, standardmĂ€ĂigStr.
In unserem Fall setzen wir nur die Eigenschaft Code, sodass alle anderen Eigenschaften die Standardwerte verwenden. Wir setzen sie durch den Aufruf process.GetAnnotation("Import pandas"), der zur Laufzeit die Annotation nach der AusfĂŒhrung des Variablenersatzes zurĂŒckgibt. Am Ende wird der Code import pandas as pd an Python ĂŒbergeben. GetAnnotation kann nĂŒtzlich sein, um mehrzeilige Python-Skripte zu erhalten, aber es gibt keine EinschrĂ€nkungen fĂŒr diese Methode zur Codegewinnung. Sie können die Eigenschaft Code auf jede fĂŒr Sie geeignete Weise setzen.
Abrufen von Variablen
Ein weiterer interessanter Aufruf unter Verwendung von isc.py.msg.ExecutionRequest â Korrelationsmatrix: Tabellarisch:

Er berechnet die Korrelationsmatrix in Python und extrahiert die Variable corrmat zurĂŒck in InterSystems IRIS im JSON-Format, indem er die Anfrageeigenschaften festlegt:
Variablen:"corrmat"Serialization:"JSON"
Wir können die Ergebnisse in Visual Trace sehen:

Und wenn wir diesen Wert in BPs benötigen, kann er so abgerufen werden: callresponse.Variables.GetAt("corrmat").
DatenĂŒbergabe
Als NĂ€chstes sprechen wir ĂŒber die DatenĂŒbertragung von InterSystems IRIS nach Python, alle DatenĂŒbertragungsanfragen realisieren das Interface isc.py.msg.DataRequest, das die folgenden Eigenschaften bereitstellt:
Variableâ die Python-Variable, in die die Daten geschrieben werden.Typeâ der Typ der Variable:dataframe(pandas dataframe) oderListe.Namespaceâ der Bereich, aus dem wir die Daten holen. Das Paketisc.pymuss in diesem Bereich verfĂŒgbar sein. Es kann sich um einen Bereich ohne UnterstĂŒtzung fĂŒr Produkte handeln.
Auf Basis dieses Interfaces wurden 4 Klassen von Anfragen implementiert:
isc.py.msg.QueryRequestâ setzen Sie die EigenschaftQueryfĂŒr die Ăbertragung der SQL-Abfrage.isc.py.msg.ClassRequestâ setzen Sie die EigenschaftClassfĂŒr die Ăbertragung der Klassendaten.isc.py.msg.TableRequestâ die Eigenschaft setzenTabellefĂŒr die Ăbertragung von Tabellendaten.isc.py.msg.GlobalRequestâ die Eigenschaft setzenGlobalfĂŒr die Ăbertragung von Globaldaten.
Im Testprozess sehen Sie die AktivitÀt RAW, wobei isc.py.msg.QueryRequest wird in Aktion gezeigt.

Speichern/Wiederherstellen des Python-Kontexts
SchlieĂlich können wir den Python-Kontext in InterSystems IRIS speichern, dazu senden wir isc.py.msg.SaveRequest mit Argumenten:
Maskeâ Es werden nur Variablen gespeichert, die der Maske entsprechen. UnterstĂŒtzt werden*und?. Beispiel:"Daten*, Figur?". StandardmĂ€Ăig*.MaximallĂ€ngeâ Maximale LĂ€nge der gespeicherten Variablen. Wenn die Serialisierung der Variable lĂ€nger ist, wird sie ignoriert. Setzen Sie 0, um Variablen beliebiger LĂ€nge zu erhalten. StandardmĂ€Ăig$$$MaxStringLength.Nameâ Kontextname (optional).Beschreibungâ Kontextbeschreibung (optional).
Gibt zurĂŒck Ens.StringResponse mit Id des gespeicherten Kontexts. Im Testprozess ĂŒberprĂŒfen Sie die AktivitĂ€t Kontext speichern.
Entsprechende Anfrage isc.py.msg.RestoreRequest lÀdt den Kontext aus InterSystems IRIS in Python:
ContextIdâ Kontext-ID.Clearâ den Kontext vor der Wiederherstellung zurĂŒcksetzen.
Jupyter Notebook
â Dies ist eine Open-Source-Webanwendung, die es ermöglicht, Notebooks zu erstellen, die Code, Visualisierungen und Text enthalten, und diese zu veröffentlichen. Der Python Gateway ermöglicht die Anzeige und Bearbeitung von BPL-Prozessen in Form von Jupyter Notebooks. Bitte beachten Sie, dass derzeit der Standard-Python 3 Executor verwendet wird.
Diese Erweiterung geht davon aus, dass die Anmerkungen Python-Code enthalten und AktivitĂ€tsnamen als vorhergehende Ăberschriften verwenden. Jetzt können Sie GeschĂ€ftsprozesse mit PythonGateway im Jupyter Notebook entwickeln. Folgendes ist möglich:
- Neue GeschÀftsprozesse erstellen
- GeschÀftsprozesse löschen
- Neue AktivitÀten erstellen
- AktivitÀten Àndern
- AktivitÀten löschen
Hier . Und einige Screenshots:
Prozess-Explorer

Prozess-Editor

Installation von
- Sie benötigen InterSystems IRIS 2019.2 oder höher.
- Installieren Sie PythonGateway v0.8 oder höher (nur erforderlich
isc.py.util.Jupyter,isc.py.util.JupyterCheckpointsundisc.py.ens.ProcessUtils). - Aktualisieren Sie den ObjectScript-Code aus dem Repository.
- FĂŒhren Sie
do ##class(isc.py.util.Jupyter).Install()aus und folgen Sie den Anweisungen.
.
Fazit
MLToolkit â ein Set von Werkzeugen, das darauf abzielt, Modelle und Transaktionsumgebungen zu vereinen, damit die erstellten Modelle leicht in Ihre GeschĂ€ftsprozesse integriert werden können. Das Python Gateway ist Teil von MLToolkit und ermöglicht die Integration mit der Programmiersprache Python, sodass Sie beliebige in Python entwickelte Machine-Learning-Algorithmen orchestrieren können (die Hauptumgebung fĂŒr viele Data Scientists) und zahlreiche vorgefertigte Bibliotheken nutzen können, um schnell anpassbare, automatisierte analytische AI/ML-Lösungen auf der InterSystems IRIS-Plattform zu erstellen.
Links
MLToolkit
Die MLToolkit-Nutzergruppe ist ein privates GitHub-Repository, das als Teil der Unternehmens-GitHub-Organisation InterSystems erstellt wurde. Diese Gruppe richtet sich an externe Nutzer, die Komponenten von MLToolkit, einschlieĂlich des Python Gateways, installieren, erforschen oder bereits verwenden. In der Gruppe sind mehrere umgesetzte AnwendungsfĂ€lle (mit Quellcode und Testdaten) aus den Bereichen Marketing, Produktion, Medizin und vielen anderen Branchen verfĂŒgbar. Um der Nutzergruppe ML Toolkit beizutreten, senden Sie bitte eine kurze E-Mail an die folgende Adresse: und geben Sie in Ihrer E-Mail folgende Informationen an:
- GitHub-Benutzername
- Organisation (in der Sie arbeiten oder studieren)
- Position (Ihre aktuelle Position in Ihrer Organisation oder "Student" oder "Freelancer").
- Land
An alle, die den Artikel gelesen und Interesse an den Möglichkeiten von InterSystems IRIS als Plattform fĂŒr die Entwicklung oder das Hosting von Mechanismen fĂŒr kĂŒnstliche Intelligenz und maschinelles Lernen haben, bieten wir an, relevante Szenarien fĂŒr Ihr Unternehmen zu diskutieren. Wir analysieren gerne die BedĂŒrfnisse Ihres Unternehmens und definieren gemeinsam einen Aktionsplan; die E-Mail-Adresse unseres Expertenteams fĂŒr AI/ML lautet: .
Quelle: habr.com
