Pasarela Python en InterSystems IRIS

Este artículo trata sobre Python Gateway, un proyecto comunitario de código abierto para la plataforma de datos InterSystems IRIS. Este proyecto le permite orquestar cualquier algoritmo de aprendizaje automático creado en Python (el entorno principal para muchos científicos de datos), utilizar numerosas bibliotecas listas para usar para crear rápidamente soluciones de IA/ML analíticas robóticas y adaptativas en la plataforma InterSystems IRIS. En este artículo, le mostraré cómo InterSystems IRIS puede orquestar procesos de Python, realizar una transferencia de datos bidireccional eficiente y crear procesos comerciales inteligentes.

plan

  1. Introducción.
  2. Instrumentos.
  3. Instalación.
  4. API.
  5. Interoperabilidad.
  6. Cuaderno Jupyter.
  7. Conclusiones.
  8. Referencias
  9. ML Toolkit.

introducción

Python es un lenguaje de programación de propósito general de alto nivel centrado en mejorar la productividad de los desarrolladores y la legibilidad del código. En esta serie de artículos, hablaré sobre las posibilidades de usar el lenguaje Python en la plataforma IRIS de InterSystems, mientras que el enfoque principal de este artículo es el uso de Python 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, cuyo rasgo característico no es la solución directa de un problema, sino el aprendizaje en el proceso de resolución de muchos problemas similares.

Los algoritmos y modelos de aprendizaje automático son cada vez más comunes. Hay muchas razones para esto, pero todo se reduce a la accesibilidad, la simplicidad y el logro de resultados prácticos. ¿La agrupación en clústeres o incluso el modelado de redes neuronales es una nueva tecnología?

Por supuesto que no, pero hoy en día no es necesario escribir cientos de miles de líneas de código para ejecutar un modelo, y los costos de creación y uso de modelos son cada vez más pequeños.

Las herramientas están evolucionando: si bien no tenemos herramientas AI/ML completamente orientadas a GUI, también se ve el progreso que hemos visto con muchas otras clases de sistemas de información como BI (desde escribir código hasta usar marcos y soluciones configurables orientadas a GUI). en herramientas de creación de IA/ML. Ya pasamos la etapa de escribir código y hoy usamos frameworks para construir y entrenar modelos.

Otras mejoras, como la capacidad de propagar un modelo previamente entrenado donde el usuario final simplemente debe terminar de entrenar el modelo en sus datos específicos, también facilitan el comienzo de la aplicación del aprendizaje automático. Estos avances facilitan mucho el aprendizaje del aprendizaje automático, tanto para los profesionales como para las empresas en su conjunto.

Por otro lado, recopilamos cada vez más datos. Con una plataforma de datos unificada como InterSystems IRIS, toda esta información se puede preparar de inmediato y utilizar como entrada para modelos de aprendizaje automático.

Con la transición a la nube, lanzar proyectos de IA/ML es 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 perdido.

Pero ¿qué pasa con los resultados? Aquí es donde las cosas se complican más. Hay muchas herramientas para construir modelos, que discutiré a continuación. Construir un buen modelo no es fácil, pero ¿qué sigue? Beneficiarse del uso del modelo por parte de la empresa tampoco es una tarea baladí. La raíz del problema es la separación de las cargas de trabajo analíticas y transaccionales, y los modelos de datos. Cuando entrenamos un modelo, generalmente lo hacemos con datos históricos. Pero el lugar para el modelo construido es el procesamiento de datos transaccionales. ¿De qué sirve el mejor modelo de detección de transacciones fraudulentas si lo ejecutamos una vez al día? Los estafadores hace tiempo que se fueron con el dinero. Necesitamos entrenar el modelo con datos históricos, pero también debemos aplicarlo en tiempo real con nuevos datos entrantes para que nuestros procesos comerciales puedan actuar de acuerdo con las predicciones hechas por el modelo.

ML Toolkit es un conjunto de herramientas que hace exactamente eso: reunir modelos y un entorno transaccional para que los modelos que cree se puedan usar fácilmente directamente en sus procesos comerciales. Python Gateway es parte de ML Toolkit y proporciona integración con el lenguaje Python (similar a R Gateway, al ser parte de ML Toolkit proporciona integración con el lenguaje R).

Kit de herramientas

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

Tecnología

  • Python es un lenguaje de programación interpretado, de propósito general y de alto nivel. La principal ventaja del lenguaje es una gran biblioteca de bibliotecas matemáticas, ML y AI. Al igual que ObjectScript, es un lenguaje orientado a objetos, pero todo se define dinámicamente, no estáticamente. También todo es un objeto. Los artículos posteriores asumen una familiaridad pasajera con el idioma. Si quieres empezar a aprender, te recomiendo empezar con documentación.
  • Para nuestros próximos ejercicios, establezca Python 3.6.7 de 64 bits.
  • IDE: Yo uso PyCharm, pero en general много. Si está utilizando Atelier, hay un complemento de Eclipse para desarrolladores de Python. Si está utilizando VS Code, existe una extensión para Python.
  • Cuaderno: en lugar de un IDE, puede escribir y compartir sus scripts en cuadernos en línea. El más popular de ellos es Jupyter.

bibliotecas

Aquí hay una lista (parcial) de bibliotecas de aprendizaje automático:

  • Numpy — un paquete fundamental para cálculos exactos.
  • pandas — estructuras de datos de alto rendimiento y herramientas de análisis de datos.
  • matplotlib - Creación de gráficos.
  • nacido en el mar - visualización de datos basada en matplotlib.
  • aprender — métodos de aprendizaje automático.
  • XGBoost — Algoritmos de aprendizaje automático dentro de la metodología Gradient Boosting.
  • Gensim — PNL.
  • Keras - Redes neuronales.
  • Flujo tensor es una plataforma para crear modelos de aprendizaje automático.
  • PyTorch es una plataforma para crear modelos de aprendizaje automático centrados en Python.
  • Nyoka - PMML de varios modelos.

Las tecnologías AI/ML hacen que los negocios sean más eficientes y adaptables. Además, hoy en día estas tecnologías son cada vez más fáciles de desarrollar e implementar. Empiece a aprender sobre las tecnologías de IA/ML y cómo pueden ayudar a su organización a crecer.

Instalación

Hay varias formas de instalar y usar Python Gateway:

  • OS
    • Windows
    • Linux
    • Mac
  • Docker
    • Usa la imagen de DockerHub
    • Crea tu propia imagen

Independientemente del método de instalación, necesitará el código fuente. El único lugar para descargar el código es página de lanzamientos. Contiene versiones estables probadas, solo tome la última. De momento es 0.8, pero con el tiempo habrá nuevos. No clone/descargue el repositorio, descargue la última versión.

OS

Si está instalando Python Gateway en un sistema operativo, primero (independientemente del sistema operativo) deberá instalar Python. Para esto:

  1. Instalar Python 3.6.7 de 64 bits. Se recomienda instalar Python en el directorio predeterminado.
  2. Instalar el módulo dill: pip install dill.
  3. Descargue el código ObjectScript (es decir, do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) a cualquier zona con productos. En caso de que desee un área existente para admitir productos, ejecute: write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. Lugar llamada DLL/SO/DYLIB a la carpeta bin su instancia de InterSystems IRIS. El archivo de biblioteca debe estar disponible en la ruta devuelta por write ##class(isc.py.Callout).GetLib().

Windows

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

Linux (Debian/Ubuntu)

  1. Compruebe si la variable de entorno es PATH contiene /usr/lib и /usr/lib/x86_64-linux-gnu. Usar archivo /etc/environment para establecer variables de entorno.
  2. En caso de errores undefined symbol: _Py_TrueStruct establecer la configuración PythonLib. También en Léame hay una sección de Solución de problemas.

Mac

  1. Actualmente solo se admite Python 3.6.7 desde Python.org. Comprobar variable PATH.

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

Docker

El uso de contenedores tiene una serie de ventajas:

  • Portabilidad
  • Eficacia
  • Изоляция
  • ligereza
  • Inmutabilidad

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

Todas las compilaciones de Python Gateway actualmente están basadas en contenedores. 2019.4.

Listo imagen

Correr: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latestpara descargar y ejecutar Python Gateway con InterSystems IRIS Community Edition. Eso es todo.

Crea tu propia imagen

