Python Gateway в InterSystems IRIS

Ця стаття присвячена Python Gateway – ком'юніті-проекту з відкритим вихідним кодом для платформи даних InterSystems IRIS. Цей проект дозволяє оркеструвати будь-які алгоритми машинного навчання, створені мовою Python (основне середовище для багатьох Data Scientists), використовувати численні готові бібліотеки для створення адаптивних, роботизованих аналітичних AI/ML-рішень на платформі InterSystems IRIS. У цій статті я покажу, як InterSystems IRIS може оркеструвати процеси мовою Python, ефективно здійснювати двосторонню передачу даних та створювати інтелектуальні бізнес-процеси.

План

  1. Введення.
  2. Інструментарій.
  3. Установка.
  4. API.
  5. Інтероперабельність.
  6. Jupyter Notebook.
  7. Висновки.
  8. Посилання.
  9. MLToolkit.

Запровадження

Python - високорівнева мова програмування загального призначення, орієнтована на підвищення продуктивності розробника та читання коду. У цій серії статей я розповім про можливості застосування мови Python на платформі InterSystems IRIS, при цьому основним фокусом цієї статті є застосування Python як мови створення та застосування моделей машинного навчання.

Машинне навчання (ML) - клас методів штучного інтелекту, характерною рисою яких є не пряме розв'язання задачі, а навчання в процесі вирішення безлічі подібних задач.

Алгоритми та моделі машинного навчання стають все більш поширеними. Причин тому безліч, але все зводиться до доступності, простоти та досягнення практичних результатів. Чи є кластеризація чи навіть нейромережеве моделювання новою технологією?

Звичайно ні, але в даний час немає необхідності писати сотні тисяч рядків коду, щоб запустити одну модель, а витрати на створення та застосування моделей стають дедалі меншими.

Інструменти розвиваються — у той час як у нас немає повністю GUI-орієнтованих AI/ML-інструментів, той прогрес, який ми спостерігали з багатьма іншими класами інформаційних систем, наприклад, BI (від написання коду до використання фреймворків та GUI-орієнтованих конфігурованих рішень) , спостерігається й у інструментах створення AI/ML. Ми вже пройшли етап написання коду і сьогодні використовуємо фреймворки для побудови та навчання моделей.

Інші покращення, наприклад, можливість поширення попередньої моделі, коли кінцевий користувач повинен просто закінчити навчання моделі на його специфічних даних також спрощують початок застосування машинного навчання. Ці досягнення значно полегшують вивчення машинного навчання як безпосередньо фахівців, так компаній в цілому.

З іншого боку, ми збираємо все більше даних. Завдяки уніфікованій платформі даних, такій як InterSystems IRIS, вся ця інформація може бути негайно підготовлена ​​та використана як вихідні дані для моделей машинного навчання.

З переходом на хмару запуск AI/ML-проектів стає легшим, ніж будь-коли. Ми можемо споживати лише ті ресурси, які нам потрібні. Більш того, завдяки паралелізації, запропонованій хмарними платформами, ми можемо заощадити час, що витрачається.

Але як щодо результатів? Тут усе складніше. Існує безліч інструментів для побудови моделей, про які я розповім далі. Збудувати хорошу модель непросто, але що далі? Отримання прибутку від використання моделі бізнесом також є нетривіальним завданням. Корінь проблеми у поділі аналітичних та транзакційних навантажень та моделей даних. Коли ми навчаємо модель, ми робимо це зазвичай на історичних даних. Але місце для збудованої моделі — у транзакційній обробці даних. Що хорошого в кращій моделі виявлення шахрайських транзакцій, якщо ми запускаємо її щодня? Шахраї вже давно пішли з грошима. Нам потрібно тренувати модель на історичних даних, але ми також повинні застосовувати її в реальному часі на нових даних, щоб наші бізнес-процеси могли діяти відповідно до прогнозів, зроблених моделлю.

ML Toolkit – набір інструментів, метою якого є саме це: об'єднання моделей та транзакційного середовища, щоб побудовані моделі можна було легко використовувати прямо у ваших бізнес-процесах. Python Gateway є частиною ML Toolkit та забезпечує інтеграцію з мовою Python (аналогічно як R Gateway, будучи частиною ML Toolkit забезпечує інтеграцію з мовою R).

інструментарій

Перш ніж ми продовжимо, я хотів би описати кілька інструментів та бібліотек для Python, які ми будемо використовувати пізніше.

Технології

  • Python - інтерпретована, високорівнева мова програмування загального призначення. Основною перевагою мови є велика бібліотека математичних, ML- та AI-бібліотек. Як і ObjectScript, це об'єктно-орієнтована мова, але все визначається динамічно, а чи не статично. Також все є об'єктом. Пізніші статті припускають швидкоплинне знайомство з мовою. Якщо ви хочете почати навчання, я рекомендую почати з документації.
  • Для наших подальших вправ встановіть Python 3.6.7 64 bit.
  • IDE: Я використовую PyCharm, але взагалі їх багато. Якщо ви використовуєте Atelier, існує Eclipse-плагін для розробників на Python. Якщо ви використовуєте VS Code, існує розширення для Python.
  • Notebook: замість IDE ви можете писати та ділитися своїми скриптами в онлайн-ноутбуках. Найпопулярніший з них - Юпітер.

бібліотеки

Ось (неповний) список бібліотек для машинного навчання:

  • Пустотливий - Основний пакет для точних обчислень.
  • Панди - Високопродуктивні структури даних та інструменти аналізу даних.
  • Матплотліб - Створення графіків.
  • Морський народжений - Візуалізація даних, заснована на matplotlib.
  • Sklearn - Методи машинного навчання.
  • XGBoost - Алгоритми машинного навчання в рамках методології градієнтного бустингу (Gradient Boosting).
  • Gensim - NLP.
  • Керас - нейронні мережі.
  • Тензорний потік – платформа для створення моделей машинного навчання.
  • PyTorch – платформа для створення моделей машинного навчання, орієнтована на Python.
  • Nyoka - PMML з різних моделей.

Технології AI/ML дозволяють зробити бізнес більш ефективним та адаптованим. Більше того, сьогодні ці технології стають простішими у розробці та впровадженні. Почніть вивчати AI/ML-технології та те, як вони можуть допомогти вашій організації рости.

Встановлення

Існує кілька способів встановлення та використання Python Gateway:

  • ОС
    • Windows
    • Linux
    • Mac
  • Docker
    • Використовуйте образ із DockerHub
    • Створіть свій власний образ

Незалежно від способу встановлення вам знадобиться вихідний код. Єдине місце для скачування коду сторінка релізів. Вона містить протестовані стабільні релізи, просто беріть останній. На даний момент це 0.8, але згодом будуть нові. Не клонуйте/завантажуйте репозиторій, скачайте останній випуск.

ОС

Якщо ви встановлюєте Python Gateway в операційну систему, спочатку (незалежно від операційної системи) вам необхідно встановити Python. Для цього:

  1. Встановити Python 3.6.7 64 bit. Рекомендується встановити Python у директорію за промовчанням.
  2. Установіть модуль dill: pip install dill.
  3. Завантажте код ObjectScript (тобто. do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) у будь-яку область з продукціями. У випадку, якщо ви хочете, щоб існуюча область підтримувала продукцію, виконайте: write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. помістіть callout DLL/SO/DYLIB у папку bin вашого інстансу InterSystems IRIS. Файл бібліотеки повинен бути доступний шляхом, що повертається write ##class(isc.py.Callout).GetLib().

Windows

  1. Переконайтеся, що змінна оточення PYTHONHOME вказує на Python 3.6.7.
  2. Переконайтеся, що системна змінна оточення PATH містить змінну PYTHONHOME (або директорію, яку вона вказує).

Linux (Debian/Ubuntu)

  1. Перевірте, чи змінна оточення PATH містить /usr/lib и /usr/lib/x86_64-linux-gnu. Використовуйте файл /etc/environment для встановлення змінних оточення.
  2. У разі помилок undefined symbol: _Py_TrueStruct встановіть налаштування PythonLib. також в ридми Є розділ Troubleshooting.

Mac

  1. В даний час підтримується тільки пітон 3.6.7 python.org. Перевірте змінну PATH.

Якщо ви змінювали змінні оточення, перезапустіть продукт InterSystems.

Docker

Використання контейнерів має ряд переваг:

  • Портативність
  • ефективність
  • Ізоляція
  • Легковість
  • Імутабельність

Ознайомтеся з цією серією статей для отримання більш детальної інформації про використання Docker із продуктами InterSystems.

Усі зборки Python Gateway на даний момент засновані на контейнерах 2019.4.

Готовий образ

Виконайте: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latest, щоб завантажити та запустити Python Gateway з InterSystems IRIS Community Edition. От і все.

Створіть свій власний образ

Для складання докер-образу виконайте в корені репозиторію: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
За замовчуванням образ збирається на основі образу store/intersystems/iris-community:2019.4.0.383.0, однак ви можете змінити це, встановивши змінну IMAGE.
Для складання з InterSystems IRIS виконайте: `docker build -build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 -force-rm -tag intersystemscommunity/irispy:latest'.

Після цього ви можете запустити докер-образ:

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

Якщо ви використовуєте образ, заснований на InterSystems IRIS Community Edition, ви можете не вказувати ключ.

Коментарі

  • Тестовий процес isc.py.test.Process зберігає ряд зображень у тимчасовий каталог. Можливо ви захочете змінити цей шлях на змонтований каталог. Для цього відредагуйте налаштування WorkingDir вказавши змонтовану директорію.
  • Для доступу до терміналу виконайте: docker exec -it irispy sh.
  • Доступ до Порталу Управління Системою з логіну SuperUser/SYS.
  • Щоб зупинити контейнер, виконайте: docker stop irispy && docker rm --force irispy.

Перевірка установки

Після того, як ви встановили Python Gateway, варто перевірити, чи працює він. Виконайте цей код у терміналі InterSystems IRIS:

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

В результаті має бути виведено HELLO - значення Python-змінної x. Якщо статус, що повертається sc є помилкою або var порожньо, перевірте Readme — Troubleshooting section.

API

Python Gateway встановлений, і ви переконалися, що він працює. Настав час починати його використовувати!
Головний інтерфейс Python це isc.py.Main. Він пропонує наступні групи методів (всі повертають %Status):

  • Виконання коду
  • Передача даних
  • допоміжні

Виконання коду

Ці методи дозволяють виконувати довільний Python-код.

SimpleString

SimpleString - Це основний метод. Він приймає 4 опціональні аргументи:

  • code - Рядок коду для виконання. Символ перекладу рядка: $c(10).
  • returnVariable - Ім'я змінної для повернення.
  • serialization як серіалізувати returnVariable. 0 - string (за замовчуванням), 1 - repr.
  • result — ByRef — посилання на змінну, в яку записується значення returnVariable.

Вище ми виконали:

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

У цьому прикладі ми присвоюємо змінну Python x значення Hello і хочемо повернути значення Python змінної x в ObjectScript змінну var.

ExecuteCode

ExecuteCode є більш безпечною та менш обмеженою альтернативою SimpleString.
Рядки в платформі InterSystems IRIS обмежені 3 символами, і якщо ви хочете виконати більш довгий шматок коду, вам необхідно використовувати потоки.
Приймаються два аргументи:

  • code - Рядок або потік Python коду для виконання.
  • variable — (опціонально) надає результат виконання code цієї Python змінної.

Прийме використовувати:

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

У цьому прикладі ми множимо 2 на 3 і записуємо результат в Python змінну y.

Передача даних

Передавайте дані в Python і назад.

Python -> InterSystems IRIS

Є 4 способи отримати значення Python змінної в InterSystems IRIS, залежно від серіалізації, яка вам потрібна:

  • String для простих типів даних та налагодження.
  • Repr для зберігання простих об'єктів та налагодження.
  • JSON для легкого маніпулювання даними на стороні InterSystems IRIS.
  • Pickle для збереження об'єктів.

Ці методи дозволяють отримувати змінні з Python у вигляді рядка чи потоків.

  • GetVariable(variable, serialization, .stream, useString) - Отримати serialization змінної variable в stream. Якщо useString одно 1 і серіалізація міститься в рядок, то повертається рядок, а не потік.
  • GetVariableJson(variable, .stream, useString) отримати JSON серіалізацію змінної.
  • GetVariablePickle(variable, .stream, useString, useDill) -отримати Pickle (або Dill) серіалізацію змінної.

Спробуємо отримати нашу змінну y.

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

InterSystems IRIS -> Python

Завантажуємо дані з InterSystems IRIS у Python.

  • ExecuteQuery(query, variable, type, namespace) - Створює набір даних (pandas dataframe або list) з sql запиту і встановлює його в Python змінну variable. Пакет isc.py має бути доступний в області namespace — там виконуватиметься запит.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) - Завантажує дані глобалу global від сабскрипту start до end у Python як змінну типу type: list, або pandas dataframe. Опис опціональних аргументів mask та labels доступно в документації класу та репозиторії Data Transfer docs.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) - Завантажує дані класу class від id start до end у Python як змінну типу type: list, або pandas dataframe. properties - Список (розділювач - кома) властивостей класу, які потрібно завантажити в набір даних. Підтримуються маски * и ?. За замовчуванням - * (Всі властивості). Властивість %%CLASSNAME ігнорується.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) - Завантажує дані таблиці table від id start до end у Python.

ExecuteQuery - Універсальний (будь-який коректний SQL-запит буде переданий в Python). Проте, ExecuteGlobal та його обгортки ExecuteClass и ExecuteTable працюють із низкою обмежень. Вони набагато швидше (у 3-5 разів швидше ODBC-драйвера і в 20 разів швидше ExecuteQuery). Додаткова інформація в Data Transfer docs.
Всі ці методи підтримують передачу даних із будь-якої області. Пакет isc.py має бути доступний у цільовій області.

Виконати запит

ExecuteQuery(request, variable, type, namespace) - Передача результатів будь-якого коректного SQL-запиту на Python. Це найповільніший метод передачі. Використовуйте його, якщо ExecuteGlobal та його обгортки недоступні.

аргументи:

  • query - SQL запит.
  • variable — назва Python змінної, в яку записуються дані.
  • type - list або Pandas dataframe.
  • namespace — область, у якій буде виконуватися запит.

ExecuteGlobal

ExecuteGlobal(global, variable, type, start, end, mask, labelels, namespace) - Передача глобалу в Python.

аргументи:

  • global - ім'я глобала без ^
  • variable — назва Python змінної, в яку записуються дані.
  • type - list або Pandas dataframe.
  • start - Перший сабскрипт глобалу. Обов'язково %Integer.
  • end - Останній сабскрипт глобалу. Обов'язково %Integer.
  • mask - маска значень глобалу. Маска може бути коротшою, ніж кількість полів у глобалі (у цьому випадку поля в кінці будуть пропущені). Як форматувати маску:
    • + передати значення як є.
    • - пропустити значення.
    • b - Логічний тип (0 - False, все інше - True).
    • d - Дата (з $ horolog, на Windows від 1970, на Linux від 1900).
    • t - Час ($ horolog, секунди після опівночі).
    • m - Мітка часу (рядок формату YEAR-MONTH-DAY HOUR: MINUTE: SECOND).
  • labels - %List назв колонок. Перший елемент – назва сабскрипта.
  • namespace — область, у якій буде виконуватися запит.

ExecuteClass

Обгортка над ExecuteGlobal. На основі визначення класу готує виклик ExecuteGlobal та викликає його.

ExecuteClass(class, variable, type, start, end, properties, namespace) — передача даних класу Python.

аргументи:

  • class - Ім'я класу
  • variable — назва Python змінної, в яку записуються дані.
  • type - list або Pandas dataframe.
  • start - Стартовий Id.
  • end - кінцевий Id
  • properties - Список (розділювач - кома) властивостей класу, які потрібно завантажити в набір даних. Підтримуються маски * и ?. За замовчуванням - * (Всі властивості). Властивість %%CLASSNAME ігнорується.
  • namespace — область, у якій буде виконуватися запит.

Всі властивості передаються як є крім властивостей типів %Date, %Time, %Boolean и %TimeStamp — вони перетворюються на відповідні класи Python.

ExecuteTable

Обгортка над ExecuteClass. Транслює ім'я таблиці на ім'я класу і викликає ExecuteClass. Сигнатура:

ExecuteTable(table, variable, type, start, end, properties, namespace) — передача даних таблиці Python.

аргументи:

  • table - Ім'я таблиці.
    Всі інші аргументи передаються як є в ExecuteClass.

Нотатки

  • ExecuteGlobal, ExecuteClass и ExecuteTable працюють однаково швидко.
  • ExecuteGlobal у 20 разів швидше ніж ExecuteQuery великих наборах даних (час передачі більше >0.01 секунди).
  • ExecuteGlobal, ExecuteClass и ExecuteTable працюють на глобалах з цією структурою: ^global(key) = $lb(prop1, prop2, ..., propN) де key - ціле число.
  • Для ExecuteGlobal, ExecuteClass и ExecuteTable діапазон значень, що підтримується %Date відповідає діапазону mktime і залежить від ОС (windows: 1970-01-01, Linux 1900-01-01, макінтош). Використовуйте %TimeStampдля передачі даних поза цим діапазоном або використовуйте pandas dataframe т.к. це обмеження лише для списку.
  • Для ExecuteGlobal, ExecuteClass и ExecuteTable всі аргументи крім джерела даних (глобала, класу чи таблиці) та змінної опціональні.

Приклади

Тестовий клас isc.py.test.Person містить метод, що демонструє всі варіанти передачі:

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)

Викличте метод do ##class(isc.py.test.Person).Test() щоб подивитися як працюють усі методи передачі даних.

Допоміжні методи

  • GetVariableInfo(variable, serialization, .defined, .type, .length) — отримати інформацію про змінну: чи визначено її, клас і довжину серіалізації.
  • GetVariableDefined(variable, .defined) - Чи визначена змінна.
  • GetVariableType(variable, .type) - Отримати клас змінної.
  • GetStatus() — отримати та видалити останній виняток на стороні Python.
  • GetModuleInfo(module, .imported, .alias) — отримати змінну модуля та статус імпорту.
  • GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments) - Отримати інформацію про функції.

інтероперабельність

Ви навчилися викликати Python Gateway із терміналу, тепер почнемо використовувати його у продукції. Основа взаємодії з Python у такому режимі isc.py.ens.Operation. Він дозволяє нам:

  • Виконувати код на Python
  • Зберігати/Відновлювати Python контекст
  • Завантажувати та отримувати дані з Python

В принципі, Pyhton операція це обгортка над isc.py.Main. Операція isc.py.ens.Operation дає можливість взаємодії з процесом Python із продукції InterSystems IRIS. Підтримується п'ять запитів:

  • isc.py.msg.ExecutionRequest для виконання Python коду. Повертає isc.py.msg.ExecutionResponse з результатом виконання та значеннями запитаних змінних.
  • isc.py.msg.StreamExecutionRequest для виконання Python коду. Повертає isc.py.msg.StreamExecutionResponse результатом виконання та значеннями запитаних змінних. Аналог isc.py.msg.ExecutionRequest, але приймає та повертає потоки замість рядків.
  • isc.py.msg.QueryRequest для передачі результату виконання запиту SQL. Повертає Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest для передачі даних глобалу/класу/таблиці. Повертає Ens.Response.
  • isc.py.msg.SaveRequest для збереження контексту Python. Повертає Ens.StringResponse з ідентифікатором контексту.
  • isc.py.msg.RestoreRequest для відновлення контексту Python.

    Крім того, isc.py.ens.Operation має дві настройки:

    • Initializer - Вибір класу, що реалізує інтерфейс isc.py.init.Abstract. Він може бути використаний для завантаження функцій, модулів, класів тощо. Він виконується один раз під час запуску процесу.
    • PythonLib — (лише для Linux) якщо ви бачите помилки під час завантаження, встановіть його значення рівним libpython3.6m.so або навіть у повному шляху до бібліотеки Python.

Створення бізнес-процесів

Доступно два класи, які полегшують розробку бізнес-процесів:

  • isc.py.ens.ProcessUtils дозволяє витягувати інструкції з активностей з підстановкою змінних.
  • isc.py.util.BPEmulator дозволяє легко тестувати бізнес-процеси з Python. Він може виконувати бізнес-процес (частини мовою Python) у поточному процесі.

Підстановка змінних

Усі бізнес-процеси, успадковані від isc.py.ens.ProcessUtils, можуть використовувати метод GetAnnotation(name) для отримання значення інструкції активності за її назвою. Анотація активності може містити змінні, які будуть обчислені на стороні InterSystems IRIS перед передачею Python. Ось синтаксис підстановки змінних:

  • ${class:method:arg1:...:argN} - Виклик методу
  • #{expr} - Виконати код на мові ObjectScript.

Приклад доступний у тестовому бізнес-процесі isc.py.test.Processнаприклад, в активності Correlation Matrix: Graph: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). У цьому прикладі:

  • #{process.WorkDirectory} повертає властивість WorkDirectory об'єкту process, що є екземпляром класу isc.py.test.Process тобто. поточний бізнес-процес.
  • ${%PopulateUtils:Integer:1:100} викликає метод Integer класу %PopulateUtils, передаючи аргументи 1 и 100, повертаючи випадкове ціле число в діапазоні 1...100.

Тестовий бізнес-процес

Тестова продукція та тестовий бізнес-процес доступні за умовчанням як частина шлюзу Python Gateway. Для їх використання:

  1. У терміналі ОС виконайте: pip install pandas matplotlib seaborn.
  2. У терміналі InterSystems IRIS виконайте: do ##class(isc.py.test.CannibalizationData).Import() для заповнення тестових даних.
  3. Запустіть продукцію isc.py.test.Production.
  4. Надіслати запит типу Ens.Request в isc.py.test.Process.

Подивимося, як усе це працює разом. Відкрийте isc.py.test.Process у редакторі BPL:

Python Gateway в InterSystems IRIS

Виконання коду

Найважливіший виклик – виконання Python коду:

Python Gateway в InterSystems IRIS

Використовується запит isc.py.msg.ExecutionRequest, Ось його властивості:

  • Code - Python код.
  • SeparateLines — чи розділяти код на рядки для виконання. $c(10) (n) використовується для поділу рядків. Зверніть увагу, що НЕ рекомендується обробляти повідомлення повністю відразу, ця функція призначена лише для обробки def та подібних багаторядкових виразів. За замовчуванням 0.
  • Variables — розділений комами список змінних, які будуть додані у відповідь.
  • Serialization — Як серіалізувати змінні, які хочемо повернути. Варіанти: Str, Repr, JSON, Pickle и Dill, за замовчуванням Str.

У нашому випадку ми тільки встановлюємо властивість Code, так що всі інші властивості використовують значення за промовчанням. Ми встановлюємо його викликом process.GetAnnotation("Import pandas"), який під час виконання повертає інструкцію після виконання підстановки змінних. Зрештою, код import pandas as pd буде передано до Python. GetAnnotation може бути корисною для отримання багаторядкових Python скриптів, але ніяких обмежень на цей спосіб отримання коду немає. Ви можете встановити властивість Code будь-яким зручним для вас способом.

Отримання змінних

Ще один цікавий виклик із використанням isc.py.msg.ExecutionRequest - Correlation Matrix: Tabular:

Python Gateway в InterSystems IRIS

Він обчислює Матрицю Кореляції на стороні Python і витягує змінну corrmat назад у InterSystems IRIS у форматі JSON, шляхом встановлення властивостей запиту:

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

Ми можемо бачити результати у Visual Trace:

Python Gateway в InterSystems IRIS

І якщо нам це значення знадобиться у БП, його можна отримати так: callresponse.Variables.GetAt("corrmat").

Передача даних

Далі поговоримо про передачу даних із InterSystems IRIS до Python, всі запити на передачу даних реалізують інтерфейс isc.py.msg.DataRequest, який надає такі властивості:

  • Variable — змінна Python, в яку записуються дані.
  • Type - Тип змінної: dataframe (pandas dataframe) або list.
  • Namespace - область з якої отримуємо дані. Пакет isc.py має бути доступний у цій галузі. Це може бути область без підтримки продукції.

На основі цього інтерфейсу реалізовано 4 класи запитів:

  • isc.py.msg.QueryRequest - Встановіть властивість Query для передачі запиту SQL.
  • isc.py.msg.ClassRequest - Встановіть властивість Class передачі даних класу.
  • isc.py.msg.TableRequest - Встановити властивість Table передачі даних таблиці.
  • isc.py.msg.GlobalRequest - Встановити властивість Global передачі даних глобала.

У тестовому процесі подивіться активність RAW, Де isc.py.msg.QueryRequest показаний у дії.

Python Gateway в InterSystems IRIS

Збереження/відновлення Python контексту

Нарешті, ми можемо зберегти Python контекст у InterSystems IRIS, щоб зробити це, відправимо isc.py.msg.SaveRequest з аргументами:

  • Mask — Зберігаються тільки змінні маски, що задовольняють. Підтримуються * и ?. приклад: "Data*, Figure?". За замовчуванням *.
  • MaxLength — Максимальна довжина змінної, що зберігається. Якщо серіалізація змінної довша, вона буде проігнорована. Встановіть 0, щоб отримати будь-які змінні довжини. За замовчуванням $$$MaxStringLength.
  • Name - Ім'я контексту (опційно).
  • Description - Опис контексту (опціонально).

повертає Ens.StringResponse с Id збереженого контексту. У тестовому процесі подивіться активність Save Context.

Відповідний запит isc.py.msg.RestoreRequest завантажує контекст з InterSystems IRIS у Python:

  • ContextId - Ідентифікатор контексту.
  • Clear - Очистити контекст перед відновленням.

Jupyter Notebook

Jupyter Notebook — це веб-додаток з відкритим вихідним кодом, який дозволяє створювати ноутбуки, що містять код, візуалізації та текст і публікувати їх. Python Gateway дозволяє переглядати та редагувати BPL-процеси у вигляді Jupyter Notebook. Зверніть увагу, що зараз використовується звичайний executor Python 3.

Це розширення передбачає, що інструкції містять код Python і використовують назви активностей як попередні заголовки. Тепер можна розробляти бізнес-процеси PythonGateway в Jupyter Notebook. Ось що можливо:

  • Створювати нові бізнес-процеси
  • Видаляти бізнес-процеси
  • Створювати нові активності
  • Змінювати активності
  • Видаляти активності

Ось демо-відео. І кілька скріншотів:

Провідник процесів

Python Gateway в InterSystems IRIS

Редактор процесу

Python Gateway в InterSystems IRIS

Встановлення

  1. Вам знадобиться InterSystems IRIS 2019.2+.
  2. Встановіть PythonGateway v0.8+ (потрібен лише isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints и isc.py.ens.ProcessUtils).
  3. Оновіть код ObjectScript із репозиторію.
  4. виконайте do ##class(isc.py.util.Jupyter).Install() і дотримуйтесь підказок.

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

Висновки

MLToolkit – набір інструментів, метою якого є об'єднання моделей та транзакційного середовища, щоб побудовані моделі можна було легко використовувати прямо у ваших бізнес-процесах. Python Gateway є частиною MLToolkit і забезпечує інтеграцію з мовою Python дозволяючи оркеструвати будь-які алгоритми машинного навчання, створені мовою Python (основне середовище для багатьох Data Scientists), використовувати численні готові бібліотеки для швидкого створення адаптивних, роботизованих аналітичних AI/ML- IRIS.

Посилання

MLToolkit

Група користувачів MLToolkit – це приватний GitHub-репозиторій, створений як частина корпоративної GitHub-організації InterSystems. Вона адресована зовнішнім користувачам, які встановлюють, вивчають або використовують компоненти MLToolkit, включаючи Python Gateway. У групі доступний ряд реалізованих кейсів (з вихідним кодом та тестовими даними) у сферах маркетингу, виробництва, медицини та багатьох інших галузях. Щоб приєднатися до групи користувачів ML Toolkit, будь ласка, надішліть коротке повідомлення електронною поштою на наступну адресу: [захищено електронною поштою] та вкажіть у своєму листі такі дані:

  • Ім'я користувача GitHub
  • Організація (ви працюєте або навчаєтесь)
  • Посада (ваша фактична посада у вашій організації, чи "Студент", чи "Незалежний").
  • Країна

Тим, хто прочитав статтю та зацікавився можливостями InterSystems IRIS як платформи для розробки чи розміщення механізмів штучного інтелекту та машинного навчання, ми пропонуємо обговорити можливі сценарії, що становлять інтерес для вашого підприємства. Ми охоче проаналізуємо потреби вашого підприємства та спільно визначимо план дій; контактна адреса електронної пошти нашої експертної групи AI/ML – [захищено електронною поштою].

Джерело: habr.com

Додати коментар або відгук