Passerelle Python chez InterSystems IRIS

Cet article concerne Python Gateway, un projet communautaire open source pour la plateforme de données InterSystems IRIS. Ce projet vous permet d'orchestrer tous les algorithmes d'apprentissage automatique créés en Python (l'environnement principal de nombreux Data Scientists), d'utiliser de nombreuses bibliothèques prêtes à l'emploi pour créer rapidement des solutions IA/ML analytiques robotiques et adaptatives sur la plateforme InterSystems IRIS. Dans cet article, je montrerai comment InterSystems IRIS peut orchestrer des processus en Python, communiquer efficacement des données bidirectionnelles et créer des processus métier intelligents.

Plan

  1. Présentation.
  2. Outils.
  3. Installation.
  4. API.
  5. Interopérabilité.
  6. Carnet Jupyter.
  7. Conclusions.
  8. Liens.
  9. Boîte à outils ML.

introduction

Python est un langage de programmation généraliste de haut niveau visant à améliorer la productivité des développeurs et la lisibilité du code. Dans cette série d'articles, je discuterai des possibilités d'utilisation de Python sur la plateforme InterSystems IRIS, l'objectif principal de cet article étant l'utilisation de Python comme langage pour créer et exécuter des modèles d'apprentissage automatique.

L'apprentissage automatique (ML) est une classe de méthodes d'intelligence artificielle dont la caractéristique n'est pas la solution directe d'un problème, mais l'apprentissage en cours de résolution de nombreux problèmes similaires.

Les algorithmes et modèles d’apprentissage automatique sont de plus en plus courants. Il y a de nombreuses raisons à cela, mais tout dépend de l’accessibilité, de la simplicité et de l’obtention de résultats pratiques. Le clustering ou même la modélisation de réseaux de neurones sont-ils une nouvelle technologie ?

Bien sûr que non, mais de nos jours, il n'est pas nécessaire d'écrire des centaines de milliers de lignes de code pour exécuter un seul modèle, et le coût de création et d'utilisation de modèles devient de moins en moins important.

Les outils évoluent - même si nous ne disposons pas d'outils d'IA/ML entièrement centrés sur l'interface graphique, les progrès que nous avons constatés avec de nombreuses autres classes de systèmes d'information, tels que la BI (de l'écriture de code à l'utilisation de frameworks et de solutions configurables centrées sur l'interface graphique), sont également observé dans les outils de création d’IA/ML. Nous avons déjà dépassé le stade de l'écriture de code et aujourd'hui nous utilisons des frameworks pour construire et entraîner des modèles.

D'autres améliorations, telles que la possibilité de distribuer 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 la mise en route du machine learning. Ces avancées rendent l’apprentissage automatique beaucoup plus facile tant pour les professionnels que pour les entreprises en général.

D’un autre côté, nous collectons de plus en plus de données. Avec une plateforme de données unifiée comme InterSystems IRIS, toutes ces informations peuvent être immédiatement préparées et utilisées comme entrée dans les modèles d'apprentissage automatique.

Avec le passage au cloud, le lancement de projets IA/ML devient plus facile que jamais. Nous ne pouvons consommer que les ressources dont nous avons besoin. De plus, grâce à la parallélisation proposée par les plateformes cloud, nous pouvons gagner du temps.

Mais qu’en est-il des résultats ? C'est là que les choses se compliquent. Il existe de nombreux outils pour créer des modèles, dont je parlerai ensuite. Construire un bon modèle n’est pas facile, mais que faire ensuite ? Tirer profit de l’utilisation d’un modèle économique est également une tâche non triviale. La racine du problème réside dans la séparation des charges de travail analytiques et transactionnelles et des modèles de données. Lorsque nous formons un modèle, nous le faisons généralement sur des données historiques. Mais la place du modèle construit est dans le traitement des données transactionnelles. À quoi sert le meilleur modèle de détection des transactions frauduleuses si nous l’exécutons une fois par jour ? Les escrocs sont depuis longtemps repartis avec l’argent. Nous devons entraîner le modèle sur des données historiques, mais nous devons également l'appliquer en temps réel sur de nouvelles données entrantes afin que nos processus métiers puissent agir sur les prédictions faites par le modèle.

Le ML Toolkit est un ensemble d'outils qui visent exactement cela : unifier les modèles et un environnement transactionnel afin que les modèles construits puissent être facilement utilisés directement dans vos processus métier. Python Gateway fait partie de ML Toolkit et fournit une intégration avec le langage Python (de la même manière que R Gateway, faisant partie de ML Toolkit, fournit une intégration avec le langage R).

Инструментарий

Avant de continuer, j'aimerais décrire quelques outils et bibliothèques Python que nous utiliserons plus tard.

de la technologie

  • Python est un langage de programmation interprété, de haut niveau et à usage général. Le principal avantage du langage est sa vaste bibliothèque de bibliothèques mathématiques, ML et IA. Comme ObjectScript, c'est un langage orienté objet, mais tout est défini de manière dynamique plutôt que statique. Aussi, tout est objet. Les articles ultérieurs supposent une familiarité passagère avec la langue. Si vous souhaitez commencer à apprendre, je vous recommande de commencer par documentation.
  • Pour nos exercices suivants, définissez Python 3.6.7 64 bits.
  • IDE : j'utilise PyCharm, mais en général ils много. 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.
  • Bloc-notes : au lieu d'un IDE, vous pouvez écrire et partager vos scripts dans des blocs-notes en ligne. Le plus populaire d'entre eux est Jupiter.

bibliothèques

Voici une liste (non exhaustive) de bibliothèques de machine learning :

  • Numpy — un package fondamental pour des calculs précis.
  • Pandas — des structures de données et des outils d'analyse de données performants.
  • matplotlib — création de graphiques.
  • marin — visualisation de données basée sur matplotlib.
  • Apprendre — méthodes d'apprentissage automatique.
  • XGBoost — des algorithmes d'apprentissage automatique dans le cadre de la méthodologie de boosting de gradient.
  • Gensim — PNL.
  • Keras - les réseaux de neurones.
  • Tensorflow — une plateforme de création de modèles d'apprentissage automatique.
  • PyTorch est une plateforme de création de modèles d'apprentissage automatique, axée sur Python.
  • Nyouka - PMML de différents modèles.

Les technologies IA/ML rendent les entreprises plus efficaces et plus adaptables. De plus, ces technologies deviennent aujourd’hui plus faciles à développer et à mettre en œuvre. Commencez à découvrir les technologies IA/ML et comment elles peuvent aider votre organisation à se développer.

Installation

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

  • OS
    • Windows
    • Linux/Unix
    • Mac
  • Docker
    • Utiliser une image de DockerHub
    • Créez votre propre look

Quelle que soit la méthode d'installation, vous aurez besoin du code source. Le seul endroit pour télécharger le code est page des versions. Il contient des versions stables testées, prenez simplement la dernière. Pour le moment, il est de 0.8, mais avec le temps, il y en aura de nouveaux. Ne clonez/téléchargez pas le référentiel, téléchargez la dernière version.

OS

Si vous installez Python Gateway sur un système d'exploitation, vous devez d'abord (quel que soit le système d'exploitation) installer Python. Pour ça:

  1. Installer Python 3.6.7 64 bits. Il est recommandé d'installer Python dans le répertoire par défaut.
  2. Installer 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. Endroit légende DLL/SO/DYLIB au dossier bin votre instance InterSystems IRIS. Le fichier de bibliothèque doit être disponible dans le chemin renvoyé 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 est PATH contient une variable PYTHONHOME (ou le répertoire vers lequel il pointe).

Linux (Debian/Ubuntu)

  1. Vérifiez que la variable d'environnement est PATH contient /usr/lib и /usr/lib/x86_64-linux-gnu. Utiliser le fichier /etc/environment pour définir les variables d'environnement.
  2. En cas d'erreurs undefined symbol: _Py_TrueStruct définir le paramètre PythonLib. aussi dans Lis-moi il y a une section Dépannage.

Mac

  1. Actuellement, seul Python 3.6.7 est pris en charge 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 de nombreux avantages :

  • Portabilité
  • Efficacité
  • Isolation
  • Légèreté
  • Immutabilité

Regarde ça série d'articles pour plus d'informations sur l'utilisation de Docker avec les produits InterSystems.

Toutes les versions de Python Gateway sont actuellement basées sur des conteneurs 2019.4.

Image prête

Courir: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latestpour télécharger et exécuter Python Gateway avec InterSystems IRIS Community Edition. C'est tout.

Créez votre propre look

Pour créer une image Docker, exécutez à la racine du référentiel : 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 changer cela en définissant une variable IMAGE.
Pour créer à 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 /<HOST-DIR-WITH-iris.key>/:/mount 
  --name irispy 
  intersystemscommunity/irispy:latest 
  --key /mount/iris.key

Si vous utilisez une image basée sur InterSystems IRIS Community Edition, vous pouvez omettre la clé.

Commentaires

  • Processus de test isc.py.test.Process enregistre un certain nombre d'images dans un répertoire temporaire. Vous souhaiterez peut-être modifier ce chemin vers le répertoire monté. Pour ce faire, modifiez le paramètre WorkingDir 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 par connexion SuperUser/SYS.
  • Pour arrêter le conteneur, exécutez : docker stop irispy && docker rm --force irispy.

Vérification de l'installation

Une fois que vous avez installé Python Gateway, cela vaut la peine de vérifier 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

Le résultat devrait être : HELLO — Valeur de la variable Python x. Si le statut de retour sc est une erreur ou var vide, vérifie Lisez-moi - 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 (tous renvoient %Status):

  • Exécution de code
  • Transfert de données
  • auxiliaire

Exécution de code

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

Chaîne simple

SimpleString - c'est la méthode principale. Il faut 4 arguments facultatifs :

  • code — ligne de code à exécuter. Caractère de saut de ligne : $c(10).
  • returnVariable — nom de la variable à renvoyer.
  • serialization - comment sérialiser returnVariable. 0 — chaîne (par défaut), 1 — repr.
  • result — Référence ByRef à la variable dans laquelle la valeur est écrite returnVariable.

Ci-dessus, nous avons fait :

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

Dans cet exemple, nous attribuons à une variable Python x значение Hello et je souhaite renvoyer la valeur d'une variable Python x à une variable ObjectScript var.

Exécuter le code

ExecuteCode est une alternative plus sûre et moins restrictive SimpleString.
Les lignes de 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 threads.
Deux arguments sont retenus :

  • code — une ligne ou un flux de code Python à exécuter.
  • variable — (facultatif) attribue le résultat de l'exécution code cette variable Python.

Exemple à utiliser :

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

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

Transfert de données

Transmettez des données vers et depuis Python.

Python -> InterSystèmes 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 :

  • String pour les types de données simples et le débogage.
  • Repr pour stocker des objets simples et déboguer.
  • JSON pour faciliter la manipulation des données du côté d'InterSystems IRIS.
  • Pickle pour sauvegarder des objets.

Ces méthodes vous permettent de récupérer des variables de Python sous forme de chaîne ou de flux.

  • GetVariable(variable, serialization, .stream, useString) - obtenir serialization variable variable в stream. Si useString vaut 1 et la sérialisation est placée sur une chaîne, puis une chaîne est renvoyée et non un flux.
  • GetVariableJson(variable, .stream, useString) - obtenez la sérialisation JSON d'une variable.
  • GetVariablePickle(variable, .stream, useString, useDill) -obtenir la sérialisation Pickle (ou Dill) d'une variable.

Essayons d'obtenir notre variable y.

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

InterSystèmes IRIS -> Python

Chargement des données d'InterSystems IRIS vers Python.

  • ExecuteQuery(query, variable, type, namespace) - crée un ensemble de données (pandas dataframe ou list) à partir de la requête SQL et la définit sur une variable Python variable. Sac plastique isc.py doit être disponible dans la région namespace — la demande y sera exécutée.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) - charge les données globales global à partir de l'indice start à end en Python en tant que variable de type type: list, ou des pandas dataframe. Description des arguments facultatifs mask ainsi que labels disponible dans la documentation de classe et dans le référentiel Documents sur le transfert de données.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) - charge les données de classe class à partir de l'identifiant start à end en Python en tant que variable de type type: list, ou des pandas dataframe. properties — une liste (séparées par une virgule) de propriétés de classe qui doivent être chargées dans l'ensemble de données. Masques pris en charge * и ?. Défaut - * (toutes les propriétés). Propriété %%CLASSNAME ignoré.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) - charge les données du tableau table à partir de l'identifiant start à end en Python.

ExecuteQuery — universel (toute requête SQL correcte sera transmise à Python). Cependant, ExecuteGlobal et ses emballages ExecuteClass и ExecuteTable travailler avec un certain nombre de restrictions. Ils sont beaucoup plus rapides (3 à 5 fois plus rapides que le pilote ODBC et 20 fois plus rapides ExecuteQuery). Plus d'informations à Documents sur le transfert de données.
Toutes ces méthodes prennent en charge le transfert de données depuis n'importe quelle zone. Sac plastique isc.py doit être disponible dans la zone cible.

Exécuter l'ordre

ExecuteQuery(request, variable, type, namespace) — transférer les résultats de toute requête SQL correcte vers Python. Il s'agit de la méthode de transfert de données la plus lente. Utilisez-le si ExecuteGlobal et ses wrappers ne sont pas disponibles.

Arguments:

  • query - requête SQL.
  • variable — le nom de la variable Python dans laquelle les données sont écrites.
  • type - list ou des pandas dataframe.
  • namespace — la zone dans laquelle la demande sera exécutée.

ExécuterGlobal

ExecuteGlobal(global, variable, type, start, end, mask, labelels, namespace) - passer un global en Python.

Arguments:

  • global - nom global sans ^
  • variable — le nom de la variable Python dans laquelle les données sont écrites.
  • type - list ou des pandas dataframe.
  • start — le premier indice du global. Nécessairement %Integer.
  • end — le dernier indice du global. Nécessairement %Integer.
  • mask — masque de valeur globale. Le masque peut être plus court que le nombre de champs dans le global (auquel cas les champs à la fin seront ignorés). Comment formater un masque :
    • + transmettez la valeur telle quelle.
    • - sauter la valeur.
    • b — Type booléen (0 - False, tout le reste - True).
    • d — Date (à partir de $horolog, sous Windows à partir de 1970, sous Linux à partir de 1900).
    • t — Heure ($horloge, secondes après minuit).
    • m — Horodatage (chaîne de format ANNÉE-MOIS-JOUR HEURE:MINUTE:SECOND).
  • labels — %Liste des noms de colonnes. Le premier élément est le nom de l'indice.
  • namespace — la zone dans laquelle la demande sera exécutée.

ExécuterClass

Envelopper ExecuteGlobal. Sur la base de la définition de la classe, prépare un appel ExecuteGlobal et l'appelle.

ExecuteClass(class, variable, type, start, end, properties, namespace) - transmettre des données de classe en Python.

Arguments:

  • class - nom du cours
  • variable — le nom de la variable Python dans laquelle les données sont écrites.
  • type - list ou des pandas dataframe.
  • start — identifiant de départ.
  • end — identifiant final
  • properties — une liste (séparées par une virgule) de propriétés de classe qui doivent être chargées dans l'ensemble de données. Masques pris en charge * и ?. Défaut - * (toutes les propriétés). Propriété %%CLASSNAME ignoré.
  • namespace — la zone dans laquelle la demande sera exécutée.

Toutes les propriétés sont transmises telles quelles, à l'exception des propriétés de type %Date, %Time, %Boolean и %TimeStamp - ils sont convertis dans les classes Python correspondantes.

ExécuterTable

Envelopper ExecuteClass. Traduit le nom de la table en nom de classe et appelle ExecuteClass. Signature:

ExecuteTable(table, variable, type, start, end, properties, namespace) - transmettre les données de la table à Python.

Arguments:

  • table - nom de la table.
    Tous les autres arguments sont transmis tels quels à ExecuteClass.

Remarques

  • ExecuteGlobal, ExecuteClass и ExecuteTable travailler tout aussi vite.
  • ExecuteGlobal 20 fois plus rapide que ExecuteQuery sur de grands ensembles de données (temps de transfert >0.01 seconde).
  • ExecuteGlobal, ExecuteClass и ExecuteTable travailler sur des globales avec cette structure : ^global(key) = $lb(prop1, prop2, ..., propN)key - un nombre entier.
  • Pour ExecuteGlobal, ExecuteClass и ExecuteTable plage de valeurs prise en charge %Date correspond à la gamme mktime et dépend du système d'exploitation (fenêtres: 1970/01/01, linux 1900-01-01, mac). Utiliser %TimeStamppour transférer des données en dehors de cette plage ou utiliser le dataframe pandas car il s'agit d'une limitation de liste uniquement.
  • Pour ExecuteGlobal, ExecuteClass и ExecuteTable tous les arguments, à l'exception de la source de données (globale, classe ou table) et de la variable, sont facultatifs.

Exemples

Classe d'essai isc.py.test.Personne contient une méthode démontrant toutes les options de transfert 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"

// Общие аргументы
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)

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

Méthodes d'assistance

  • GetVariableInfo(variable, serialization, .defined, .type, .length) — obtenir des informations sur la variable : si elle est définie, sa classe et sa longueur de sérialisation.
  • GetVariableDefined(variable, .defined) — si la variable est définie.
  • GetVariableType(variable, .type) - récupère la classe de la variable.
  • GetStatus() - récupère et supprime 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, commençons maintenant à l'utiliser en production. La base pour interagir avec Python dans ce mode est isc.py.ens.Operation. Cela nous permet :

  • Exécuter du code en Python
  • Enregistrer/Restaurer le contexte Python
  • Charger et recevoir des données de Python

Fondamentalement, une opération Python est un wrapper sur isc.py.Main. Opération isc.py.ens.Operation offre la possibilité d'interagir avec le processus Python à partir des produits InterSystems IRIS. Cinq requêtes sont prises en charge :

  • isc.py.msg.ExecutionRequest pour exécuter du code Python. Retour 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 du code Python. Retour isc.py.msg.StreamExecutionResponse le résultat de l'exécution et les valeurs des variables demandées. Analogue 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 d'une requête SQL. Retour Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest pour transmettre des données globales/classe/table. Retour Ens.Response.
  • isc.py.msg.SaveRequest pour enregistrer le contexte Python. Retour Ens.StringResponse avec l'ID de contexte.
  • isc.py.msg.RestoreRequest pour restaurer le contexte Python.

    En outre, isc.py.ens.Operation a deux paramètres :

    • Initializer — sélection d'une classe qui implémente l'interface isc.py.init.Abstract. Il peut être utilisé pour charger des fonctions, des modules, des classes, etc. Il est exécuté une fois au démarrage du processus.
    • PythonLib - (Linux uniquement) si vous voyez des erreurs lors du chargement, définissez sa valeur sur libpython3.6m.so ou même dans le chemin complet de la bibliothèque Python.

Création de processus métiers

Il existe deux classes disponibles qui facilitent le développement de processus métier :

  • isc.py.ens.ProcessUtils vous permet d'extraire des annotations d'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 Python) dans le processus en cours.

Substitution de variables

Tous les processus métiers hérités de isc.py.ens.ProcessUtils, peut utiliser la méthode GetAnnotation(name) pour obtenir la valeur de l'annotation d'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 variable :

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

Un exemple est disponible dans le processus métier de test isc.py.test.Process, par exemple, en activité Correlation Matrix: Graph: 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 ceux. processus commercial actuel.
  • ${%PopulateUtils:Integer:1:100} appelle une méthode Integer Classe %PopulateUtils, en passant des arguments 1 и 100, renvoyant un entier aléatoire dans la plage 1...100.

Tester le processus métier

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

  1. Dans le terminal du système d'exploitation, exécutez : 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. Lancement de produits isc.py.test.Production.
  4. Envoyer le type de demande Ens.Request в isc.py.test.Process.

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

Passerelle Python chez InterSystems IRIS

Exécution de code

Le défi le plus important consiste à exécuter du code Python :

Passerelle Python chez InterSystems IRIS

Requête utilisée isc.py.msg.ExecutionRequest, voici ses propriétés :

  • Code -Code Python.
  • SeparateLines — s'il faut diviser le code en lignes pour l'exécution. $c(10) (n) est utilisé pour séparer les chaînes. Veuillez noter qu'il n'est PAS recommandé de traiter l'intégralité du message d'un coup, cette fonction est uniquement destinée à traiter def et expressions multilignes similaires. Défaut 0.
  • Variables — une liste de variables séparées par des virgules qui seront ajoutées à la réponse.
  • Serialization — Comment sérialiser les variables que l'on souhaite renvoyer. Possibilités : Str, Repr, JSON, Pickle и Dill, défaut Str.

