Python Gateway en InterSystems IRIS

Este artigo trata sobre Python Gateway, un proxecto comunitario de código aberto para a plataforma de datos InterSystems IRIS. Este proxecto permítelle orquestrar calquera algoritmo de aprendizaxe automática creado en Python (o ambiente principal para moitos científicos de datos), usar numerosas bibliotecas preparadas para crear rapidamente solucións de IA/ML analíticas e adaptativas na plataforma InterSystems IRIS. Neste artigo, mostrarei como InterSystems IRIS pode orquestrar procesos en Python, comunicar de forma eficiente datos bidireccionais e crear procesos comerciais intelixentes.

Planificar

  1. Introdución.
  2. Ferramentas.
  3. Instalación
  4. API.
  5. Interoperabilidade.
  6. Caderno Jupyter.
  7. Conclusións.
  8. Ligazóns.
  9. MLToolkit.

Introdución

Python é unha linguaxe de programación de alto nivel e de propósito xeral destinada a mellorar a produtividade dos desenvolvedores e a lexibilidade do código. Nesta serie de artigos, falarei das posibilidades de usar Python na plataforma InterSystems IRIS, sendo o foco principal deste artigo o uso de Python como linguaxe para crear e executar modelos de aprendizaxe automática.

A aprendizaxe automática (ML) é unha clase de métodos de intelixencia artificial, cuxa característica non é a solución directa dun problema, senón a aprendizaxe no proceso de resolución de moitos problemas similares.

Os algoritmos e modelos de aprendizaxe automática son cada vez máis comúns. Hai moitas razóns para iso, pero todo se reduce á accesibilidade, á sinxeleza e á consecución de resultados prácticos. A agrupación ou mesmo o modelado de redes neuronais é unha nova tecnoloxía?

Por suposto que non, pero hoxe en día non hai necesidade de escribir centos de miles de liñas de código para executar un só modelo, e o custo de crear e utilizar modelos cada vez é menor.

As ferramentas están evolucionando: aínda que non dispoñemos de ferramentas de IA/ML totalmente centradas na GUI, o progreso que vimos con moitas outras clases de sistemas de información, como a BI (desde escribir código ata usar marcos e solucións configurables centradas na GUI), é tamén se observa nas ferramentas para crear AI/ML. Xa pasamos a fase de escritura de código e hoxe utilizamos frameworks para construír e adestrar modelos.

Outras melloras, como a posibilidade de distribuír un modelo adestrado previamente onde o usuario final simplemente ten que rematar de adestrar o modelo sobre os seus datos específicos, tamén facilitan o inicio da aprendizaxe automática. Estes avances fan que a aprendizaxe automática sexa moito máis sinxela tanto para os profesionais como para as empresas en xeral.

Por outra banda, cada vez estamos a recoller máis datos. Cunha plataforma de datos unificada como InterSystems IRIS, toda esta información pódese preparar inmediatamente e usar como entrada para modelos de aprendizaxe automática.

Co paso á nube, lanzar proxectos de IA/ML é máis fácil que nunca. Só podemos consumir os recursos que necesitamos. Ademais, grazas á paralelización que ofrecen as plataformas na nube, podemos aforrar tempo dedicado.

Pero que hai dos resultados? Aquí é onde as cousas se complican máis. Hai moitas ferramentas para construír modelos, que comentarei a continuación. Construír un bo modelo non é sinxelo, pero que segue? Obter un beneficio coa utilización dun modelo de negocio tamén é unha tarefa non trivial. A raíz do problema é a separación das cargas de traballo analíticas e transaccionais e os modelos de datos. Cando adestramos un modelo, adoitamos facelo con datos históricos. Pero o lugar para o modelo construído está no procesamento de datos transaccionais. De que serve o mellor modelo de detección de transaccións fraudulentas se o executamos unha vez ao día? Hai tempo que os estafadores marcharon cos cartos. Necesitamos adestrar o modelo en datos históricos, pero tamén hai que aplicalo en tempo real en novos datos entrantes para que os nosos procesos de negocio poidan actuar sobre as predicións realizadas polo modelo.

O Kit de ferramentas de ML é un conxunto de ferramentas que pretende facer precisamente iso: unificar modelos e un ambiente transaccional para que os modelos construídos poidan usarse facilmente directamente nos seus procesos de negocio. Python Gateway forma parte do ML Toolkit e ofrece integración coa linguaxe Python (semellante a como R Gateway, sendo parte do ML Toolkit, proporciona integración coa linguaxe R).

Kit de ferramentas

Antes de continuar, gustaríame describir algunhas ferramentas e bibliotecas de Python que usaremos máis tarde.

Tecnoloxía

  • Python é unha linguaxe de programación interpretada, de alto nivel e de propósito xeral. A principal vantaxe da linguaxe é a súa gran biblioteca de bibliotecas matemáticas, ML e AI. Do mesmo xeito que ObjectScript, é unha linguaxe orientada a obxectos, pero todo se define de forma dinámica e non estática. Ademais todo é un obxecto. Os artigos posteriores asumen unha familiaridade pasajera coa lingua. Se queres comezar a aprender, recoméndoche comezar por documentación.
  • Para os nosos exercicios posteriores, establece Python 3.6.7 de 64 bits.
  • IDE: Eu uso PyCharm, pero en xeral eles много. Se usas Atelier, hai un complemento Eclipse para desenvolvedores de Python. Se estás usando VS Code, hai unha extensión para Python.
  • Caderno: en lugar dun IDE, pode escribir e compartir os seus scripts en cadernos en liña. O máis popular deles é Xúpiter.

Bibliotecas

Aquí tes unha lista (non exhaustiva) de bibliotecas de aprendizaxe automática:

  • numpy — un paquete fundamental para cálculos precisos.
  • pandas — Estruturas de datos de alto rendemento e ferramentas de análise de datos.
  • matplotlib - Elaboración de gráficos.
  • Nado no mar - visualización de datos baseada en matplotlib.
  • Sklearn - Métodos de aprendizaxe automática.
  • XGBoost — algoritmos de aprendizaxe automática no marco da metodoloxía de impulso de gradientes.
  • Gensim - PNL.
  • Keras - Redes neuronais.
  • Fluxo tensor — unha plataforma para crear modelos de aprendizaxe automática.
  • PyTorch é unha plataforma para crear modelos de aprendizaxe automática, centrada en Python.
  • Nyoka - PMML de varios modelos.

As tecnoloxías de IA/ML fan que os negocios sexan máis eficientes e adaptables. Ademais, hoxe estas tecnoloxías son cada vez máis fáciles de desenvolver e implementar. Comeza a aprender sobre as tecnoloxías de IA/ML e como poden axudar a crecer a túa organización.

Instalación

Hai varias formas de instalar e usar Python Gateway:

  • SO
    • Windows
    • Linux
    • Mac
  • Estivador
    • Usa unha imaxe de DockerHub
    • Crea o teu propio look

Independentemente do método de instalación, necesitará o código fonte. O único lugar para descargar o código é páxina de lanzamentos. Contén versións estables probadas, só tes que tomar a máis recente. Polo momento é de 0.8, pero co paso do tempo haberá outras novas. Non clones/descargas o repositorio, descarga a última versión.

SO

Se está a instalar Python Gateway nun sistema operativo, primeiro (independentemente do sistema operativo) debe instalar Python. Para isto:

  1. Instalar Python 3.6.7 de 64 bits. Recoméndase instalar Python no directorio predeterminado.
  2. Instalar o módulo dill: pip install dill.
  3. Descarga o código ObjectScript (i.e. do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) a calquera área con produtos. No caso de que queira unha área existente para admitir produtos, execute: write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. Lugar chamada DLL/SO/DYLIB á carpeta bin a súa instancia IRIS de InterSystems. O ficheiro da biblioteca debe estar dispoñible no camiño devolto write ##class(isc.py.Callout).GetLib().

Windows

  1. Asegúrese de que a variable de ambiente PYTHONHOME apunta a Python 3.6.7.
  2. Asegúrese de que a variable de ambiente do sistema é PATH contén unha variable PYTHONHOME (ou o directorio ao que apunta).

Linux (Debian/Ubuntu)

  1. Comprobe que a variable de ambiente é PATH contén /usr/lib и /usr/lib/x86_64-linux-gnu. Usa o ficheiro /etc/environment para establecer variables de ambiente.
  2. En caso de erros undefined symbol: _Py_TrueStruct establecer a configuración PythonLib... tamén en Léame hai unha sección Solución de problemas.

Mac

  1. Actualmente só se admite Python 3.6.7 python.org. Comprobe a variable PATH.

Se cambiou as variables de ambiente, reinicie o seu produto InterSystems.

Estivador

O uso de recipientes ten unha serie de vantaxes:

  • Portabilidade
  • Eficacia
  • Illamento
  • Lixeireza
  • Inmutabilidade

Consulte isto serie de artigos para obter máis información sobre o uso de Docker con produtos InterSystems.

Actualmente, todas as compilacións de Python Gateway están baseadas en contedores 2019.4.

Imaxe lista

Executar: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latestpara descargar e executar Python Gateway con InterSystems IRIS Community Edition. Iso é todo.

Crea o teu propio look

Para crear unha imaxe docker, execute na raíz do repositorio: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
Por defecto, a imaxe está construída en función da imaxe store/intersystems/iris-community:2019.4.0.383.0, non obstante, pode cambialo configurando unha variable IMAGE.
Para compilar desde InterSystems IRIS, execute: `docker build --build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 --force-rm --tag intersystemscommunity/irispy:latest ".

Despois diso, pode executar a imaxe docker:

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

Se está a usar unha imaxe baseada en InterSystems IRIS Community Edition, pode omitir a clave.

Comentarios

  • Proceso de proba isc.py.test.Process garda unha serie de imaxes nun directorio temporal. Pode querer cambiar este camiño ao directorio montado. Para iso, edite a configuración WorkingDir especificando o directorio montado.
  • Para acceder ao terminal executa: docker exec -it irispy sh.
  • Acceso ao Portal de Xestión do Sistema mediante o inicio de sesión SuperUser/SYS.
  • Para deter o recipiente, execute: docker stop irispy && docker rm --force irispy.

Verificando a instalación

Unha vez instalado Python Gateway, paga a pena comprobar que funciona. Execute este código no terminal IRIS de InterSystems:

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

O resultado debe ser: HELLO — Valor variable de Python x. Se o estado de retorno sc é un erro ou var baleiro, comprobar Léame - Sección de solución de problemas.

API

Python Gateway está instalado e comprobou que funciona. É hora de comezar a usalo!
A interface principal de Python é isc.py.Main. Ofrece os seguintes grupos de métodos (todos retornan %Status):

  • Execución de código
  • Transferencia de datos
  • Filial

Execución de código

Estes métodos permítenche executar código Python arbitrario.

SimpleString

SimpleString - Este é o método principal. Leva 4 argumentos opcionais:

  • code - liña de código para executar. Carácter de avance de liña: $c(10).
  • returnVariable — nome da variable a devolver.
  • serialization - como serializar returnVariable. 0 — cadea (predeterminada), 1 — repr.
  • result — ByRef referencia á variable na que está escrito o valor returnVariable.

Enriba fixemos:

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

Neste exemplo, asignamos a unha variable de Python x significado Hello e quere devolver o valor dunha variable de Python x a unha variable ObjectScript var.

ExecuteCode

ExecuteCode é unha alternativa máis segura e menos restritiva SimpleString.
As liñas da plataforma InterSystems IRIS están limitadas a 3 caracteres, e se queres executar unha peza de código máis longa, cómpre utilizar fíos.
Admítense dous argumentos:

  • code — unha liña ou fluxo de código Python que se vai executar.
  • variable — (opcional) asigna o resultado da execución code esta variable de Python.

Exemplo para usar:

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

Neste exemplo, multiplicamos 2 por 3 e escribimos o resultado nunha variable de Python y.

Transferencia de datos

Pasar datos a e desde Python.

Python -> InterSystems IRIS

Hai 4 formas de obter o valor dunha variable Python en InterSystems IRIS, dependendo da serialización que necesites:

  • String para tipos de datos sinxelos e depuración.
  • Repr para almacenar obxectos sinxelos e depurar.
  • JSON para facilitar a manipulación de datos no lado de InterSystems IRIS.
  • Pickle para gardar obxectos.

Estes métodos permítenche recuperar variables de Python como cadea ou fluxos.

  • GetVariable(variable, serialization, .stream, useString) - obter serialization variable variable в stream. Se useString é 1 e a serialización colócase nunha cadea, despois devólvese unha cadea e non un fluxo.
  • GetVariableJson(variable, .stream, useString) — obter a serialización JSON dunha variable.
  • GetVariablePickle(variable, .stream, useString, useDill) -obter Pickle (ou Dill) serialización dunha variable.

Imos tentar obter a nosa variable y.

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

InterSystems IRIS -> Python

Cargando datos de InterSystems IRIS en Python.

  • ExecuteQuery(query, variable, type, namespace) - crea un conxunto de datos (pandas dataframe ou list) da consulta sql e configúrao nunha variable de Python variable. Bolsa de plástico isc.py debe estar dispoñible na zona namespace - A solicitude executarase alí.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) - carga datos globais global do subíndice start para end en Python como unha variable de tipo type: list, ou pandas dataframe. Descrición de argumentos opcionais mask labels dispoñible na documentación da clase e no repositorio Documentos de transferencia de datos.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) - carga datos de clase class dende id start para end en Python como unha variable de tipo type: list, ou pandas dataframe. properties — unha lista (separada por coma) das propiedades da clase que deben cargarse no conxunto de datos. Admite máscaras * и ?. predeterminado - * (todas as propiedades). Propiedade %%CLASSNAME ignorado.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) - carga datos da táboa table dende id start para end en Python.

ExecuteQuery — universal (calquera consulta SQL correcta pasarase a Python). Non obstante, ExecuteGlobal e os seus envoltorios ExecuteClass и ExecuteTable traballar cunha serie de restricións. Son moito máis rápidos (3-5 veces máis rápido que o controlador ODBC e 20 veces máis rápido ExecuteQuery). Máis información en Documentos de transferencia de datos.
Todos estes métodos admiten a transferencia de datos desde calquera área. Bolsa de plástico isc.py debe estar dispoñible na zona de destino.

ExecuteQuery

ExecuteQuery(request, variable, type, namespace) — transferir os resultados de calquera consulta SQL correcta a Python. Este é o método de transferencia de datos máis lento. Usalo se ExecuteGlobal e os seus envoltorios non están dispoñibles.

Argumentos:

  • query - consulta sql.
  • variable — o nome da variable Python na que se escriben os datos.
  • type - list ou Pandas dataframe.
  • namespace — Ámbito no que se executará a solicitude.

ExecuteGlobal

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

Argumentos:

  • global - nome global sen ^
  • variable — o nome da variable Python na que se escriben os datos.
  • type - list ou Pandas dataframe.
  • start - o primeiro subíndice do global. Necesariamente %Integer.
  • end — o último subíndice do global. Necesariamente %Integer.
  • mask — Máscara de valor global. A máscara pode ser máis curta que o número de campos do global (neste caso omitiranse os campos ao final). Como formatar unha máscara:
    • + pasar o valor tal e como está.
    • - saltar valor.
    • b — Tipo booleano (0 - False, todo o resto - True).
    • d — Data (de $horolog, en Windows desde 1970, en Linux desde 1900).
    • t — Tempo ($horolog, segundos despois da medianoite).
    • m — Selo de tempo (cadea de formato ANO-MES-DÍA HORA:MINUTO: SEGUNDO).
  • labels — % Lista de nomes de columnas. O primeiro elemento é o nome do subíndice.
  • namespace — Ámbito no que se executará a solicitude.

ExecuteClass

Envolver ExecuteGlobal. Baseándose na definición da clase, prepara unha convocatoria ExecuteGlobal e chámao.

ExecuteClass(class, variable, type, start, end, properties, namespace) - pasar datos de clase en Python.

Argumentos:

  • class - nome da clase
  • variable — o nome da variable Python na que se escriben os datos.
  • type - list ou Pandas dataframe.
  • start - ID inicial.
  • end - Id. final
  • properties — unha lista (separada por coma) das propiedades da clase que deben cargarse no conxunto de datos. Admite máscaras * и ?. predeterminado - * (todas as propiedades). Propiedade %%CLASSNAME ignorado.
  • namespace — Ámbito no que se executará a solicitude.

Todas as propiedades pásanse como están, excepto as propiedades de tipo %Date, %Time, %Boolean и %TimeStamp - convértense nas correspondentes clases de Python.

Executar táboa

Envolver ExecuteClass. Traduce o nome da táboa ao nome da clase e chama ExecuteClass. Sinatura:

ExecuteTable(table, variable, type, start, end, properties, namespace) - pasar datos da táboa a Python.

Argumentos:

  • table - nome da táboa.
    Todos os demais argumentos pásanse como están a ExecuteClass.

Notas

  • ExecuteGlobal, ExecuteClass и ExecuteTable traballar igual de rápido.
  • ExecuteGlobal 20 veces máis rápido que ExecuteQuery en conxuntos de datos grandes (tempo de transferencia > 0.01 segundos).
  • ExecuteGlobal, ExecuteClass и ExecuteTable traballar en globais con esta estrutura: ^global(key) = $lb(prop1, prop2, ..., propN) onde key - un número enteiro.
  • Para ExecuteGlobal, ExecuteClass и ExecuteTable rango de valores admitidos %Date corresponde ao rango mktime e depende do sistema operativo (Windows: 1970-01-01, Linux 1900-01-01, Mac). Use %TimeStamppara transferir datos fóra deste intervalo ou usar pandas dataframe porque esta é unha limitación só de lista.
  • Para ExecuteGlobal, ExecuteClass и ExecuteTable todos os argumentos agás a fonte de datos (global, clase ou táboa) e a variable son opcionais.

Exemplos

Clase de proba isc.py.test.Person contén un método que demostra todas as opcións de transferencia de datos:

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)

Chame ao método do ##class(isc.py.test.Person).Test() para ver como funcionan todos os métodos de transferencia de datos.

Métodos auxiliares

  • GetVariableInfo(variable, serialization, .defined, .type, .length) — obter información sobre a variable: se está definida, a súa clase e lonxitude de serialización.
  • GetVariableDefined(variable, .defined) — se a variable está definida.
  • GetVariableType(variable, .type) - Obter a clase da variable.
  • GetStatus() - obter e eliminar a última excepción do lado de Python.
  • GetModuleInfo(module, .imported, .alias) — obter a variable do módulo e importar o estado.
  • GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments) - Obter información sobre a función.

Interoperabilidade

Aprendeu a chamar a Python Gateway desde o terminal, agora imos comezar a usalo en produción. A base para interactuar con Python neste modo é isc.py.ens.Operation. Permítenos:

  • Executar código en Python
  • Gardar/Restaurar o contexto de Python
  • Cargar e recibir datos de Python

Basicamente, unha operación de Python é un envoltorio isc.py.Main. Operación isc.py.ens.Operation ofrece a capacidade de interactuar co proceso Python dos produtos InterSystems IRIS. Admítense cinco consultas:

  • isc.py.msg.ExecutionRequest para executar código Python. Devolucións isc.py.msg.ExecutionResponse co resultado da execución e os valores das variables solicitadas.
  • isc.py.msg.StreamExecutionRequest para executar código Python. Devolucións isc.py.msg.StreamExecutionResponse o resultado da execución e os valores das variables solicitadas. Analóxico isc.py.msg.ExecutionRequest, pero acepta e devolve fluxos en lugar de cadeas.
  • isc.py.msg.QueryRequest para transmitir o resultado da execución dunha consulta SQL. Devolucións Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest para pasar datos globais/clase/táboa. Devolucións Ens.Response.
  • isc.py.msg.SaveRequest para gardar o contexto de Python. Devolucións Ens.StringResponse con ID de contexto.
  • isc.py.msg.RestoreRequest para restaurar o contexto de Python.

    Ademais, isc.py.ens.Operation ten dúas opcións:

    • Initializer — seleccionar unha clase que implemente a interface isc.py.init.Abstract. Pódese usar para cargar funcións, módulos, clases, etc. É executado unha vez cando se inicia o proceso.
    • PythonLib - (só Linux) se ves erros ao cargar, establece o seu valor en libpython3.6m.so ou mesmo no camiño completo á biblioteca de Python.

Creación de procesos de negocio

Hai dúas clases dispoñibles que facilitan o desenvolvemento dos procesos de negocio:

  • isc.py.ens.ProcessUtils permite extraer anotacións de actividades con substitución de variables.
  • isc.py.util.BPEmulator facilita probar procesos de negocio con Python. Pode executar un proceso de negocio (partes de Python) no proceso actual.

Substitución de variables

Todos os procesos de negocio herdados isc.py.ens.ProcessUtils, pode usar o método GetAnnotation(name) para obter o valor da anotación da actividade polo seu nome. A anotación da actividade pode conter variables que se calcularán no lado de InterSystems IRIS antes de pasar a Python. Aquí está a sintaxe para a substitución de variables:

  • ${class:method:arg1:...:argN} - chamada de método
  • #{expr} — executar código en linguaxe ObjectScript.

Un exemplo está dispoñible no proceso empresarial de proba isc.py.test.Process, por exemplo, na actividade Correlation Matrix: Graph: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). Neste exemplo:

  • #{process.WorkDirectory} devolve a propiedade WorkDirectory do obxecto process, que é unha instancia da clase isc.py.test.Process aqueles. proceso de negocio actual.
  • ${%PopulateUtils:Integer:1:100} chama un método Integer clase %PopulateUtils, pasando argumentos 1 и 100, devolvendo un enteiro aleatorio no intervalo 1...100.

Proba o proceso de negocio

Os produtos de proba e os procesos comerciais de proba están dispoñibles por defecto como parte do Python Gateway. Para usalos:

  1. No terminal do sistema operativo, executa: pip install pandas matplotlib seaborn.
  2. No terminal IRIS de InterSystems, execute: do ##class(isc.py.test.CannibalizationData).Import() para cubrir os datos da proba.
  3. Lanzamento de produtos isc.py.test.Production.
  4. Enviar tipo de solicitude Ens.Request в isc.py.test.Process.

A ver como funciona todo xunto. Aberto isc.py.test.Process no editor BPL:

Python Gateway en InterSystems IRIS

Execución de código

O reto máis importante é executar código Python:

Python Gateway en InterSystems IRIS

Consulta utilizada isc.py.msg.ExecutionRequest, aquí están as súas propiedades:

  • Code - Código Python.
  • SeparateLines — se debe dividir o código en liñas para a súa execución. $c(10) (n) úsase para separar cadeas. Teña en conta que NON se recomenda procesar a mensaxe completa á vez, esta función só está destinada a procesar def e expresións multiliñas similares. Por defecto 0.
  • Variables — unha lista de variables separadas por comas que se engadirán á resposta.
  • Serialization — Como serializar as variables que queremos devolver. Opcións: Str, Repr, JSON, Pickle и Dill, por defecto Str.

No noso caso, só establecemos a propiedade Code, polo que todas as demais propiedades usan os valores predeterminados. Fixémolo chamando process.GetAnnotation("Import pandas"), que en tempo de execución devolve unha anotación despois de realizar a substitución de variables. Despois de todo, o código import pandas as pd pasará a Python. GetAnnotation pode ser útil para obter scripts de Python de varias liñas, pero non hai restricións para este método para obter código. Podes configurar a propiedade Code de calquera forma conveniente para vostede.

Obtención de variables

Outro reto interesante usando isc.py.msg.ExecutionRequest - Correlation Matrix: Tabular:

Python Gateway en InterSystems IRIS

Calcula a Matriz de Correlación no lado de Python e extrae a variable corrmat volver a InterSystems IRIS en formato JSON configurando as propiedades da solicitude:

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

Podemos ver os resultados en Visual Trace:

Python Gateway en InterSystems IRIS

E se necesitamos este valor no BP, podemos obtelo así: callresponse.Variables.GetAt("corrmat").

Transferencia de datos

A continuación, imos falar sobre a transferencia de datos de InterSystems IRIS a Python; todas as solicitudes de transferencia de datos implementan a interface isc.py.msg.DataRequestque proporciona as seguintes propiedades:

  • Variable — unha variable de Python na que se escriben os datos.
  • Type - Tipo de variable: dataframe (frame de datos pandas) ou list.
  • Namespace — a zona da que recibimos os datos. Bolsa de plástico isc.py debería estar dispoñible nesta zona. Esta pode ser unha zona sen soporte para o produto.

Con base nesta interface, impléntanse 4 clases de solicitudes:

  • isc.py.msg.QueryRequest - establecer a propiedade Query para enviar unha consulta SQL.
  • isc.py.msg.ClassRequest - establecer a propiedade Class para pasar datos de clase.
  • isc.py.msg.TableRequest - Establecer a propiedade Table para transferir datos da táboa.
  • isc.py.msg.GlobalRequest - Establecer a propiedade Global para transferencia global de datos.

No proceso de proba, observa a actividade RAWonde isc.py.msg.QueryRequest mostrado en acción.

Python Gateway en InterSystems IRIS

Gardando/Restaurando o contexto de Python

Finalmente, podemos gardar o contexto de Python en InterSystems IRIS, para iso enviarémolo isc.py.msg.SaveRequest con argumentos:

  • Mask — Só se gardan as variables que coincidan coa máscara. Soportado * и ?. Un exemplo: "Data*, Figure?"... Por defecto *.
  • MaxLength — A lonxitude máxima da variable almacenada. Se a serialización dunha variable é máis longa, ignorarase. Establécese en 0 para obter variables de calquera lonxitude. Por defecto $$$MaxStringLength.
  • Name — Nome do contexto (opcional).
  • Description — Descrición do contexto (opcional).

Devolucións Ens.StringResponse с Id contexto gardado. No proceso de proba, observa a actividade Save Context.

Solicitude relacionada isc.py.msg.RestoreRequest carga contexto de InterSystems IRIS en Python:

  • ContextId - identificador de contexto.
  • Clear — Limpar o contexto antes de restaurar.

Caderno Jupyter

Caderno Jupyter é unha aplicación web de código aberto que permite crear e publicar cadernos que conteñan código, visualizacións e texto. Python Gateway permítelle ver e editar procesos BPL en forma de Jupyter Notebook. Teña en conta que o executor normal de Python 3 úsase actualmente.

Esta extensión asume que as anotacións conteñen código Python e usa nomes de actividade como títulos anteriores. Agora é posible desenvolver procesos de negocio PythonGateway en Jupyter Notebook. Aquí tes o que é posible:

  • Crear novos procesos de negocio
  • Eliminar procesos de negocio
  • Crear novas actividades
  • Cambiar actividades
  • Eliminar actividades

Aquí vídeo de demostración. E algunhas capturas de pantalla:

Explorador de procesos

Python Gateway en InterSystems IRIS

Editor de procesos

Python Gateway en InterSystems IRIS

Instalación

  1. Necesitarás InterSystems IRIS 2019.2+.
  2. Instale PythonGateway v0.8+ (só é necesario isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints и isc.py.ens.ProcessUtils).
  3. Actualiza o código ObjectScript desde o repositorio.
  4. Executar do ##class(isc.py.util.Jupyter).Install() e siga as indicacións.

Documentación.

Descubrimentos

MLToolkit é un conxunto de ferramentas cuxo obxectivo é combinar modelos e un ambiente transaccional para que os modelos construídos se poidan usar facilmente directamente nos seus procesos de negocio. Python Gateway forma parte de MLToolkit e ofrece integración coa linguaxe Python, o que lle permite orquestrar calquera algoritmo de aprendizaxe automática creado en Python (o ambiente principal para moitos científicos de datos), utilizar numerosas bibliotecas preparadas para crear rapidamente IA analítica adaptativa e robótica. Solucións de ML na plataforma InterSystems IRIS.

referencias

MLToolkit

O grupo de usuarios MLToolkit é un repositorio privado de GitHub creado como parte da organización GitHub corporativa de InterSystems. Está destinado a usuarios externos que instalan, aprenden ou xa están utilizando compoñentes de MLToolkit, incluído o Python Gateway. O grupo ten unha serie de casos implementados (con código fonte e datos de proba) nos campos de mercadotecnia, fabricación, medicina e moitas outras industrias. Para unirse ao grupo de usuarios de ML Toolkit, envíe un breve correo electrónico ao seguinte enderezo: [protexido por correo electrónico] e inclúa a seguinte información na súa carta:

  • Nome de usuario de GitHub
  • Organización (traballas ou estudas)
  • Posición (a túa posición real na túa organización, "Estudante" ou "Independiente").
  • País

Para aqueles que leron o artigo e estean interesados ​​nas capacidades de InterSystems IRIS como plataforma para desenvolver ou hospedar intelixencia artificial e motores de aprendizaxe automática, invitámosche a discutir posibles escenarios que sexan de interese para a túa empresa. Estaremos encantados de analizar as necesidades da súa empresa e determinar conxuntamente un plan de acción; Enderezo de correo electrónico de contacto do noso equipo de expertos en IA/ML: [protexido por correo electrónico].

Fonte: www.habr.com

Engadir un comentario