Gateway Python no InterSystems IRIS

Este artigo é sobre o Python Gateway, um projeto comunitário de código aberto para a plataforma de dados InterSystems IRIS. Este projeto permite orquestrar qualquer algoritmo de aprendizado de máquina criado em Python (o ambiente principal para muitos cientistas de dados), usar inúmeras bibliotecas prontas para criar rapidamente soluções de IA / ML analíticas robóticas e adaptativas na plataforma InterSystems IRIS. Neste artigo, mostrarei como o InterSystems IRIS pode orquestrar processos em Python, comunicar dados bidirecionais com eficiência e criar processos de negócios inteligentes.

Plano

  1. Introdução.
  2. Ferramentas.
  3. Instalação.
  4. API.
  5. Interoperabilidade.
  6. Notebook Jupyter.
  7. Conclusões.
  8. Links.
  9. Kit de ferramentas ML.

Introdução

Python é uma linguagem de programação de alto nível e uso geral que visa melhorar a produtividade do desenvolvedor e a legibilidade do código. Nesta série de artigos discutirei as possibilidades de uso do Python na plataforma InterSystems IRIS, sendo o foco principal deste artigo o uso do Python como linguagem para criação e execução de modelos de aprendizado de máquina.

O aprendizado de máquina (ML) é uma classe de métodos de inteligência artificial cuja característica não é a solução direta de um problema, mas o aprendizado no processo de resolução de muitos problemas semelhantes.

Algoritmos e modelos de aprendizado de máquina estão se tornando mais comuns. As razões são muitas, mas tudo se resume à acessibilidade, simplicidade e obtenção de resultados práticos. O clustering ou mesmo a modelagem de redes neurais é uma nova tecnologia?

Claro que não, mas hoje em dia não há necessidade de escrever centenas de milhares de linhas de código para executar um único modelo, e o custo de criação e uso de modelos está se tornando cada vez menor.

As ferramentas estão evoluindo - embora não tenhamos ferramentas de IA/ML totalmente centradas em GUI, o progresso que temos visto com muitas outras classes de sistemas de informação, como BI (desde a escrita de código até o uso de estruturas e soluções configuráveis ​​centradas em GUI), é também observado em ferramentas para criação de IA/ML. Já passamos da fase de escrever código e hoje utilizamos frameworks para construir e treinar modelos.

Outras melhorias, como a capacidade de distribuir um modelo pré-treinado onde o usuário final simplesmente precisa terminar o treinamento do modelo em seus dados específicos, também facilitam o início do aprendizado de máquina. Esses avanços tornam o aprendizado de máquina muito mais fácil tanto para profissionais quanto para empresas em geral.

Por outro lado, estamos coletando cada vez mais dados. Com uma plataforma de dados unificada como o InterSystems IRIS, todas essas informações podem ser preparadas imediatamente e usadas como entrada para modelos de machine learning.

Com a mudança para a nuvem, lançar projetos de IA/ML está se tornando mais fácil do que nunca. Só podemos consumir os recursos de que necessitamos. Além disso, graças à paralelização oferecida pelas plataformas em nuvem, podemos economizar tempo gasto.

Mas e os resultados? É aqui que as coisas ficam mais complicadas. Existem muitas ferramentas para construir modelos, que discutirei a seguir. Construir um bom modelo não é fácil, mas e depois? Obter lucro com a utilização de um modelo de negócios também não é uma tarefa trivial. A raiz do problema é a separação entre cargas de trabalho analíticas e transacionais e modelos de dados. Quando treinamos um modelo, geralmente o fazemos com base em dados históricos. Mas o lugar para o modelo construído é no processamento de dados transacionais. De que serve o melhor modelo de detecção de transações fraudulentas se o executarmos uma vez por dia? Os golpistas já saíram com o dinheiro há muito tempo. Precisamos treinar o modelo em dados históricos, mas também precisamos aplicá-lo em tempo real em novos dados recebidos para que nossos processos de negócios possam agir de acordo com as previsões feitas pelo modelo.

O ML Toolkit é um conjunto de ferramentas que visa fazer exatamente isso: unificar modelos e um ambiente transacional para que os modelos construídos possam ser facilmente utilizados diretamente em seus processos de negócios. Python Gateway faz parte do ML Toolkit e fornece integração com a linguagem Python (semelhante a como o R Gateway, fazendo parte do ML Toolkit fornece integração com a linguagem R).

Toolkit

Antes de continuarmos, gostaria de descrever algumas ferramentas e bibliotecas Python que usaremos mais tarde.

Tecnologia

  • Python é uma linguagem de programação interpretada, de alto nível e de uso geral. A principal vantagem da linguagem é sua grande biblioteca de bibliotecas matemáticas, de ML e de IA. Assim como o ObjectScript, é uma linguagem orientada a objetos, mas tudo é definido dinamicamente e não estaticamente. Além disso, tudo é um objeto. Artigos posteriores assumem uma familiaridade passageira com o idioma. Se você quiser começar a aprender, recomendo começar com documentação.
  • Para nossos exercícios subsequentes, defina Python 3.6.7 de 64 bits.
  • IDE: eu uso PyCharm, mas em geral eles muitos. Se você usa o Atelier, existe um plugin Eclipse para desenvolvedores Python. Se você estiver usando o VS Code, existe uma extensão para Python.
  • Notebook: em vez de um IDE, você pode escrever e compartilhar seus scripts em notebooks online. O mais popular deles é jupyter.

bibliotecas

Aqui está uma lista (não exaustiva) de bibliotecas de aprendizado de máquina:

  • Numpy — um pacote fundamental para cálculos precisos.
  • Pandas — estruturas de dados e ferramentas de análise de dados de alto desempenho.
  • matplotlib — criação de gráficos.
  • marinho — visualização de dados baseada em matplotlib.
  • SklearnName — métodos de aprendizado de máquina.
  • XGBoostName — algoritmos de aprendizagem automática no âmbito da metodologia de aumento de gradiente.
  • Gensim - PNL.
  • Keras - redes neurais.
  • Tensorflow — uma plataforma para criação de modelos de aprendizado de máquina.
  • PyTorch é uma plataforma para criação de modelos de aprendizado de máquina, com foco em Python.
  • Nyoka - PMML de vários modelos.

As tecnologias de IA/ML tornam os negócios mais eficientes e adaptáveis. Além disso, hoje estas tecnologias estão a tornar-se mais fáceis de desenvolver e implementar. Comece a aprender sobre as tecnologias de IA/ML e como elas podem ajudar sua organização a crescer.

Instalação

Existem várias maneiras de instalar e usar o Python Gateway:

  • SO
    • Windows
    • Linux
    • Mac
  • Estivador
    • Use uma imagem do DockerHub
    • Crie seu próprio visual

Independentemente do método de instalação, você precisará do código-fonte. O único lugar para baixar o código é página de lançamentos. Ele contém versões estáveis ​​testadas, basta pegar a mais recente. No momento é 0.8, mas com o tempo surgirão novos. Não clone/baixe o repositório, baixe a versão mais recente.

SO

Se você estiver instalando o Python Gateway em um sistema operacional, primeiro (independentemente do sistema operacional) você precisará instalar o Python. Por esta:

  1. Instale Python 3.6.7 64 bits. Recomenda-se instalar o Python no diretório padrão.
  2. Instale o módulo dill: pip install dill.
  3. Baixe o código ObjectScript (ou seja, do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) para qualquer área com produtos. Caso queira uma área existente para suporte de produtos, execute: write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. Lugar chamada DLL/SO/DYLIB para a pasta bin sua instância InterSystems IRIS. O arquivo da biblioteca deve estar disponível no caminho retornado write ##class(isc.py.Callout).GetLib().

Windows

  1. Certifique-se de que a variável de ambiente PYTHONHOME aponta para Python 3.6.7.
  2. Certifique-se de que a variável de ambiente do sistema esteja PATH contém uma variável PYTHONHOME (ou o diretório para o qual ele aponta).

Linux (Debian/Ubuntu)

  1. Verifique se a variável de ambiente é PATH contém /usr/lib и /usr/lib/x86_64-linux-gnu. Usar arquivo /etc/environment para definir variáveis ​​de ambiente.
  2. Em caso de erros undefined symbol: _Py_TrueStruct definir a configuração PythonLib. também em Leia-me há uma seção de solução de problemas.

Mac

  1. Atualmente apenas Python 3.6.7 é compatível python.org. Verifique a variável PATH.

Se você alterou as variáveis ​​de ambiente, reinicie seu produto InterSystems.

Estivador

O uso de contêineres tem uma série de vantagens:

  • Portabilidade
  • Eficácia
  • Isolamento
  • Leveza
  • Imutabilidade

Veja isso série de artigos para obter mais informações sobre como usar o Docker com produtos InterSystems.

Todas as compilações do Python Gateway são atualmente baseadas em contêiner 2019.4.

Imagem pronta

Correr: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latestpara baixar e executar o Python Gateway com InterSystems IRIS Community Edition. Isso é tudo.

Crie seu próprio visual

Para construir uma imagem docker, execute na raiz do repositório: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
Por padrão, a imagem é construída com base na imagem store/intersystems/iris-community:2019.4.0.383.0, no entanto, você pode alterar isso definindo uma variável IMAGE.
Para construir a partir do InterSystems IRIS, execute: `docker build --build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 --force-rm --tag intersystemscommunity/irispy:latest ".

Depois disso, você pode executar a imagem docker:

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

Se estiver usando uma imagem baseada no InterSystems IRIS Community Edition, você poderá omitir a chave.

comentários

  • Processo de teste isc.py.test.Process salva várias imagens em um diretório temporário. Você pode querer alterar esse caminho para o diretório montado. Para fazer isso, edite a configuração WorkingDir especificando o diretório montado.
  • Para acessar o terminal execute: docker exec -it irispy sh.
  • Acesso ao Portal de Gerenciamento do Sistema por login SuperUser/SYS.
  • Para parar o contêiner, execute: docker stop irispy && docker rm --force irispy.

Verificando a instalação

Depois de instalar o Python Gateway, vale a pena verificar se está funcionando. Execute este código no terminal InterSystems IRIS:

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

O resultado deve ser: HELLO — Valor da variável Python x. Se o status de retorno sc é um erro ou var vazio, verifique Leiame - seção Solução de problemas.

API

O Python Gateway está instalado e você verificou que funciona. É hora de começar a usá-lo!
A interface principal do Python é isc.py.Main. Ele oferece os seguintes grupos de métodos (todos retornam %Status):

  • Execução de código
  • Transferência de dados
  • Auxiliar

Execução de código

Esses métodos permitem executar código Python arbitrário.

SimpleString

SimpleString - este é o método principal. São necessários 4 argumentos opcionais:

  • code — linha de código a ser executada. Caractere de alimentação de linha: $c(10).
  • returnVariable — nome da variável a ser retornada.
  • serialization - como serializar returnVariable. 0 — string (padrão), 1 — repr.
  • result — ByRef referência à variável na qual o valor é escrito returnVariable.

Acima fizemos:

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

Neste exemplo, atribuímos a uma variável Python x valor Hello e deseja retornar o valor de uma variável Python x para uma variável ObjectScript var.

ExecuteCode

ExecuteCode é uma alternativa mais segura e menos restritiva SimpleString.
As linhas na plataforma InterSystems IRIS são limitadas a 3 caracteres e, se você quiser executar um trecho de código mais longo, será necessário usar threads.
Dois argumentos são aceitos:

  • code — uma linha ou fluxo de código Python a ser executado.
  • variable — (opcional) atribui o resultado da execução code esta variável Python.

Exemplo para usar:

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

Neste exemplo, multiplicamos 2 por 3 e escrevemos o resultado em uma variável Python y.

Transferência de dados

Passe dados de e para Python.

Python -> InterSystems IRIS

Existem 4 maneiras de obter o valor de uma variável Python no InterSystems IRIS, dependendo da serialização necessária:

  • String para tipos de dados simples e depuração.
  • Repr para armazenar objetos simples e depuração.
  • JSON para fácil manipulação de dados no lado do InterSystems IRIS.
  • Pickle para salvar objetos.

Esses métodos permitem recuperar variáveis ​​​​do Python como uma string ou fluxos.

  • GetVariable(variable, serialization, .stream, useString) - pegar serialization variável variable в stream. Se useString for 1 e a serialização for colocada em uma string, então uma string será retornada e não um fluxo.
  • GetVariableJson(variable, .stream, useString) — obtenha a serialização JSON de uma variável.
  • GetVariablePickle(variable, .stream, useString, useDill) -get serialização Pickle (ou Dill) de uma variável.

Vamos tentar obter nossa variável y.

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

InterSystems IRIS -> Python

Carregando dados do InterSystems IRIS para Python.

  • ExecuteQuery(query, variable, type, namespace) - cria um conjunto de dados (pandas dataframe ou list) da consulta sql e define-a como uma variável Python variable. Saco de plástico isc.py deve estar disponível na área namespace — a solicitação será executada lá.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) - carrega dados globais global do subscrito start para end em Python como uma variável de tipo type: listou pandas dataframe. Descrição dos argumentos opcionais mask e labels disponível na documentação da classe e no repositório Documentos de transferência de dados.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) - carrega dados da classe class da identificação start para end em Python como uma variável de tipo type: listou pandas dataframe. properties — uma lista (separada por vírgula) de propriedades de classe que precisam ser carregadas no conjunto de dados. Máscaras suportadas * и ?. Padrão - * (todas as propriedades). Propriedade %%CLASSNAME ignorado.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) - carrega dados da tabela table da identificação start para end em Python.

ExecuteQuery — universal (qualquer consulta SQL correta será passada para Python). No entanto, ExecuteGlobal e seus invólucros ExecuteClass и ExecuteTable trabalhar com uma série de restrições. Eles são muito mais rápidos (3-5 vezes mais rápidos que o driver ODBC e 20 vezes mais rápidos ExecuteQuery). Mais informações em Documentos de transferência de dados.
Todos esses métodos suportam a transferência de dados de qualquer área. Saco de plástico isc.py deve estar disponível na área alvo.

Executar consulta

ExecuteQuery(request, variable, type, namespace) — transferindo os resultados de qualquer consulta SQL correta para Python. Este é o método de transferência de dados mais lento. Use-o se ExecuteGlobal e seus invólucros não estão disponíveis.

Argumentos:

  • query - consulta SQL.
  • variable — o nome da variável Python na qual os dados são gravados.
  • type - list ou pandas dataframe.
  • namespace — a área em que a solicitação será executada.

ExecuteGlobal

ExecuteGlobal(global, variable, type, start, end, mask, labelels, namespace) - passando um global em Python.

Argumentos:

  • global - nome global sem ^
  • variable — o nome da variável Python na qual os dados são gravados.
  • type - list ou pandas dataframe.
  • start — o primeiro subscrito do global. Necessariamente %Integer.
  • end — o último subscrito do global. Necessariamente %Integer.
  • mask — máscara de valor global. A máscara pode ser menor que o número de campos no global (nesse caso, os campos no final serão ignorados). Como formatar uma máscara:
    • + passe o valor como está.
    • - pular valor.
    • b — Tipo booleano (0 - False, todo o resto - True).
    • d — Data (de $horolog, no Windows a partir de 1970, no Linux a partir de 1900).
    • t — Hora ($horolog, segundos depois da meia-noite).
    • m — Timestamp (string de formato ANO-MÊS-DIA HORA:MINUTO:SEGUNDO).
  • labels — %Lista de nomes de colunas. O primeiro elemento é o nome do subscrito.
  • namespace — a área em que a solicitação será executada.

ExecuteClass

Embrulhar ExecuteGlobal. Com base na definição da classe, prepara uma chamada ExecuteGlobal e liga para ele.

ExecuteClass(class, variable, type, start, end, properties, namespace) - passando dados de classe em Python.

Argumentos:

  • class - nome da classe
  • variable — o nome da variável Python na qual os dados são gravados.
  • type - list ou pandas dataframe.
  • start - ID inicial.
  • end - ID final
  • properties — uma lista (separada por vírgula) de propriedades de classe que precisam ser carregadas no conjunto de dados. Máscaras suportadas * и ?. Padrão - * (todas as propriedades). Propriedade %%CLASSNAME ignorado.
  • namespace — a área em que a solicitação será executada.

Todas as propriedades são passadas como estão, exceto propriedades de tipo %Date, %Time, %Boolean и %TimeStamp - eles são convertidos nas classes Python correspondentes.

ExecutarTabela

Embrulhar ExecuteClass. Traduz o nome da tabela no nome da classe e chama ExecuteClass. Assinatura:

ExecuteTable(table, variable, type, start, end, properties, namespace) - passando dados da tabela para Python.

Argumentos:

  • table - Nome da tabela.
    Todos os outros argumentos são passados ​​como estão para ExecuteClass.

Notas

  • ExecuteGlobal, ExecuteClass и ExecuteTable trabalhe igualmente rápido.
  • ExecuteGlobal 20 vezes mais rápido que ExecuteQuery em grandes conjuntos de dados (tempo de transferência >0.01 segundos).
  • ExecuteGlobal, ExecuteClass и ExecuteTable trabalhe em globais com esta estrutura: ^global(key) = $lb(prop1, prop2, ..., propN) onde key - um número inteiro.
  • Para ExecuteGlobal, ExecuteClass и ExecuteTable intervalo de valores suportado %Date corresponde ao intervalo mktime e depende do sistema operacional (Windows: 1970/01/01, linux 1900-01-01, mac). Usar %TimeStamppara transferir dados fora deste intervalo ou usar o dataframe do pandas porque esta é uma limitação apenas de lista.
  • Para ExecuteGlobal, ExecuteClass и ExecuteTable todos os argumentos, exceto a fonte de dados (global, classe ou tabela) e variável, são opcionais.

Примеры

Aula de teste isc.py.test.Person contém um método que demonstra todas as opções de transferência de dados:

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 o método do ##class(isc.py.test.Person).Test() para ver como funcionam todos os métodos de transferência de dados.

Métodos Auxiliares

  • GetVariableInfo(variable, serialization, .defined, .type, .length) — obtenha informações sobre a variável: se ela está definida, sua classe e comprimento de serialização.
  • GetVariableDefined(variable, .defined) — se a variável está definida.
  • GetVariableType(variable, .type) - obtenha a classe da variável.
  • GetStatus() - obtenha e remova a última exceção do lado Python.
  • GetModuleInfo(module, .imported, .alias) — obtém a variável do módulo e o status da importação.
  • GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments) — obtenha informações sobre a função.

Interoperabilidade

Você aprendeu como chamar o Python Gateway a partir do terminal, agora vamos começar a usá-lo na produção. A base para interagir com Python neste modo é isc.py.ens.Operation. Isso nos permite:

  • Executar código em Python
  • Salvar/restaurar contexto Python
  • Carregar e receber dados do Python

Basicamente, uma operação Python é um wrapper isc.py.Main. Operação isc.py.ens.Operation fornece a capacidade de interagir com o processo Python dos produtos InterSystems IRIS. Cinco consultas são suportadas:

  • isc.py.msg.ExecutionRequest para executar o código Python. Devoluções isc.py.msg.ExecutionResponse com o resultado da execução e os valores das variáveis ​​solicitadas.
  • isc.py.msg.StreamExecutionRequest para executar o código Python. Devoluções isc.py.msg.StreamExecutionResponse o resultado da execução e os valores das variáveis ​​solicitadas. Análogo isc.py.msg.ExecutionRequest, mas aceita e retorna fluxos em vez de strings.
  • isc.py.msg.QueryRequest para transmitir o resultado da execução de uma consulta SQL. Devoluções Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest para passar dados globais/classe/tabela. Devoluções Ens.Response.
  • isc.py.msg.SaveRequest para salvar o contexto Python. Devoluções Ens.StringResponse com ID de contexto.
  • isc.py.msg.RestoreRequest para restaurar o contexto Python.

    Além disso, isc.py.ens.Operation tem duas configurações:

    • Initializer — selecionando uma classe que implementa a interface isc.py.init.Abstract. Pode ser usado para carregar funções, módulos, classes, etc. Ele é executado uma vez quando o processo é iniciado.
    • PythonLib - (somente Linux) se você encontrar erros ao carregar, defina seu valor para libpython3.6m.so ou mesmo no caminho completo para a biblioteca Python.

Criação de processos de negócios

Existem duas classes disponíveis que facilitam o desenvolvimento de processos de negócio:

  • isc.py.ens.ProcessUtils permite extrair anotações de atividades com substituição de variáveis.
  • isc.py.util.BPEmulator facilita o teste de processos de negócios com Python. Ele pode executar um processo de negócios (partes Python) no processo atual.

Substituição de Variável

Todos os processos de negócios herdados de isc.py.ens.ProcessUtils, pode usar o método GetAnnotation(name) para obter o valor da anotação da atividade por seu nome. A anotação da atividade pode conter variáveis ​​que serão calculadas no lado do InterSystems IRIS antes de serem passadas para o Python. Aqui está a sintaxe para substituição de variáveis:

  • ${class:method:arg1:...:argN} - chamada de método
  • #{expr} — executa código na linguagem ObjectScript.

Um exemplo está disponível no processo de negócios de teste isc.py.test.Process, por exemplo, em atividade Correlation Matrix: Graph: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). Neste exemplo:

  • #{process.WorkDirectory} retorna a propriedade WorkDirectory do objeto process, que é uma instância da classe isc.py.test.Process aqueles. processo de negócios atual.
  • ${%PopulateUtils:Integer:1:100} chama um método Integer classe %PopulateUtils, passando argumentos 1 и 100, retornando um número inteiro aleatório no intervalo 1...100.

Teste o processo de negócios

Produtos de teste e processos de negócios de teste estão disponíveis por padrão como parte do Python Gateway. Para usá-los:

  1. No terminal do sistema operacional, execute: pip install pandas matplotlib seaborn.
  2. No terminal InterSystems IRIS, execute: do ##class(isc.py.test.CannibalizationData).Import() para preencher os dados do teste.
  3. Lançar produtos isc.py.test.Production.
  4. Enviar tipo de solicitação Ens.Request в isc.py.test.Process.

Vamos ver como tudo funciona junto. Abrir isc.py.test.Process no editor BPL:

Gateway Python no InterSystems IRIS

Execução de código

O desafio mais importante é executar o código Python:

Gateway Python no InterSystems IRIS

Consulta usada isc.py.msg.ExecutionRequest, aqui estão suas propriedades:

  • Code — Código Python.
  • SeparateLines — se deve dividir o código em linhas para execução. $c(10) (n) é usado para separar strings. Observe que NÃO é recomendado processar a mensagem inteira de uma vez, esta função destina-se apenas a processar def e expressões multilinhas semelhantes. Padrão 0.
  • Variables — uma lista separada por vírgulas de variáveis ​​que serão adicionadas à resposta.
  • Serialization — Como serializar as variáveis ​​que queremos retornar. Opções: Str, Repr, JSON, Pickle и Dill, padrão Str.

No nosso caso, apenas definimos a propriedade Code, portanto, todas as outras propriedades usam os valores padrão. Nós configuramos ligando process.GetAnnotation("Import pandas"), que em tempo de execução retorna uma anotação após a substituição da variável ter sido executada. Afinal, o código import pandas as pd será passado para Python. GetAnnotation pode ser útil para obter scripts Python multilinhas, mas não há restrições quanto a esse método de obtenção de código. Você pode definir a propriedade Code de qualquer maneira conveniente para você.

Obtendo Variáveis

Outro desafio interessante usando isc.py.msg.ExecutionRequest - Correlation Matrix: Tabular:

Gateway Python no InterSystems IRIS

Ele calcula a Matriz de Correlação no lado Python e extrai a variável corrmat volte ao InterSystems IRIS no formato JSON definindo as propriedades da solicitação:

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

Podemos ver os resultados no Visual Trace:

Gateway Python no InterSystems IRIS

E se precisarmos desse valor no BP, podemos conseguir assim: callresponse.Variables.GetAt("corrmat").

Transferência de dados

A seguir, vamos falar sobre a transferência de dados do InterSystems IRIS para Python; todas as solicitações de transferência de dados implementam a interface isc.py.msg.DataRequestque fornece as seguintes propriedades:

  • Variable — uma variável Python na qual os dados são gravados.
  • Type - tipo de variável: dataframe (dataframe do pandas) ou list.
  • Namespace — a área da qual recebemos dados. Saco de plástico isc.py devem estar disponíveis nesta área. Esta pode ser uma área sem suporte ao produto.

Com base nesta interface, são implementadas 4 classes de solicitações:

  • isc.py.msg.QueryRequest - definir a propriedade Query para enviar uma consulta SQL.
  • isc.py.msg.ClassRequest - definir a propriedade Class para passar dados de classe.
  • isc.py.msg.TableRequest - definir propriedade Table para transferir dados da tabela.
  • isc.py.msg.GlobalRequest - definir propriedade Global para transferência global de dados.

No processo de teste, observe a atividade RAWOnde isc.py.msg.QueryRequest mostrado em ação.

Gateway Python no InterSystems IRIS

Salvando/Restaurando Contexto Python

Por fim, podemos salvar o contexto Python no InterSystems IRIS, para isso enviaremos isc.py.msg.SaveRequest com argumentos:

  • Mask — Somente as variáveis ​​que correspondem à máscara são salvas. Suportado * и ?. Exemplo: "Data*, Figure?"... Padrão *.
  • MaxLength — O comprimento máximo da variável armazenada. Se a serialização de uma variável for mais longa, ela será ignorada. Defina como 0 para obter variáveis ​​de qualquer comprimento. Padrão $$$MaxStringLength.
  • Name — Nome do contexto (opcional).
  • Description — Descrição do contexto (opcional).

Devoluções Ens.StringResponse с Id contexto salvo. No processo de teste, observe a atividade Save Context.

Solicitação relacionada isc.py.msg.RestoreRequest carrega o contexto do InterSystems IRIS em Python:

  • ContextId — identificador de contexto.
  • Clear — limpe o contexto antes de restaurar.

Caderno Jupyter

Caderno Jupyter é um aplicativo da web de código aberto que permite criar e publicar notebooks contendo código, visualizações e texto. Python Gateway permite visualizar e editar processos BPL na forma de um Jupyter Notebook. Observe que o executor normal do Python 3 é usado atualmente.

Esta extensão pressupõe que as anotações contêm código Python e usa nomes de atividades como títulos anteriores. Agora é possível desenvolver processos de negócios PythonGateway no Jupyter Notebook. Aqui está o que é possível:

  • Crie novos processos de negócios
  • Excluir processos de negócios
  • Crie novas atividades
  • Alterar atividades
  • Excluir atividades

aqui é vídeo de demonstração. E algumas capturas de tela:

Explorador de processos

Gateway Python no InterSystems IRIS

Editor de processos

Gateway Python no InterSystems IRIS

Instalação

  1. Você precisará do InterSystems IRIS 2019.2+.
  2. Instale PythonGateway v0.8+ (obrigatório apenas isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints и isc.py.ens.ProcessUtils).
  3. Atualize o código ObjectScript do repositório.
  4. Executar do ##class(isc.py.util.Jupyter).Install() e siga as instruções.

Documentação.

Descobertas

MLToolkit é um conjunto de ferramentas cujo objetivo é combinar modelos e um ambiente transacional para que os modelos construídos possam ser facilmente utilizados diretamente em seus processos de negócio. Python Gateway faz parte do MLToolkit e fornece integração com a linguagem Python, permitindo orquestrar qualquer algoritmo de aprendizado de máquina criado em Python (o ambiente principal para muitos cientistas de dados), usar inúmeras bibliotecas prontas para criar rapidamente IA / IA analítica robótica adaptativa. Soluções de ML na plataforma IRIS da InterSystems.

referências

Kit de ferramentas ML

O grupo de usuários MLToolkit é um repositório GitHub privado criado como parte da organização corporativa GitHub da InterSystems. Destina-se a usuários externos que instalam, aprendem ou já usam componentes do MLToolkit, incluindo o Python Gateway. O grupo possui vários casos implementados (com código-fonte e dados de teste) nas áreas de marketing, manufatura, medicina e muitas outras indústrias. Para ingressar no grupo de usuários do ML Toolkit, envie um breve e-mail para o seguinte endereço: [email protegido] e inclua as seguintes informações em sua carta:

  • Nome de usuário do GitHub
  • Organização (você trabalha ou estuda)
  • Cargo (seu cargo real na sua organização, seja "Estudante" ou "Independente").
  • País

Para quem leu o artigo e está interessado nas capacidades do InterSystems IRIS como plataforma para desenvolvimento ou hospedagem de mecanismos de inteligência artificial e aprendizado de máquina, convidamos você a discutir possíveis cenários que sejam de interesse para sua empresa. Teremos o maior prazer em analisar as necessidades da sua empresa e definir em conjunto um plano de ação; Endereço de e-mail de contato de nossa equipe de especialistas em IA/ML – [email protegido].

Fonte: habr.com

Adicionar um comentário