Python Gateway in InterSystems IRIS

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

  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 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 Dokumentation.
  • FĂŒr unsere spĂ€teren Übungen installieren Sie Python 3.6.7 64 bit.
  • IDE: Ich verwende PyCharm, aber generell gibt es auch andere. viele. 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 Jupyter.

Bibliotheken

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

  • Numpy — ein grundlegendes Paket fĂŒr prĂ€zise Berechnungen.
  • Pandas — hochleistungsfĂ€hige Datenstrukturen und Datenanalysetools.
  • Matplotlib — Erstellung von Diagrammen.
  • Seaborn — Datenvisualisierung, die auf matplotlib basiert.
  • Sklearn — Methoden fĂŒr maschinelles Lernen.
  • XGBoost — Algorithmen fĂŒr maschinelles Lernen innerhalb der Gradienten-Boosting-Methodologie.
  • Gensim — NLP.
  • Keras — neuronale Netzwerke.
  • Tensorflow — Plattform zur Erstellung von Modellen fĂŒr maschinelles Lernen.
  • PyTorch — Plattform zur Erstellung von Modellen fĂŒr maschinelles Lernen, die auf Python ausgerichtet ist.
  • Nyoka — 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 die Release-Seite. 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:

  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 Namensraum mit Produkteinheiten. Falls Sie möchten, dass ein vorhandener Namensraum Produkteinheiten unterstĂŒtzt, fĂŒhren Sie aus: write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. FĂŒgen Sie hinzu callout DLL/SO/DYLIB in den Ordner bin Ihres InterSystems IRIS-Instanz. Die Bibliotheksdatei sollte unter dem Pfad verfĂŒgbar sein, der zurĂŒckgegeben wird von write ##class(isc.py.Callout).GetLib().

Windows

  1. Stellen Sie sicher, dass die Umgebungsvariable PYTHONHOME auf Python 3.6.7 zeigt.
  2. Stellen Sie sicher, dass die Systemumgebungsvariable PATH die Variable enthÀlt PYTHONHOME (oder das Verzeichnis, auf das sie zeigt).

Linux (Debian/Ubuntu)

  1. ÜberprĂŒfen Sie, dass die Umgebungsvariable PATH enthĂ€lt /usr/lib und /usr/lib/x86_64-linux-gnu. Verwenden Sie die Datei /etc/environment zum Setzen der Umgebungsvariablen.
  2. Im Falle von Fehlern undefined symbol: _Py_TrueStruct setzen Sie die Einstellung PythonLib. Auch im Readme gibt es einen Abschnitt zur Fehlersuche.

Mac

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

Wenn 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.Process Speichert eine Reihe von Bildern im temporĂ€ren Verzeichnis. Möglicherweise möchten Sie diesen Pfad auf ein gemountetes Verzeichnis Ă€ndern. Dazu bearbeiten Sie die Einstellung WorkingDir indem 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 var

Es 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 die Readme – Abschnitt Fehlerbehebung.

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

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ĂŒhrung code dieser 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:

  • String fĂŒr grundlegende Datentypen und Debugging.
  • Repr zur Speicherung einfacher Objekte und zur Fehlerbehebung.
  • JSON fĂŒr einfaches Manipulieren von Daten auf der Seite von InterSystems IRIS.
  • Pickle zur Speicherung von Objekten.

Diese Methoden ermöglichen es, Variablen aus Python als Strings oder Streams zu erhalten.

  • GetVariable(variable, serialization, .stream, useString) — abrufen serialization Variable variable in stream. Wenn useString gleich 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
>6

InterSystems IRIS -> Python

Laden von Daten aus InterSystems IRIS in Python.

  • ExecuteQuery(query, variable, type, namespace) — erstellt einen Datensatz (pandas dataframe oder die Umwandlung von numerischen und textuellen Daten in die Formate) aus der SQL-Abfrage und weist ihn einer Python-Variable zu. variable. Das Paket isc.py muss 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 Globalen global vom Subscript start bis end in Python als Variable vom Typ type: die Umwandlung von numerischen und textuellen Daten in die Formate, oder pandas dataframe. Eine Beschreibung der optionalen Argumente mask and labels ist in der Dokumentation der Klasse und im Repository verfĂŒgbar. Data Transfer docs.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) — lĂ€dt Klassendaten class vom ID start bis end in Python als Variable vom Typ type: die Umwandlung von numerischen und textuellen Daten in die Formate, oder pandas dataframe. properties — eine Liste (Trennzeichen: Komma) von Klassenattributen, die in den Datensatz geladen werden sollen. Masken werden unterstĂŒtzt. * und ?. StandardmĂ€ĂŸig — * (alle Attribute). Attribute %%CLASSNAME werden ignoriert.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) — lĂ€dt Tabellendaten Tabelle vom ID start bis end in 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 Data Transfer docs.
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 Formate oder Pandas dataframe.
  • 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 Formate oder Pandas dataframe.
  • 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 — Klassenname
  • variable — der Name der Python-Variable, in die die Daten geschrieben werden.
  • type — die Umwandlung von numerischen und textuellen Daten in die Formate oder Pandas dataframe.
  • start — Start-ID.
  • end — End-ID
  • properties — eine Liste (Trennzeichen: Komma) von Klassenattributen, die in den Datensatz geladen werden sollen. Masken werden unterstĂŒtzt. * und ?. StandardmĂ€ĂŸig — * (alle Attribute). Attribute %%CLASSNAME werden 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, in ExecuteClass.

Notizen

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

Beispiele

Testklasse isc.py.test.Person 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.ExecutionRequest zur AusfĂŒhrung von Python-Code. Gibt zurĂŒck isc.py.msg.ExecutionResponse mit dem Ergebnis der AusfĂŒhrung und den Werten der angeforderten Variablen.
  • isc.py.msg.StreamExecutionRequest zur AusfĂŒhrung von Python-Code. Gibt zurĂŒck isc.py.msg.StreamExecutionResponse das Ergebnis der AusfĂŒhrung und die Werte der angeforderten Variablen. Entspricht isc.py.msg.ExecutionRequest, nimmt jedoch Streams anstelle von Strings entgegen und zurĂŒck.
  • isc.py.msg.QueryRequest fĂŒr die Übertragung des Ergebnisses der AusfĂŒhrung von SQL-Abfragen. Gibt zurĂŒck Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest fĂŒr die Übertragung von globalen/kategorischen/tabellarischen Daten. 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.

    Außerdem, isc.py.ens.Operation hat zwei Einstellungen:

    • Initializer — Auswahl der Klasse, die das Interface implementiert isc.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 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 Extrahieren von Annotationen aus AktivitĂ€ten mit Platzhaltern fĂŒr Variablen.
  • isc.py.util.BPEmulator erleichtert 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ĂŒck prozess, welches eine Instanz der Klasse ist isc.py.test.Process , also des aktuellen GeschĂ€ftsprozesses.
  • ${%PopulateUtils:Integer:1:100} anschauen, können wir sehen, dass das DrĂŒcken der SchaltflĂ€che Integer Klasse %PopulateUtils, wobei Argumente ĂŒbergeben werden 1 und 100, die eine zufĂ€llige ganze Zahl im Bereich zurĂŒckgeben 1...100.

TestgeschÀftsprozess

Testprodukt und TestgeschĂ€ftsprozess sind standardmĂ€ĂŸig als Teil des Python-Gateways verfĂŒgbar. Um sie zu verwenden:

  1. FĂŒhren Sie im Betriebssystem-Terminal aus: pip install pandas matplotlib seaborn.
  2. FĂŒhren Sie im InterSystems IRIS-Terminal aus: do ##class(isc.py.test.CannibalizationData).Import() zum AusfĂŒllen von Testdaten.
  3. FĂŒhren Sie das Produkt aus isc.py.test.Production.
  4. Senden Sie eine Anfrage des Typs Ens.Request in isc.py.test.Process.

Schauen wir uns an, wie alles zusammenarbeitet. Ö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

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. def und Ă€hnlichen mehrzeiligen AusdrĂŒcken. StandardmĂ€ĂŸig 0.
  • Variablen ist 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, Pickle und Dill, standardmĂ€ĂŸig Str.

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:

Python Gateway in InterSystems IRIS

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:

Python Gateway in InterSystems IRIS

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) oder die Umwandlung von numerischen und textuellen Daten in die Formate.
  • Namespace — Bereich, aus dem wir Daten erhalten. Das Paket isc.py muss 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 Eigenschaft Abfrage zum Übertragen von SQL-Abfragen.
  • isc.py.msg.ClassRequest — setzen Sie die Eigenschaft Klasse zum Übertragen von Klassendaten.
  • isc.py.msg.TableRequest — setzen Sie die Eigenschaft Tabelle zum Übertragen von Tabellendaten.
  • isc.py.msg.GlobalRequest — setzen Sie die Eigenschaft Global zum Übertragen von Globaldaten.

Sehen Sie sich im Testprozess die AktivitÀt an RAW

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. 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

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

Prozess-Explorer

Python Gateway in InterSystems IRIS

Prozess-Editor

Python Gateway in InterSystems IRIS

Installation

  1. Sie benötigen InterSystems IRIS 2019.2+.
  2. Installieren Sie PythonGateway v0.8+ (nur erforderlich, um 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 aus do ##class(isc.py.util.Jupyter).Install() und folgen Sie den Anweisungen.

Dokumentation.

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

Quelle: habr.com

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster