Python Gateway en InterSystems IRIS

Este artículo está dedicado a Python Gateway, un proyecto comunitario de código abierto para la plataforma de datos InterSystems IRIS. Este proyecto permite orquestar cualquier algoritmo de aprendizaje automático creado en Python (el entorno principal para muchos científicos de datos), utilizando numerosas bibliotecas listas para crear rápidamente soluciones analíticas adaptativas y automatizadas de IA/ML en la plataforma InterSystems IRIS. En este artículo, mostraré cómo InterSystems IRIS puede orquestar procesos en Python, realizar de manera efectiva la transferencia bidireccional de datos y crear procesos de negocio inteligentes.

Plan

  1. Introducción.
  2. Herramientas.
  3. Instalación.
  4. API.
  5. Interoperabilidad.
  6. Jupyter Notebook.
  7. Conclusiones.
  8. Enlaces.
  9. MLToolkit.

Introducción

Python es un lenguaje de programación de alto nivel de propósito general, orientado a mejorar la productividad del desarrollador y la legibilidad del código. En esta serie de artículos, hablaré sobre las posibilidades de aplicar Python en la plataforma InterSystems IRIS, centrándome en su uso como lenguaje para crear y aplicar modelos de aprendizaje automático.

El aprendizaje automático (ML) es una clase de métodos de inteligencia artificial que se caracterizan por no resolver directamente el problema, sino aprender durante la resolución de múltiples problemas similares.

Los algoritmos y modelos de aprendizaje automático están cada vez más presentes. Hay muchas razones para ello, pero todo se reduce a la accesibilidad, simplicidad y logro de resultados prácticos. ¿Es la clustering o incluso la modelización de redes neuronales una nueva tecnología?

Por supuesto que no, pero actualmente no es necesario escribir cientos de miles de líneas de código para ejecutar un modelo, y los costos de creación y aplicación de modelos están disminuyendo cada vez más.

Las herramientas están evolucionando; aunque no tenemos herramientas de IA/ML totalmente orientadas a GUI, el progreso que hemos visto con muchas otras clases de sistemas de información, como BI (desde la codificación hasta el uso de marcos y soluciones configurables orientadas a GUI), también se está observando en las herramientas para crear IA/ML. Ya hemos superado la etapa de codificación y hoy en día utilizamos marcos para construir y entrenar modelos.

Otras mejoras, como la capacidad de difundir un modelo preentrenado, donde el usuario final solo tiene que completar el entrenamiento del modelo con sus datos específicos, también facilitan el inicio en la aplicación del aprendizaje automático. Estos avances simplifican significativamente el aprendizaje del aprendizaje automático tanto para especialistas como para empresas en general.

Por otro lado, estamos recopilando cada vez más datos. Gracias a una plataforma de datos unificada, como InterSystems IRIS, toda esta información puede ser preparada y utilizada de inmediato como datos de entrada para modelos de aprendizaje automático.

Con la transición a la nube, lanzar proyectos de IA/ML se vuelve más fácil que nunca. Solo podemos consumir los recursos que necesitamos. Además, gracias a la paralelización que ofrecen las plataformas en la nube, podemos ahorrar tiempo.

¿Pero qué pasa con los resultados? Aquí es donde las cosas se complican. Existen múltiples herramientas para construir modelos, de las cuales hablaré a continuación. Construir un buen modelo no es fácil, ¿pero qué sigue? Obtener beneficios de un modelo que utiliza el negocio también es una tarea no trivial. La raíz del problema radica en la separación de las cargas analíticas y transaccionales, así como de los modelos de datos. Cuando entrenamos un modelo, generalmente lo hacemos con datos históricos. Pero el lugar para el modelo construido es en el procesamiento transaccional de datos. ¿De qué sirve el mejor modelo de detección de transacciones fraudulentas si lo ejecutamos una vez al día? Los estafadores ya se han ido con el dinero. Necesitamos entrenar el modelo con datos históricos, pero también debemos aplicarlo en tiempo real a los nuevos datos entrantes para que nuestros procesos comerciales puedan actuar de acuerdo con las predicciones realizadas por el modelo.

ML Toolkit es un conjunto de herramientas cuyo objetivo es precisamente esto: combinar modelos y entornos transaccionales, para que los modelos construidos puedan ser fácilmente utilizados directamente en sus procesos comerciales. Python Gateway es parte de ML Toolkit y permite la integración con el lenguaje Python (de manera similar a como R Gateway, que forma parte de ML Toolkit, proporciona integración con el lenguaje R).

Herramientas

Antes de continuar, me gustaría describir algunas herramientas y bibliotecas de Python que utilizaremos más adelante.

Tecnologías

  • Python es un lenguaje de programación interpretado, de alto nivel y de propósito general. La principal ventaja del lenguaje es su gran biblioteca de bibliotecas matemáticas, de aprendizaje automático (ML) y de inteligencia artificial (AI). Al igual que ObjectScript, es un lenguaje orientado a objetos, pero todo se define dinámicamente, no estáticamente. Además, todo es un objeto. Los artículos posteriores suponen un conocimiento pasajero del lenguaje. Si deseas comenzar a aprender, te recomiendo empezar con la documentación.
  • Para nuestros ejercicios posteriores, instala Python 3.6.7 de 64 bits.
  • IDE: Yo uso PyCharm, pero en general hay otros. muchas. Si utilizas Atelier, hay un complemento de Eclipse para desarrolladores de Python. Si usas VS Code, hay una extensión para Python.
  • Notebook: en lugar de un IDE, puedes escribir y compartir tus scripts en cuadernos en línea. El más popular de ellos es Jupyter.

Bibliotecas

Aquí hay una lista (no exhaustiva) de bibliotecas para aprendizaje automático:

  • Numpy — paquete fundamental para cálculos precisos.
  • Pandas — estructuras de datos de alto rendimiento y herramientas de análisis de datos.
  • Matplotlib — creación de gráficos.
  • Seaborn — visualización de datos basada en matplotlib.
  • Sklearn — métodos de aprendizaje automático.
  • XGBoost — algoritmos de aprendizaje automático dentro de la metodología de refuerzo de gradiente (Gradient Boosting).
  • Gensim — procesamiento de lenguaje natural (NLP).
  • Keras — redes neuronales.
  • Tensorflow — plataforma para construir modelos de aprendizaje automático.
  • PyTorch — plataforma para construir modelos de aprendizaje automático orientada a Python.
  • Nyoka — PMML de varios modelos.

Las tecnologías AI/ML permiten que las empresas sean más eficientes y adaptables. Además, hoy en día estas tecnologías se están volviendo más fáciles de desarrollar e implementar. Comienza a estudiar las tecnologías AI/ML y cómo pueden ayudar a tu organización a crecer.

Instalación

Hay varias maneras de instalar y usar Python Gateway:

  • el sistema operativo
    • Windows
    • Linux
    • Mac
  • Docker
    • Usa una imagen de DockerHub
    • Crea tu propia imagen

Independientemente de la forma de instalación, necesitarás el código fuente. El único lugar para descargar el código es la página de lanzamientos. Contiene lanzamientos estables probados, simplemente toma el último. En este momento es 0.8, pero con el tiempo habrá nuevos. No clones/subas el repositorio, descarga la última versión.

el sistema operativo

Si está instalando el Gateway de Python en un sistema operativo, primero (independientemente del sistema operativo) debe instalar Python. Para ello:

  1. Instale Python 3.6.7 de 64 bits. Se recomienda instalar Python en el directorio predeterminado.
  2. Instale el módulo dill: pip install dill.
  3. Descargue el código ObjectScript (es decir, do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) en cualquier espacio de nombres con productos. Si desea que un espacio existente admita productos, ejecute: write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. Coloque callout DLL/SO/DYLIB a la carpeta bin de su instancia InterSystems IRIS. El archivo de la biblioteca debe ser accesible en la ruta devuelta por write ##class(isc.py.Callout).GetLib().

Windows

  1. Asegúrese de que la variable de entorno PYTHONHOME apunte a Python 3.6.7.
  2. Asegúrese de que la variable de entorno del sistema PATH contenga la variable PYTHONHOME (o el directorio al que apunta).

Linux (Debian/Ubuntu)

  1. Verifique que la variable de entorno PATH contiene /usr/lib y /usr/lib/x86_64-linux-gnu. Utilice el archivo /etc/environment para establecer las variables de entorno.
  2. Si hay errores símbolo indefinido: _Py_TrueStruct configure la opción PythonLib. También en Readme hay una sección de resolución de problemas.

Mac

  1. Actualmente solo se admite Python 3.6.7 de Python.org. Verifique la variable PATH.

Si ha cambiado las variables de entorno, reinicie su producto InterSystems.

Docker

El uso de contenedores ofrece varias ventajas:

  • Portabilidad
  • Eficiencia
  • ⚠️ Limitado
  • Ligereza
  • Inmutabilidad

Consulte esta serie de artículos para obtener más información sobre el uso de Docker con los productos de InterSystems.

Todas las compilaciones del Gateway de Python actualmente se basan en contenedores 2019.4.

Imagen lista

Ejecuta: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latest, para descargar y ejecutar el Gateway de Python con la Edición de Comunidad de InterSystems IRIS. Eso es todo.

Crea tu propia imagen

Para construir la imagen de Docker, ejecute en la raíz del repositorio: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
Por defecto, la imagen se construye sobre la imagen store/intersystems/iris-community:2019.4.0.383.0, sin embargo, puede cambiar esto configurando la variable IMAGE.
Para construir desde InterSystems IRIS, ejecute: `docker build —build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 —force-rm —tag intersystemscommunity/irispy:latest`.

Después de eso, puede ejecutar la imagen de Docker:

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

Si utiliza una imagen basada en la Edición de Comunidad de InterSystems IRIS, puede omitir la clave.

Comentarios

  • Proceso de prueba isc.py.test.Process almacena una serie de imágenes en un directorio temporal. Es posible que desee cambiar esta ruta a un directorio montado. Para ello, edite la configuración WorkingDir especificando el directorio montado.
  • Para acceder al terminal, ejecute: docker exec -it irispy sh.
  • Acceso al Portal de Gestión del Sistema con el inicio de sesión SuperUser/SYS.
  • Para detener el contenedor, ejecute: docker stop irispy && docker rm --force irispy.

Comprobación de la instalación

Después de haber instalado el Python Gateway, debe verificar que funciona. Ejecute este código en el terminal de InterSystems IRIS:

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

Como resultado, debe imprimirse HELLO — el valor de la variable de Python x. Si el estado devuelto sc es un error o var está vacío, verifique Readme — sección de solución de problemas.

API

Python Gateway está instalado y se ha asegurado de que funcione. ¡Es hora de comenzar a usarlo!
La interfaz principal para Python es isc.py.Main. Ofrece los siguientes grupos de métodos (todos devuelven %Status):

  • Ejecución de código
  • Transmisión de datos
  • Auxiliares

Ejecución de código

Estos métodos permiten ejecutar código Python arbitrario.

SimpleString

SimpleString — es el método principal. Acepta 4 argumentos opcionales:

  • code — cadena de código a ejecutar. El carácter de nueva línea: $c(10).
  • returnVariable — nombre de la variable para devolver.
  • serialization — cómo serializar returnVariable. 0 — string (predeterminado), 1 — repr.
  • resultado — ByRef referencia a la variable donde se escribe el valor returnVariable.

Anteriormente, hemos ejecutado:

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

En este ejemplo, asignamos a una variable de Python x valor Hola y queremos devolver el valor de la variable de Python x a una variable de ObjectScript var.

ExecuteCode

ExecuteCode es una alternativa más segura y menos restringida SimpleString.
Las cadenas en la plataforma InterSystems IRIS están limitadas a 3,641,144 caracteres, y si desea ejecutar un bloque de código más largo, debe utilizar flujos.
Se aceptan dos argumentos:

  • code — cadena o flujo de código Python para ejecutar.
  • variable — (opcional) asigna el resultado de la ejecución code a esta variable de Python.

Ejemplo de uso:

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

En este ejemplo, multiplicamos 2 por 3 y guardamos el resultado en una variable de Python y.

Transmisión de datos

Transfiera datos entre Python y de vuelta.

Python -> InterSystems IRIS

Hay 4 maneras de obtener el valor de la variable de Python en InterSystems IRIS, dependiendo de la serialización que necesite:

  • String para tipos de datos simples y depuración.
  • Repr para el almacenamiento de objetos simples y la depuración.
  • JSON para la manipulación fácil de datos en el lado de InterSystems IRIS.
  • Pickle para guardar objetos.

Estos métodos permiten obtener variables de Python en forma de cadenas o flujos.

  • GetVariable(variable, serialization, .stream, useString) — obtener serialization variable variable en stream. Si useString igual a 1 y si la serialización se coloca en una cadena, se devuelve una cadena en lugar de un flujo.
  • GetVariableJson(variable, .stream, useString) — obtener la serialización JSON de la variable.
  • GetVariablePickle(variable, .stream, useString, useDill) — obtener la serialización Pickle (o Dill) de la variable.

Intentemos obtener nuestra variable y.

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

InterSystems IRIS -> Python

Cargamos datos de InterSystems IRIS en Python.

  • ExecuteQuery(query, variable, type, namespace) — crea un conjunto de datos (pandas dataframe o list) desde una consulta SQL y lo establece en una variable de Python variable. El paquete isc.py debe estar disponible en el ámbito namespace — donde se ejecutará la consulta.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) — carga datos globales global del subíndice start hasta end en Python como una variable de tipo tipo: list, o pandas dataframe. La descripción de los argumentos opcionales mask y labels está disponible en la documentación de la clase y el repositorio Documentos de Transferencia de Datos.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) — carga datos de la clase class por id start hasta end en Python como una variable de tipo tipo: list, o pandas dataframe. properties — lista (separador – coma) de propiedades de la clase que se deben cargar en el conjunto de datos. Se admiten máscaras * y ?. Por defecto — * (todas las propiedades). La propiedad %%CLASSNAME se ignora.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) — carga datos de la tabla tabla por id start hasta end en Python.

ExecuteQuery — es universal (cualquier consulta SQL válida se pasará a Python). Sin embargo, ExecuteGlobal y sus envolturas ExecuteClass y ExecuteTable funcionan con varias limitaciones. Son mucho más rápidos (3-5 veces más rápidos que el controlador ODBC y 20 veces más rápidos ExecuteQuery). Más información en Documentos de Transferencia de Datos.
Todos estos métodos admiten la transferencia de datos desde cualquier ámbito. El paquete isc.py debe estar disponible en el ámbito de destino.

ExecuteQuery

ExecuteQuery(request, variable, type, namespace) — paso de los resultados de cualquier consulta SQL válida a Python. Este es el método más lento de transferencia de datos. Utilízalo si ExecuteGlobal y sus envolturas no están disponibles.

Argumentos:

  • query — consulta SQL.
  • variable — nombre de la variable de Python en la que se escriben los datos.
  • tipo — list o Pandas dataframe.
  • namespace — ámbito en el que se ejecutará la consulta.

ExecuteGlobal

ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) — paso de un global a Python.

Argumentos:

  • global — nombre del global sin ^
  • variable — nombre de la variable de Python en la que se escriben los datos.
  • tipo — list o Pandas dataframe.
  • start — primer subíndice del global. Obligatorio %Integer.
  • end — último subíndice del global. Obligatorio %Integer.
  • mask — máscara de valores global. La máscara puede ser más corta que la cantidad de campos en el global (en este caso, los campos al final se omitirán). Cómo formatear la máscara:
    • + transmitir el valor tal cual.
    • - omitir el valor.
    • b — Tipo lógico (0 — False, todo lo demás — Verdadero).
    • d — Fecha (desde $horolog, en Windows desde 1970, en Linux desde 1900).
    • t — Hora ($horolog, segundos después de medianoche).
    • m — Marca de tiempo (string en formato AÑO-MES-DÍA HORA:MINUTO:SEGUNDO).
  • labels — %Lista de nombres de columnas. El primer elemento — nombre del subscript.
  • namespace — ámbito en el que se ejecutará la consulta.

ExecuteClass

Envoltorio sobre ExecuteGlobal. Basado en la definición de la clase, prepara la llamada ExecuteGlobal y la ejecuta.

ExecuteClass(class, variable, type, start, end, properties, namespace) — transmisión de datos de clase en Python.

Argumentos:

  • class — nombre de la clase
  • variable — nombre de la variable de Python en la que se escriben los datos.
  • tipo — list o Pandas dataframe.
  • start — Id inicial.
  • end — Id final
  • properties — lista (separador – coma) de propiedades de la clase que se deben cargar en el conjunto de datos. Se admiten máscaras * y ?. Por defecto — * (todas las propiedades). La propiedad %%CLASSNAME se ignora.
  • namespace — ámbito en el que se ejecutará la consulta.

Todas las propiedades se transmiten tal cual, excepto las propiedades de tipos cha, %Hora, %Booleano y %Marca de tiempo — se convierten a las clases correspondientes de Python.

ExecuteTable

Envoltorio sobre ExecuteClass. Transmite el nombre de la tabla al nombre de clase y ejecuta ExecuteClass. Firma:

ExecuteTable(table, variable, type, start, end, properties, namespace) — transmisión de datos de tabla en Python.

Argumentos:

  • tabla — nombre de la tabla.
    Todos los demás argumentos se transmiten tal cual a ExecuteClass.

Notas

  • ExecuteGlobal, ExecuteClass y ExecuteTable funcionan a la misma velocidad.
  • ExecuteGlobal 20 veces más rápido que ExecuteQuery en conjuntos de datos grandes (tiempo de transmisión >0.01 segundos).
  • ExecuteGlobal, ExecuteClass y ExecuteTable funcionan en globals con esta estructura: ^global(key) = $lb(prop1, prop2, ..., propN) donde key — número entero.
  • Para ExecuteGlobal, ExecuteClass y ExecuteTable rango de valores soportado cha corresponde al rango mktime y depende del SO (windows: 1970-01-01, linux 1900-01-01, mac). Use %Marca de tiempopara transmitir datos fuera de este rango o use pandas dataframe ya que esta restricción es solo para la lista.
  • Para ExecuteGlobal, ExecuteClass y ExecuteTable todos los argumentos excepto la fuente de datos (global, clase o tabla) y la variable son opcionales.

Ejemplos

Clase de prueba isc.py.test.Person contiene un método que muestra todas las opciones de transmisión 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"

// Argumentos generales
set variable = "df"
set type = "dataframe"
set start = 1
set end = $g(^isc.py.test.PersonD, start)

// Método 0: ExecuteGlobal sin argumentos
set sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 0, type)

// Método 1: ExecuteGlobal con argumentos    
// Al pasar el global, los nombres de los campos son definidos manualmente
// globalKey - nombre del subtipo
set labels = $lb("globalKey", "Nombre", "DOB", "TS", "RandomTime", "EdadAños", "EdadDecimal", "EdadDoble", "Bool")

// mask tiene un elemento menos que labels porque "globalKey" - nombre del subtipo
// Saltamos %%CLASSNAME
set mask = "-+dmt+++b"

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

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

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

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

Llama al método do ##class(isc.py.test.Person).Test() para ver cómo funcionan todos los métodos de transmisión de datos.

Métodos auxiliares

  • GetVariableInfo(variable, serialization, .defined, .type, .length) — obtener información sobre la variable: si está definida, su clase y la longitud de la serialización.
  • GetVariableDefined(variable, .defined) — determina si la variable está definida.
  • GetVariableType(variable, .type) — obtener la clase de la variable.
  • GetStatus() — obtener y eliminar la última excepción del lado de Python.
  • GetModuleInfo(module, .imported, .alias) — obtener la variable del módulo y el estado de importación.
  • GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments) — obtener información sobre la función.

Interoperabilidad

Has aprendido a llamar a Python Gateway desde la terminal, ahora empecemos a usarlo en producción. La base de la interacción con Python en este modo es isc.py.ens.Operation. Permite:

  • Ejecutar código en Python
  • Guardar/Restaurar el contexto de Python
  • Cargar y obtener datos de Python

En principio, la operación Pyhton es un envoltorio sobre isc.py.Main. La operación isc.py.ens.Operation ofrece la posibilidad de interactuar con el proceso de Python desde las producciones de InterSystems IRIS. Se admiten cinco solicitudes:

  • isc.py.msg.ExecutionRequest para ejecutar código de Python. Devuelve isc.py.msg.ExecutionResponse con el resultado de la ejecución y los valores de las variables solicitadas.
  • isc.py.msg.StreamExecutionRequest para ejecutar código de Python. Devuelve isc.py.msg.StreamExecutionResponse con el resultado de la ejecución y los valores de las variables solicitadas. Análogo isc.py.msg.ExecutionRequest, pero acepta y devuelve flujos en lugar de cadenas.
  • isc.py.msg.QueryRequest para pasar el resultado de la ejecución de la consulta SQL. Devuelve Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest para la transmisión de datos global/clase/tabla. Devuelve Ens.Response.
  • isc.py.msg.SaveRequest para guardar el contexto de Python. Devuelve Ens.StringResponse con el identificador de contexto.
  • isc.py.msg.RestoreRequest para restaurar el contexto de Python.

    Además, isc.py.ens.Operation tiene dos configuraciones:

    • Initializer — selección de la clase que implementa la interfaz isc.py.init.Abstract. Puede ser utilizado para cargar funciones, módulos, clases, etc. Se ejecuta una vez al iniciar el proceso.
    • PythonLib — (solo para Linux) si ves errores al cargar, establece su valor en libpython3.6m.so o incluso en la ruta completa a la biblioteca de Python.

Creación de procesos de negocio

Hay dos clases disponibles que facilitan el desarrollo de procesos de negocio:

  • isc.py.ens.ProcessUtils permite extraer anotaciones de las actividades con sustitución de variables.
  • isc.py.util.BPEmulator permite probar fácilmente los procesos de negocio con Python. Puede ejecutar el proceso de negocio (partes en el lenguaje Python) en el proceso actual.

Sustitución de variables.

Todos los procesos de negocio que heredan de isc.py.ens.ProcessUtils, pueden utilizar el método GetAnnotation(name) para obtener el valor de la anotación de la actividad por su nombre. La anotación de la actividad puede contener variables que se calcularán en el lado de InterSystems IRIS antes de ser pasadas a Python. Aquí está la sintaxis para la sustitución de variables:

  • ${class:method:arg1:...:argN} — llamada al método
  • #{expr} — ejecutar código en ObjectScript.

Un ejemplo está disponible en el proceso de negocio de prueba isc.py.test.Process, por ejemplo, en la actividad Matriz de Correlación: Gráfico: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). En este ejemplo:

  • #{process.WorkDirectory} devuelve la propiedad WorkDirectory del objeto procesar, que es una instancia de la clase isc.py.test.Process es decir, el proceso de negocio actual.
  • ${%PopulateUtils:Integer:1:100} se llama al método Integer de la clase %PopulateUtils, pasando argumentos 1 y 100, devolviendo un número entero aleatorio en el rango 1...100.

Proceso de negocio de prueba

El producto de prueba y el proceso de negocio de prueba están disponibles por defecto como parte de Python Gateway. Para usarlos:

  1. Ejecuta en el terminal del sistema operativo: pip install pandas matplotlib seaborn.
  2. Ejecuta en el terminal de InterSystems IRIS: do ##class(isc.py.test.CannibalizationData).Import() para llenar los datos de prueba.
  3. Ejecuta el producto isc.py.test.Production.
  4. Enviar una solicitud de tipo Ens.Request en isc.py.test.Process.

Veamos cómo funciona todo esto junto. Abre isc.py.test.Process en el editor BPL:

Python Gateway en InterSystems IRIS

Ejecución de código

La llamada más importante es la ejecución de código Python:

Python Gateway en InterSystems IRIS

Se utiliza la solicitud isc.py.msg.ExecutionRequest, aquí están sus propiedades:

  • Código — código Python.
  • SeparateLines — si dividir el código en líneas para su ejecución. $c(10) (n) se utiliza para separar líneas. Tenga en cuenta que NO se recomienda procesar el mensaje completo de una vez; esta función está destinada únicamente a la manipulación de def y expresiones multilínea similares. Por defecto 0.
  • Variables – una lista de variables separadas por comas que se incluirán en la respuesta.
  • Serialización – Cómo serializar las variables que queremos retornar. Opciones: Str, Repr, JSON, Pickle y Dill, por defecto Str.

En nuestro caso, solo estamos configurando la propiedad Código, así que todas las demás propiedades utilizan valores por defecto. La establecemos llamando a process.GetAnnotation("Import pandas"), que en tiempo de ejecución devuelve la anotación tras realizar la sustitución de variables. Al final, el código import pandas as pd se pasará a Python. GetAnnotation puede ser útil para obtener scripts de Python multilínea, pero no hay restricciones en este método para obtener el código. Se puede establecer la propiedad Código de cualquier forma que le resulte conveniente.

Obtención de variables

Otro desafío interesante utilizando isc.py.msg.ExecutionRequest — Matriz de correlación: tabular:

Python Gateway en InterSystems IRIS

Calcula la matriz de correlación en el lado de Python y extrae la variable corrmat de vuelta a InterSystems IRIS en formato JSON, ajustando las propiedades de la solicitud:

  • Variables: "corrmat"
  • Serialización: "JSON"

Podemos ver los resultados en Visual Trace:

Python Gateway en InterSystems IRIS

Y si necesitamos este valor en BP, se puede obtener así: callresponse.Variables.GetAt("corrmat").

Transmisión de datos

A continuación, hablemos sobre la transferencia de datos de InterSystems IRIS a Python; todas las solicitudes de transferencia de datos implementan la interfaz isc.py.msg.DataRequest, que proporciona las siguientes propiedades:

  • Variable – variable Python en la que se escriben los datos.
  • Tipo – tipo de variable: dataframe (dataframe de pandas) o list.
  • Namespace – el ámbito del que obtenemos datos. El paquete isc.py debe estar disponible en este ámbito. Puede ser un ámbito sin soporte para productos.

Sobre la base de esta interfaz, se han implementado 4 clases de solicitudes:

  • isc.py.msg.QueryRequest – establezca su propiedad Query para pasar la consulta SQL.
  • isc.py.msg.ClassRequest – establezca su propiedad Class para pasar datos de clase.
  • isc.py.msg.TableRequest – establecer su propiedad Table para pasar datos de tabla.
  • isc.py.msg.GlobalRequest – establecer su propiedad Global para pasar datos globales.

En el proceso de prueba, observe la actividad RAW, donde isc.py.msg.QueryRequest se muestra en acción.

Python Gateway en InterSystems IRIS

Guardar/restaurar contexto de Python

Finalmente, podemos guardar el contexto de Python en InterSystems IRIS; para hacerlo, enviaremos isc.py.msg.SaveRequest con los argumentos:

  • Mask – Solo se guardan las variables que satisfacen la máscara. Se admiten * y ?. Ejemplo: "Data*, Figure?". Por defecto *.
  • MaxLength — Longitud máxima de la variable guardada. Si la serialización de la variable es más larga, será ignorada. Establezca 0 para permitir variables de cualquier longitud. Por defecto $$$MaxStringLength.
  • Nombre — Nombre del contexto (opcional).
  • Descripción — Descripción del contexto (opcional).

Devuelve Ens.StringResponse con Id del contexto guardado. En el proceso de prueba, observe la actividad Guardar contexto.

Solicitud correspondiente isc.py.msg.RestoreRequest carga el contexto desde InterSystems IRIS en Python:

  • ContextId — identificador del contexto.
  • Limpiar — limpiar el contexto antes de restaurarlo.

Jupyter Notebook

Jupyter Notebook — esta es una aplicación web de código abierto que permite crear cuadernos que contienen código, visualizaciones y texto, y publicarlos. Python Gateway permite visualizar y editar procesos BPL como un cuaderno de Jupyter. Tenga en cuenta que actualmente se utiliza un ejecutor estándar de Python 3.

Esta extensión asume que las anotaciones contienen código Python y utilizan los nombres de las actividades como encabezados precedentes. Ahora es posible desarrollar procesos de negocio PythonGateway en un cuaderno de Jupyter. Esto es lo que es posible:

  • Crear nuevos procesos de negocio
  • Eliminar procesos de negocio
  • Crear nuevas actividades
  • Modificar actividades
  • Eliminar actividades

Aquí video demostrativo. Y algunas capturas de pantalla:

Explorador de procesos

Python Gateway en InterSystems IRIS

Editor de procesos

Python Gateway en InterSystems IRIS

Instalación

  1. Necesitará InterSystems IRIS 2019.2+.
  2. Instale PythonGateway v0.8+ (solo se requiere isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints y isc.py.ens.ProcessUtils).
  3. Actualice el código ObjectScript desde el repositorio.
  4. Ejecuta do ##class(isc.py.util.Jupyter).Install() y siga las instrucciones.

La documentación.

Conclusiones

MLToolkit es un conjunto de herramientas con el objetivo de integrar modelos y entornos transaccionales, para que los modelos construidos sean fácilmente utilizables directamente en sus procesos de negocio. Python Gateway es parte de MLToolkit y proporciona integración con el lenguaje Python, permitiendo orquestar cualquier algoritmo de aprendizaje automático creado en Python (el entorno principal para muchos Científicos de Datos), utilizando numerosas bibliotecas listas para crear rápidamente soluciones analíticas adaptativas y robotizadas AI/ML en la plataforma InterSystems IRIS.

Enlaces

MLToolkit

El grupo de usuarios de MLToolkit es un repositorio privado de GitHub, creado como parte de la organización corporativa de GitHub InterSystems. Está dirigido a usuarios externos que instalan, estudian o ya utilizan los componentes de MLToolkit, incluido el Python Gateway. En el grupo hay disponibles numerosos casos de uso implementados (con código fuente y datos de prueba) en áreas como marketing, producción, medicina y muchas otras industrias. Para unirte al grupo de usuarios de ML Toolkit, por favor envía un breve mensaje por correo electrónico a la siguiente dirección: MLToolkit@intersystems.com y especifica en tu correo los siguientes datos:

  • Nombre de usuario de GitHub
  • Organización (donde trabajas o estudias)
  • Cargo (tu puesto actual en tu organización, o "Estudiante", o "Freelance").
  • País

A aquellos que han leído el artículo y están interesados en las capacidades de InterSystems IRIS como plataforma para el desarrollo o la implementación de mecanismos de inteligencia artificial y aprendizaje automático, les proponemos discutir posibles escenarios de interés para su empresa. Estamos dispuestos a analizar las necesidades de su negocio y definir conjuntamente un plan de acción; la dirección de correo electrónico de nuestro equipo de expertos en AI/ML es MLToolkit@intersystems.com.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster