Python Gateway во InterSystems IRIS

Оваа статија е за Python Gateway, проект на заедницата со отворен код за платформата за податоци InterSystems IRIS. Овој проект ви овозможува да ги оркестрирате сите алгоритми за машинско учење создадени во Python (главната средина за многу научници за податоци), да користите бројни готови библиотеки за брзо создавање на адаптивни, роботски аналитички AI / ML решенија на платформата InterSystems IRIS. Во оваа статија, ќе ви покажам како InterSystems IRIS може да ги оркестрира процесите на Python, да врши ефикасен двонасочен пренос на податоци и да создава интелигентни деловни процеси.

План

  1. Вовед.
  2. Алатки.
  3. Инсталација
  4. API
  5. Интероперабилност.
  6. тетратка Јупитер.
  7. Заклучоци.
  8. Врски.
  9. M.L.Toolkit.

Вовед

Python е програмски јазик на високо ниво, за општа намена, фокусиран на подобрување на продуктивноста на програмерите и читливоста на кодот. Во оваа серија написи ќе зборувам за можностите за користење на јазикот Python на платформата InterSystems IRIS, додека главниот фокус на оваа статија е употребата на Python како јазик за креирање и примена на модели за машинско учење.

Машинското учење (ML) е класа на методи на вештачка интелигенција, чија карактеристика не е директно решавање на проблем, туку учење во процес на решавање на многу слични проблеми.

Алгоритмите и моделите за машинско учење стануваат се почести. Има многу причини за ова, но се се сведува на пристапноста, едноставноста и постигнувањето практични резултати. Дали кластерирањето или дури и моделирањето на невронски мрежи е нова технологија?

Секако дека не, но во денешно време нема потреба да се пишуваат стотици илјади линии код за да се изврши еден модел, а трошоците за креирање и користење на модели стануваат се помали и помали.

Алатките се развиваат - додека немаме алатки за AI/ML ориентирани целосно GUI, напредокот што го видовме со многу други класи на информациски системи како што е BI (од пишување код до користење рамки и решенија ориентирани кон GUI) е исто така виден. во алатките за создавање AI/ML. Веќе ја поминавме фазата на пишување код и денес користиме рамки за градење и обука на модели.

Други подобрувања, како што е способноста за пропагирање на претходно обучен модел каде што крајниот корисник мора едноставно да ја заврши обуката на моделот за неговите специфични податоци, исто така го олеснуваат започнувањето со примена на машинското учење. Овие достигнувања го олеснуваат учењето на машинското учење, како за професионалците, така и за компаниите како целина.

Од друга страна, собираме се повеќе и повеќе податоци. Со обединета платформа за податоци како што е InterSystems IRIS, сите овие информации може веднаш да се подготват и да се користат како влез за моделите за машинско учење.

Со преминот кон облакот, започнувањето на AI/ML проекти е полесно од кога било. Можеме да ги консумираме само ресурсите што ни се потребни. Покрај тоа, благодарение на паралелизацијата што ја нудат облак платформите, можеме да заштедиме потрошено време.

Но, што е со резултатите? Тука работите стануваат покомплицирани. Има многу алатки за градење модели, за кои ќе разговарам понатаму. Да се ​​изгради добар модел не е лесно, но што понатаму? Профитирањето од употребата на моделот од страна на бизнисот е исто така нетривијална задача. Коренот на проблемот е одвојувањето на аналитичкиот и трансакцискиот обем на работа и моделите на податоци. Кога тренираме модел, тоа обично го правиме на историски податоци. Но, местото за конструираниот модел е во обработката на трансакциските податоци. Која е користа од најдобриот модел за откривање на лажни трансакции ако го работиме еднаш дневно? Измамниците одамна си заминаа со парите. Треба да го обучиме моделот за историски податоци, но исто така треба да го примениме во реално време на новите дојдовни податоци за нашите деловни процеси да можат да дејствуваат според предвидувањата направени од моделот.