Dans notre cas, nous définissons uniquement 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 au moment de l'exécution renvoie une annotation après la substitution de variable. Après tout, le code import pandas as pd sera transmis à Python. GetAnnotation peut être utile pour obtenir des scripts Python multilignes, mais il n'y a aucune restriction sur cette méthode d'obtention de code. Vous pouvez définir la propriété Code de quelque manière que ce soit qui vous convient.

Obtenir des variables

Un autre défi intéressant utilisant isc.py.msg.ExecutionRequest - Correlation Matrix: Tabular:

Passerelle Python chez InterSystems IRIS

Il calcule la matrice de corrélation côté Python et extrait la variable corrmat revenez à InterSystems IRIS au format JSON en définissant les propriétés de la requête :

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

Nous pouvons voir les résultats dans Visual Trace :

Passerelle Python chez InterSystems IRIS

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

Transfert de données

Parlons ensuite du transfert de données d'InterSystems IRIS vers Python ; toutes les demandes de transfert de données implémentent l'interface isc.py.msg.DataRequestqui fournit les propriétés suivantes :

  • Variable — une variable Python dans laquelle les données sont écrites.
  • Type — type de variable : dataframe (trame de données pandas) ou list.
  • Namespace — la zone à partir de laquelle nous recevons des données. Sac plastique isc.py devrait être disponible dans cette zone. Il peut s'agir d'un domaine sans support produit.

Sur la base de cette interface, 4 classes de requêtes sont implémentées :

  • isc.py.msg.QueryRequest - définir la propriété Query pour envoyer une requête SQL.
  • isc.py.msg.ClassRequest - définir la propriété Class pour transmettre les données de classe.
  • isc.py.msg.TableRequest - définir la propriété Table pour transférer les données du tableau.
  • isc.py.msg.GlobalRequest - définir la propriété Global pour le transfert global de données.

Dans le processus de test, regardez l'activité RAWisc.py.msg.QueryRequest montré en action.

Passerelle Python chez InterSystems IRIS

Sauvegarde/restauration du contexte Python

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

  • Mask — Seules les variables correspondant au masque sont enregistrées. Prise en charge * и ?. Exemple: "Data*, Figure?"... Défaut *.
  • MaxLength — La longueur maximale de la variable stockée. Si la sérialisation d'une variable est plus longue, elle sera ignorée. Réglez sur 0 pour obtenir des variables de n'importe quelle longueur. Défaut $$$MaxStringLength.
  • Name — Nom du contexte (facultatif).
  • Description — Description du contexte (facultatif).

Retours Ens.StringResponse с Id contexte enregistré. Dans le processus de test, regardez l'activité Save Context.

Demande correspondante isc.py.msg.RestoreRequest charge le contexte d'InterSystems IRIS dans Python :

  • ContextId — identifiant de contexte.
  • Clear - effacez le contexte avant de restaurer.

Jupyter Notebook

Jupyter Notebook est une application Web open source qui vous permet de créer et de publier des blocs-notes contenant du code, des visualisations et du texte. Python Gateway vous permet d'afficher et de modifier les processus BPL sous la forme d'un Jupyter Notebook. Veuillez noter que l'exécuteur Python 3 normal est actuellement utilisé.

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

  • Créer de nouveaux processus métier
  • Supprimer des processus métier
  • Créer de nouvelles activités
  • Changer d'activité
  • Supprimer des activités

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

Explorateur de processus

Passerelle Python chez InterSystems IRIS

Éditeur de processus

Passerelle Python chez InterSystems IRIS

Installation

  1. Vous aurez besoin d'InterSystems IRIS 2019.2+.
  2. Installez PythonGateway v0.8+ (uniquement requis isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints и isc.py.ens.ProcessUtils).
  3. Mettez à jour le code ObjectScript à partir du référentiel.
  4. Exécuter do ##class(isc.py.util.Jupyter).Install() et suivez les instructions.

Documentation.

résultats

MLToolkit est un ensemble d'outils dont le but est de combiner des modèles et un environnement transactionnel afin que les modèles construits puissent être facilement utilisés directement dans vos processus métier. Python Gateway fait partie de MLToolkit et fournit une intégration avec le langage Python, vous permettant d'orchestrer tous les algorithmes d'apprentissage automatique créés en Python (l'environnement principal de nombreux Data Scientists), d'utiliser de nombreuses bibliothèques prêtes à l'emploi pour créer rapidement une IA analytique robotique adaptative. Solutions ML sur la plateforme InterSystems IRIS.

références

Boîte à outils ML

Le groupe d'utilisateurs MLToolkit est un référentiel GitHub privé créé dans le cadre de l'organisation GitHub d'entreprise InterSystems. Il est destiné aux utilisateurs externes qui installent, apprennent ou utilisent déjà les composants MLToolkit, y compris Python Gateway. Le groupe dispose d'un certain nombre de cas implémentés (avec code source et données de test) dans les domaines du marketing, de la fabrication, de la médecine et bien d'autres industries. Pour rejoindre le groupe d'utilisateurs ML Toolkit, veuillez envoyer un court e-mail à l'adresse suivante : [email protected] et incluez les informations suivantes dans votre lettre :

  • Nom d'utilisateur GitHub
  • Organisation (vous travaillez ou étudiez)
  • Poste (votre poste actuel dans votre organisation, soit « Étudiant » ou « Indépendant »).
  • pays

Pour ceux qui ont lu l'article et qui sont intéressés par les capacités d'InterSystems IRIS en tant que plateforme de développement ou d'hébergement de moteurs d'intelligence artificielle et d'apprentissage automatique, nous vous invitons à discuter de scénarios possibles qui intéressent votre entreprise. Il nous fera plaisir d’analyser les besoins de votre entreprise et de déterminer conjointement un plan d’action ; Adresse e-mail de contact de notre équipe d’experts AI/ML – [email protected].

Source: habr.com

Ajouter un commentaire