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 - стварэнне графікаў.
  • Марскі народ - візуалізацыя дадзеных, заснаваная на matplotlib.
  • Склеарн - метады машыннага навучання.
  • XGBoost - алгарытмы машыннага навучання ў рамках метадалогіі градыентнага бустынгу (Gradient Boosting).
  • Генсім - NLP.
  • Керас - нейронавыя сеткі.
  • Тэнзорны паток - платформа для стварэння мадэляў машыннага навучання.
  • PyTorch - платформа для стварэння мадэляў машыннага навучання, арыентаваная на Python.
  • Nyoka - PMML з розных мадэляў.

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

Ўстаноўка

Існуе некалькі спосабаў усталёўкі і выкарыстанні Python Gateway:

  • АС
    • Windows
    • Linux
    • Макінтош
  • Докер
    • Выкарыстоўвайце выяву з 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.

Макінтош

  1. У цяперашні час падтрымліваецца толькі пітон 3.6.7 з python.org. Праверце зменную PATH.

Калі вы змянялі зменныя асяроддзі, перазапусціце ваш прадукт InterSystems.

Докер

Выкарыстанне кантэйнераў мае шэраг пераваг:

  • партатыўнасць
  • эфектыўнасць
  • Ізаляцыя
  • Лёгкавага
  • Імутабельнасць

Азнаёмцеся з гэтай серыяй артыкулаў для атрымання больш падрабязнай інфармацыі аб выкарыстанні 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

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

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

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 і залежыць ад АС (вокны: 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 наўтбукаў

Jupyter наўтбукаў - Гэта вэб-дадатак з адкрытым зыходным кодам, якое дазваляе ствараць наўтбукі, якія змяшчаюць код, візуалізацыі і тэкст і публікаваць іх. 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/XNUMX+.
  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

Дадаць каментар