ML Toolkit е комплет алатки што го прави токму тоа: зближува модели и трансакциско опкружување, така што моделите што ги создавате може лесно да се користат директно во вашите деловни процеси. Python Gateway е дел од ML Toolkit и обезбедува интеграција со јазикот Python (слично на R Gateway, да се биде дел од ML Toolkit обезбедува интеграција со јазикот R).

Toolkit

Пред да продолжиме, би сакал да опишам неколку алатки и библиотеки на Python што ќе ги користиме подоцна.

Технологија

  • Python е интерпретиран, општа намена, програмски јазик на високо ниво. Главната предност на јазикот е голема библиотека со математички, ML и AI библиотеки. Како и ObjectScript, тој е објектно-ориентиран јазик, но сè е дефинирано динамично, а не статички. Исто така, сè е објект. Подоцнежните написи претпоставуваат минливо познавање на јазикот. Ако сакате да започнете да учите, препорачувам да започнете со документација.
  • За нашите следни вежби, поставете Python 3.6.7 64bit.
  • ИДЕ: користам PyCharm, но воопшто много. Ако користите Atelier, постои додаток Eclipse за развивачите на Python. Ако користите VS Code, тогаш постои екстензија за Python.
  • Тетратка: Наместо IDE, можете да пишувате и споделувате вашите скрипти во онлајн тетратки. Најпопуларниот од нив е Јупитер.

Библиотеки

Еве (делумна) листа на библиотеки за машинско учење:

  • Амфонтен — основен пакет за точни пресметки.
  • Панди — структури на податоци со високи перформанси и алатки за анализа на податоци.
  • Матплотлиб - Креирање на графикони.
  • Сиборн - визуелизација на податоци врз основа на matplotlib.
  • Sklearn — методи за машинско учење.
  • XGBoost — алгоритми за машинско учење во рамките на методологијата за зголемување на градиентот.
  • Gensim - НЛП.
  • Керас - невронски мрежи.
  • Проток на тензор е платформа за креирање модели за машинско учење.
  • PyTorch е платформа за креирање модели за машинско учење фокусирани на Python.
  • Њока - PMML од различни модели.

AI/ML технологиите го прават бизнисот поефикасен и поприлагодлив. Покрај тоа, денес овие технологии стануваат полесни за развој и имплементација. Започнете да учите за AI/ML технологиите и како тие можат да и помогнат на вашата организација да расте.

Инсталација

Постојат неколку начини да се инсталира и користи Python Gateway:

  • ОС
    • Windows
    • Linux
    • Mac
  • пристанишен работник
    • Користете ја сликата од 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. Место повик 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 има дел за решавање проблеми.

Mac

  1. Во моментов само python 3.6.7 е поддржан од Пајтон.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 IMAGE=store/intersystems/iris:2019.4.0.383.0 --force-rm --ознака intersystemscommunity/irispy: најново`.

После тоа, можете да ја извршите сликата на докер:

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 - дел за решавање проблеми.

API

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

  • Извршување на код
  • Пренос на податоци
  • Помошен

Извршување на код

Овие методи ви дозволуваат да извршите произволен Python код.

SimpleString

SimpleString е главниот метод. Потребни се 4 опционални аргументи:

  • code е линијата на код што треба да се изврши. Карактер за довод на линија: $c(10).
  • returnVariable е името на променливата што треба да се врати.
  • serialization - како да се серијализира returnVariable. 0 - низа (стандардно), 1 - репр.
  • result - ByRef повикување на променливата во која е запишана вредноста returnVariable.

Погоре направивме:

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

Во овој пример, ние доделуваме променлива Python x вредност Hello и сакате да ја вратите вредноста на променливата Python x на променлива ObjectScript var.

Изврши код

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

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 во која се запишани податоците.
  • type - list или панди dataframe.
  • namespace - областа во која ќе се изврши барањето.

ExecuteGlobal

ExecuteGlobal(global, variable, type, start, end, mask, labelels, namespace) - пренесување глобален на Python.

Аргументи:

  • global е името на глобалниот без ^
  • variable - името на променливата Python во која се запишани податоците.
  • type - list или панди dataframe.
  • start — првиот претплата на глобалната. Задолжително %Integer.
  • end е последниот подлога на глобалната. Задолжително %Integer.
  • mask — маска на глобалните вредности. Маската може да биде пократка од бројот на полиња во глобалната (во тој случај полињата на крајот ќе бидат прескокнати). Како да ја форматирате маската:
    • + поминете ја вредноста како што е.
    • - прескокнете вредност.
    • b - Булов тип (0 - False, сите останати - True).
    • d — Датум (од $horolog, на Windows од 1970 година, на Linux од 1900 година).
    • t - Време ($horolog, секунди по полноќ).
    • m — Временски печат (ГОДИНА-МЕСЕЦ-ДЕН ЧАС: MINUTE:SECOND низа со формат).
  • labels - %Список на имиња на колони. Првиот елемент е името на претплатата.
  • namespace - областа во која ќе се изврши барањето.

ExecuteClass

завиткајте ExecuteGlobal. Подготвува повик врз основа на дефиницијата на класата ExecuteGlobal и му се јавува.

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

Аргументи:

  • class - име на класа
  • variable - името на променливата Python во која се запишани податоците.
  • type - list или панди dataframe.
  • start — почетна ИД.
  • end - конечна ИД
  • 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, mac). Користете %TimeStampда пренесувате податоци надвор од овој опсег или да користите податочна рамка за панди како ова ограничување е само за списокот.
  • За 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

Во основа, операцијата на Пајтон е завршена 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 со контекст ID.
  • 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 - Пајтон код.
  • 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

Ја пресметува матрицата за корелација на страната на Пајтон и ја извлекува променливата corrmat назад во InterSystems IRIS во JSON формат со поставување на својствата на барањето:

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

Резултатите можеме да ги видиме во Visual Trace:

Python Gateway во InterSystems IRIS

И ако ни треба оваа вредност во BP, може да се добие вака: 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 — исчистете го контекстот пред да го вратите.

Upупитер тетратка

Upупитер тетратка е веб-апликација со отворен код која ви овозможува да креирате и објавувате тетратки кои содржат код, визуелизации и текст. Python Gateway ви овозможува да ги гледате и уредувате BPL процесите како Jupyter Notebook. Забележете дека во моментов се користи редовниот извршител на Python 3.

Оваа екстензија претпоставува дека прибелешките содржат Python код и користат имиња на активности како претходни наслови. Сега е можно да се развијат деловни процеси на PythonGateway во Jupyter Notebook. Еве што е можно:

  • Креирајте нови деловни процеси
  • Избришете ги деловните процеси
  • Креирајте нови активности
  • Променете ги активностите
  • Избришете ги активностите

тука е демо видео. И неколку слики од екранот:

Процес Explorer

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 (главна средина за многу научници за податоци), да користите бројни готови библиотеки за брзо создавање адаптивна, роботска аналитичка вештачка интелигенција / ML решенија на платформата InterSystems IRIS.

референци

MLToolkit

Корисничката група MLToolkit е приватно складиште на GitHub создадено како дел од корпоративната организација GitHub на InterSystems. Адресиран е до надворешни корисници кои инсталираат, учат или веќе користат компоненти на MLToolkit, вклучувајќи го и Python Gateway. Групата има голем број имплементирани случаи (со изворен код и податоци за тестирање) во областите на маркетинг, производство, медицина и многу други индустрии. За да се приклучите на корисничката група на ML Toolkit, ве молиме испратете кратка е-пошта на следната адреса: [заштитена по е-пошта] и вклучете ги следните информации во вашето писмо:

  • Корисничко име на GitHub
  • Организација (работите или студирате)
  • Позиција (вашата вистинска позиција во вашата организација, или „Студент“ или „Независен“).
  • Земја

За оние кои ја прочитале статијата и се заинтересирани за InterSystems IRIS како платформа за развој или хостирање на механизми за вештачка интелигенција и машинско учење, ве покануваме да разговарате за можни сценарија од интерес за вашето претпријатие. Ние лесно ќе ги анализираме потребите на вашето претпријатие и заеднички ќе одредиме акционен план; контакт адреса на е-пошта на нашата експертска група AI/ML - [заштитена по е-пошта].

Извор: www.habr.com

Додадете коментар