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 бита.
  • IDE: Аз използвам PyCharm, но всъщност те са много. Ако използвате Atelier, съществува Eclipse плъгин за разработчици на Python. Ако използвате VS Code, съществува разширение за Python.
  • Notebook: вместо IDE можете да пишете и споделяте вашите скриптове в онлайн тетрадки. Най-популярната от тях е Jupyter.

Библиотеки

Ето (непълен) списък на библиотеки за машинно обучение:

  • Numpy — основен пакет за прецизни изчисления.
  • Pandas — високопроизводителни структури от данни и инструменти за анализ на данни.
  • Matplotlib — създаване на графики.
  • Seaborn — визуализация на данни, базирана на matplotlib.
  • Sklearn — методи за машинно обучение.
  • XGBoost — алгоритми за машинно обучение в контекста на методологията на градиентно избутване (Gradient Boosting).
  • Gensim — NLP.
  • Keras — невронни мрежи.
  • Tensorflow — платформа за създаване на модели за машинно обучение.
  • 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 бита. Препоръчва се да инсталирате 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. Също така в Readme има раздел Troubleshooting.

Mac

  1. В момента се поддържа само Python 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 образ, изпълнете в корена на репозитория: 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 образа:

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

Ако използвате образ, основан на InterSystems IRIS Community Edition, можете да не укажете ключ.

Коментари

  • Процес на тестване isc.py.test.Process съхранява набор изображения в временен каталог. Може би ще искате да промените този път на монтиран каталог. За целта редактирайте настройката РаботнаДиректория посочвайки монтираната директория.
  • За достъп до терминала изпълнете: 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 — секция за отстраняване на проблеми.

API

Python Gateway е инсталиран и вие сте се уверили, че работи. Време е да започнете да го използвате!
Главният интерфейс към Python е isc.py.Main. Той предлага следните групи методи (всички връщат %Status):

  • Изпълнение на кода
  • Предаване на данни
  • Помощни

Изпълнение на кода

Тези методи позволяват да се изпълнява произволен Python код.

SimpleString

SimpleString — това е основният метод. Той приема 4 опционални аргумента:

  • code — низ на кода за изпълнение. Символ за нов ред: $c(10).
  • returnVariable — името на променливата за връщане.
  • serialization — как да се сериализира returnVariable. 0 — string (по подразбиране), 1 — repr.
  • резултат — 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 641 144 знака и ако искате да изпълните по-дълъг фрагмент код, трябва да използвате потоци.
Приемат се два аргумента:

  • 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, в зависимост от сериализацията, която ви е нужна:

  • Стринг за прости типове данни и отстраняване на проблеми.
  • 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 или списък) от sql запитване и го установява в Python променлива variable. Пакетът isc.py трябва да е достъпен в областта namespace — там ще се изпълнява запитването.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) — зарежда данни от глобал global от подскрипт стартиране до end в Python като променлива от тип тип: списък, или pandas dataframe. Описание на опционалните аргументи маскирай and labels е налично в документацията на класа и репозиторийните документи за предаване на данни.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) — зарежда данни от клас клас от id стартиране до end в Python като променлива от тип тип: списък, или pandas dataframe. properties — списък (разделител — запетая) от свойства на класа, които трябва да бъдат заредени в набора от данни. Поддържат се маски * и ?. По подразбиране — * (всички свойства). Свойство %%CLASSNAME се игнорира.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) — зарежда данни от таблица table от id стартиране до end в Python.

ExecuteQuery — универсален (всяко коректно SQL-запитване ще бъде предадено на Python). Въпреки това, ExecuteGlobal и неговите обвивки ExecuteClass и ExecuteTable работят с редица ограничения. Те са много по-бързи (3-5 пъти по-бързи от ODBC драйвера и 20 пъти по-бързи ExecuteQuery). Допълнителна информация в документи за предаване на данни.
Всички тези методи поддържат предаване на данни от всяка област. Пакетът isc.py трябва да е достъпен в целевата област.

ExecuteQuery

ExecuteQuery(request, variable, type, namespace) — предаване на резултатите от всяко коректно SQL-запитване на Python. Това е най-бавният метод за предаване на данни. Използвайте го, ако ExecuteGlobal и неговите обвивки не са налични.

Аргументи:

  • query — sql запитване.
  • variable — името на Python променливата, в която се записват данните.
  • тип — списък или Pandas dataframe.
  • namespace — областта, в която ще се изпълнява запитването.

ExecuteGlobal

ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) — предаване на глобал в Python.

Аргументи:

  • global — името на глобал без ^
  • variable — името на Python променливата, в която се записват данните.
  • тип — списък или Pandas dataframe.
  • стартиране — първия подскрипт на глобала. Обязательно %Integer.
  • end — последния подскрипт на глобала. Обязательно %Integer.
  • маскирай — маска на стойности на глобалната променлива. Маската може да бъде по-кратка от броя на полетата в глобалната променлива (в този случай полетата в края ще бъдат пропуснати). Как да форматирате маската:
    • + передайте стойността така, както е.
    • - пропуснете стойността.
    • b — Логически тип (0 — False, всичко останало — True).
    • d — Дата (от $horolog, на Windows от 1970, на Linux от 1900).
    • t — Време ($horolog, секунди след полунощ).
    • m — Времеви печат (стринг формата ГОДИНА-МЕСЕЦ-ДЕН ЧАС:МИНУТА:СЕКУНДА).
  • labels — %Списък с наименования на колони. Първият елемент — наименованието на сабскрипта.
  • namespace — областта, в която ще се изпълнява запитването.

ExecuteClass

Обвивка над ExecuteGlobal. На базата на определението на класа подготвя повикване ExecuteGlobal и го извиква.

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

Аргументи:

  • клас — име на класа
  • variable — името на Python променливата, в която се записват данните.
  • тип — списък или Pandas dataframe.
  • стартиране — стартов Id.
  • end — краен Id
  • properties — списък (разделител — запетая) от свойства на класа, които трябва да бъдат заредени в набора от данни. Поддържат се маски * и ?. По подразбиране — * (всички свойства). Свойство %%CLASSNAME се игнорира.
  • namespace — областта, в която ще се изпълнява запитването.

Всички свойства се предават така, както са, освен свойствата на типовете te, %Време, %Логически и %Времеви печат — те се конвертират в съответните класове в 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 поддържан диапазон от стойности te съответства на диапазона mktime и зависи от ОС (windows: 1970-01-01, linux 1900-01-01, mac). Използвайте %Времеви печатза предаване на данни извън този диапазон или използвайте 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} извиква метода Цяло число клас %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, ето ней properties:

  • Code — Python код.
  • SeparateLines — дали да се разделя кодът на редове за изпълнение. $c(10) (n) се използва за разделяне на редове. Обърнете внимание, че НЕ се препоръчва да се обработва съобщението изцяло наведнъж, тази функция е предназначена само за обработка def и подобни многострочни изрази. По подразбиране 0.
  • Променливи — списък с променливи, разделени със запетая, които ще бъдат добавени в отговора.
  • Сериализация — Как да сериализираме променливите, които искаме да върнем. Варианти: Str, Repr, JSON, Pickle и Dill, по подразбиране Str.

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

Получаване на променливи

Още един интересен вик с използване на isc.py.msg.ExecutionRequest — Корелационна матрица: Таблична:

Python Gateway в InterSystems IRIS

Тя изчислява Корелационната матрица на страната на Python и извлича променливата corrmat обратно в InterSystems IRIS в JSON формат, чрез задаване на свойствата на заявката:

  • Променливи: "corrmat"
  • Сериализация: "JSON"

Можем да видим резултатите в Visual Trace:

Python Gateway в InterSystems IRIS

И ако имаме нужда от тази стойност в БП, можем да я получим така: callresponse.Variables.GetAt("corrmat").

Предаване на данни

Нека поговорим за предаване на данни от InterSystems IRIS в Python, всички заявки за предаване на данни реализират интерфейса isc.py.msg.DataRequest, който предоставя следните свойства:

  • Променлива — Python променлива, в която се записват данните.
  • Type — тип на променливата: dataframe (pandas dataframe) или списък.
  • Namespace — област, от която получаваме данни. Пакетът isc.py трябва да бъде достъпен в тази област. Това може да е област без поддръжка на продукти.

На основата на този интерфейс са реализирани 4 класа заявки:

  • isc.py.msg.QueryRequest — задайте свойство Заявка за предаване на SQL заявка.
  • isc.py.msg.ClassRequest — задайте свойство Class за предаване на данни от клас.
  • isc.py.msg.TableRequest — задайте свойство Таблица за предаване на данни от таблица.
  • 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 — Име на контекста (по избор).
  • Описание — Описание на контекста (по избор).

Връща Ens.StringResponse с Id на запазения контекст. В тестовия процес следете активността Save Context.

Съответстващото запитване isc.py.msg.RestoreRequest зарежда контекста от InterSystems IRIS в Python:

  • ContextId — идентификатор на контекста.
  • Изчисти — изчистете контекста преди възстановяване.

Jupyter Notebook

Jupyter Notebook — това е уеб приложение с отворен код, което позволява създаването на ноутбуци, съдържащи код, визуализации и текст, и тяхното публикуване. Python Gateway позволява преглед и редактиране на BPL процеси под формата на Jupyter Notebook. Обърнете внимание, че в момента се използва стандартният изпълнител 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 решения на платформата InterSystems IRIS.

Връзки

MLToolkit

Група потребители на MLToolkit е частен GitHub репозиторий, създаден като част от корпоративната GitHub организация InterSystems. Той е насочен към външни потребители, които инсталират, изучават или вече използват компонентите на MLToolkit, включително Python Gateway. В групата е наличен редица реализирани случаи (с изходен код и тестови данни) в области като маркетинг, производство, медицина и много други сектори. За да се присъедините към групата на потребителите на ML Toolkit, моля, изпратете кратко съобщение по имейл на следния адрес: MLToolkit@intersystems.com и посочете в писмото си следните данни:

  • Потребителско име в GitHub
  • Организация (в която работите или учите)
  • Длъжност (вашата фактическа длъжност в организацията, или "Студент", или "Независим").
  • Страна

На тези, които прочетоха статията и проявиха интерес към възможностите на InterSystems IRIS като платформа за разработка или хостинг на механизми за изкуствен интелект и машинно обучение, предлагаме да обсъдим възможни сценарии, представляващи интерес за вашето предприятие. С радост ще анализираме нуждите на вашето предприятие и ще определим заедно план за действие; контактният имейл на нашата експертна група AI/ML е - MLToolkit@intersystems.com.

Източник: habr.com

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster