Python Gateway dans InterSystems IRIS

Cet article est consacrĂ© Ă  Python Gateway, un projet communautaire open source pour la plateforme de donnĂ©es InterSystems IRIS. Ce projet permet d'orchestrer n'importe quel algorithme d'apprentissage automatique dĂ©veloppĂ© en Python (la principale plateforme pour de nombreux Data Scientists), d'utiliser de nombreuses bibliothĂšques prĂȘtes Ă  l'emploi pour crĂ©er rapidement des solutions analytiques AI/ML adaptatives et robotisĂ©es sur la plateforme InterSystems IRIS. Dans cet article, je vais montrer comment InterSystems IRIS peut orchestrer des processus en Python, effectuer une transmission bidirectionnelle des donnĂ©es et crĂ©er des processus commerciaux intelligents.

Plan

  1. Introduction.
  2. Outils.
  3. Installation.
  4. API.
  5. Interopérabilité.
  6. Jupyter Notebook.
  7. Conclusions.
  8. Liens.
  9. MLToolkit.

Introduction

Python est un langage de programmation de haut niveau et généraliste, axé sur l'amélioration de la productivité du développeur et la lisibilité du code. Dans cette série d'articles, je vais parler des possibilités d'application du langage Python sur la plateforme InterSystems IRIS, l'accent de cet article étant mis sur l'utilisation de Python comme langue de création et d'application de modÚles d'apprentissage automatique.

L'apprentissage automatique (ML) est une classe de méthodes d'intelligence artificielle, dont la caractéristique est de ne pas résoudre directement un problÚme, mais d'apprendre au cours de la résolution de plusieurs problÚmes similaires.

Les algorithmes et modĂšles d'apprentissage automatique deviennent de plus en plus rĂ©pandus. Il y a de nombreuses raisons Ă  cela, mais tout se rĂ©sume Ă  l'accessibilitĂ©, Ă  la simplicitĂ© et Ă  l'obtention de rĂ©sultats pratiques. La classification ou mĂȘme la modĂ©lisation par rĂ©seaux de neurones est-elle une nouvelle technologie?

Bien sûr que non, mais à l'heure actuelle, il n'est plus nécessaire d'écrire des centaines de milliers de lignes de code pour exécuter un modÚle, et les coûts de création et d'application de modÚles diminuent de plus en plus.

Les outils Ă©voluent — alors que nous n'avons pas d'outils AI/ML entiĂšrement orientĂ©s GUI, le progrĂšs que nous avons observĂ© avec de nombreuses autres classes de systĂšmes d'information, par exemple, BI (de l'Ă©criture de code Ă  l'utilisation de cadres et de solutions configurables orientĂ©es GUI), est Ă©galement observĂ© dans les outils de crĂ©ation AI/ML. Nous avons dĂ©jĂ  dĂ©passĂ© le stade de l'Ă©criture de code et utilisons aujourd'hui des cadres pour construire et entraĂźner des modĂšles.

D'autres amĂ©liorations, telles que la possibilitĂ© de dĂ©ployer un modĂšle prĂ©-entraĂźnĂ©, oĂč l'utilisateur final doit simplement terminer l'entraĂźnement du modĂšle sur ses donnĂ©es spĂ©cifiques, facilitent Ă©galement le dĂ©marrage de l'application de l'apprentissage automatique. Ces avancĂ©es rendent l'apprentissage du machine learning beaucoup plus acessible tant pour les spĂ©cialistes que pour les entreprises dans leur ensemble.

D'un autre cĂŽtĂ©, nous recueillons de plus en plus de donnĂ©es. GrĂące Ă  une plateforme de donnĂ©es unifiĂ©e comme InterSystems IRIS, toutes ces informations peuvent ĂȘtre immĂ©diatement prĂ©parĂ©es et utilisĂ©es comme donnĂ©es d'entrĂ©e pour les modĂšles d'apprentissage automatique.

Avec le passage au cloud, le lancement de projets AI/ML devient plus facile que jamais. Nous pouvons consommer uniquement les ressources dont nous avons besoin. De plus, grùce à la parallélisation offerte par les plateformes cloud, nous pouvons économiser du temps.

Mais qu'en est-il des rĂ©sultats ? Ici, les choses deviennent plus complexes. Il existe de nombreux outils pour construire des modĂšles, dont je parlerai plus loin. Construire un bon modĂšle n'est pas facile, mais qu'en est-il ensuite ? Tirer profit de l'utilisation du modĂšle par l'entreprise est Ă©galement un dĂ©fi non nĂ©gligeable. Le cƓur du problĂšme rĂ©side dans la sĂ©paration des charges analytiques et transactionnelles, ainsi que des modĂšles de donnĂ©es. Lorsque nous entraĂźnons un modĂšle, nous le faisons gĂ©nĂ©ralement sur des donnĂ©es historiques. Mais l'endroit oĂč le modĂšle doit opĂ©rer est dans le traitement transactionnel des donnĂ©es. Quelle utilitĂ© a le meilleur modĂšle de dĂ©tection des transactions frauduleuses si nous ne l'exĂ©cutons qu'une fois par jour ? Les fraudeurs sont dĂ©jĂ  partis avec l'argent. Nous devons entraĂźner le modĂšle sur des donnĂ©es historiques, mais nous devons aussi l'appliquer en temps rĂ©el sur les nouvelles donnĂ©es entrantes afin que nos processus d'affaires puissent agir en fonction des prĂ©visions faites par le modĂšle.

Le ML Toolkit est un ensemble d'outils dont l'objectif est prĂ©cisĂ©ment cela : rĂ©unir les modĂšles et l'environnement transactionnel, afin que les modĂšles construits puissent ĂȘtre facilement utilisĂ©s directement dans vos processus d'affaires. Le Python Gateway fait partie du ML Toolkit et assure l'intĂ©gration avec le langage Python (similairement, le R Gateway, qui fait Ă©galement partie du ML Toolkit, assure l'intĂ©gration avec le langage R).

Outils

Avant de continuer, je voudrais décrire quelques outils et bibliothÚques Python que nous utiliserons plus tard.

Technologies

  • Python est un langage de programmation interprĂ©tĂ© de haut niveau Ă  usage gĂ©nĂ©ral. L'un des principaux avantages de ce langage est sa vaste bibliothĂšque de bibliothĂšques mathĂ©matiques, ML et AI. À l'instar d'ObjectScript, c'est un langage orientĂ© objet, mais tout est dĂ©fini dynamiquement, et non statiquement. Tout est Ă©galement un objet. Les articles ultĂ©rieurs supposeront une familiaritĂ© superficielle avec le langage. Si vous souhaitez commencer Ă  apprendre, je vous recommande de commencer par documentation.
  • Pour nos exercices suivants, installez Python 3.6.7 64 bits.
  • IDE : J'utilise PyCharm, mais en gĂ©nĂ©ral, il y en a beaucoup. Si vous utilisez Atelier, il existe un plugin Eclipse pour les dĂ©veloppeurs Python. Si vous utilisez VS Code, il existe une extension pour Python.
  • Notebook : au lieu d'un IDE, vous pouvez Ă©crire et partager vos scripts dans des notebooks en ligne. Le plus populaire d'entre eux est Jupyter.

BibliothĂšques

Voici une liste (non exhaustive) de bibliothĂšques pour l'apprentissage automatique :

  • Numpy — un paquet fondamental pour les calculs numĂ©riques.
  • Pandas — des structures de donnĂ©es Ă  haute performance et des outils d'analyse de donnĂ©es.
  • Matplotlib — crĂ©ation de graphiques.
  • Seaborn — visualisation de donnĂ©es basĂ©e sur matplotlib.
  • Sklearn — mĂ©thodes d'apprentissage automatique.
  • cuML — algorithmes d'apprentissage automatique basĂ©s sur la mĂ©thodologie du gradient boosting.
  • Gensim — NLP.
  • Keras — rĂ©seaux de neurones.
  • Tensorflow — plateforme pour crĂ©er des modĂšles d'apprentissage automatique.
  • PyTorch — plateforme pour crĂ©er des modĂšles d'apprentissage automatique orientĂ©e vers Python.
  • Nyoka — PMML Ă  partir de diffĂ©rents modĂšles.

Les technologies AI/ML permettent de rendre les entreprises plus efficaces et adaptables. De plus, aujourd'hui, ces technologies deviennent plus faciles Ă  dĂ©velopper et Ă  mettre en Ɠuvre. Commencez Ă  Ă©tudier les technologies AI/ML et comment elles peuvent aider votre organisation Ă  croĂźtre.

Installation

Il existe plusieurs façons d'installer et d'utiliser Python Gateway :

  • OS
    • Windows
    • Linux
    • Mac
  • Docker
    • Utilisez l'image de DockerHub
    • CrĂ©ez votre propre image

Peu importe la méthode d'installation, vous aurez besoin du code source. Le seul endroit pour télécharger le code est la page des versions. Elle contient des versions stables testées, il suffit de prendre la plus récente. Actuellement, c'est 0.8, mais de nouvelles versions viendront avec le temps. Ne clonez pas/téléchargez pas le dépÎt, téléchargez la derniÚre version.

OS

Si vous installez le Python Gateway sur un systÚme d'exploitation, il est d'abord nécessaire d'installer Python, quel que soit le systÚme d'exploitation.

  1. Installer Python 3.6.7 64 bits. Il est recommandé d'installer Python dans le répertoire par défaut.
  2. Installez le module dill: pip install dill.
  3. Téléchargez le code ObjectScript (c'est-à-dire do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) dans n'importe quelle zone avec des produits. Si vous souhaitez qu'une zone existante prenne en charge les produits, exécutez : write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. Placez callout DLL/SO/DYLIB dans le dossier bin de votre instance InterSystems IRIS. Le fichier de bibliothĂšque doit ĂȘtre accessible au chemin retournĂ© par write ##class(isc.py.Callout).GetLib().

Windows

  1. Assurez-vous que la variable d'environnement PYTHONHOME pointe vers Python 3.6.7.
  2. Assurez-vous que la variable d'environnement systÚme PATH contient la variable PYTHONHOME (ou le répertoire auquel elle pointe).

Linux (Debian/Ubuntu)

  1. Vérifiez que la variable d'environnement PATH contient /usr/lib et /usr/lib/x86_64-linux-gnu. Utilisez le fichier /etc/environment pour configurer les variables d'environnement.
  2. En cas d'erreurs undefined symbol: _Py_TrueStruct définissez la configuration PythonLib. De plus, dans Readme il y a une section Dépannage.

Mac

  1. Actuellement, seule la version Python 3.6.7 est prise en charge à partir de Python.org. Vérifiez la variable PATH.

Si vous avez modifié les variables d'environnement, redémarrez votre produit InterSystems.

Docker

L'utilisation de conteneurs présente plusieurs avantages :

  • PortabilitĂ©
  • EfficacitĂ©
  • Isolation
  • LĂ©gĂšretĂ©
  • ImmutabilitĂ©

Consultez cette série d'articles pour des informations plus détaillées sur l'utilisation de Docker avec les produits InterSystems.

Tous les builds du Python Gateway sont actuellement basés sur des conteneurs 2019.4.

Image prĂȘte

Exécutez : docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latest, pour télécharger et exécuter le Python Gateway avec l'édition communautaire d'InterSystems IRIS. C'est tout.

Créez votre propre image

Pour construire l'image Docker, exécutez à la racine du dépÎt : docker build --force-rm --tag intersystemscommunity/irispy:latest ..
Par défaut, l'image est construite à partir de l'image store/intersystems/iris-community:2019.4.0.383.0, mais vous pouvez modifier cela en définissant la variable IMAGE.
Pour construire Ă  partir d'InterSystems IRIS, exĂ©cutez : `docker build —build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 —force-rm —tag intersystemscommunity/irispy:latest.`

AprÚs cela, vous pouvez exécuter l'image Docker :

docker run -d 
  -p 52773:52773 
  -v //:/mount 
  --name irispy 
  intersystemscommunity/irispy:latest 
  --key /mount/iris.key

Si vous utilisez une image basée sur l'édition communautaire d'InterSystems IRIS, vous n'avez pas besoin de spécifier de clé.

Commentaires

  • Processus de test isc.py.test.Process sauvegarde une sĂ©rie d'images dans un rĂ©pertoire temporaire. Vous voudrez peut-ĂȘtre modifier ce chemin vers un rĂ©pertoire montĂ©. Pour ce faire, Ă©ditez le paramĂštre WorkingDir en spĂ©cifiant le rĂ©pertoire montĂ©.
  • Pour accĂ©der au terminal, exĂ©cutez : docker exec -it irispy sh.
  • AccĂšs au Portail de Gestion du SystĂšme avec le login SuperUser/SYS.
  • Pour arrĂȘter le conteneur, exĂ©cutez : docker stop irispy && docker rm --force irispy.

Vérification de l'installation

AprÚs avoir installé le Python Gateway, vérifiez qu'il fonctionne. Exécutez ce code dans le terminal InterSystems IRIS :

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

Cela devrait afficher HELLO — la valeur de la variable Python x. Si le statut retournĂ© sc est une erreur ou var vide, vĂ©rifiez Readme — section DĂ©pannage.

API

Python Gateway est installé, et vous avez vérifié qu'il fonctionne. Il est temps de commencer à l'utiliser !
L'interface principale de Python est isc.py.Main. Il propose les groupes de méthodes suivants (toutes retournent %Status):

  • ExĂ©cution du code
  • Transmission de donnĂ©es
  • MĂ©thodes auxiliaires

Exécution du code

Ces méthodes permettent d'exécuter du code Python arbitraire.

SimpleString

SimpleString — c'est la mĂ©thode principale. Elle accepte 4 arguments optionnels :

  • code — une chaĂźne de code Ă  exĂ©cuter. Le caractĂšre de nouvelle ligne : $c(10).
  • returnVariable — le nom de la variable Ă  retourner.
  • serialization — comment sĂ©rialiser. returnVariable. 0 — chaĂźne (par dĂ©faut), 1 — repr.
  • result — ByRef rĂ©fĂ©rence Ă  la variable dans laquelle la valeur est Ă©crite returnVariable.

Nous avons précédemment exécuté :

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

Dans cet exemple, nous attribuons Ă  la variable Python x la valeur Bonjour et voulons retourner la valeur de la variable Python x dans une variable ObjectScript var.

ExecuteCode

ExecuteCode est une alternative plus sûre et moins restrictive SimpleString.
Les chaßnes dans la plateforme InterSystems IRIS sont limitées à 3 641 144 caractÚres, et si vous souhaitez exécuter un morceau de code plus long, vous devez utiliser des workflows.
Deux arguments sont acceptés :

  • code — une chaĂźne ou un flux de code Python Ă  exĂ©cuter.
  • variable — (optionnel) attribue le rĂ©sultat de l'exĂ©cution code Ă  cette variable Python.

Exemple d'utilisation :

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

Dans cet exemple, nous multiplions 2 par 3 et enregistrons le résultat dans la variable Python y.

Transmission de données

Transférez des données entre Python et InterSystems IRIS.

Python -> InterSystems IRIS

Il existe 4 façons d'obtenir la valeur d'une variable Python dans InterSystems IRIS, selon la sérialisation dont vous avez besoin :

  • ChaĂźne pour les types de donnĂ©es simples et le dĂ©bogage.
  • Repr pour le stockage d'objets simples et le dĂ©bogage.
  • JSON pour manipuler facilement les donnĂ©es cĂŽtĂ© InterSystems IRIS.
  • Pickle pour la sauvegarde d'objets.

Ces méthodes permettent d'obtenir des variables Python sous forme de chaßnes ou de flux.

  • GetVariable(variable, serialization, .stream, useString) — obtenir serialization variable variable dans stream. Si useString Ă©gal Ă  1 et la sĂ©rialisation est placĂ©e dans une chaĂźne, donc renvoie une chaĂźne et non un flux.
  • GetVariableJson(variable, .stream, useString) — obtenir la sĂ©rialisation JSON de la variable.
  • GetVariablePickle(variable, .stream, useString, useDill) — obtenir la sĂ©rialisation Pickle (ou Dill) de la variable.

Essayons d'obtenir notre variable y.

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

InterSystems IRIS -> Python

Nous chargeons des données d'InterSystems IRIS dans Python.

  • ExecuteQuery(query, variable, type, namespace) — crĂ©e un ensemble de donnĂ©es (pandas dataframe ou list) d'une requĂȘte SQL et l'assigne Ă  une variable Python. variable. Le package isc.py doit ĂȘtre disponible dans la zone namespace — oĂč la requĂȘte sera exĂ©cutĂ©e.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) — charge les donnĂ©es d'un global global d'un sous-script start Ă  end dans Python comme une variable de type type: list, ou pandas. dataframe. La description des arguments optionnels masquer and labels est disponible dans la documentation de la classe et le dĂ©pĂŽt Data Transfer docs.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) — charge les donnĂ©es d'une classe class d'un id start Ă  end dans Python comme une variable de type type: list, ou pandas. dataframe. properties — liste (sĂ©parateur : virgule) des propriĂ©tĂ©s de classe Ă  charger dans l'ensemble de donnĂ©es. Les masques sont supportĂ©s. * et ?. Par dĂ©faut — * (toutes les propriĂ©tĂ©s). La propriĂ©tĂ© %%CLASSNAME est ignorĂ©e.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) — charge les donnĂ©es d'une table table d'un id start Ă  end dans Python.

ExecuteQuery — est universel (toute requĂȘte SQL valide sera transmise Ă  Python). Cependant, ExecuteGlobal et ses enveloppes ExecuteClass et ExecuteTable ont des limitations. Ils sont beaucoup plus rapides (3 Ă  5 fois plus rapides que le pilote ODBC et 20 fois plus rapides ExecuteQuery). Plus d'informations dans Data Transfer docs.
Toutes ces mĂ©thodes supportent le transfert de donnĂ©es depuis n'importe quelle zone. Le package isc.py doit ĂȘtre accessible dans la zone cible.

ExecuteQuery

ExecuteQuery(request, variable, type, namespace) — transmission des rĂ©sultats de toute requĂȘte SQL valide vers Python. C'est la mĂ©thode la plus lente pour transfĂ©rer des donnĂ©es. Utilisez-la si ExecuteGlobal et ses enveloppes ne sont pas disponibles.

Arguments :

  • query — requĂȘte SQL.
  • variable — nom de la variable Python dans laquelle les donnĂ©es sont Ă©crites.
  • type — list ou Pandas dataframe.
  • namespace — zone dans laquelle la requĂȘte sera exĂ©cutĂ©e.

ExecuteGlobal

ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) — transmission d'un global vers Python.

Arguments :

  • global — nom du global sans ^
  • variable — nom de la variable Python dans laquelle les donnĂ©es sont Ă©crites.
  • type — list ou Pandas dataframe.
  • start — premier sous-script du global. Obligatoire %Integer.
  • end — dernier sous-script du global. Obligatoire. %Integer.
  • masquer — masque de valeurs de la variable globale. La masque peut ĂȘtre plus courte que le nombre de champs dans la variable globale (dans ce cas, les champs Ă  la fin seront ignorĂ©s). Comment formater le masque :
    • + transfĂ©rer la valeur telle quelle.
    • - ignorer la valeur.
    • b — Type logique (0 — False, tout le reste — Vrai).
    • d — Date (Ă  partir de $horolog, sous Windows depuis 1970, sous Linux depuis 1900).
    • t — Heure ($horolog, secondes aprĂšs minuit).
    • m — Horodatage (chaĂźne au format ANNÉE-MOIS-JOUR HEURE:MINUTE:SECONDE).
  • labels — %Liste des noms de colonnes. Le premier Ă©lĂ©ment — le nom du sous-script.
  • namespace — zone dans laquelle la requĂȘte sera exĂ©cutĂ©e.

ExecuteClass

Enveloppe sur ExecuteGlobal. Prépare l'appel basé sur la définition de la classe ExecuteGlobal et l'appelle.

ExecuteClass(class, variable, type, start, end, properties, namespace) — passage de donnĂ©es de classe en Python.

Arguments :

  • class — nom de la classe
  • variable — nom de la variable Python dans laquelle les donnĂ©es sont Ă©crites.
  • type — list ou Pandas dataframe.
  • start — Id de dĂ©part.
  • end — Id de fin
  • properties — liste (sĂ©parateur : virgule) des propriĂ©tĂ©s de classe Ă  charger dans l'ensemble de donnĂ©es. Les masques sont supportĂ©s. * et ?. Par dĂ©faut — * (toutes les propriĂ©tĂ©s). La propriĂ©tĂ© %%CLASSNAME est ignorĂ©e.
  • namespace — zone dans laquelle la requĂȘte sera exĂ©cutĂ©e.

Toutes les propriĂ©tĂ©s sont transfĂ©rĂ©es telles quelles, sauf les propriĂ©tĂ©s des types te, %Heure, %BoolĂ©en et %Horodatage — elles sont converties en classes Python correspondantes.

ExecuteTable

Enveloppe sur ExecuteClass. Transmet le nom de la table au nom de la classe et l'appelle ExecuteClass. Signature :

ExecuteTable(table, variable, type, start, end, properties, namespace) — passage de donnĂ©es de table en Python.

Arguments :

  • table — nom de la table.
    Tous les autres arguments sont passés tels quels dans ExecuteClass.

Remarques

  • ExecuteGlobal, ExecuteClass et ExecuteTable fonctionnent aussi vite.
  • ExecuteGlobal 20 fois plus vite que ExecuteQuery sur de grands ensembles de donnĂ©es (temps de transfert supĂ©rieur Ă  >0.01 seconde).
  • ExecuteGlobal, ExecuteClass et ExecuteTable fonctionnent sur des variables globales avec cette structure : ^global(clef) = $lb(prop1, prop2, ..., propN) oĂč key — entier.
  • Pour ExecuteGlobal, ExecuteClass et ExecuteTable plage de valeurs acceptĂ©es te correspond Ă  la plage mktime et dĂ©pend du systĂšme d'exploitation (windows: 1970-01-01, linux 1900-01-01, mac). Utilisez %Horodatagepour transfĂ©rer des donnĂ©es en dehors de cette plage ou utilisez un dataframe pandas car cette limitation ne s'applique qu'Ă  la liste.
  • Pour ExecuteGlobal, ExecuteClass et ExecuteTable tous les arguments Ă  l'exception de la source de donnĂ©es (variable globale, classe ou table) et la variable sont optionnels.

Exemples

Classe de test isc.py.test.Person contient une méthode démontrant toutes les variantes de passage de données :

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"

// Arguments généraux
set variable = "df"
set type = "dataframe"
set start = 1
set end = $g(^isc.py.test.PersonD, start)

// Méthode 0 : ExecuteGlobal sans arguments
set sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 0, type)

// Méthode 1 : ExecuteGlobal avec arguments
// Lors de la transmission du global, les noms des champs sont définis manuellement
// globalKey - le nom du sous-script
set labels = $lb("globalKey", "Nom", "DOB", "TS", "RandomTime", "AgeYears", "AgeDecimal", "AgeDouble", "Bool")

// mask a un élément de moins que labels car "globalKey" - le nom du sous-script
// Nous omettons %%CLASSNAME
set mask = "-+dmt+++b"

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

// Méthode 2 : ExecuteClass
set sc = ##class(isc.py.Main).ExecuteClass(class, variable _ 2, type, start, end)

// Méthode 3 : ExecuteTable
set sc = ##class(isc.py.Main).ExecuteTable(table, variable _ 3, type, start, end)

// Méthode 4 : ExecuteTable
set sc = ##class(isc.py.Main).ExecuteQuery(query, variable _ 4, type)

Appelez la méthode do ##class(isc.py.test.Person).Test() pour voir comment fonctionnent toutes les méthodes de transmission de données.

Méthodes d'assistance

  • GetVariableInfo(variable, serialization, .defined, .type, .length) — obtenir des informations sur la variable : si elle est dĂ©finie, la classe et la longueur de la sĂ©rialisation.
  • GetVariableDefined(variable, .defined) — la variable est-elle dĂ©finie.
  • GetVariableType(variable, .type) — obtenir la classe de la variable.
  • GetStatus() — obtenir et supprimer la derniĂšre exception cĂŽtĂ© Python.
  • GetModuleInfo(module, .imported, .alias) — obtenir la variable du module et le statut d'importation.
  • GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments) — obtenir des informations sur la fonction.

Interopérabilité

Vous avez appris à appeler Python Gateway depuis le terminal, maintenant commençons à l'utiliser en production. La base de l'interaction avec Python dans ce mode est — isc.py.ens.Operation. Il nous permet de :

  • ExĂ©cuter du code Python
  • Sauvegarder/RĂ©cupĂ©rer le contexte Python
  • Charger et obtenir des donnĂ©es de Python

En principe, l'opĂ©ration Pyhton est un wrapper autour de isc.py.Main. L'opĂ©ration isc.py.ens.Operation permet d'interagir avec le processus Python depuis les productions InterSystems IRIS. Cinq types de requĂȘtes sont supportĂ©s :

  • isc.py.msg.ExecutionRequest pour exĂ©cuter le code Python. Renvoie isc.py.msg.ExecutionResponse avec le rĂ©sultat de l'exĂ©cution et les valeurs des variables demandĂ©es.
  • isc.py.msg.StreamExecutionRequest pour exĂ©cuter le code Python. Renvoie isc.py.msg.StreamExecutionResponse avec le rĂ©sultat de l'exĂ©cution et les valeurs des variables demandĂ©es. Semblable Ă  isc.py.msg.ExecutionRequest, mais accepte et renvoie des flux au lieu de chaĂźnes.
  • isc.py.msg.QueryRequest pour transmettre le rĂ©sultat de l'exĂ©cution de la requĂȘte SQL. Renvoie Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest pour transmettre des donnĂ©es de global/classe/table. Renvoie Ens.Response.
  • isc.py.msg.SaveRequest pour sauvegarder le contexte Python. Renvoie Ens.StringResponse avec l'identifiant de contexte.
  • isc.py.msg.RestoreRequest pour restaurer le contexte Python.

    De plus, isc.py.ens.Operation a deux paramĂštres :

    • Initializer — choix de la classe implĂ©mentant l'interface isc.py.init.Abstract. Il peut ĂȘtre utilisĂ© pour charger des fonctions, des modules, des classes, etc. Il s'exĂ©cute une seule fois au dĂ©marrage du processus.
    • PythonLib — (uniquement pour Linux) si vous voyez des erreurs lors du chargement, dĂ©finissez sa valeur Ă  libpython3.6m.so ou mĂȘme au chemin complet de la bibliothĂšque Python.

Création de processus métier

Deux classes sont disponibles pour faciliter le développement des processus métier :

  • isc.py.ens.ProcessUtils permet d'extraire des annotations des activitĂ©s avec substitution de variables.
  • isc.py.util.BPEmulator facilite le test des processus mĂ©tier avec Python. Il peut exĂ©cuter un processus mĂ©tier (parties en langage Python) dans le processus actuel.

Substitution de variables

Tous les processus mĂ©tier hĂ©ritĂ©s de isc.py.ens.ProcessUtils, peuvent utiliser la mĂ©thode GetAnnotation(name) pour obtenir la valeur de l'annotation d'une activitĂ© par son nom. L'annotation d'activitĂ© peut contenir des variables, qui seront calculĂ©es cĂŽtĂ© InterSystems IRIS avant d'ĂȘtre transmises Ă  Python. Voici la syntaxe de substitution de variables :

  • ${class:method:arg1:...:argN} — appel de mĂ©thode
  • #{expr} — exĂ©cuter du code en ObjectScript.

Un exemple est disponible dans le processus métier de test isc.py.test.Process, par exemple, dans l'activité Matrice de Corrélation : Graphique: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). Dans cet exemple :

  • #{process.WorkDirectory} renvoie la propriĂ©tĂ© WorkDirectory de l'objet process, qui est une instance de la classe isc.py.test.Process c'est-Ă -dire le processus mĂ©tier actuel.
  • ${%PopulateUtils:Integer:1:100} est cliquĂ©, cela appelle la mĂ©thode Entier classe %PopulateUtils, en passant les arguments 1 et 100, renvoyant un entier alĂ©atoire dans la plage 1...100.

Processus métier de test

Le produit de test et le processus métier de test sont disponibles par défaut dans le cadre du Python Gateway. Pour les utiliser :

  1. Exécutez dans le terminal de l'OS : pip install pandas matplotlib seaborn.
  2. Dans le terminal InterSystems IRIS, exécutez : do ##class(isc.py.test.CannibalizationData).Import() pour remplir les données de test.
  3. Lancez le produit isc.py.test.Production.
  4. Envoyer une requĂȘte de type Ens.Request dans isc.py.test.Process.

Voyons comment tout cela fonctionne ensemble. Ouvrez isc.py.test.Process dans l'éditeur BPL :

Python Gateway dans InterSystems IRIS

Exécution du code

L'appel le plus important — exĂ©cution du code Python :

Python Gateway dans InterSystems IRIS

UtilisĂ© une requĂȘte isc.py.msg.ExecutionRequest, voici ses propriĂ©tĂ©s :

  • Code — le code Python.
  • SeparateLines — sĂ©parer le code en lignes pour exĂ©cution. $c(10) (n) est utilisĂ© pour sĂ©parer les lignes. Notez qu'il n'est PAS recommandĂ© de traiter le message dans son ensemble, cette fonction est uniquement destinĂ©e Ă  traiter def et autres expressions multi-lignes. Par dĂ©faut, 0.
  • Variables — une liste de variables sĂ©parĂ©es par des virgules qui seront ajoutĂ©es Ă  la rĂ©ponse.
  • SĂ©rialisation — Comment sĂ©rialiser les variables que nous souhaitons retourner. Options : Str, Repr, JSON, Pickle et Dill, par dĂ©faut Str.

Dans notre cas, nous dĂ©finissons simplement la propriĂ©tĂ© Code, donc toutes les autres propriĂ©tĂ©s utilisent les valeurs par dĂ©faut. Nous le dĂ©finissons en appelant process.GetAnnotation("Import pandas"), qui, Ă  l'exĂ©cution, renvoie l'annotation aprĂšs avoir effectuĂ© le remplacement des variables. Au final, le code import pandas as pd sera transmis Ă  Python. GetAnnotation peut ĂȘtre utile pour obtenir des scripts Python multi-lignes, mais il n'y a aucune restriction sur ce moyen d'obtenir le code. Vous pouvez dĂ©finir la propriĂ©tĂ© Code de n'importe quelle maniĂšre qui vous convient.

Obtention des variables

Un autre appel intĂ©ressant utilisant isc.py.msg.ExecutionRequest — Matrice de CorrĂ©lation : Tabulaire:

Python Gateway dans InterSystems IRIS

Il calcule la Matrice de CorrĂ©lation cĂŽtĂ© Python et extrait la variable corrmat en retour dans InterSystems IRIS au format JSON, en dĂ©finissant les propriĂ©tĂ©s de la requĂȘte :

  • Variables: "corrmat"
  • SĂ©rialisation: "JSON"

Nous pouvons voir les résultats dans Visual Trace :

Python Gateway dans InterSystems IRIS

Et si nous avons besoin de cette valeur dans le BP, nous pouvons l'obtenir ainsi : callresponse.Variables.GetAt("corrmat").

Transmission de données

Parlons maintenant du passage des donnĂ©es d'InterSystems IRIS Ă  Python, toutes les requĂȘtes de passage de donnĂ©es implĂ©mentent l'interface isc.py.msg.DataRequest, qui fournit les propriĂ©tĂ©s suivantes :

  • Variable — la variable Python dans laquelle les donnĂ©es sont Ă©crites.
  • Type — type de variable : dataframe (dataframe pandas) ou list.
  • Namespace — l'espace Ă  partir duquel nous obtenons les donnĂ©es. Le package isc.py doit ĂȘtre accessible dans cet espace. Cela peut ĂȘtre un espace sans prise en charge des produits.

BasĂ© sur cette interface, 4 classes de requĂȘtes ont Ă©tĂ© implĂ©mentĂ©es :

  • isc.py.msg.QueryRequest — dĂ©finissez la propriĂ©tĂ© Query pour passer la requĂȘte SQL.
  • isc.py.msg.ClassRequest — dĂ©finissez la propriĂ©tĂ© Classe pour passer les donnĂ©es de la classe.
  • isc.py.msg.TableRequest — dĂ©finir la propriĂ©tĂ© Table pour passer les donnĂ©es de la table.
  • isc.py.msg.GlobalRequest — dĂ©finir la propriĂ©tĂ© Global pour passer les donnĂ©es globales.

Dans le processus de test, regardez l'activitĂ© RAW, oĂč isc.py.msg.QueryRequest illustrĂ© en action.

Python Gateway dans InterSystems IRIS

Sauvegarde/recuperation du contexte Python

Enfin, nous pouvons sauvegarder le contexte Python dans InterSystems IRIS, pour cela, nous enverrons isc.py.msg.SaveRequest avec les arguments :

  • Masque — Seules les variables correspondant au masque sont sauvegardĂ©es. Sont prises en charge * et ?. Exemple : "Data*, Figure?". Par dĂ©faut *.
  • MaxLength — Longueur maximale de la variable conservĂ©e. Si la sĂ©rialisation de la variable est plus longue, elle sera ignorĂ©e. DĂ©finissez 0 pour accepter des variables de n'importe quelle longueur. Par dĂ©faut $$$MaxStringLength.
  • Nom — Nom du contexte (optionnel).
  • Description — Description du contexte (optionnel).

Retourne Ens.StringResponse avec Id du contexte enregistré. Dans le processus de test, consultez l'activité Save Context.

La requĂȘte correspondante isc.py.msg.RestoreRequest charge le contexte depuis InterSystems IRIS en Python :

  • ContextId — identifiant du contexte.
  • Effacer — effacer le contexte avant la restauration.

Jupyter Notebook

Jupyter Notebook — il s'agit d'une application web open source qui permet de crĂ©er des notebooks contenant du code, des visualisations et du texte, et de les publier. Python Gateway permet de visualiser et d'Ă©diter les processus BPL sous forme de Jupyter Notebook. Notez qu'actuellement, l'exĂ©cuteur Python 3 standard est utilisĂ©.

Cette extension suppose que les annotations contiennent du code Python et utilisent les noms des activités comme les titres précédents. Il est désormais possible de développer des processus métiers PythonGateway dans Jupyter Notebook. Voici ce qui est possible :

  • CrĂ©er de nouveaux processus mĂ©tiers
  • Supprimer des processus mĂ©tiers
  • CrĂ©er de nouvelles activitĂ©s
  • Modifier des activitĂ©s
  • Supprimer des activitĂ©s

Voici vidéo de démonstration. Et quelques captures d'écran :

Explorateur de processus

Python Gateway dans InterSystems IRIS

Éditeur de processus

Python Gateway dans InterSystems IRIS

Installation

  1. Vous aurez besoin d'InterSystems IRIS 2019.2+.
  2. Installez PythonGateway v0.8+ (nécessaire uniquement isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints et isc.py.ens.ProcessUtils).
  3. Mettez à jour le code ObjectScript depuis le dépÎt.
  4. Exécutez do ##class(isc.py.util.Jupyter).Install() et suivez les instructions.

Documentation.

Conclusions

MLToolkit est un ensemble d'outils dont l'objectif est d'intĂ©grer les modĂšles et l'environnement transactionnel, afin que les modĂšles construits puissent ĂȘtre facilement utilisĂ©s directement dans vos processus mĂ©tiers. Python Gateway fait partie de MLToolkit et facilite l'intĂ©gration avec le langage Python, permettant d'orchestrer n'importe quel algorithme d'apprentissage automatique créé en Python (l'environnement principal pour de nombreux data scientists), utilisant de nombreuses bibliothĂšques prĂȘtes Ă  l'emploi pour crĂ©er rapidement des solutions analytiques adaptatives et robotisĂ©es AI/ML sur la plateforme InterSystems IRIS.

Liens

MLToolkit

Le groupe d'utilisateurs de MLToolkit est un dépÎt GitHub privé, créé dans le cadre de l'organisation GitHub d'InterSystems. Il s'adresse aux utilisateurs externes qui installent, étudient ou utilisent déjà des composants de MLToolkit, y compris le Python Gateway. Un certain nombre de cas d'utilisation (avec code source et données de test) dans les domaines du marketing, de la production, de la médecine et d'autres secteurs sont disponibles dans le groupe. Pour rejoindre le groupe d'utilisateurs de ML Toolkit, veuillez envoyer un court message par e-mail à l'adresse suivante : MLToolkit@intersystems.com et veuillez indiquer dans votre message les informations suivantes :

  • Nom d'utilisateur GitHub
  • Organisation (oĂč vous travaillez ou Ă©tudiez)
  • Poste (votre poste rĂ©el dans votre organisation, ou "Étudiant", ou "IndĂ©pendant").
  • Pays

À ceux qui ont lu l'article et qui sont intĂ©ressĂ©s par les possibilitĂ©s d'InterSystems IRIS en tant que plateforme pour le dĂ©veloppement ou le dĂ©ploiement de systĂšmes d'intelligence artificielle et d'apprentissage automatique, nous proposons de discuter des scĂ©narios pouvant intĂ©resser votre entreprise. Nous serons heureux d'analyser les besoins de votre entreprise et de dĂ©finir ensemble un plan d'action ; l'adresse e-mail de notre Ă©quipe d'experts AI/ML est - MLToolkit@intersystems.com.

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster