Dieser Artikel ist dem Python Gateway gewidmet â einem Open-Source-Community-Projekt fĂŒr die Datenplattform InterSystems IRIS. Dieses Projekt ermöglicht es, beliebige Machine-Learning-Algorithmen, die in Python (der Hauptumgebung fĂŒr viele Data Scientists) erstellt wurden, zu orchestrieren und zahlreiche verfĂŒgbare Bibliotheken zu verwenden, um schnell adaptive, automatisierte analytische AI/ML-Lösungen auf der InterSystems IRIS-Plattform zu erstellen. In diesem Artikel zeige ich, wie InterSystems IRIS Prozesse in Python orchestrieren, Daten effizient bidirektional ĂŒbertragen und intelligente GeschĂ€ftsprozesse erstellen kann.
Plan
- EinfĂŒhrung.
- Werkzeuge.
- Installation.
- API.
- InteroperabilitÀt.
- Jupyter Notebook.
- Fazit.
- Links.
- MLToolkit.
EinfĂŒhrung
Python ist eine hochgradig flexible Programmiersprache, die auf die Steigerung der EntwicklerproduktivitÀt und die Lesbarkeit des Codes abzielt. In dieser Artikelreihe werde ich die Möglichkeiten der Anwendung von Python auf der InterSystems IRIS-Plattform erlÀutern, wobei der Schwerpunkt dieses Artikels auf der Verwendung von Python als Sprache zur Erstellung und Anwendung von Machine-Learning-Modellen liegt.
Machine Learning (ML) ist eine Klasse von Methoden der kĂŒnstlichen Intelligenz, bei denen nicht direkt eine Aufgabe gelöst wird, sondern das Lernen wĂ€hrend der Lösung vieler Ă€hnlicher Aufgaben im Vordergrund steht.
Maschinenlernalgorithmen und -modelle werden immer verbreiteter. Es gibt viele GrĂŒnde dafĂŒr, aber sie lassen sich auf ZugĂ€nglichkeit, Einfachheit und das Erzielen praktischer Ergebnisse zurĂŒckfĂŒhren. Ist Clusterbildung oder sogar neuronales Netzmodellierung eine neue Technologie?
NatĂŒrlich nicht, aber heutzutage ist es nicht mehr notwendig, Hunderte von Tausenden Zeilen Code 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 wir nicht ĂŒber vollstĂ€ndig GUI-orientierte AI/ML-Werkzeuge verfĂŒgen, beobachten wir den gleichen Fortschritt bei vielen anderen Klassen von Informationssystemen, zum Beispiel BI (von der Codierung bis zur Nutzung von Frameworks und GUI-orientierten konfigurierbaren Lösungen), auch in den Werkzeugen zur Erstellung von AI/ML. Wir haben die Phase des Programmierens hinter uns gelassen und nutzen heute Frameworks zur Erstellung und Schulung von Modellen.
Weitere Verbesserungen, wie die Möglichkeit, vortrainierte Modelle zu verbreiten, bei denen der Endbenutzer nur das Training des Modells mit seinen spezifischen Daten abschlieĂen muss, erleichtern den Einstieg in die Anwendung von maschinellem Lernen. Diese Fortschritte erleichtern das Lernen von maschinellem Lernen sowohl fĂŒr Fachleute als auch fĂŒr Unternehmen im Allgemeinen erheblich.
Andererseits sammeln wir immer mehr Daten. Dank einer einheitlichen Datenplattform wie InterSystems IRIS kann all diese Information sofort aufbereitet und als Ausgangsdaten fĂŒr Modelle des maschinellen Lernens verwendet werden.
Mit dem Ăbergang in die Cloud wird der Start von AI/ML-Projekten einfacher als je zuvor. Wir können nur die Ressourcen nutzen, die wir benötigen. DarĂŒber hinaus können wir dank der Parallelisierung, die von Cloud-Plattformen angeboten wird, Zeit sparen.
Aber wie sieht es mit den Ergebnissen aus? Hier wird es komplizierter. Es gibt viele Werkzeuge zum Aufbau von Modellen, ĂŒber die ich im Folgenden sprechen werde. Ein gutes Modell zu erstellen ist nicht einfach, aber was kommt dann? Die Erzielung von Nutzen aus der Nutzung des Modells durch das Unternehmen ist ebenfalls eine keine triviale Aufgabe. Der Kern des Problems liegt in der Trennung von analytischen und transaktionalen Lasten sowie den Datenmodellen. Wenn wir ein Modell trainieren, tun wir dies normalerweise mit historischen Daten. Aber der Platz fĂŒr das gebaute Modell liegt in der transaktionalen Datenverarbeitung. Was nĂŒtzt das beste Modell zur Erkennung betrĂŒgerischer Transaktionen, wenn wir es nur 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 neue eingehende Daten anwenden, damit unsere GeschĂ€ftsprozesse gemÀà den Vorhersagen des Modells agieren können.
Das ML Toolkit ist ein Satz von Werkzeugen, dessen Ziel es ist, genau dies zu erreichen: Modelle und die transaktionale Umgebung zu verbinden, damit die erstellten Modelle direkt in Ihren GeschÀftsprozessen eingesetzt werden können. Der Python Gateway ist Teil des ML Kit und bietet eine Integration mit der Programmiersprache Python (Àhnlich wie der R Gateway, der als Teil des ML Kit die Integration mit der Programmiersprache R ermöglicht).
Werkzeug
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, hochgradig einsetzbare Programmiersprache. Der Hauptvorteil dieser Sprache ist die umfangreiche Bibliothek an mathematischen, ML- und AI-Bibliotheken. Ăhnlich wie bei ObjectScript handelt es sich um eine objektorientierte Sprache, aber alles wird dynamisch und nicht statisch definiert. AuĂerdem ist alles ein Objekt. SpĂ€tere Artikel setzen ein flĂŒchtiges VerstĂ€ndnis der Sprache voraus. Wenn Sie mit dem Lernen beginnen möchten, empfehle ich Ihnen, mit .
- FĂŒr unsere spĂ€teren Ăbungen installieren Sie .
- IDE: Ich verwende , aber generell gibt es auch andere. . Wenn Sie Atelier verwenden, gibt es ein Eclipse-Plugin fĂŒr Python-Entwickler. Wenn Sie VS Code verwenden, gibt es eine Erweiterung fĂŒr Python.
- Notebook: Anstelle einer IDE können Sie Ihre Skripte in Online-Notebooks schreiben und teilen. Das beliebteste unter ihnen ist .
Bibliotheken
Hier ist eine (unvollstĂ€ndige) Liste von Bibliotheken fĂŒr maschinelles Lernen:
- â ein grundlegendes Paket fĂŒr prĂ€zise Berechnungen.
- â hochleistungsfĂ€hige Datenstrukturen und Datenanalysetools.
- â Erstellung von Diagrammen.
- â Datenvisualisierung, die auf matplotlib basiert.
- â Methoden fĂŒr maschinelles Lernen.
- â Algorithmen fĂŒr maschinelles Lernen innerhalb der Gradienten-Boosting-Methodologie.
- â NLP.
- â neuronale Netzwerke.
- â Plattform zur Erstellung von Modellen fĂŒr maschinelles Lernen.
- â Plattform zur Erstellung von Modellen fĂŒr maschinelles Lernen, die auf Python ausgerichtet ist.
- â PMML aus verschiedenen Modellen.
AI/ML-Technologien ermöglichen es, GeschĂ€fte effektiver und anpassungsfĂ€higer zu gestalten. DarĂŒber hinaus werden diese Technologien heute einfacher entwickelt und umgesetzt. Beginnen Sie mit dem Lernen ĂŒber AI/ML-Technologien und wie diese Ihrer Organisation beim Wachsen helfen können.
Installation
Es gibt mehrere Möglichkeiten, Python Gateway zu installieren und zu nutzen:
- 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 zum Herunterladen des Codes ist . Sie enthÀlt getestete stabile Releases, nehmen Sie einfach die letzte Version. Momentan ist dies 0.8, aber im Laufe der Zeit werden neue folgen. Klonen Sie nicht das Repository, laden Sie die neueste Version herunter.
dem Betriebssystem
Wenn Sie das Python Gateway auf einem Betriebssystem installieren, mĂŒssen Sie zuerst (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 Namensraum mit Produkteinheiten. Falls Sie möchten, dass ein vorhandener Namensraum Produkteinheiten unterstĂŒtzt, fĂŒhren Sie aus:write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1). - FĂŒgen Sie hinzu in den Ordner
binIhres InterSystems IRIS-Instanz. Die Bibliotheksdatei sollte unter dem Pfad verfĂŒgbar sein, der zurĂŒckgegeben wird vonwrite ##class(isc.py.Callout).GetLib().
Windows
- Stellen Sie sicher, dass die Umgebungsvariable
PYTHONHOMEauf Python 3.6.7 zeigt. - Stellen Sie sicher, dass die Systemumgebungsvariable
PATHdie Variable enthÀltPYTHONHOME(oder das Verzeichnis, auf das sie zeigt).
Linux (Debian/Ubuntu)
- ĂberprĂŒfen Sie, dass die Umgebungsvariable
PATHenthÀlt/usr/libund/usr/lib/x86_64-linux-gnu. Verwenden Sie die Datei/etc/environmentzum Setzen der Umgebungsvariablen. - Im Falle von Fehlern
undefined symbol: _Py_TrueStructsetzen Sie die EinstellungPythonLib. Auch im gibt es einen Abschnitt zur Fehlersuche.
Mac
- Derzeit wird nur Python 3.6.7 von unterstĂŒtzt. ĂberprĂŒfen Sie die Variable
PATH.
Wenn Sie Umgebungsvariablen geÀndert haben, starten Sie Ihr Produkt von InterSystems neu.
Docker
Die Nutzung von Containern hat eine Reihe von Vorteilen:
- PortabilitÀt
- EffektivitÀt
- Isolierung
- Leichtigkeit
- UnverÀnderlichkeit
Schauen Sie sich diese fĂŒr weitere Informationen zur Verwendung von Docker mit InterSystems-Produkten an.
Alle Builds des Python Gateways 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
FĂŒhren Sie im Wurzelverzeichnis des Repositories aus: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
StandardmĂ€Ăig wird das Image auf Basis des Images store/intersystems/iris-community:2019.4.0.383.0, aber Sie können dies Ă€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 InterSystems IRIS Community Edition basierendes Image verwenden, mĂŒssen Sie den SchlĂŒssel möglicherweise nicht angeben.
Kommentare
- Testprozess
isc.py.test.ProcessSpeichert eine Reihe von Bildern im temporÀren Verzeichnis. Möglicherweise möchten Sie diesen Pfad auf ein gemountetes Verzeichnis Àndern. Dazu bearbeiten Sie die EinstellungWorkingDirindem Sie das gemountete Verzeichnis angeben. - Zugriff auf das Terminal erhalten Sie mit:
docker exec -it irispy sh. - Zugang zum Systemverwaltungsportal mit Login
SuperUser/SYS. - Um den Container zu stoppen, fĂŒhren Sie aus:
docker stop irispy && docker rm --force irispy.
ĂberprĂŒfung der Installation
Nachdem Sie das Python Gateway installiert haben, sollten Sie ĂŒberprĂŒfen, ob es funktioniert. FĂŒhren Sie diesen Code im Terminal von InterSystems IRIS aus:
set sc = ##class(isc.py.Callout).Setup()
set sc = ##class(isc.py.Main).SimpleString("x='HELLO'", "x", , .var).
write varEs sollte das Folgende ausgegeben werden HELLO â der Wert der Python-Variablen x. Wenn der zurĂŒckgegebene Status sc ein Fehler oder var leer ist, ĂŒberprĂŒfen Sie .
API
Das Python Gateway ist installiert, und Sie haben sichergestellt, dass es funktioniert. Es ist Zeit, es zu nutzen!
Das Hauptinterface zu Python ist isc.py.Main. Es bietet die folgenden Gruppen von Methoden (alle geben zurĂŒck %Status):
- CodeausfĂŒhrung
- DatenĂŒbertragung
- Hilfsmethoden
CodeausfĂŒhrung
Diese Methoden ermöglichen es, beliebigen Python-Code auszufĂŒhren.
SimpleString
SimpleString â dies ist die Hauptmethode. Sie nimmt 4 optionale Argumente an:
codeâ der auszufĂŒhrende Code. Zeilenumbruchzeichen:$c(10).returnVariableâ der Name der Variable fĂŒr die RĂŒckgabe.serializationâ wie zu serialisierenreturnVariable. 0 â string (Standard), 1 â repr.resultâ ByRef-Verweis auf die Variable, in die der Wert geschrieben wirdreturnVariable.
Vorhin haben wir ausgefĂŒhrt:
set sc = ##class(isc.py.Main).SimpleString("x='HELLO'", "x", , .var).In diesem Beispiel weisen wir der Python-Variable x system-id D Hallo zu und möchten den Wert der Python-Variable x in eine ObjectScript-Variable zurĂŒckgeben var.
ExecuteCode
ExecuteCode ist eine sicherere und weniger eingeschrÀnkte Alternative SimpleString.
Strings in der InterSystems IRIS-Plattform sind auf 3.641.144 Zeichen begrenzt, und wenn Sie eine lĂ€ngere Codezeile ausfĂŒhren möchten, mĂŒssen Sie Streams verwenden.
Es werden zwei Argumente angenommen:
codeâ einen Python-Code-String oder -Stream zur AusfĂŒhrung.variableâ (optional) weist das Ergebnis der AusfĂŒhrungcodedieser Python-Variablen zu.
Verwenden Sie:
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-Variable y.
DatenĂŒbertragung
Ăbertragen Sie Daten nach Python und zurĂŒck.
Python -> InterSystems IRIS
Es gibt 4 Möglichkeiten, den Wert einer Python-Variable in InterSystems IRIS zu erhalten, je nach der benötigten Serialisierung:
StringfĂŒr grundlegende Datentypen und Debugging.Reprzur Speicherung einfacher Objekte und zur Fehlerbehebung.JSONfĂŒr einfaches Manipulieren von Daten auf der Seite von InterSystems IRIS.Picklezur Speicherung von Objekten.
Diese Methoden ermöglichen es, Variablen aus Python als Strings oder Streams zu erhalten.
GetVariable(variable, serialization, .stream, useString)â abrufenserializationVariablevariableinstream. WennuseStringgleich 1 und die Serialisierung in einen String gespeichert wird, wird ein String und kein Stream zurĂŒckgegeben.GetVariableJson(variable, .stream, useString)â erhalten Sie die JSON-Serialisierung der Variable.GetVariablePickle(variable, .stream, useString, useDill)- erhalten Sie die Pickle- (oder Dill-)Serialisierung der Variable.
Versuchen wir, unsere Variable abzurufen. y.
set sc = ##class(isc.py.Main).GetVariable("y", , .val, 1)
write val
>6InterSystems IRIS -> Python
Laden von Daten aus InterSystems IRIS in Python.
ExecuteQuery(query, variable, type, namespace)â erstellt einen Datensatz (pandasdataframeoderdie Umwandlung von numerischen und textuellen Daten in die Formate) aus der SQL-Abfrage und weist ihn einer Python-Variable zu.variable. Das Paketisc.pymuss im Bereich verfĂŒgbar sein,Namespaceâ hier wird die Abfrage ausgefĂŒhrt.ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace)â lĂ€dt Daten aus dem Globalenglobalvom Subscriptstartbisendin Python als Variable vom Typtype:die Umwandlung von numerischen und textuellen Daten in die Formate, oder pandasdataframe. Eine Beschreibung der optionalen Argumentemaskandlabelsist in der Dokumentation der Klasse und im Repository verfĂŒgbar. .ExecuteClass(class, variable, type, start, end, properties, namespace)â lĂ€dt Klassendatenclassvom IDstartbisendin Python als Variable vom Typtype:die Umwandlung von numerischen und textuellen Daten in die Formate, oder pandasdataframe.propertiesâ eine Liste (Trennzeichen: Komma) von Klassenattributen, die in den Datensatz geladen werden sollen. Masken werden unterstĂŒtzt.*und?. StandardmĂ€Ăig â*(alle Attribute). Attribute%%CLASSNAMEwerden ignoriert.ExecuteTable(table, variable, type, start, end, properties, namespace)â lĂ€dt TabellendatenTabellevom IDstartbisendin Python.
ExecuteQuery â ist universell (jeder korrekte SQL-Befehl wird an Python ĂŒbergeben). Allerdings ExecuteGlobal und seine UmhĂŒllungen ExecuteClass und ExecuteTable arbeiten unter einer Reihe von EinschrĂ€nkungen. Sie sind viel schneller (3-5 Mal schneller als der ODBC-Treiber und 20 Mal schneller ExecuteQuery). Weitere Informationen finden Sie in .
Alle diese Methoden unterstĂŒtzen die DatenĂŒbertragung aus jedem Bereich. Das Paket isc.py muss im Zielbereich verfĂŒgbar sein.
ExecuteQuery
ExecuteQuery(request, variable, type, namespace) â Ăbertragung der Ergebnisse jeder korrekten SQL-Abfrage nach Python. Dies ist die langsamste Methode zur DatenĂŒbertragung. Verwenden Sie sie, wenn ExecuteGlobal und seine UmhĂŒllungen nicht verfĂŒgbar sind.
Argumente:
queryâ SQL-Abfrage.variableâ der Name der Python-Variable, in die die Daten geschrieben werden.typeâdie Umwandlung von numerischen und textuellen Daten in die Formateoder Pandasdataframe.Namespaceâ der Bereich, in dem die Abfrage ausgefĂŒhrt wird.
ExecuteGlobal
ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) â Ăbertragung des Globals in Python.
Argumente:
globalâ der Name des Globals ohne^variableâ der Name der Python-Variable, in die die Daten geschrieben werden.typeâdie Umwandlung von numerischen und textuellen Daten in die Formateoder Pandasdataframe.startâ das erste Subscript des Globals. Erforderlich.%Integer.endâ das letzte Subscript des Globals. Erforderlich.%Integer.maskâ Maskenwerte des Globals. 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 so ĂŒbergeben, wie er ist.-Wert ĂŒberspringen.bâ Boolescher Typ (0âFalsch, alles andere ist âWahr).dâ Datum (ab $horolog, unter Windows ab 1970, unter Linux ab 1900).tâ Zeit ($horolog, Sekunden nach Mitternacht).mâ Zeitstempel (String im FORMAT JAHR-MONAT-TAG STUNDE:MINUTE:SEKUNDE).
labelsâ %Liste der Spaltennamen. Erstes Element â Name des Subskripts.Namespaceâ der Bereich, in dem die Abfrage ausgefĂŒhrt wird.
ExecuteClass
Wrapper ĂŒber ExecuteGlobal. Bereitet den Aufruf basierend auf der Klassendefinition 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âdie Umwandlung von numerischen und textuellen Daten in die Formateoder Pandasdataframe.startâ Start-ID.endâ End-IDpropertiesâ eine Liste (Trennzeichen: Komma) von Klassenattributen, die in den Datensatz geladen werden sollen. Masken werden unterstĂŒtzt.*und?. StandardmĂ€Ăig â*(alle Attribute). Attribute%%CLASSNAMEwerden ignoriert.Namespaceâ der Bereich, in dem die Abfrage ausgefĂŒhrt wird.
Alle Eigenschaften werden so ĂŒbergeben, wie sie sind, auĂer den Eigenschaften der Typen te, %Zeit, %Boolean und %Zeitstempel â sie werden in die entsprechenden Python-Klassen konvertiert.
ExecuteTable
Wrapper ĂŒber ExecuteClass. Translatiert den Tabellennamen in den Klassennamen und ruft ExecuteClassauf. Signatur:
ExecuteTable(table, variable, type, start, end, properties, namespace) â Ăbertragung von Tabellendaten in Python.
Argumente:
Tabelleâ Tabellenname.
Alle anderen Argumente werden so ĂŒbergeben, wie sie sind, inExecuteClass.
Notizen
ExecuteGlobal,ExecuteClassundExecuteTablearbeiten gleich schnell.ExecuteGlobal20 Mal schneller alsExecuteQuerybei groĂen DatensĂ€tzen (Ăbertragungszeit mehr als >0.01 Sekunden).ExecuteGlobal,ExecuteClassundExecuteTablearbeiten mit Globals dieser Struktur:^global(key) = $lb(prop1, prop2, ..., propN)wokeyâ ganze Zahl.- FĂŒr
ExecuteGlobal,ExecuteClassundExecuteTableunterstĂŒtzter Wertebereichteentspricht dem Bereichmktimeund hĂ€ngt vom OS ab (: 1970-01-01, 1900-01-01, ). Verwenden Sie%Zeitstempelum Daten auĂerhalb dieses Bereichs zu ĂŒbergeben oder verwenden Sie ein pandas dataframe, da dies nur eine EinschrĂ€nkung fĂŒr die Liste ist. - FĂŒr
ExecuteGlobal,ExecuteClassundExecuteTableAlle Argumente, auĂer der Datenquelle (Global, Klasse oder Tabelle) und der Variablen, sind optional.
Beispiele
Testklasse enthĂ€lt eine Methode, die alle Optionen 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 Ă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
// %%CLASSNAME wird ĂŒbersprungen
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 LĂ€nge der Serialisierung.GetVariableDefined(variable, .defined)â ob die Variable definiert ist.GetVariableType(variable, .type)â die Klasse der Variable abrufen.GetStatus()â das letzte Ausnahmeereignis auf der Python-Seite abrufen und löschen.GetModuleInfo(module, .imported, .alias)â die Modulvariable und den Importstatus abrufen.GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments)â Informationen ĂŒber die Funktion abrufen.
InteroperabilitÀt
Sie haben gelernt, das Python Gateway von der Konsole aus aufzurufen. Jetzt beginnen wir, 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 in Python zu laden und abzurufen
Im Prinzip ist die Python-Operation eine Wrapper ĂŒber isc.py.Main. Die Operation isc.py.ens.Operation ermöglicht die Interaktion mit dem Python-Prozess aus InterSystems IRIS. FĂŒnf Anfragen werden unterstĂŒtzt:
isc.py.msg.ExecutionRequestzur AusfĂŒhrung von Python-Code. Gibt zurĂŒckisc.py.msg.ExecutionResponsemit dem Ergebnis der AusfĂŒhrung und den Werten der angeforderten Variablen.isc.py.msg.StreamExecutionRequestzur AusfĂŒhrung von Python-Code. Gibt zurĂŒckisc.py.msg.StreamExecutionResponsedas Ergebnis der AusfĂŒhrung und die Werte der angeforderten Variablen. Entsprichtisc.py.msg.ExecutionRequest, nimmt jedoch Streams anstelle von Strings entgegen und zurĂŒck.isc.py.msg.QueryRequestfĂŒr die Ăbertragung des Ergebnisses der AusfĂŒhrung von SQL-Abfragen. Gibt zurĂŒckEns.Response.isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequestfĂŒr die Ăbertragung von globalen/kategorischen/tabellarischen Daten. 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.AuĂerdem,
isc.py.ens.Operationhat zwei Einstellungen:Initializerâ Auswahl der Klasse, die das Interface implementiertisc.py.init.Abstract. Sie kann verwendet werden, um Funktionen, Module, Klassen usw. zu laden. Sie wird einmal beim Start des Prozesses ausgefĂŒhrt.PythonLibâ (nur fĂŒr Linux) Wenn Sie beim Laden Fehler sehen, setzen Sie den 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 Extrahieren von Annotationen aus AktivitĂ€ten mit Platzhaltern fĂŒr Variablen.isc.py.util.BPEmulatorerleichtert das Testen von GeschĂ€ftsprozessen mit Python. Es kann GeschĂ€ftsprozesse (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 Wert der AktivitĂ€tsannotation nach ihrem Namen zu erhalten. Die AktivitĂ€tsannotation kann Variablen enthalten, die auf der InterSystems IRIS-Seite berechnet werden, bevor sie an Python ĂŒbergeben werden. Hier ist die Syntax fĂŒr Platzhalter von Variablen:
${class:method:arg1:...:argN}â Methodenaufruf#{expr}â Code in ObjectScript ausfĂŒhren.
Ein Beispiel findet sich im TestgeschÀftsprozess isc.py.test.Process, zum Beispiel in der AktivitÀt Korrelationsmatrix: Grafik: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). In diesem Beispiel:
#{process.WorkDirectory}gibt das Attribut WorkDirectory des Objekts zurĂŒckprozess, welches eine Instanz der Klasse istisc.py.test.Process, also des aktuellen GeschĂ€ftsprozesses.${%PopulateUtils:Integer:1:100}anschauen, können wir sehen, dass das DrĂŒcken der SchaltflĂ€cheIntegerKlasse%PopulateUtils, wobei Argumente ĂŒbergeben werden1und100, die eine zufĂ€llige ganze Zahl im Bereich zurĂŒckgeben1...100.
TestgeschÀftsprozess
Testprodukt und TestgeschĂ€ftsprozess sind standardmĂ€Ăig als Teil des Python-Gateways verfĂŒgbar. Um sie zu verwenden:
- FĂŒhren Sie im Betriebssystem-Terminal aus:
pip install pandas matplotlib seaborn. - FĂŒhren Sie im InterSystems IRIS-Terminal aus:
do ##class(isc.py.test.CannibalizationData).Import()zum AusfĂŒllen von Testdaten. - FĂŒhren Sie das Produkt aus
isc.py.test.Production. - Senden Sie eine Anfrage des Typs
Ens.Requestinisc.py.test.Process.
Schauen wir uns an, wie alles zusammenarbeitet. Ăffnen Sie isc.py.test.Process im BPL-Editor:

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

Es wird die Anfrage verwendet isc.py.msg.ExecutionRequest, hier sind ihre Eigenschaften:
Codeâ Python-Code.SeparateLinesâ ob der Code zeilenweise ausgefĂŒhrt werden soll.$c(10)(n) wird verwendet, um Zeilen zu trennen. Beachten Sie, dass es NICHT empfohlen wird, die Nachricht auf einmal zu verarbeiten; diese Funktion dient nur der Verarbeitung.defund Ă€hnlichen mehrzeiligen AusdrĂŒcken. StandardmĂ€Ăig0.Variablenist eine durch Kommas getrennte Liste von Variablen, die in die Antwort eingefĂŒgt werden sollen.Serialisierungâ Wie man die Variablen serialisiert, die wir zurĂŒckgeben möchten. Optionen:Str,Repr,JSON,PickleundDill, standardmĂ€ĂigStr.
In unserem Fall setzen wir nur die Eigenschaft Code, sodass alle anderen Eigenschaften Standardwerte verwenden. Wir setzen sie, indem wir process.GetAnnotation("Import pandas"), die zur Laufzeit die Annotation nach dem Ersetzen der Variablen zurĂŒckgibt. Am Ende wird der Code import pandas as pd nach Python ĂŒbergeben. GetAnnotation kann nĂŒtzlich sein, um mehrzeilige Python-Skripte zu erhalten, aber es gibt keine EinschrĂ€nkungen fĂŒr diese Art der Codierung. Sie können die Eigenschaft Code auf jede fĂŒr Sie bequeme Weise festlegen.
Erhalten von Variablen
Ein weiterer interessanter Aufruf unter Verwendung von isc.py.msg.ExecutionRequest â Korrelationsmatrix: Tabellarisch:

Er berechnet die Korrelationsmatrix auf der Python-Seite und extrahiert die Variable corrmat zurĂŒck nach InterSystems IRIS im JSON-Format, indem die Abfrage-Eigenschaften festgelegt werden:
Variablen:"corrmat"Serialisierung:"JSON"
Wir können die Ergebnisse im Visual Trace sehen:

Und wenn wir diesen Wert in BP benötigen, können wir ihn so abrufen: callresponse.Variables.GetAt("corrmat").
DatenĂŒbertragung
Als nĂ€chstes sprechen wir ĂŒber die Ăbertragung von Daten von InterSystems IRIS nach Python. Alle DatenĂŒbertragungsanfragen implementieren das Interface isc.py.msg.DataRequest, das die folgenden Eigenschaften bereitstellt:
Variableâ die Python-Variable, in die die Daten geschrieben werden.Typâ Typ der Variable:dataframe(pandas dataframe) oderdie Umwandlung von numerischen und textuellen Daten in die Formate.Namespaceâ Bereich, aus dem wir Daten erhalten. Das Paketisc.pymuss in diesem Bereich verfĂŒgbar sein. Dies kann ein Bereich ohne UnterstĂŒtzung fĂŒr Produkte sein.
Basierend auf diesem Interface sind 4 Klassenanfragen implementiert:
isc.py.msg.QueryRequestâ setzen Sie die EigenschaftAbfragezum Ăbertragen von SQL-Abfragen.isc.py.msg.ClassRequestâ setzen Sie die EigenschaftKlassezum Ăbertragen von Klassendaten.isc.py.msg.TableRequestâ setzen Sie die EigenschaftTabellezum Ăbertragen von Tabellendaten.isc.py.msg.GlobalRequestâ setzen Sie die EigenschaftGlobalzum Ăbertragen von Globaldaten.
Sehen Sie sich im Testprozess die AktivitÀt an RAWisc.py.msg.QueryRequest wird in Aktion gezeigt.

Speichern/Wiederherstellen des Python-Kontexts
SchlieĂlich können wir den Python-Kontext in InterSystems IRIS speichern. Um dies zu tun, senden wir isc.py.msg.SaveRequest mit den Argumenten:
Maskeâ Nur Variablen, die der Maske entsprechen, werden gespeichert. UnterstĂŒtzt werden*und?. Beispiel:"Data*, Figure?". StandardmĂ€Ăig erfolgt*.MaxLengthâ Maximale LĂ€nge der gespeicherten Variable. 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â Name des Kontexts (optional).Beschreibungâ Beschreibung des Kontexts (optional).
Gibt zurĂŒck Ens.StringResponse c Id des gespeicherten Kontexts. Achten Sie wĂ€hrend des Testprozesses auf die AktivitĂ€t Kontext speichern.
Entsprechende Anfrage isc.py.msg.RestoreRequest lÀdt den Kontext aus InterSystems IRIS in Python:
ContextIdâ Kontext-ID.Clearâ Kontext vor der Wiederherstellung löschen.
Jupyter Notebook
â dies ist eine Open-Source-Webanwendung, die es erlaubt, Notebooks zu erstellen, die Code, Visualisierungen und Text enthalten und diese zu veröffentlichen. Python Gateway ermöglicht es, BPL-Prozesse als Jupyter Notebook zu betrachten und zu bearbeiten. Bitte beachten Sie, dass derzeit der regulĂ€re Python 3 Executor verwendet wird.
Diese Erweiterung geht davon aus, dass die Annotationen Python-Code enthalten und die AktivitĂ€tsnamen als vorhergehende Ăberschriften verwenden. Es ist jetzt möglich, GeschĂ€ftsprozesse mit PythonGateway in Jupyter Notebook zu 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
- Sie benötigen InterSystems IRIS 2019.2+.
- Installieren Sie PythonGateway v0.8+ (nur erforderlich, um
isc.py.util.Jupyter,isc.py.util.JupyterCheckpointsundisc.py.ens.ProcessUtils). - Aktualisieren Sie den ObjectScript-Code aus dem Repository.
- FĂŒhren Sie aus
do ##class(isc.py.util.Jupyter).Install()und folgen Sie den Anweisungen.
.
Das DBMS Tarantool ist ein attraktives, zukunftstrÀchtiges Produkt zur Erstellung von hochbelasteten Anwendungen.
MLToolkit ist eine Sammlung von Werkzeugen, die darauf abzielt, Modelle und Transaktionsumgebungen zu integrieren, um die erstellten Modelle direkt in Ihren GeschĂ€ftsprozessen problemlos nutzen zu können. Python Gateway ist Teil von MLToolkit und bietet eine Integration mit der Programmiersprache Python, die es ermöglicht, beliebige maschinelle Lernalgorithmen, die in Python erstellt wurden (der Hauptarbeitsplatz vieler Data Scientists), zu orchestrieren und zahlreiche fertige Bibliotheken zu verwenden, um adaptive, robotergestĂŒtzte analytische AI/ML-Lösungen auf der Plattform InterSystems IRIS schnell zu erstellen.
Links
MLToolkit
Die MLToolkit-Benutzergruppe ist ein privates GitHub-Repository, das als Teil der Unternehmens-GitHub-Organisation von InterSystems erstellt wurde. Es richtet sich an externe Benutzer, die die MLToolkit-Komponenten, einschlieĂlich des Python Gateways, installieren, erkunden oder bereits nutzen. In der Gruppe sind eine Reihe von implementierten AnwendungsfĂ€llen (mit Quellcode und Testdaten) aus den Bereichen Marketing, Produktion, Medizin und vielen anderen Branchen verfĂŒgbar. Um der MLToolkit-Benutzergruppe beizutreten, senden Sie bitte eine kurze Nachricht per E-Mail an die folgende Adresse: und geben Sie in Ihrer E-Mail die folgenden Informationen an:
- GitHub-Benutzername
- Organisation (wo Sie arbeiten oder studieren)
- Position (Ihre tatsÀchliche Position in Ihrer Organisation, oder "Student", oder "Freiberufler").
- Land
An diejenigen, die den Artikel gelesen und Interesse an den Möglichkeiten von InterSystems IRIS als Plattform fĂŒr die Entwicklung oder Bereitstellung von Mechanismen fĂŒr kĂŒnstliche Intelligenz und maschinelles Lernen haben, bieten wir an, mögliche Szenarien zu besprechen, die fĂŒr Ihr Unternehmen von Interesse sein könnten. Wir sind bereit, die BedĂŒrfnisse Ihres Unternehmens zu analysieren und gemeinsam einen Aktionsplan zu erstellen; die Kontakt-E-Mail-Adresse unserer Expertengruppe fĂŒr KI/ML ist: .
Quelle: habr.com
