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
- Introduction.
- Outils.
- Installation.
- API.
- Interopérabilité.
- Jupyter Notebook.
- Conclusions.
- Liens.
- 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 .
- Pour nos exercices suivants, installez .
- IDE : J'utilise , mais en général, il y en a . 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 .
BibliothĂšques
Voici une liste (non exhaustive) de bibliothĂšques pour l'apprentissage automatique :
- â un paquet fondamental pour les calculs numĂ©riques.
- â des structures de donnĂ©es Ă haute performance et des outils d'analyse de donnĂ©es.
- â crĂ©ation de graphiques.
- â visualisation de donnĂ©es basĂ©e sur matplotlib.
- â mĂ©thodes d'apprentissage automatique.
- â algorithmes d'apprentissage automatique basĂ©s sur la mĂ©thodologie du gradient boosting.
- â NLP.
- â rĂ©seaux de neurones.
- â plateforme pour crĂ©er des modĂšles d'apprentissage automatique.
- â plateforme pour crĂ©er des modĂšles d'apprentissage automatique orientĂ©e vers Python.
- â 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 . 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.
- . Il est recommandé d'installer Python dans le répertoire par défaut.
- Installez le module
dill:pip install dill. - 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). - Placez dans le dossier
binde votre instance InterSystems IRIS. Le fichier de bibliothĂšque doit ĂȘtre accessible au chemin retournĂ© parwrite ##class(isc.py.Callout).GetLib().
Windows
- Assurez-vous que la variable d'environnement
PYTHONHOMEpointe vers Python 3.6.7. - Assurez-vous que la variable d'environnement systĂšme
PATHcontient la variablePYTHONHOME(ou le répertoire auquel elle pointe).
Linux (Debian/Ubuntu)
- Vérifiez que la variable d'environnement
PATHcontient/usr/libet/usr/lib/x86_64-linux-gnu. Utilisez le fichier/etc/environmentpour configurer les variables d'environnement. - En cas d'erreurs
undefined symbol: _Py_TrueStructdéfinissez la configurationPythonLib. De plus, dans il y a une section Dépannage.
Mac
- Actuellement, seule la version Python 3.6.7 est prise en charge à partir de . 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 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.keySi 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.Processsauvegarde 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ĂštreWorkingDiren 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 varCela devrait afficher HELLO â la valeur de la variable Python x. Si le statut retournĂ© sc est une erreur ou var vide, vĂ©rifiez .
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 Ă©critereturnVariable.
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Ă©cutioncodeĂ 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ßnepour les types de données simples et le débogage.Reprpour le stockage d'objets simples et le débogage.JSONpour manipuler facilement les données cÎté InterSystems IRIS.Picklepour 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)â obtenirserializationvariablevariabledansstream. SiuseStringĂ©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
>6InterSystems IRIS -> Python
Nous chargeons des données d'InterSystems IRIS dans Python.
ExecuteQuery(query, variable, type, namespace)â crĂ©e un ensemble de donnĂ©es (pandasdataframeoulist) d'une requĂȘte SQL et l'assigne Ă une variable Python.variable. Le packageisc.pydoit ĂȘtre disponible dans la zonenamespaceâ oĂč la requĂȘte sera exĂ©cutĂ©e.ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace)â charge les donnĂ©es d'un globalglobald'un sous-scriptstartĂenddans Python comme une variable de typetype:list, ou pandas.dataframe. La description des arguments optionnelsmasquerandlabelsest disponible dans la documentation de la classe et le dĂ©pĂŽt .ExecuteClass(class, variable, type, start, end, properties, namespace)â charge les donnĂ©es d'une classeclassd'un idstartĂenddans Python comme une variable de typetype: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Ă©%%CLASSNAMEest ignorĂ©e.ExecuteTable(table, variable, type, start, end, properties, namespace)â charge les donnĂ©es d'une tabletabled'un idstartĂenddans 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 .
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âlistou Pandasdataframe.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âlistou Pandasdataframe.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 classevariableâ nom de la variable Python dans laquelle les donnĂ©es sont Ă©crites.typeâlistou Pandasdataframe.startâ Id de dĂ©part.endâ Id de finpropertiesâ 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Ă©%%CLASSNAMEest 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 dansExecuteClass.
Remarques
ExecuteGlobal,ExecuteClassetExecuteTablefonctionnent aussi vite.ExecuteGlobal20 fois plus vite queExecuteQuerysur de grands ensembles de donnĂ©es (temps de transfert supĂ©rieur Ă >0.01 seconde).ExecuteGlobal,ExecuteClassetExecuteTablefonctionnent sur des variables globales avec cette structure :^global(clef) = $lb(prop1, prop2, ..., propN)oĂčkeyâ entier.- Pour
ExecuteGlobal,ExecuteClassetExecuteTableplage de valeurs acceptéestecorrespond à la plagemktimeet dépend du systÚme d'exploitation (: 1970-01-01, 1900-01-01, ). 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,ExecuteClassetExecuteTabletous les arguments à l'exception de la source de données (variable globale, classe ou table) et la variable sont optionnels.
Exemples
Classe de test 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.ExecutionRequestpour exĂ©cuter le code Python. Renvoieisc.py.msg.ExecutionResponseavec le rĂ©sultat de l'exĂ©cution et les valeurs des variables demandĂ©es.isc.py.msg.StreamExecutionRequestpour exĂ©cuter le code Python. Renvoieisc.py.msg.StreamExecutionResponseavec 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.QueryRequestpour transmettre le rĂ©sultat de l'exĂ©cution de la requĂȘte SQL. RenvoieEns.Response.isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequestpour transmettre des donnĂ©es de global/classe/table. RenvoieEns.Response.isc.py.msg.SaveRequestpour sauvegarder le contexte Python. RenvoieEns.StringResponseavec l'identifiant de contexte.isc.py.msg.RestoreRequestpour restaurer le contexte Python.De plus,
isc.py.ens.Operationa deux paramĂštres :Initializerâ choix de la classe implĂ©mentant l'interfaceisc.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.soou 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.ProcessUtilspermet d'extraire des annotations des activités avec substitution de variables.isc.py.util.BPEmulatorfacilite 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'objetprocess, qui est une instance de la classeisc.py.test.Processc'est-à -dire le processus métier actuel.${%PopulateUtils:Integer:1:100}est cliqué, cela appelle la méthodeEntierclasse%PopulateUtils, en passant les arguments1et100, renvoyant un entier aléatoire dans la plage1...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 :
- Exécutez dans le terminal de l'OS :
pip install pandas matplotlib seaborn. - Dans le terminal InterSystems IRIS, exécutez :
do ##class(isc.py.test.CannibalizationData).Import()pour remplir les données de test. - Lancez le produit
isc.py.test.Production. - Envoyer une requĂȘte de type
Ens.Requestdansisc.py.test.Process.
Voyons comment tout cela fonctionne ensemble. Ouvrez isc.py.test.Process dans l'éditeur BPL :

Exécution du code
L'appel le plus important â exĂ©cution du code Python :

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 Ă traiterdefet 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,PickleetDill, par dĂ©fautStr.
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:

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 :

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) oulist.Namespaceâ l'espace Ă partir duquel nous obtenons les donnĂ©es. Le packageisc.pydoit ĂȘ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Ă©Querypour passer la requĂȘte SQL.isc.py.msg.ClassRequestâ dĂ©finissez la propriĂ©tĂ©Classepour passer les donnĂ©es de la classe.isc.py.msg.TableRequestâ dĂ©finir la propriĂ©tĂ©Tablepour passer les donnĂ©es de la table.isc.py.msg.GlobalRequestâ dĂ©finir la propriĂ©tĂ©Globalpour passer les donnĂ©es globales.
Dans le processus de test, regardez l'activitĂ© RAW, oĂč isc.py.msg.QueryRequest illustrĂ© en action.

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
â 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 . Et quelques captures d'écran :
Explorateur de processus

Ăditeur de processus

Installation
- Vous aurez besoin d'InterSystems IRIS 2019.2+.
- Installez PythonGateway v0.8+ (nécessaire uniquement
isc.py.util.Jupyter,isc.py.util.JupyterCheckpointsetisc.py.ens.ProcessUtils). - Mettez à jour le code ObjectScript depuis le dépÎt.
- Exécutez
do ##class(isc.py.util.Jupyter).Install()et suivez les instructions.
.
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 : 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 - .
Source : habr.com