Para crear una imagen acoplable, ejecútela en la raíz del repositorio: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
De forma predeterminada, la imagen se crea en función de la imagen store/intersystems/iris-community:2019.4.0.383.0, sin embargo, puede cambiar esto configurando la variable IMAGE.
Para compilar 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 la ventana acoplable:

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

Si está utilizando una imagen basada en InterSystems IRIS Community Edition, no necesita especificar una clave.

comentarios

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

Comprobación de la instalación

Una vez que haya instalado Python Gateway, vale la pena comprobar que funciona. Ejecute este código en la terminal InterSystems IRIS:

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

El resultado debe ser HELLO - el valor de la variable Python x. Si el estado de retorno sc es un error o var vacío, comprobar Léame: sección de solución de problemas.

API

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

  • Ejecución de código
  • Transferencia de datos
  • auxiliar

Ejecución de código

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

CadenaSimple

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

  • code es la línea de código a ejecutar. Carácter de avance de línea: $c(10).
  • returnVariable es el nombre de la variable a devolver.
  • serialization - cómo serializar returnVariable. 0 - cadena (predeterminado), 1 - repr.
  • result - ByRef referencia a la variable en la que se escribe el valor returnVariable.

Arriba hemos hecho:

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

En este ejemplo, estamos asignando a una variable de Python x значение Hello y quiero devolver el valor de una variable de Python x a una variable de ObjectScript var.

EjecutarCódigo

ExecuteCode es una alternativa más segura y menos restrictiva SimpleString.
Las líneas en la plataforma InterSystems IRIS están limitadas a 3 caracteres, y si desea ejecutar un código más largo, debe usar flujos.
Se necesitan dos argumentos:

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

Sugerir usar:

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

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

Transferencia de datos

Pasar datos hacia y desde Python.

Python -> InterSystems IRIS

Hay 4 formas de obtener el valor de una variable de Python en InterSystems IRIS, según la serialización que necesite:

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

Estos métodos le permiten recibir variables de Python como una cadena o como flujos.

  • GetVariable(variable, serialization, .stream, useString) - conseguir serialization variable variable в stream. Si useString es 1 y la serialización se coloca en una cadena, luego se devuelve una cadena, no una secuencia.
  • GetVariableJson(variable, .stream, useString) — obtener la serialización JSON de una variable.
  • GetVariablePickle(variable, .stream, useString, useDill) -Obtener una serialización Pickle (o Dill) de una variable.

Intentemos obtener nuestra variable y.

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

InterSystems IRIS -> Python

Carga de datos de InterSystems IRIS en Python.

  • ExecuteQuery(query, variable, type, namespace) - crea un conjunto de datos (pandas dataframe o list) de la consulta sql y configúrelo en la variable python variable. Bolsa de plastico isc.py debe estar disponible en la zona namespace - la solicitud se ejecutará allí.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) - carga datos globales global del subíndice start a end en Python como variable de tipo type: listo pandas dataframe. Descripción de argumentos opcionales mask y labels disponible en la documentación y el repositorio de clases Documentos de transferencia de datos.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) - carga datos de clase class de identificación start a end en Python como variable de tipo type: listo pandas dataframe. properties — lista (separada por comas) de propiedades de clase que se cargarán en el conjunto de datos. Máscaras compatibles * и ?. Por defecto - * (todas las propiedades). Propiedad %%CLASSNAME ignorado
  • ExecuteTable(table, variable, type, start, end, properties, namespace) - carga los datos de la tabla table de identificación start a end en pitón

ExecuteQuery - universal (cualquier consulta SQL válida se pasará a Python). Sin embargo, ExecuteGlobal y sus envolturas ExecuteClass и ExecuteTable trabajar con una serie de restricciones. Son mucho más rápidos (3-5 veces más rápidos que el controlador ODBC y 20 veces más rápidos que ExecuteQuery). Más información en Documentos de transferencia de datos.
Todos estos métodos admiten la transferencia de datos desde cualquier área. Bolsa de plastico isc.py debe estar disponible en el área de destino.

Ejecutar la solicitud

ExecuteQuery(request, variable, type, namespace) - pasar los resultados de cualquier consulta SQL válida a Python. Este es el método de transferencia de datos más lento. úsalo si ExecuteGlobal y sus envoltorios no están disponibles.

Argumentos:

  • query - consulta sql.
  • variable - el nombre de la variable de Python en la que se escriben los datos.
  • type - list o pandas dataframe.
  • namespace - el área en la que se ejecutará la solicitud.

EjecutarGlobal

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

Argumentos:

  • global es el nombre del global sin ^
  • variable - el nombre de la variable de Python en la que se escriben los datos.
  • type - list o pandas dataframe.
  • start — el primer subíndice de global. Necesariamente %Integer.
  • end es el último subíndice de global. Necesariamente %Integer.
  • mask — máscara de valores globales. La máscara puede ser más corta que el número de campos en el global (en cuyo caso se omitirán los campos al final). Cómo formatear la máscara:
    • + pasar el valor como está.
    • - valor de salto.
    • b — Tipo booleano (0 - False, todo el resto - True).
    • d — Fecha (desde $horolog, en Windows desde 1970, en Linux desde 1900).
    • t - Hora ($horolog, segundos después de la medianoche).
    • m — Marca de tiempo (cadena de formato AÑO-MES-DÍA HORA:MINUTO:SEGUNDO).
  • labels - %Lista de nombres de columnas. El primer elemento es el nombre del subíndice.
  • namespace - el área en la que se ejecutará la solicitud.

EjecutarClase

envolver ExecuteGlobal. Prepara una llamada basada en la definición de clase. ExecuteGlobal y lo llama.

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

Argumentos:

  • class - nombre de la clase
  • variable - el nombre de la variable de Python en la que se escriben los datos.
  • type - list o pandas dataframe.
  • start - identificación inicial.
  • end - identificación final
  • properties — lista (separada por comas) de propiedades de clase que se cargarán en el conjunto de datos. Máscaras compatibles * и ?. Por defecto - * (todas las propiedades). Propiedad %%CLASSNAME ignorado
  • namespace - el área en la que se ejecutará la solicitud.

Todas las propiedades se pasan tal cual excepto las propiedades de tipo %Date, %Time, %Boolean и %TimeStamp - se convierten a las clases de Python correspondientes.

EjecutarTabla

envolver ExecuteClass. Traduce el nombre de la tabla en un nombre de clase y llama ExecuteClass. Firma:

ExecuteTable(table, variable, type, start, end, properties, namespace) - pasar datos de la tabla a Python.

Argumentos:

  • table - nombre de la tabla.
    Todos los demás argumentos se pasan como están. ExecuteClass.

Notas

  • ExecuteGlobal, ExecuteClass и ExecuteTable trabajar igual de rápido.
  • ExecuteGlobal 20 veces más rápido que ExecuteQuery en grandes conjuntos de datos (tiempo de transferencia >0.01 segundos).
  • ExecuteGlobal, ExecuteClass и ExecuteTable trabajar en globales con esta estructura: ^global(key) = $lb(prop1, prop2, ..., propN) donde key es un número entero.
  • para ExecuteGlobal, ExecuteClass и ExecuteTable rango de valor admitido %Date corresponde al rango mktime y depende del sistema operativoventanas: 1970-01-01, Linux 1900-01-01, Mac). Usar %TimeStamppara pasar datos fuera de este rango o usar pandas dataframe como esta limitación es solo para la lista.
  • para ExecuteGlobal, ExecuteClass и ExecuteTable todos los argumentos excepto la fuente de datos (global, clase o tabla) y la variable son opcionales.

Примеры

clase de prueba isc.py.prueba.Persona contiene un método que demuestra todas las opciones 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)

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

Métodos de ayuda

  • GetVariableInfo(variable, serialization, .defined, .type, .length) - obtener información sobre la variable: si está definida, clase y longitud de serialización.
  • GetVariableDefined(variable, .defined) - si la variable está definida.
  • GetVariableType(variable, .type) - Obtener la clase de la variable.
  • GetStatus() - obtenga y elimine la última excepción en el 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

Ha aprendido cómo llamar a Python Gateway desde la terminal, ahora comencemos a usarlo en producción. La base para interactuar con Python en este modo es isc.py.ens.Operation. Nos permite:

  • Ejecutar código Python
  • Guardar/restaurar contexto de Python
  • Cargar y recibir datos de Python

Básicamente, una operación de Pyhton es un envoltorio sobre isc.py.Main. Operación isc.py.ens.Operation permite la interacción con el proceso Python de los productos InterSystems IRIS. Se admiten cinco solicitudes:

  • isc.py.msg.ExecutionRequest para ejecutar código Python. devoluciones 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 Python. devoluciones isc.py.msg.StreamExecutionResponse el resultado de la ejecución y los valores de las variables solicitadas. Cosa análoga isc.py.msg.ExecutionRequest, pero acepta y devuelve secuencias en lugar de cadenas.
  • isc.py.msg.QueryRequest para transferir el resultado de ejecutar una consulta SQL. devoluciones Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest para pasar datos globales/clase/tabla. devoluciones Ens.Response.
  • isc.py.msg.SaveRequest para guardar el contexto de Python. devoluciones Ens.StringResponse con ID de contexto.
  • isc.py.msg.RestoreRequest para restaurar el contexto de Python.

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

    • Initializer - elegir una clase que implemente la interfaz isc.py.init.Abstract. Se puede usar para cargar funciones, módulos, clases y similares. Se ejecuta una vez cuando se inicia el proceso.
    • PythonLib - (Solo Linux) si ve errores de arranque, establezca 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 le permite extraer anotaciones de actividades con sustitución de variables.
  • isc.py.util.BPEmulator facilita la prueba de procesos comerciales con Python. Puede ejecutar un proceso de negocio (partes de Python) en el proceso actual.

Sustitución de variables

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

  • ${class:method:arg1:...:argN} - llamada de método
  • #{expr} - ejecutar código en el lenguaje ObjectScript.

Un ejemplo está disponible en el proceso comercial de prueba. isc.py.test.Process, por ejemplo, en la actividad Correlation Matrix: Graph: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). En este ejemplo:

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

Probar el proceso de negocio

La producción de prueba y el proceso comercial de prueba están disponibles de forma predeterminada como parte de Python Gateway. Para usarlos:

  1. En la terminal del sistema operativo, ejecute: pip install pandas matplotlib seaborn.
  2. En la terminal InterSystems IRIS, ejecute: do ##class(isc.py.test.CannibalizationData).Import() para completar los datos de prueba.
  3. productos de lanzamiento isc.py.test.Production.
  4. Enviar tipo de solicitud Ens.Request в isc.py.test.Process.

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

Pasarela Python en InterSystems IRIS

Ejecución de código

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

Pasarela Python en InterSystems IRIS

Solicitud utilizada isc.py.msg.ExecutionRequest, aquí están sus propiedades:

  • Code — Código Python.
  • SeparateLines - si dividir el código en líneas para su ejecución. $c(10) (n) se utiliza para separar cadenas. Tenga en cuenta que NO se recomienda procesar todo el mensaje a la vez, esta función es solo para procesar def y expresiones similares de varias líneas. Por defecto 0.
  • Variables es una lista de variables separadas por comas que se agregarán a la respuesta.
  • Serialization - Cómo serializar las variables que queremos devolver. Opciones: Str, Repr, JSON, Pickle и Dill, por defecto Str.

En nuestro caso, solo establecemos la propiedad Code, de modo que todas las demás propiedades utilicen sus valores predeterminados. Lo configuramos llamando process.GetAnnotation("Import pandas"), que en tiempo de ejecución devuelve una anotación después de que se haya realizado la sustitución de variables. Finalmente el código import pandas as pd se pasará a Python. GetAnnotation puede ser útil para obtener secuencias de comandos Python de varias líneas, pero no hay restricciones en esta forma de obtener código. Puede establecer la propiedad Code de cualquier manera conveniente para usted.

Obtener Variables

Otro desafío interesante utilizando isc.py.msg.ExecutionRequest - Correlation Matrix: Tabular:

Pasarela Python en InterSystems IRIS

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

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

Podemos ver los resultados en Visual Trace:

Pasarela Python en InterSystems IRIS

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

Transferencia de datos

A continuación, hablemos de 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 es una variable de Python en la que se escriben los datos.
  • Type - tipo variable: dataframe (marco de datos de pandas) o list.
  • Namespace - el área de la que recibimos datos. Bolsa de plastico isc.py debe estar disponible en esta área. Esta puede ser un área sin soporte de producto.

En base a esta interfaz, se implementan 4 clases de solicitudes:

  • isc.py.msg.QueryRequest - establecer propiedad Query para enviar una consulta SQL.
  • isc.py.msg.ClassRequest - establecer propiedad Class para pasar datos de clase.
  • isc.py.msg.TableRequest - establecer propiedad Table para pasar datos de la tabla.
  • isc.py.msg.GlobalRequest - establecer propiedad Global para transferir datos globalmente.

En el proceso de prueba, mira la actividad. RAWDonde isc.py.msg.QueryRequest mostrado en acción.

Pasarela Python en InterSystems IRIS

Guardar/Restaurar un Contexto de Python

Finalmente, podemos almacenar el contexto de Python en InterSystems IRIS, para hacer esto, envíe isc.py.msg.SaveRequest con argumentos:

  • Mask — Solo se guardan las variables que cumplen la máscara. Soportado * и ?. Un ejemplo: "Data*, Figure?"... Defecto *.
  • MaxLength — La longitud máxima de la variable almacenada. Si la serialización de una variable es más larga, se ignorará. Establézcalo en 0 para obtener variables de cualquier longitud. Por defecto $$$MaxStringLength.
  • Name — Nombre de contexto (opcional).
  • Description — Descripción del contexto (opcional).

Devoluciones Ens.StringResponse с Id contexto guardado. En el proceso de prueba, mira la actividad. Save Context.

Solicitud coincidente isc.py.msg.RestoreRequest carga un contexto de InterSystems IRIS en Python:

  • ContextId es el identificador de contexto.
  • Clear — borre el contexto antes de restaurar.

Cuaderno Jupyter

Cuaderno Jupyter es una aplicación web de código abierto que le permite crear y publicar cuadernos que contienen código, visualizaciones y texto. Python Gateway le permite ver y editar procesos BPL como un Jupyter Notebook. Tenga en cuenta que actualmente se está utilizando el ejecutor normal de Python 3.

Esta extensión asume que las anotaciones contienen código Python y usan nombres de actividades como títulos anteriores. Ahora es posible desarrollar procesos comerciales de PythonGateway en Jupyter Notebook. Esto es lo que es posible:

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

aquí está vídeo de demostración. Y algunas capturas de pantalla:

Explorador de procesos

Pasarela Python en InterSystems IRIS

editor de procesos

Pasarela Python en InterSystems IRIS

Instalación

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

Документация.

Hallazgos

MLToolkit es un conjunto de herramientas que tiene como objetivo combinar modelos y un entorno transaccional para que los modelos construidos puedan usarse fácilmente directamente en sus procesos comerciales. Python Gateway es parte de MLToolkit y proporciona integración con el lenguaje Python, lo que le permite orquestar cualquier algoritmo de aprendizaje automático creado en Python (el entorno principal para muchos científicos de datos), usar numerosas bibliotecas listas para usar para crear rápidamente IA analítica robótica y adaptativa. Soluciones de ML en la plataforma IRIS de InterSystems.

referencias

Kit de herramientas de ML

El grupo de usuarios de MLToolkit es un repositorio privado de GitHub creado como parte de la organización corporativa de InterSystems GitHub. Está dirigido a usuarios externos que están instalando, aprendiendo o que ya usan componentes de MLToolkit, incluido Python Gateway. El grupo tiene una serie de casos implementados (con código fuente y datos de prueba) en los campos de marketing, fabricación, medicina y muchas otras industrias. Para unirse al grupo de usuarios de ML Toolkit, envíe un breve correo electrónico a la siguiente dirección: [email protected] e incluya la siguiente información en su carta:

  • Nombre de usuario de GitHub
  • Organización (tú trabajas o estudias)
  • Posición (su posición actual en su organización, ya sea "Estudiante" o "Independiente").
  • país

Para quienes hayan leído el artículo y estén interesados ​​en InterSystems IRIS como plataforma para desarrollar o alojar mecanismos de inteligencia artificial y aprendizaje automático, los invitamos a discutir posibles escenarios de interés para su empresa. Analizaremos fácilmente las necesidades de su empresa y juntos determinaremos un plan de acción; Dirección de correo electrónico de contacto de nuestro grupo de expertos en IA/ML: [email protected].

Fuente: habr.com

Añadir un comentario