Python Gateway in InterSystems IRIS

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

  1. EinfĂŒhrung.
  2. Werkzeuge.
  3. Installation.
  4. API.
  5. InteroperabilitÀt.
  6. Jupyter Notebook.
  7. Fazit.
  8. Links.
  9. 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 Dokumentation..
  • FĂŒr unsere kommenden Übungen installieren Sie Python 3.6.7 64 Bit.
  • IDE: Ich benutze PyCharm, aber im Allgemeinen gibt es viele eine Menge. 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 Jupyter.

Bibliotheken

Hier ist eine (unvollstĂ€ndige) Liste von Bibliotheken fĂŒr maschinelles Lernen:

  • Numpy — ein grundlegendes Paket fĂŒr prĂ€zise Berechnungen.
  • Pandas — leistungsstarke Datenstrukturen und Analysetools.
  • Matplotlib — Erstellung von Diagrammen.
  • Seaborn — datenvisualisierung basierend auf matplotlib.
  • Sklearn — Methoden des maschinellen Lernens.
  • XGBoost — Algorithmen fĂŒr maschinelles Lernen im Rahmen der Gradient Boosting-Methode.
  • Gensim — NLP.
  • Keras — neuronale Netze.
  • Tensorflow — eine Plattform zur Erstellung von Modellen fĂŒr maschinelles Lernen.
  • PyTorch — eine auf Python ausgerichtete Plattform zur Erstellung von Modellen fĂŒr maschinelles Lernen.
  • Nyoka — 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 Release-Seite. 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:

  1. Installieren Sie Python 3.6.7 64 Bit. Es wird empfohlen, Python im Standardverzeichnis zu installieren.
  2. Installieren Sie das Modul dill: pip install dill.
  3. 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).
  4. Platzieren Sie callout DLL/SO/DYLIB in den Ordner bin Ihres InterSystems IRIS-Instances. Die Bibliotheksdatei muss unter dem Pfad verfĂŒgbar sein, der zurĂŒckgegeben wird write ##class(isc.py.Callout).GetLib().

Windows

  1. Stellen Sie sicher, dass die Umgebungsvariable PYTHONHOME auf Python 3.6.7 verweist.
  2. ÜberprĂŒfen Sie, ob die Systemumgebungsvariable PATH die Variable enthĂ€lt PYTHONHOME (oder das Verzeichnis, auf das sie verweist).

Linux (Debian/Ubuntu)

  1. Stellen Sie sicher, dass die Umgebungsvariable PATH enthÀlt /usr/lib und /usr/lib/x86_64-linux-gnu. Verwenden Sie die Datei /etc/environment um Umgebungsvariablen festzulegen.
  2. Bei Fehlern undefined symbol: _Py_TrueStruct setzen Sie die Einstellung PythonLib. Außerdem gibt es im Readme einen Abschnitt zur Fehlersuche.

Mac

  1. Derzeit wird nur Python 3.6.7 von Python.orgunterstĂŒ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 Artikelserie 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.key

Wenn 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.Process speichert 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 Einstellung WorkingDir und 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 var

Es 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 Readme — Abschnitt zur Fehlerbehebung.

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 serialisieren returnVariable. 0 — string (Standardwert), 1 — repr.
  • result — ByRef Verweis auf die Variable, in die der Wert geschrieben wird returnVariable.

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. code Beispiel 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. Repr
  • zur Speicherung einfacher Objekte und fĂŒr Debugging. fĂŒr einfaches Manipulieren von Daten auf der Seite von InterSystems IRIS.
  • JSON Pickle
  • zur Speicherung von Objekten. Diese Methoden ermöglichen es, Variablen aus Python als Strings oder Streams zu beziehen.

GetVariable(variable, serialization, .stream, useString)

  • — erhalten stream. serialization Variable variable in WennuseString gleich 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
>6

InterSystems IRIS -> Python

Wir laden Daten aus InterSystems IRIS in Python.

  • ExecuteQuery(query, variable, type, namespace) — erstellt einen Datensatz (pandas dataframe oder Liste) aus einer SQL-Anfrage und speichert ihn in einer Python-Variable. variable. Das Paket isc.py muss im Namensraum namespace verfĂŒgbar sein, wo die Anfrage ausgefĂŒhrt wird.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) — lĂ€dt Daten eines Globals global aus dem Subskript start bis zu end in Python als einen Variablentyp type: Liste, oder pandas. dataframeDie Beschreibung der optionalen Argumente mask und labels ist in der Klassen- und Repository-Dokumentation verfĂŒgbar. DatenĂŒbertragungsdokumente.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) — lĂ€dt Daten einer Klasse class von ID start bis zu end in Python als einen Variablentyp type: 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 %%CLASSNAME wird ignoriert.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) — lĂ€dt Tabellendaten Tabelle von ID start bis zu end in 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 DatenĂŒbertragungsdokumente.
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 — Liste oder Pandas dataframe.
  • 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 — Liste oder Pandas dataframe.
  • 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 — Klassenname
  • variable — der Name der Python-Variable, in die die Daten geschrieben werden.
  • type — Liste oder Pandas dataframe.
  • 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 %%CLASSNAME wird 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 in ExecuteClass.

Notizen

  • ExecuteGlobal, ExecuteClass und ExecuteTable arbeiten gleich schnell.
  • ExecuteGlobal 20-mal schneller als ExecuteQuery bei großen DatensĂ€tzen (Übertragungszeit ĂŒber >0,01 Sekunden).
  • ExecuteGlobal, ExecuteClass und ExecuteTable arbeiten mit Globals mit dieser Struktur: ^global(key) = $lb(prop1, prop2, ..., propN) wobei key — ganze Zahl.
  • FĂŒr ExecuteGlobal, ExecuteClass und ExecuteTable unterstĂŒtzter Wertebereich %Date entspricht dem Bereich mktime und hĂ€ngt vom Betriebssystem ab (windows: 1970-01-01, Linux 1900-01-01, mac). 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, ExecuteClass und ExecuteTable alle Argumente außer der Datenquelle (Global, Klasse oder Tabelle) und die Variable sind optional.

Beispiele

Testklasse isc.py.test.Person 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.ExecutionRequest zum AusfĂŒhren von Python-Code. Es gibt zurĂŒck isc.py.msg.ExecutionResponse mit dem Ergebnis der AusfĂŒhrung und Werten der angeforderten Variablen.
  • isc.py.msg.StreamExecutionRequest zum AusfĂŒhren von Python-Code. Es gibt zurĂŒck isc.py.msg.StreamExecutionResponse mit dem Ergebnis der AusfĂŒhrung und Werten der angeforderten Variablen. Ähnlich isc.py.msg.ExecutionRequest, jedoch akzeptiert und liefert Ströme anstelle von Zeichenfolgen.
  • isc.py.msg.QueryRequest zum Übermitteln des Ergebnisses der SQL-Abfrage. Es gibt zurĂŒck Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest zur Übertragung von Daten fĂŒr Global-/Klassentabelle. Gibt zurĂŒck Ens.Response.
  • isc.py.msg.SaveRequest zum Speichern des Python-Kontextes. Gibt zurĂŒck Ens.StringResponse mit der Kontext-ID.
  • isc.py.msg.RestoreRequest zum Wiederherstellen des Python-Kontextes.

    DarĂŒber hinaus, isc.py.ens.Operation hat zwei Einstellungen:

    • Initializer — Auswahl der Klasse, die das Interface implementiert isc.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 auf libpython3.6m.so oder 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.ProcessUtils ermöglicht das Abrufen von Annotationen aus AktivitĂ€ten mithilfe von Variablen.
  • isc.py.util.BPEmulator ermö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ĂŒck prozess, das eine Instanz der Klasse ist isc.py.test.Process , d.h. des aktuellen GeschĂ€ftsprozesses.
  • ${%PopulateUtils:Integer:1:100} die Methode Ganzzahl der Klasse %PopulateUtils, indem Argumente ĂŒbergeben werden 1 und 100, die eine zufĂ€llige Ganzzahl im Bereich zurĂŒckgeben 1...100.

TestgeschÀftsprozess

Testprodukte und der TestgeschĂ€ftsprozess sind standardmĂ€ĂŸig als Teil des Python Gateway verfĂŒgbar. Um sie zu verwenden:

  1. FĂŒhren Sie im OS-Terminal aus: pip install pandas matplotlib seaborn.
  2. FĂŒhren Sie im InterSystems IRIS-Terminal aus: do ##class(isc.py.test.CannibalizationData).Import() um Testdaten zu fĂŒllen.
  3. Starten Sie das Produkt isc.py.test.Production.
  4. Senden Sie eine Anfrage vom Typ Ens.Request in isc.py.test.Process.

Lassen Sie uns sehen, wie alles zusammen funktioniert. Öffnen Sie isc.py.test.Process im BPL-Editor:

Python Gateway in InterSystems IRIS

CodeausfĂŒhrung

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

Python Gateway in InterSystems IRIS

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 Verarbeitung def und Ă€hnlicher mehrzeiliger AusdrĂŒcke gedacht. StandardmĂ€ĂŸig 0.
  • 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. und Dill, standardmĂ€ĂŸig Str.

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:

Python Gateway in InterSystems IRIS

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:

Python Gateway in InterSystems IRIS

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) oder Liste.
  • Namespace — der Bereich, aus dem wir die Daten holen. Das Paket isc.py muss 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 Eigenschaft Query fĂŒr die Übertragung der SQL-Abfrage.
  • isc.py.msg.ClassRequest — setzen Sie die Eigenschaft Class fĂŒr die Übertragung der Klassendaten.
  • isc.py.msg.TableRequest — die Eigenschaft setzen Tabelle fĂŒr die Übertragung von Tabellendaten.
  • isc.py.msg.GlobalRequest — die Eigenschaft setzen Global fĂŒr die Übertragung von Globaldaten.

Im Testprozess sehen Sie die AktivitÀt RAW, wobei isc.py.msg.QueryRequest wird in Aktion gezeigt.

Python Gateway in InterSystems IRIS

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

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 Demo-Video. Und einige Screenshots:

Prozess-Explorer

Python Gateway in InterSystems IRIS

Prozess-Editor

Python Gateway in InterSystems IRIS

Installation von

  1. Sie benötigen InterSystems IRIS 2019.2 oder höher.
  2. Installieren Sie PythonGateway v0.8 oder höher (nur erforderlich isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints und isc.py.ens.ProcessUtils).
  3. Aktualisieren Sie den ObjectScript-Code aus dem Repository.
  4. FĂŒhren Sie do ##class(isc.py.util.Jupyter).Install() aus und folgen Sie den Anweisungen.

Dokumentation.

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: MLToolkit@intersystems.com 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: MLToolkit@intersystems.com.

Quelle: habr.com

ZuverlĂ€ssiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen đŸ”„ ZuverlĂ€ssiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster