Python Gateway bei InterSystems IRIS

In diesem Artikel geht es um Python Gateway, ein Open-Source-Community-Projekt für die InterSystems-IRIS-Datenplattform. Mit diesem Projekt können Sie alle in Python (der Hauptumgebung für viele Datenwissenschaftler) erstellten Algorithmen für maschinelles Lernen orchestrieren und zahlreiche vorgefertigte Bibliotheken verwenden, um schnell adaptive, robotergestützte analytische KI/ML-Lösungen auf der InterSystems IRIS-Plattform zu erstellen. In diesem Artikel zeige ich Ihnen, wie InterSystems IRIS Python-Prozesse orchestrieren, eine effiziente bidirektionale Datenübertragung durchführen und intelligente Geschäftsprozesse erstellen kann.

Planen

  1. Einleitung.
  2. Werkzeuge.
  3. Установка.
  4. API.
  5. Interoperabilität.
  6. Jupyter-Notizbuch.
  7. Schlussfolgerungen.
  8. Links.
  9. M.L.Toolkit.

Einführung

Python ist eine allgemeine Programmiersprache auf hohem Niveau, deren Schwerpunkt auf der Verbesserung der Entwicklerproduktivität und der Lesbarkeit des Codes liegt. In dieser Artikelserie werde ich über die Möglichkeiten der Verwendung der Python-Sprache auf der InterSystems IRIS-Plattform sprechen, wobei der Schwerpunkt dieses Artikels auf der Verwendung von Python als Sprache zum Erstellen und Anwenden von Modellen für maschinelles Lernen liegt.

Maschinelles Lernen (ML) ist eine Klasse von Methoden der künstlichen Intelligenz, deren charakteristisches Merkmal nicht die direkte Lösung eines Problems ist, sondern das Lernen im Prozess der Lösung vieler ähnlicher Probleme.

Algorithmen und Modelle für maschinelles Lernen werden immer häufiger eingesetzt. Dafür gibt es viele Gründe, aber alles kommt auf die Zugänglichkeit, Einfachheit und das Erreichen praktischer Ergebnisse an. Ist Clustering oder gar die Modellierung neuronaler Netze eine neue Technologie?

Natürlich nicht, aber heutzutage ist es nicht mehr nötig, Hunderttausende Codezeilen zu schreiben, um ein Modell auszuführen, und die Kosten für die Erstellung und Verwendung von Modellen werden immer geringer.

Die Tools entwickeln sich weiter – obwohl wir nicht über vollständig GUI-orientierte KI/ML-Tools verfügen, sind die Fortschritte, die wir bei vielen anderen Klassen von Informationssystemen wie BI gesehen haben (vom Schreiben von Code bis hin zur Verwendung von Frameworks und GUI-orientierten konfigurierbaren Lösungen), ebenfalls erkennbar in AI/ML-Erstellungstools. Wir haben die Phase des Codeschreibens bereits hinter uns und nutzen heute Frameworks zum Erstellen und Trainieren von Modellen.

Andere Verbesserungen, wie die Möglichkeit, ein vorab trainiertes Modell zu verbreiten, bei dem der Endbenutzer das Modell einfach anhand seiner spezifischen Daten trainieren muss, erleichtern auch den Einstieg in die Anwendung von maschinellem Lernen. Diese Fortschritte machen es viel einfacher, maschinelles Lernen zu erlernen, sowohl für Fachleute als auch für Unternehmen insgesamt.

Andererseits sammeln wir immer mehr Daten. Mit einer einheitlichen Datenplattform wie InterSystems IRIS können alle diese Informationen sofort aufbereitet und als Eingabe für Modelle des maschinellen Lernens verwendet werden.

Mit dem Übergang zur Cloud ist die Einführung von KI/ML-Projekten einfacher denn je. Wir können nur die Ressourcen verbrauchen, die wir brauchen. Darüber hinaus können wir dank der Parallelisierung, die Cloud-Plattformen bieten, Zeit sparen.

Aber wie sieht es mit den Ergebnissen aus? Hier wird es komplizierter. Es gibt viele Werkzeuge zum Erstellen von Modellen, auf die ich als Nächstes eingehen werde. Ein gutes Modell zu bauen ist nicht einfach, aber wie geht es weiter? Es ist ebenfalls keine triviale Aufgabe, von der Nutzung des Modells durch ein Unternehmen zu profitieren. Die Wurzel des Problems liegt in der Trennung von analytischen und transaktionalen Arbeitslasten und Datenmodellen. Wenn wir ein Modell trainieren, tun wir dies normalerweise anhand historischer Daten. Der Platz für das konstruierte Modell liegt jedoch in der Transaktionsdatenverarbeitung. Was nützt das beste Modell zur Erkennung betrügerischer Transaktionen, wenn wir es einmal täglich ausführen? Mit dem Geld sind die Betrüger längst abgehauen. Wir müssen das Modell anhand historischer Daten trainieren, es aber auch in Echtzeit auf neu eingehende Daten anwenden, damit unsere Geschäftsprozesse gemäß den Vorhersagen des Modells agieren können.

ML Toolkit ist ein Toolkit, das genau das tut: Modelle zusammenführen und eine Transaktionsumgebung schaffen, sodass die von Ihnen erstellten Modelle problemlos direkt in Ihren Geschäftsprozessen verwendet werden können. Python Gateway ist Teil des ML Toolkits und ermöglicht die Integration mit der Python-Sprache (ähnlich wie R Gateway ermöglicht es als Teil des ML Toolkits die Integration mit der R-Sprache).

Werkzeuge

Bevor wir fortfahren, möchte ich einige Python-Tools und -Bibliotheken beschreiben, die wir später verwenden werden.

der Technik

  • Python ist eine interpretierte, universelle Programmiersprache auf hohem Niveau. Der Hauptvorteil der Sprache ist eine große Bibliothek an Mathematik-, ML- und KI-Bibliotheken. Wie ObjectScript ist es eine objektorientierte Sprache, aber alles ist dynamisch und nicht statisch definiert. Auch alles ist ein Objekt. Spätere Artikel gehen von einer vorübergehenden Vertrautheit mit der Sprache aus. Wenn Sie mit dem Lernen beginnen möchten, empfehle ich, mit zu beginnen Dokumentation.
  • Für unsere nächsten Übungen, fertig Python 3.6.7 64 Bit.
  • IDE: Ich benutze PyCharm, aber im Allgemeinen много. 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.
  • Notizbuch: Anstelle einer IDE können Sie Ihre Skripte in Online-Notizbüchern schreiben und teilen. Das beliebteste davon ist Jupiter.

Bibliotheken

Hier ist eine (Teil-)Liste der Bibliotheken für maschinelles Lernen:

  • Numpy — ein Basispaket für exakte Berechnungen.
  • Pandas — leistungsstarke Datenstrukturen und Datenanalysetools.
  • Matplotlib - Erstellung von Diagrammen.
  • Seegeboren - Datenvisualisierung basierend auf Matplotlib.
  • Sklearn — Methoden des maschinellen Lernens.
  • XGBoost – Algorithmen für maschinelles Lernen innerhalb der Gradient-Boosting-Methodik.
  • Gensim — NLP.
  • Keras - Neuronale Netze.
  • Tensorflow ist eine Plattform zur Erstellung von Modellen für maschinelles Lernen.
  • PyTorch ist eine Plattform zum Erstellen von Modellen für maschinelles Lernen mit Schwerpunkt auf Python.
  • Nyouka - PMML aus verschiedenen Modellen.

KI/ML-Technologien machen Unternehmen effizienter und anpassungsfähiger. Darüber hinaus lassen sich diese Technologien heute immer einfacher entwickeln und implementieren. Erfahren Sie mehr über KI/ML-Technologien und wie diese zum Wachstum Ihres Unternehmens beitragen können.

Einstellung

Es gibt mehrere Möglichkeiten, Python Gateway zu installieren und zu verwenden:

  • OS
    • Windows
    • Linux
    • Mac
  • Docker
    • Verwenden Sie das Image von DockerHub
    • Erstellen Sie Ihr eigenes Bild

Unabhängig von der Installationsmethode benötigen Sie den Quellcode. Der einzige Ort, an dem Sie den Code herunterladen können, ist Veröffentlichungsseite. Es enthält getestete stabile Versionen, schnappen Sie sich einfach die neueste. Im Moment liegt er bei 0.8, aber mit der Zeit werden noch neue hinzukommen. Klonen/laden Sie nicht das Repository herunter, sondern laden Sie die neueste Version herunter.

OS

Wenn Sie Python Gateway auf einem Betriebssystem installieren, müssen Sie zunächst (unabhängig vom Betriebssystem) Python installieren. Dafür:

  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 herunter (d. h. do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) zu jedem Bereich mit Produkten. Wenn Sie möchten, dass ein vorhandener Bereich Produkte unterstützt, führen Sie Folgendes aus: write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. Stelle Callout-DLL/SO/DYLIB zum Ordner bin Ihre InterSystems IRIS-Instanz. Die Bibliotheksdatei muss in dem von zurückgegebenen Pfad verfügbar sein write ##class(isc.py.Callout).GetLib().

Windows

  1. Stellen Sie sicher, dass die Umgebungsvariable vorhanden ist PYTHONHOME verweist auf Python 3.6.7.
  2. Stellen Sie sicher, dass die Systemumgebungsvariable vorhanden ist PATH enthält eine Variable PYTHONHOME (oder das Verzeichnis, auf das es verweist).

Linux (Debian/Ubuntu)

  1. Überprüfen Sie, ob die Umgebungsvariable vorhanden ist PATH enthält /usr/lib и /usr/lib/x86_64-linux-gnu. Verwenden Sie Datei /etc/environment um Umgebungsvariablen festzulegen.
  2. Bei Fehlern undefined symbol: _Py_TrueStruct Legen Sie die Einstellung fest PythonLib. auch in Readme Es gibt einen Abschnitt zur Fehlerbehebung.

Mac

  1. Derzeit wird nur Python 3.6.7 unterstützt Python.org. Variable prüfen PATH.

Wenn Sie Umgebungsvariablen geändert haben, starten Sie Ihr InterSystems-Produkt neu.

Docker

Die Verwendung von Containern hat eine Reihe von Vorteilen:

  • Portabilität
  • Effektivität
  • Isolierung
  • Leichtigkeit
  • Unveränderlichkeit

Schau dir das an eine Artikelserie Weitere Informationen zur Verwendung von Docker mit InterSystems-Produkten finden Sie hier.

Alle Python Gateway-Builds basieren derzeit auf Containern. 2019.4.

Fertiges Bild

Laufen: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latestum Python Gateway mit InterSystems IRIS Community Edition herunterzuladen und auszuführen. Das ist alles.

Erstellen Sie Ihr eigenes Bild

Um ein Docker-Image zu erstellen, führen Sie im Stammverzeichnis des Repositorys Folgendes 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 festlegen IMAGE.
Um aus InterSystems IRIS zu erstellen, führen Sie Folgendes 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 ausführen:

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

Wenn Sie ein Image verwenden, das auf der InterSystems IRIS Community Edition basiert, müssen Sie 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 bereitgestelltes Verzeichnis ändern. Bearbeiten Sie dazu die Einstellung WorkingDir Angabe des gemounteten Verzeichnisses.
  • Um auf das Terminal zuzugreifen, führen Sie Folgendes aus: docker exec -it irispy sh.
  • Zugang zum System Management Portal per Login SuperUser/SYS.
  • Um einen Container zu stoppen, führen Sie Folgendes aus: docker stop irispy && docker rm --force irispy.

Überprüfung der Installation

Nachdem Sie 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

Das Ergebnis sollte sein HELLO – der Wert der Python-Variablen x. Wenn der Rückgabestatus sc ist ein Fehler bzw var leer, überprüfen Readme – Abschnitt zur Fehlerbehebung.

API

Python Gateway ist installiert und Sie haben überprüft, dass es funktioniert. Es ist Zeit, damit zu beginnen!
Die Hauptschnittstelle zu Python ist isc.py.Main. Es bietet die folgenden Gruppen von Methoden (alle return %Status):

  • Codeausführung
  • Datenübertragung
  • Hilfs-

Codeausführung

Mit diesen Methoden können Sie beliebigen Python-Code ausführen.

SimpleString

SimpleString ist die Hauptmethode. Es sind 4 optionale Argumente erforderlich:

  • code ist die auszuführende Codezeile. Zeilenvorschubzeichen: $c(10).
  • returnVariable ist der Name der zurückzugebenden Variablen.
  • serialization - wie man serialisiert returnVariable. 0 – Zeichenfolge (Standard), 1 – Repr.
  • result - ByRef-Referenz auf die Variable, in die der Wert geschrieben wird returnVariable.

Oben haben wir Folgendes getan:

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

In diesem Beispiel weisen wir einer Python-Variablen zu x Wert Hello und möchten den Wert einer Python-Variablen zurückgeben x zu einer ObjectScript-Variable var.

ExecuteCode

ExecuteCode ist eine sicherere und weniger restriktive Alternative SimpleString.
Zeilen in der InterSystems IRIS-Plattform sind auf 3 Zeichen begrenzt, und wenn Sie einen längeren Code ausführen möchten, müssen Sie Streams verwenden.
Es braucht zwei Argumente:

  • code – eine Zeichenfolge oder ein Stream von Python-Code, der ausgeführt werden soll.
  • variable - (optional) weist das Ergebnis der Ausführung zu code diese Python-Variable.

Empfohlene Verwendung:

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

In diesem Beispiel multiplizieren wir 2 mit 3 und speichern das Ergebnis in einer Python-Variablen y.

Datenübertragung

Übergeben Sie Daten an und von Python.

Python -> InterSystems IRIS

Abhängig von der benötigten Serialisierung gibt es vier Möglichkeiten, den Wert einer Python-Variablen in InterSystems IRIS abzurufen:

  • String für einfache Datentypen und Debugging.
  • Repr zum Speichern einfacher Objekte und zum Debuggen.
  • JSON zur einfachen Datenmanipulation auf der InterSystems IRIS-Seite.
  • Pickle um Objekte zu speichern.

Mit diesen Methoden können Sie Variablen von Python als String oder als Streams empfangen.

  • GetVariable(variable, serialization, .stream, useString) - erhalten serialization Variable variable в stream. Wenn useString ist 1 und die Serialisierung wird in einem String platziert, dann wird ein String zurückgegeben, kein Stream.
  • GetVariableJson(variable, .stream, useString) – JSON-Serialisierung einer Variablen abrufen.
  • GetVariablePickle(variable, .stream, useString, useDill) -Erhalten Sie eine Pickle- (oder Dill-)Serialisierung einer Variablen.

Versuchen wir, unsere Variable zu erhalten y.

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

InterSystems IRIS -> Python

Laden von Daten von InterSystems IRIS in Python.

  • ExecuteQuery(query, variable, type, namespace) - erstellt einen Datensatz (pandas dataframe oder list) aus der SQL-Abfrage und setzen Sie sie auf die Python-Variable variable. Plastiktüte isc.py sollte in der Gegend vorhanden sein namespace - Die Anfrage wird dort ausgeführt.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) - lädt globale Daten global vom Index start auf end in Python als Typvariable type: list, oder Pandas dataframe. Beschreibung optionaler Argumente mask und labels Verfügbar in der Klassendokumentation und im Repository Dokumente zur Datenübertragung.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) - lädt Klassendaten class von id start auf end in Python als Typvariable type: list, oder Pandas dataframe. properties – Liste (durch Komma getrennt) der Klasseneigenschaften, die in den Datensatz geladen werden sollen. Masken werden unterstützt * и ?. Default - * (alle Eigenschaften). Eigentum %%CLASSNAME ignoriert.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) - lädt Tabellendaten table von id start auf end in Python.

ExecuteQuery - universell (jede gültige SQL-Abfrage wird an Python übergeben). Jedoch, ExecuteGlobal und seine Wraps ExecuteClass и ExecuteTable mit einer Reihe von Einschränkungen arbeiten. Sie sind viel schneller (3-5-mal schneller als der ODBC-Treiber und 20-mal schneller als ExecuteQuery). Weitere Informationen unter Dokumente zur Datenübertragung.
Alle diese Methoden unterstützen die Übertragung von Daten aus beliebigen Bereichen. Plastiktüte isc.py muss im Zielgebiet verfügbar sein.

ExecuteQuery

ExecuteQuery(request, variable, type, namespace) - Übergabe der Ergebnisse einer gültigen SQL-Abfrage an Python. Dies ist die langsamste Datenübertragungsmethode. Verwenden Sie es, wenn ExecuteGlobal und seine Wrapper sind nicht verfügbar.

Argumente:

  • query - SQL-Abfrage.
  • variable – der Name der Python-Variablen, in die die Daten geschrieben werden.
  • type - list oder Pandas dataframe.
  • namespace - der Bereich, in dem die Anfrage ausgeführt wird.

ExecuteGlobal

ExecuteGlobal(global, variable, type, start, end, mask, labelels, namespace) - Übergabe eines globalen Codes an Python.

Argumente:

  • global ist der Name des globalen Außen ^
  • variable – der Name der Python-Variablen, in die die Daten geschrieben werden.
  • type - list oder Pandas dataframe.
  • start – der erste Index des Global. Notwendig %Integer.
  • end ist der letzte Index des globalen. Notwendig %Integer.
  • mask — Maske globaler Werte. Die Maske kann kürzer sein als die Anzahl der Felder in der globalen Maske (in diesem Fall werden die Felder am Ende übersprungen). So formatieren Sie die Maske:
    • + Übergeben Sie den Wert unverändert.
    • - Wert überspringen.
    • b — Boolescher Typ (0 - False, alles andere - True).
    • d – Datum (von $horolog, unter Windows ab 1970, unter Linux ab 1900).
    • t - Zeit ($horolog, Sekunden nach Mitternacht).
    • m – Zeitstempel (Formatzeichenfolge JAHR-MONAT-TAG STUNDE:MINUTE:SEKUNDE).
  • labels - %Liste der Spaltennamen. Das erste Element ist der Name des Index.
  • namespace - der Bereich, in dem die Anfrage ausgeführt wird.

ExecuteClass

wickeln über ExecuteGlobal. Bereitet einen Anruf basierend auf der Klassendefinition vor ExecuteGlobal und ruft ihn an.

ExecuteClass(class, variable, type, start, end, properties, namespace) - Übergabe von Klassendaten an Python.

Argumente:

  • class - Klassenname
  • variable – der Name der Python-Variablen, in die die Daten geschrieben werden.
  • type - list oder Pandas dataframe.
  • start — Start-ID.
  • end - endgültige ID
  • properties – Liste (durch Komma getrennt) der Klasseneigenschaften, die in den Datensatz geladen werden sollen. Masken werden unterstützt * и ?. Default - * (alle Eigenschaften). Eigentum %%CLASSNAME ignoriert.
  • namespace - der Bereich, in dem die Anfrage ausgeführt wird.

Alle Eigenschaften werden unverändert übergeben, mit Ausnahme der Typeigenschaften %Date, %Time, %Boolean и %TimeStamp - Sie werden in die entsprechenden Python-Klassen konvertiert.

ExecuteTable

wickeln über ExecuteClass. Übersetzt den Tabellennamen in einen Klassennamen und ruft auf ExecuteClass. Unterschrift:

ExecuteTable(table, variable, type, start, end, properties, namespace) - Übergabe von Tabellendaten an Python.

Argumente:

  • table - Tabellenname.
    Alle anderen Argumente werden unverändert übergeben. ExecuteClass.

Aufzeichnungen

  • ExecuteGlobal, ExecuteClass и ExecuteTable gleich schnell arbeiten.
  • ExecuteGlobal 20-mal schneller als ExecuteQuery bei großen Datensätzen (Übertragungszeit >0.01 Sekunde).
  • ExecuteGlobal, ExecuteClass и ExecuteTable Arbeiten Sie an Globals mit dieser Struktur: ^global(key) = $lb(prop1, prop2, ..., propN) wo key - ganze Zahl.
  • für ExecuteGlobal, ExecuteClass и ExecuteTable unterstützten Wertebereich %Date entspricht der Reichweite mktime und hängt vom Betriebssystem abFenster: 1970-01-01, linux 1900-01-01, mac). Verwenden %TimeStampum Daten außerhalb dieses Bereichs zu übergeben oder Pandas-Datenrahmen als zu verwenden Diese Einschränkung gilt nur für die Liste.
  • für ExecuteGlobal, ExecuteClass и ExecuteTable Alle Argumente außer Datenquelle (global, Klasse oder Tabelle) und Variable sind optional.

Примеры

Testklasse isc.py.test.Person enthält eine Methode, die alle Möglichkeiten der 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"

// Общие аргументы
set variable = "df"
set type = "dataframe"
set start = 1
set end = $g(^isc.py.test.PersonD, start)

// Способ 0: ExecuteGlobal без аргументов
set sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 0, type)

// Способ 1: ExecuteGlobal с аргументами    
// При передаче глобала названия полей задаются вручную
// globalKey - название сабсткрипта 
set labels = $lb("globalKey", "Name", "DOB", "TS", "RandomTime", "AgeYears", "AgeDecimal", "AgeDouble", "Bool")

// mask содержит на 1 элемент меньше чем labels потому что "globalKey" - название сабскипта
// Пропускаем %%CLASSNAME
set mask = "-+dmt+++b"

set sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 1, type, start, end, mask, labels)

// Способ 2: ExecuteClass
set sc = ##class(isc.py.Main).ExecuteClass(class, variable _ 2, type, start, end)

// Способ 3: ExecuteTable
set sc = ##class(isc.py.Main).ExecuteTable(table, variable _ 3, type, start, end)

// Способ 4: ExecuteTable
set sc = ##class(isc.py.Main).ExecuteQuery(query, variable _ 4, type)

Aufrufmethode do ##class(isc.py.test.Person).Test() um zu sehen, wie alle Datenübertragungsmethoden funktionieren.

Hilfsmethoden

  • GetVariableInfo(variable, serialization, .defined, .type, .length) - Informationen über die Variable abrufen: ob sie definiert ist, Klasse und Serialisierungslänge.
  • GetVariableDefined(variable, .defined) - ob die Variable definiert ist.
  • GetVariableType(variable, .type) - Holen Sie sich die Klasse der Variablen.
  • GetStatus() - Holen Sie sich die letzte Ausnahme auf der Python-Seite und entfernen Sie sie.
  • GetModuleInfo(module, .imported, .alias) — Modulvariable und Importstatus abrufen.
  • GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments) - Informieren Sie sich über die Funktion.

Interoperabilität

Sie haben gelernt, wie Sie Python Gateway vom Terminal aus aufrufen. Jetzt beginnen wir mit der Verwendung in der Produktion. Die Grundlage für die Interaktion mit Python in diesem Modus ist isc.py.ens.Operation. Es ermöglicht uns:

  • Python-Code ausführen
  • Python-Kontext speichern/wiederherstellen
  • Laden und empfangen Sie Daten von Python

Im Grunde ist eine Pyhton-Operation ein Wrapper-Over isc.py.Main. Betrieb isc.py.ens.Operation ermöglicht die Interaktion mit dem Python-Prozess von InterSystems IRIS-Produkten. Fünf Anfragen werden unterstützt:

  • isc.py.msg.ExecutionRequest um Python-Code auszuführen. kehrt zurück isc.py.msg.ExecutionResponse mit dem Ausführungsergebnis und den Werten der angeforderten Variablen.
  • isc.py.msg.StreamExecutionRequest um Python-Code auszuführen. kehrt zurück isc.py.msg.StreamExecutionResponse das Ergebnis der Ausführung und die Werte der angeforderten Variablen. Analog isc.py.msg.ExecutionRequest, akzeptiert aber Streams anstelle von Strings und gibt diese zurück.
  • isc.py.msg.QueryRequest um das Ergebnis der Ausführung einer SQL-Abfrage zu übertragen. kehrt zurück Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest um globale/Klassen-/Tabellendaten zu übergeben. kehrt zurück Ens.Response.
  • isc.py.msg.SaveRequest um den Python-Kontext zu speichern. kehrt zurück Ens.StringResponse mit Kontext-ID.
  • isc.py.msg.RestoreRequest um den Python-Kontext wiederherzustellen.

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

    • Initializer - Auswahl einer Klasse, die die Schnittstelle implementiert isc.py.init.Abstract. Es kann zum Laden von Funktionen, Modulen, Klassen und dergleichen verwendet werden. Es wird einmal ausgeführt, wenn der Prozess startet.
    • PythonLib - (Nur Linux) Wenn Sie Startfehler sehen, setzen Sie den Wert auf libpython3.6m.so oder sogar im 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 Anmerkungen aus Aktivitäten mit Variablenersetzung.
  • isc.py.util.BPEmulator erleichtert das Testen von Geschäftsprozessen mit Python. Es kann einen Geschäftsprozess (Python-Teile) im aktuellen Prozess ausführen.

Variablensubstitution

Alle Geschäftsprozesse wurden geerbt von isc.py.ens.ProcessUtils, kann die Methode verwenden GetAnnotation(name) um den Wert einer Aktivitätsanmerkung anhand ihres Namens zu ermitteln. Die Aktivitätsanmerkung kann Variablen enthalten, die auf der InterSystems IRIS-Seite ausgewertet werden, bevor sie an Python übergeben werden. Hier ist die Syntax für die Variablenersetzung:

  • ${class:method:arg1:...:argN} - Methodenaufruf
  • #{expr} - Code in der ObjectScript-Sprache ausführen.

Ein Beispiel finden Sie im Testgeschäftsprozess isc.py.test.Process, zum Beispiel in Aktivität Correlation Matrix: Graph: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). In diesem Beispiel:

  • #{process.WorkDirectory} gibt die WorkDirectory-Eigenschaft des Objekts zurück process, was eine Instanz der Klasse ist isc.py.test.Process diese. aktuellen Geschäftsprozess.
  • ${%PopulateUtils:Integer:1:100} ruft eine Methode auf Integer Klasse %PopulateUtils, Argumente übergeben 1 и 100, was eine zufällige Ganzzahl im Bereich zurückgibt 1...100.

Geschäftsprozess testen

Die Testproduktion und der Testgeschäftsprozess sind standardmäßig als Teil des Python Gateway verfügbar. Um sie zu verwenden:

  1. Führen Sie im Betriebssystem-Terminal Folgendes aus: pip install pandas matplotlib seaborn.
  2. Führen Sie im InterSystems IRIS-Terminal Folgendes aus: do ##class(isc.py.test.CannibalizationData).Import() um Testdaten zu füllen.
  3. Produkte auf den Markt bringen isc.py.test.Production.
  4. Anfragetyp senden Ens.Request в isc.py.test.Process.

Mal sehen, wie das alles zusammenspielt. Offen isc.py.test.Process im BPL-Editor:

Python Gateway bei InterSystems IRIS

Codeausführung

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

Python Gateway bei InterSystems IRIS

Anfrage verwendet isc.py.msg.ExecutionRequest, hier sind seine Eigenschaften:

  • Code – Python-Code.
  • SeparateLines – ob der Code zur Ausführung in Zeilen aufgeteilt werden soll. $c(10) (n) wird zum Trennen von Zeichenfolgen verwendet. Beachten Sie, dass es NICHT empfohlen wird, die gesamte Nachricht auf einmal zu verarbeiten. Diese Funktion dient nur der Verarbeitung def und ähnliche mehrzeilige Ausdrücke. Default 0.
  • Variables ist eine durch Kommas getrennte Liste von Variablen, die der Antwort hinzugefügt werden.
  • Serialization - So serialisieren Sie die Variablen, die wir zurückgeben möchten. Optionen: Str, Repr, JSON, Pickle и Dill, Default Str.

In unserem Fall legen wir nur die Eigenschaft fest Code, sodass alle anderen Eigenschaften ihre Standardwerte verwenden. Wir richten es telefonisch ein process.GetAnnotation("Import pandas"), das zur Laufzeit eine Anmerkung zurückgibt, nachdem die Variablenersetzung durchgeführt wurde. Endlich der Code import pandas as pd wird an Python übergeben. GetAnnotation kann nützlich sein, um mehrzeilige Python-Skripte abzurufen, es gibt jedoch keine Einschränkungen für diese Art, Code abzurufen. Sie können die Eigenschaft festlegen Code in irgendeiner Weise bequem für Sie.

Variablen abrufen

Eine weitere interessante Herausforderung mit isc.py.msg.ExecutionRequest - Correlation Matrix: Tabular:

Python Gateway bei InterSystems IRIS

Es berechnet die Korrelationsmatrix auf der Python-Seite und extrahiert die Variable corrmat Zurück zu InterSystems IRIS im JSON-Format, indem Sie die Anforderungseigenschaften festlegen:

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

Wir können die Ergebnisse in Visual Trace sehen:

Python Gateway bei InterSystems IRIS

Und wenn wir diesen Wert im BP benötigen, kann er so ermittelt werden: callresponse.Variables.GetAt("corrmat").

Datenübertragung

Lassen Sie uns als Nächstes über die Übertragung von Daten von InterSystems IRIS nach Python sprechen. Alle Datenübertragungsanforderungen implementieren die Schnittstelle isc.py.msg.DataRequest, das die folgenden Eigenschaften bereitstellt:

  • Variable ist eine Python-Variable, in die die Daten geschrieben werden.
  • Type - Variablentyp: dataframe (Pandas-Datenrahmen) oder list.
  • Namespace - der Bereich, aus dem wir Daten erhalten. Plastiktüte isc.py sollte in diesem Bereich verfügbar sein. Dies kann ein Bereich ohne Produktunterstützung sein.

Basierend auf dieser Schnittstelle werden 4 Anforderungsklassen implementiert:

  • isc.py.msg.QueryRequest - Eigenschaft festlegen Query um eine SQL-Abfrage zu senden.
  • isc.py.msg.ClassRequest - Eigenschaft festlegen Class um Klassendaten zu übergeben.
  • isc.py.msg.TableRequest - Eigenschaft festlegen Table um Tabellendaten zu übergeben.
  • isc.py.msg.GlobalRequest - Eigenschaft festlegen Global Daten global zu übertragen.

Schauen Sie sich im Testprozess die Aktivität an RAWWo isc.py.msg.QueryRequest in Aktion gezeigt.

Python Gateway bei InterSystems IRIS

Speichern/Wiederherstellen eines Python-Kontexts

Schließlich können wir den Python-Kontext in InterSystems IRIS speichern und dazu senden isc.py.msg.SaveRequest mit Argumenten:

  • Mask — Es werden nur Variablen gespeichert, die die Maske erfüllen. Unterstützt * и ?. Beispiel: "Data*, Figure?". Default *.
  • MaxLength – Die maximale Länge der gespeicherten Variablen. Wenn die Serialisierung einer Variablen länger ist, wird sie ignoriert. Auf 0 setzen, um Variablen beliebiger Länge zu erhalten. Default $$$MaxStringLength.
  • Name — Kontextname (optional).
  • Description — Beschreibung des Kontexts (optional).

Rückgabe Ens.StringResponse с Id gespeicherter Kontext. Schauen Sie sich im Testprozess die Aktivität an Save Context.

Verwandte Anfrage isc.py.msg.RestoreRequest lädt einen Kontext von InterSystems IRIS in Python:

  • ContextId ist der Kontextbezeichner.
  • Clear – Löschen Sie den Kontext vor der Wiederherstellung.

Jupyter Notizbuch

Jupyter Notizbuch ist eine Open-Source-Webanwendung, mit der Sie Notizbücher mit Code, Visualisierungen und Text erstellen und veröffentlichen können. Mit Python Gateway können Sie BPL-Prozesse als Jupyter Notebook anzeigen und bearbeiten. Beachten Sie, dass derzeit der reguläre Python 3-Executor verwendet wird.

Bei dieser Erweiterung wird davon ausgegangen, dass Anmerkungen Python-Code enthalten und Aktivitätsnamen als vorangehende Titel verwenden. Es ist jetzt möglich, PythonGateway-Geschäftsprozesse in Jupyter Notebook zu entwickeln. Folgendes ist möglich:

  • Erstellen Sie neue Geschäftsprozesse
  • Geschäftsprozesse löschen
  • Erstellen Sie neue Aktivitäten
  • Aktivitäten ändern
  • Aktivitäten löschen

Hier Demo-Video. Und einige Screenshots:

Process Explorer

Python Gateway bei InterSystems IRIS

Prozesseditor

Python Gateway bei InterSystems IRIS

Einstellung

  1. Sie benötigen InterSystems IRIS 2019.2+.
  2. Installieren Sie PythonGateway v0.8+ (erfordert nur isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints и isc.py.ens.ProcessUtils).
  3. Aktualisieren Sie den ObjectScript-Code aus dem Repository.
  4. Ausführen do ##class(isc.py.util.Jupyter).Install() und folgen Sie den Anweisungen.

Dokumentation.

Befund

MLToolkit ist eine Reihe von Tools, die darauf abzielen, Modelle und eine Transaktionsumgebung zu kombinieren, sodass die erstellten Modelle problemlos direkt in Ihren Geschäftsprozessen verwendet werden können. Python Gateway ist Teil von MLToolkit und ermöglicht die Integration mit der Python-Sprache. So können Sie alle in Python (der Hauptumgebung für viele Datenwissenschaftler) erstellten Algorithmen für maschinelles Lernen orchestrieren und zahlreiche vorgefertigte Bibliotheken verwenden, um schnell adaptive, analytische Roboter-KI zu erstellen. ML-Lösungen auf der InterSystems-Plattform IRIS.

Referenzen

MLToolkit

Die MLToolkit-Benutzergruppe ist ein privates GitHub-Repository, das als Teil der GitHub-Unternehmensorganisation von InterSystems erstellt wurde. Es richtet sich an externe Benutzer, die MLToolkit-Komponenten, einschließlich Python Gateway, installieren, erlernen oder bereits verwenden. Die Gruppe verfügt über eine Reihe implementierter Fälle (mit Quellcode und Testdaten) in den Bereichen Marketing, Fertigung, Medizin und vielen anderen Branchen. Um der ML Toolkit-Benutzergruppe beizutreten, senden Sie bitte eine kurze E-Mail an die folgende Adresse: [E-Mail geschützt] und fügen Sie Ihrem Brief die folgenden Informationen bei:

  • GitHub-Benutzername
  • Organisation (Sie arbeiten oder studieren)
  • Position (Ihre tatsächliche Position in Ihrer Organisation, entweder „Student“ oder „Unabhängiger“).
  • Land

Diejenigen, die den Artikel gelesen haben und sich für InterSystems IRIS als Plattform für die Entwicklung oder das Hosting von Mechanismen für künstliche Intelligenz und maschinelles Lernen interessieren, laden wir ein, mögliche Szenarien zu besprechen, die für Ihr Unternehmen von Interesse sind. Gerne analysieren wir die Bedürfnisse Ihres Unternehmens und legen gemeinsam einen Aktionsplan fest; Kontakt-E-Mail-Adresse unserer KI/ML-Expertengruppe – [E-Mail geschützt] .

Source: habr.com

Kommentar hinzufügen