Ця стаття присвячена Python Gateway – ком'юніті-проекту з відкритим вихідним кодом для платформи даних InterSystems IRIS. Цей проект дозволяє оркеструвати будь-які алгоритми машинного навчання, створені мовою Python (основне середовище для багатьох Data Scientists), використовувати численні готові бібліотеки для створення адаптивних, роботизованих аналітичних AI/ML-рішень на платформі InterSystems IRIS. У цій статті я покажу, як InterSystems IRIS може оркеструвати процеси мовою Python, ефективно здійснювати двосторонню передачу даних та створювати інтелектуальні бізнес-процеси.
План
- Введення.
- Інструментарій.
- Установка.
- API.
- Інтероперабельність.
- Jupyter Notebook.
- Висновки.
- Посилання.
- 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).
Iнструментарій
Перш ніж ми продовжимо, я хотів би описати кілька інструментів та бібліотек для Python, які ми будемо використовувати пізніше.
Технології
- Python - інтерпретована, високорівнева мова програмування загального призначення. Основною перевагою мови є велика бібліотека математичних, ML- та AI-бібліотек. Як і ObjectScript, це об'єктно-орієнтована мова, але все визначається динамічно, а чи не статично. Також все є об'єктом. Пізніші статті припускають швидкоплинне знайомство з мовою. Якщо ви хочете почати навчання, я рекомендую почати з .
- Для наших подальших вправ встановіть .
- IDE: Я використовую , але взагалі їх . Якщо ви використовуєте Atelier, існує Eclipse-плагін для розробників на Python. Якщо ви використовуєте VS Code, існує розширення для Python.
- Notebook: замість IDE ви можете писати та ділитися своїми скриптами в онлайн-ноутбуках. Найпопулярніший з них - .
бібліотеки
Ось (неповний) список бібліотек для машинного навчання:
- - Основний пакет для точних обчислень.
- - Високопродуктивні структури даних та інструменти аналізу даних.
- - Створення графіків.
- - Візуалізація даних, заснована на matplotlib.
- - Методи машинного навчання.
- - Алгоритми машинного навчання в рамках методології градієнтного бустингу (Gradient Boosting).
- - NLP.
- - нейронні мережі.
- – платформа для створення моделей машинного навчання.
- – платформа для створення моделей машинного навчання, орієнтована на Python.
- - PMML з різних моделей.
Технології AI/ML дозволяють зробити бізнес більш ефективним та адаптованим. Більше того, сьогодні ці технології стають простішими у розробці та впровадженні. Почніть вивчати AI/ML-технології та те, як вони можуть допомогти вашій організації рости.
Встановлення
Існує кілька способів встановлення та використання Python Gateway:
- ОС
- Windows
- Linux
- Mac
- Docker
- Використовуйте образ із DockerHub
- Створіть свій власний образ
Незалежно від способу встановлення вам знадобиться вихідний код. Єдине місце для скачування коду . Вона містить протестовані стабільні релізи, просто беріть останній. На даний момент це 0.8, але згодом будуть нові. Не клонуйте/завантажуйте репозиторій, скачайте останній випуск.
ОС
Якщо ви встановлюєте Python Gateway в операційну систему, спочатку (незалежно від операційної системи) вам необхідно встановити Python. Для цього:
- . Рекомендується встановити Python у директорію за промовчанням.
- Установіть модуль
dill:pip install dill. - Завантажте код ObjectScript (тобто.
do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) у будь-яку область з продукціями. У випадку, якщо ви хочете, щоб існуюча область підтримувала продукцію, виконайте:write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1). - помістіть у папку
binвашого інстансу InterSystems IRIS. Файл бібліотеки повинен бути доступний шляхом, що повертаєтьсяwrite ##class(isc.py.Callout).GetLib().
Windows
- Переконайтеся, що змінна оточення
PYTHONHOMEвказує на Python 3.6.7. - Переконайтеся, що системна змінна оточення
PATHмістить зміннуPYTHONHOME(або директорію, яку вона вказує).
Linux (Debian/Ubuntu)
- Перевірте, чи змінна оточення
PATHмістить/usr/libи/usr/lib/x86_64-linux-gnu. Використовуйте файл/etc/environmentдля встановлення змінних оточення. - У разі помилок
undefined symbol: _Py_TrueStructвстановіть налаштуванняPythonLib. також в Є розділ Troubleshooting.
Mac
- В даний час підтримується тільки пітон 3.6.7 . Перевірте змінну
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 порожньо, перевірте .
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
>6InterSystems IRIS -> Python
Завантажуємо дані з InterSystems IRIS у Python.
ExecuteQuery(query, variable, type, namespace)- Створює набір даних (pandasdataframeабоlist) з sql запиту і встановлює його в Python зміннуvariable. Пакетisc.pyмає бути доступний в областіnamespace— там виконуватиметься запит.ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace)- Завантажує дані глобалуglobalвід сабскриптуstartдоendу Python як змінну типуtype:list, або pandasdataframe. Опис опціональних аргументівmaskтаlabelsдоступно в документації класу та репозиторії .ExecuteClass(class, variable, type, start, end, properties, namespace)- Завантажує дані класуclassвід idstartдоendу Python як змінну типуtype:list, або pandasdataframe.properties- Список (розділювач - кома) властивостей класу, які потрібно завантажити в набір даних. Підтримуються маски*и?. За замовчуванням -*(Всі властивості). Властивість%%CLASSNAMEігнорується.ExecuteTable(table, variable, type, start, end, properties, namespace)- Завантажує дані таблиціtableвід idstartдоendу Python.
ExecuteQuery - Універсальний (будь-який коректний SQL-запит буде переданий в Python). Проте, ExecuteGlobal та його обгортки ExecuteClass и ExecuteTable працюють із низкою обмежень. Вони набагато швидше (у 3-5 разів швидше ODBC-драйвера і в 20 разів швидше ExecuteQuery). Додаткова інформація в .
Всі ці методи підтримують передачу даних із будь-якої області. Пакет isc.py має бути доступний у цільовій області.
Виконати запит
ExecuteQuery(request, variable, type, namespace) - Передача результатів будь-якого коректного SQL-запиту на Python. Це найповільніший метод передачі. Використовуйте його, якщо ExecuteGlobal та його обгортки недоступні.
аргументи:
query- SQL запит.variable— назва Python змінної, в яку записуються дані.type-listабо Pandasdataframe.namespace— область, у якій буде виконуватися запит.
ExecuteGlobal
ExecuteGlobal(global, variable, type, start, end, mask, labelels, namespace) - Передача глобалу в Python.
аргументи:
global- ім'я глобала без^variable— назва Python змінної, в яку записуються дані.type-listабо Pandasdataframe.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або Pandasdataframe.start- Стартовий Id.end- кінцевий Idproperties- Список (розділювач - кома) властивостей класу, які потрібно завантажити в набір даних. Підтримуються маски*и?. За замовчуванням -*(Всі властивості). Властивість%%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і залежить від ОС (: 1970-01-01, 1900-01-01, ). Використовуйте%TimeStampдля передачі даних поза цим діапазоном або використовуйте pandas dataframe т.к. це обмеження лише для списку. - Для
ExecuteGlobal,ExecuteClassиExecuteTableвсі аргументи крім джерела даних (глобала, класу чи таблиці) та змінної опціональні.
Приклади
Тестовий клас містить метод, що демонструє всі варіанти передачі:
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. Для їх використання:
- У терміналі ОС виконайте:
pip install pandas matplotlib seaborn. - У терміналі InterSystems IRIS виконайте:
do ##class(isc.py.test.CannibalizationData).Import()для заповнення тестових даних. - Запустіть продукцію
isc.py.test.Production. - Надіслати запит типу
Ens.Requestвisc.py.test.Process.
Подивимося, як усе це працює разом. Відкрийте isc.py.test.Process у редакторі BPL:

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

Використовується запит 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 і витягує змінну corrmat назад у InterSystems IRIS у форматі JSON, шляхом встановлення властивостей запиту:
Variables:"corrmat"Serialization:"JSON"
Ми можемо бачити результати у Visual Trace:

І якщо нам це значення знадобиться у БП, його можна отримати так: 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 контексту
Нарешті, ми можемо зберегти 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
— це веб-додаток з відкритим вихідним кодом, який дозволяє створювати ноутбуки, що містять код, візуалізації та текст і публікувати їх. Python Gateway дозволяє переглядати та редагувати BPL-процеси у вигляді Jupyter Notebook. Зверніть увагу, що зараз використовується звичайний executor Python 3.
Це розширення передбачає, що інструкції містять код Python і використовують назви активностей як попередні заголовки. Тепер можна розробляти бізнес-процеси PythonGateway в Jupyter Notebook. Ось що можливо:
- Створювати нові бізнес-процеси
- Видаляти бізнес-процеси
- Створювати нові активності
- Змінювати активності
- Видаляти активності
Ось . І кілька скріншотів:
Провідник процесів

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

Встановлення
- Вам знадобиться InterSystems IRIS 2019.2+.
- Встановіть PythonGateway v0.8+ (потрібен лише
isc.py.util.Jupyter,isc.py.util.JupyterCheckpointsиisc.py.ens.ProcessUtils). - Оновіть код ObjectScript із репозиторію.
- виконайте
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
