Python Gateway v InterSystems IRIS

Tento článek se věnuje Python Gateway — komunitnímu projektu s otevřeným zdrojovým kódem pro datovou platformu InterSystems IRIS. Tento projekt umožňuje orchestraci jakýchkoli algoritmů strojového učení vytvořených v jazyce Python (hlavním prostředí pro mnohé datové vědce), využívat řadu hotových knihoven pro rychlé vytváření adaptivních, robotizovaných analytických AI/ML řešení na platformě InterSystems IRIS. V tomto článku ukážu, jak může InterSystems IRIS orchestraci procesů v Pythonu efektivně provádět oboustranný přenos dat a vytvářet inteligentní obchodní procesy.

Plán

  1. Úvod.
  2. Nástroje.
  3. Instalace.
  4. API.
  5. Interoperabilita.
  6. Jupyter Notebook.
  7. Závěry.
  8. Odkazy.
  9. MLToolkit.

Úvod

Python je vysokoúrovňový programovací jazyk obecného určení, který se zaměřuje na zvyšování produktivity vývojářů a čitelnost kódu. V této sérii článků se budu zabývat možnostmi využití jazyka Python na platformě InterSystems IRIS, přičemž hlavním zaměřením tohoto článku je uplatnění Pythonu jako jazyka pro vytváření a aplikaci modelů strojového učení.

Strojové učení (ML) je třída metod umělé inteligence, které se vyznačují tím, že přímo neřeší problém, ale učí se při řešení mnoha podobných úloh.

Algoritmy a modely strojového učení se stávají stále běžnějšími. Důvodů je mnoho, ale všechno se to vrací k dostupnosti, jednoduchosti a dosažení praktických výsledků. Je klasifikace nebo dokonce neuronové modelování novou technologií?

Samozřejmě, že ne, ale v současnosti není potřeba psát stovky tisíc řádků kódu, abychom spustili jeden model, a náklady na vytváření a aplikaci modelů neustále klesají.

Nástroje se vyvíjejí — zatímco nemáme zcela GUI-orientované AI/ML nástroje, pokrok, který jsme zaznamenali u mnoha dalších tříd informačních systémů, například BI (od psaní kódu po používání rámců a GUI-orientovaných konfigurovatelných řešení), se objevuje i u nástrojů pro vytváření AI/ML. Již jsme překonali fázi psaní kódu a dnes používáme rámce k budování a trénování modelů.

Další vylepšení, jako je možnost distribuce předtrénovaného modelu, kdy koncový uživatel musí pouze dokončit trénink modelu na svých specifických datech, také usnadňují začátek uplatnění strojového učení. Tyto pokroky výrazně zjednodušují studium strojového učení jak pro odborníky, tak pro společnosti jako celek.

Na druhé straně sbíráme stále více dat. Díky jednotné datové platformě, jako je InterSystems IRIS, mohou být všechny tyto informace okamžitě připraveny a použity jako výchozí data pro modely strojového učení.

S přechodem do cloudu je spuštění AI/ML projektů snazší než kdykoli předtím. Můžeme spotřebovávat pouze ty zdroje, které potřebujeme. Navíc díky paralelizaci, kterou nabízejí cloudové platformy, můžeme ušetřit čas.

Ale co výsledky? Tady se situace komplikuje. Existuje mnoho nástrojů pro tvorbu modelů, o kterých budu hovořit dále. Vytvořit dobrý model není snadné, ale co dál? Získání zisku z použití modelu firmou je také netriviální úkol. Jádrům problému je rozdělení analytických a transakčních zátěží a datových modelů. Když trénujeme model, obvykle to děláme na historických datech. Ale místo, kde má postavený model fungovat, je v transakčním zpracování dat. Jaký má smysl nejlepší model pro detekci podvodných transakcí, pokud ho spouštíme jednou za den? Podvodníci už dávno utekli s penězi. Musíme trénovat model na historických datech, ale také ho musíme aplikovat v reálném čase na nových přicházejících datech, aby naše podnikové procesy mohly jednat v souladu s predikcemi provedenými modelem.

ML Toolkit je soubor nástrojů, jehož cílem je právě toto: spojení modelů a transakčního prostředí, aby bylo možné použití vytvořených modelů přímo ve vašich obchodních procesech. Python Gateway je součástí ML Toolkit a zajišťuje integraci s jazykem Python (podobně jako R Gateway, která je součástí ML Toolkit, zajišťuje integraci s jazykem R).

Nástroje

Než budeme pokračovat, rád bych popsal několik nástrojů a knihoven pro Python, které budeme používat později.

Technologie

  • Python je interpretovaný, vysoce úrovňový programovací jazyk obecného použití. Hlavní výhodou jazyka je rozsáhlá knihovna matematických, ML a AI knihoven. Stejně jako ObjectScript je to objektově orientovaný jazyk, ale všechno je definováno dynamicky, nikoli staticky. Také vše je objektem. Pozdější články předpokládají povrchní seznámení s jazykem. Pokud chcete začít se vzděláváním, doporučuji začít s dokumentaci.
  • Pro naše další cvičení nainstalujte Python 3.6.7 64 bit.
  • IDE: Používám PyCharm, ale existují také mnoho. Pokud používáte Atelier, existuje Eclipse plugin pro vývojáře v Pythonu. Pokud používáte VS Code, existuje rozšíření pro Python.
  • Notebook: místo IDE můžete psát a sdílet své skripty v online noteboocích. Nejpoužívanější z nich je Jupyter.

Knihovny

Zde je (neúplný) seznam knihoven pro strojové učení:

  • Numpy — základní balíček pro přesné výpočty.
  • Pandas — vysoce výkonné datové struktury a nástroje pro analýzu dat.
  • Matplotlib — vytváření grafů.
  • Seaborn — vizualizace dat založená na matplotlib.
  • Sklearn — metody strojového učení.
  • cuML — algoritmy strojového učení v rámci metodologie gradientního boosting (Gradient Boosting).
  • Gensim — NLP.
  • Keras — neuronové sítě.
  • Tensorflow — platforma pro vytváření modelů strojového učení.
  • PyTorch — platforma pro vytváření modelů strojového učení zaměřená na Python.
  • Nyoka — PMML z různých modelů.

Technologie AI/ML umožňují učinit podnikání efektivnějším a adaptivnějším. Navíc dnes se tyto technologie stávají snadnějšími k vývoji a implementaci. Začněte se učit technologie AI/ML a jak mohou pomoci vaší organizaci růst.

Instalace

Existuje několik způsobů, jak nainstalovat a používat Python Gateway:

  • OS
    • Windows
    • Linux
    • Mac
  • Docker
    • Použijte obraz z DockerHub
    • Vytvořte si vlastní obraz

Ať už zvolíte jakýkoli způsob instalace, budete potřebovat zdrojový kód. Jediné místo pro stažení kódu je stránka vydání. Obsahuje testované stabilní verze, stačí si vzít poslední. V tuto chvíli je to 0.8, ale časem budou k dispozici i nové. Neklonujte/neukládejte repozitář, stáhněte si poslední vydání.

OS

Pokud instalujete Python Gateway do operačního systému, nejprve (bez ohledu na operační systém) musíte nainstalovat Python. K tomu:

  1. Nainstalujte Python 3.6.7 64 bit. Doporučuje se nainstalovat Python do výchozího adresáře.
  2. Nainstalujte modul dill: pip install dill.
  3. Stáhněte kód ObjectScript (tj. do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) do jakékoli oblasti s produkty. Pokud chcete, aby existující oblast podporovala produkty, proveďte: write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. Umístěte callout DLL/SO/DYLIB do složky bin vaší instance InterSystems IRIS. Knihovna musí být dostupná na cestě vracené write ##class(isc.py.Callout).GetLib().

Windows

  1. Ujistěte se, že proměnná prostředí PYTHONHOME ukazuje na Python 3.6.7.
  2. Ujistěte se, že systémová proměnná prostředí cest obsahuje proměnnou PYTHONHOME (nebo adresář, na který ukazuje).

Linux (Debian/Ubuntu)

  1. Zkontrolujte, že proměnná prostředí cest obsahuje /usr/lib a /usr/lib/x86_64-linux-gnu. Použijte soubor /etc/environment k nastavení proměnných prostředí.
  2. V případě chyb undefined symbol: _Py_TrueStruct nainstalujte nastavení PythonLib. Také v Readme je sekce Řešení problémů.

Mac

  1. Aktuálně je podporován pouze Python 3.6.7 z Python.org. Zkontrolujte proměnnou cest.

Pokud jste měnili proměnné prostředí, restartujte svůj produkt InterSystems.

Docker

Použití kontejnerů má řadu výhod:

  • Přenositelnost
  • Efektivita
  • Izolace
  • Lehkost
  • Immutabilita

Podívejte se na tuto sérii článků pro více informací o používání Dockeru s produkty InterSystems.

Všechny buildu Python Gateway jsou momentálně založeny na kontejnerových technologiích. 2019.4.

Hotový obraz

Proveďte: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latest, abyste stáhli a spustili Python Gateway s InterSystems IRIS Community Edition. A to je vše.

Vytvořte si vlastní obraz

Pro sestavení docker obrazu spusťte v kořenovém adresáři repozitáře: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
Ve výchozím nastavení se obraz sestavuje na základě obrazu store/intersystems/iris-community:2019.4.0.383.0, ale můžete to změnit nastavením proměnné IMAGE.
Pro sestavení z InterSystems IRIS spusťte: `docker build —build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 —force-rm —tag intersystemscommunity/irispy:latest`.

Poté můžete spustit docker obraz:

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

Pokud používáte obraz založený na InterSystems IRIS Community Edition, nemusíte zadávat klíč.

Komentáře

  • Testovací proces isc.py.test.Process ukládá řadu obrázků do dočasného adresáře. Možná budete chtít změnit tuto cestu na namontovaný adresář. K tomu upravte nastavení WorkingDir určením namontovaného adresáře.
  • Pro přístup k terminálu zadejte: docker exec -it irispy sh.
  • Přístup do Portálu Správy Systému pomocí přihlášení SuperUser/SYS.
  • Chcete-li zastavit kontejner, zadejte: docker stop irispy && docker rm --force irispy.

Kontrola instalace

Poté, co jste nainstalovali Python Gateway, je dobré ověřit, že funguje. Zadejte tento kód do terminálu InterSystems IRIS:

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

Výsledkem by mělo být vypsáno HELLO — hodnota Python proměnné x. Pokud je vracený stav sc chybou nebo var prázdno, zkontrolujte Readme — sekce Řešení problémů.

API

Python Gateway je nainstalován a ujistili jste se, že funguje. Je čas začít ho používat!
Hlavní rozhraní k Pythonu je isc.py.Main. Nabízí následující skupiny metod (vše vrací %Status):

  • Spuštění kódu
  • Přenos dat
  • Pomocné

Spuštění kódu

Tyto metody umožňují spouštět libovolný Python kód.

SimpleString

SimpleString — to je hlavní metoda. Přijímá 4 volitelné argumenty:

  • code — řetězec kódu k vykonání. Symbol pro nový řádek: $c(10).
  • returnVariable — název proměnné pro návrat.
  • serialization — jak serializovat returnVariable. 0 — string (výchozí), 1 — repr.
  • result — ByRef odkaz na proměnnou, do které je zapisována hodnota returnVariable.

V předchozím jsme provedli:

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

V tomto příkladu přiřazujeme proměnné Python x hodnotu Ahoj a chceme vrátit hodnotu Python proměnné x do proměnné ObjectScript var.

ExecuteCode

ExecuteCode je bezpečnější a méně omezenou alternativou SimpleString.
Řetězce v platformě InterSystems IRIS jsou omezeny na 3 641 144 znaky, a pokud chcete spustit delší úsek kódu, musíte použít proudy.
Přijímá dva argumenty:

  • code — řetězec nebo proud Python kódu k vykonání.
  • variable — (volitelně) přiřazuje výsledek vykonání code této Python proměnné.

Použijte například:

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

V tomto příkladu násobíme 2 třemi a zapisujeme výsledek do Python proměnné y.

Přenos dat

Přenášejte data mezi Pythonem a zpět.

Python -> InterSystems IRIS

Existují 4 způsoby, jak získat hodnotu Python proměnné v InterSystems IRIS, v závislosti na potřebné serializaci:

  • Řetězec pro základní datové typy a ladění.
  • Repr pro uchovávání jednoduchých objektů a ladění.
  • JSON pro snadnou manipulaci s daty na straně InterSystems IRIS.
  • Pickle pro ukládání objektů.

Tyto metody umožňují získat proměnné z Pythonu ve formě řetězce nebo proudů.

  • GetVariable(variable, serialization, .stream, useString) — získat serialization proměnnou variable v stream. Pokud useString je-li 1 a serializace je umístěna do řetězce, pak se vrátí řetězec a ne proud.
  • GetVariableJson(variable, .stream, useString) — získat JSON serializaci proměnné.
  • GetVariablePickle(variable, .stream, useString, useDill) - získat Pickle (nebo Dill) serializaci proměnné.

Zkusíme získat naši proměnnou y.

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

InterSystems IRIS -> Python

Načítáme data z InterSystems IRIS do Pythonu.

  • ExecuteQuery(query, variable, type, namespace) — vytváří datovou sadu (pandas dataframe nebo list) z sql dotazu a nastaví ji do proměnné Pythonu variable. Balíček isc.py musí být dostupný v oblasti namespace — zde se bude provádět dotaz.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) — načítá data globálu global z subscriptu start do end do Pythonu jako proměnnou typu type: list, nebo pandas dataframe. Popis volitelných argumentů maskovat and labels je k dispozici v dokumentaci třídy a repozitáři Data Transfer docs.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) — načítá data třídy třída z id start do end do Pythonu jako proměnnou typu type: list, nebo pandas dataframe. >, nebo je lze definovat prostřednictvím systémové vlastnosti — seznam (oddělovač – čárka) vlastností třídy, které je třeba načíst do datové sady. Podporují se masky * a ?. Ve výchozím nastavení — * (všechny vlastnosti). Vlastnost %%CLASSNAME ignorován.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) — načítá data tabulky table z id start do end do Pythonu.

ExecuteQuery — je univerzální (jakýkoli platný SQL dotaz bude předán do Pythonu). Nicméně, ExecuteGlobal a jeho obálky ExecuteClass a ExecuteTable mají určitá omezení. Jsou mnohem rychlejší (3-5krát rychlejší než ODBC ovladače a 20krát rychlejší ExecuteQuery). Další informace v Data Transfer docs.
Všechny tyto metody podporují přenos dat z jakékoli oblasti. Balíček isc.py musí být dostupný ve cílové oblasti.

ExecuteQuery

ExecuteQuery(request, variable, type, namespace) — přenos výsledků jakéhokoli platného SQL dotazu do Pythonu. To je nejpomalejší metoda přenosu dat. Použijte ji, pokud ExecuteGlobal a jeho obálky nejsou dostupné.

Argumenty:

  • query — sql dotaz.
  • variable — název Python proměnné, do které se ukládají data.
  • type — list nebo Pandas dataframe.
  • namespace — oblast, ve které se bude provádět dotaz.

ExecuteGlobal

ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) — přenos globálu do Pythonu.

Argumenty:

  • global — jméno globálu bez ^
  • variable — název Python proměnné, do které se ukládají data.
  • type — list nebo Pandas dataframe.
  • start — první subscript globálu. Povinné %Integer.
  • end — poslední subscript globálu. Povinné %Integer.
  • maskovat — maska hodnot globálu. Maska může být kratší než počet polí v globálu (v tomto případě budou pole na konci přeskočena). Jak formátovat masku:
    • + předat hodnotu tak, jak je.
    • - přeskočit hodnotu.
    • b — logický typ (0 — Při provádění scénáře Nornir se do konzole vyprodukují podrobné logy., všechno ostatní — Pravda).
    • – perioda anténní mřížky (vzdálenost mezi sousedními prvky), — datum (z $horolog, na Windows od 1970, na Linuxu od 1900).
    • t — čas ($horolog, sekundy po půlnoci).
    • m — časová značka (řetězec formátu ROK-MĚSÍC-DEN HODINA:MINUTA:SEKUNDA).
  • labels — %List názvů sloupců. Prvním prvkem je název subskriptu.
  • namespace — oblast, ve které se bude provádět dotaz.

ExecuteClass

Obal nad ExecuteGlobal. Na základě definice třídy připravuje volání ExecuteGlobal a vyvolává ho.

ExecuteClass(class, variable, type, start, end, properties, namespace) — předávání dat třídy v Pythonu.

Argumenty:

  • třída — název třídy
  • variable — název Python proměnné, do které se ukládají data.
  • type — list nebo Pandas dataframe.
  • start — počáteční Id.
  • end — koncové Id
  • >, nebo je lze definovat prostřednictvím systémové vlastnosti — seznam (oddělovač – čárka) vlastností třídy, které je třeba načíst do datové sady. Podporují se masky * a ?. Ve výchozím nastavení — * (všechny vlastnosti). Vlastnost %%CLASSNAME ignorován.
  • namespace — oblast, ve které se bude provádět dotaz.

Všechny vlastnosti se předávají tak, jak jsou, kromě vlastností typů te, %Time, %Boolean a %TimeStamp — tyto jsou převáděny na odpovídající třídy Pythonu.

ExecuteTable

Obal nad ExecuteClass. Převádí název tabulky na název třídy a vyvolává ExecuteClass. Podpis:

ExecuteTable(table, variable, type, start, end, properties, namespace) — předání dat tabulky v Pythonu.

Argumenty:

  • table — název tabulky.
    Všechny ostatní argumenty se předávají tak, jak jsou, do ExecuteClass.

Poznámky

  • ExecuteGlobal, ExecuteClass a ExecuteTable pracují stejně rychle.
  • ExecuteGlobal 20krát rychleji než ExecuteQuery na velkých datových sadách (čas přenosu více než >0.01 sekundy).
  • ExecuteGlobal, ExecuteClass a ExecuteTable pracují na globálech s touto strukturou: ^global(key) = $lb(prop1, prop2, ..., propN) kde key — celé číslo.
  • Pro ExecuteGlobal, ExecuteClass a ExecuteTable podporovaný rozsah hodnot te odpovídá rozsahu mktime a závisí na OS (windows: 1970-01-01, linux 1900-01-01, mac). Použijte %TimeStamppro předání dat mimo tento rozsah nebo použijte pandas dataframe, protože toto omezení platí pouze pro seznam.
  • Pro ExecuteGlobal, ExecuteClass a ExecuteTable všechny argumenty kromě zdroje dat (globálu, třídy nebo tabulky) a proměnné jsou volitelné.

Příklady

Testovací třída isc.py.test.Person obsahuje metodu, která demonstruje všechny možnosti předávání dat:

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"

// Obecné argumenty
set variable = "df"
set type = "dataframe"
set start = 1
set end = $g(^isc.py.test.PersonD, start)

// Metoda 0: ExecuteGlobal bez argumentů
set sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 0, type)

// Metoda 1: ExecuteGlobal s argumenty    
// Při předávání globálního názvy polí se nastavují ručně
// globalKey - název subskriptu 
set labels = $lb("globalKey", "Name", "DOB", "TS", "RandomTime", "AgeYears", "AgeDecimal", "AgeDouble", "Bool")

// mask obsahuje o 1 prvek méně než labels, protože "globalKey" - název subskryptu
// Přeskakujeme %%CLASSNAME
set mask = "-+dmt+++b"

set sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 1, type, start, end, mask, labels)

// Metoda 2: ExecuteClass
set sc = ##class(isc.py.Main).ExecuteClass(class, variable _ 2, type, start, end)

// Metoda 3: ExecuteTable
set sc = ##class(isc.py.Main).ExecuteTable(table, variable _ 3, type, start, end)

// Metoda 4: ExecuteTable
set sc = ##class(isc.py.Main).ExecuteQuery(query, variable _ 4, type)

Zavolejte metodu do ##class(isc.py.test.Person).Test() aby se podívali, jak všechny metody předávání dat fungují.

Pomocné metody

  • GetVariableInfo(variable, serialization, .defined, .type, .length) — získejte informace o proměnné: zda je definována, třída a délka serializace.
  • GetVariableDefined(variable, .defined) — zda je proměnná definována.
  • GetVariableType(variable, .type) — získejte třídu proměnné.
  • GetStatus() — získejte a odstraňte poslední výjimku na straně Python.
  • GetModuleInfo(module, .imported, .alias) — získejte proměnnou modulu a stav importu.
  • GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments) — získejte informace o funkci.

Interoperabilita

Naučili jste se volat Python Gateway z terminálu, nyní začneme používat jej v produkci. Základem interakce s Pythonem v tomto režimu — isc.py.ens.Operation. Umožňuje nám:

  • Provádět kód v Pythonu
  • Ukládat/Obnovovat Python kontext
  • Načítat a získávat data z Pythonu

V zásadě je Python operace obálka nad isc.py.Main. Operace isc.py.ens.Operation umožňuje interakci s procesem Python z produktů InterSystems IRIS. Podporováno je pět požadavků:

  • isc.py.msg.ExecutionRequest pro provádění Python kódu. Vrací isc.py.msg.ExecutionResponse s výsledkem provedení a hodnotami požadovaných proměnných.
  • isc.py.msg.StreamExecutionRequest pro provádění Python kódu. Vrací isc.py.msg.StreamExecutionResponse výsledkem provedení a hodnotami požadovaných proměnných. Analog isc.py.msg.ExecutionRequest, ale přijímá a vrací toky místo řetězců.
  • isc.py.msg.QueryRequest pro předání výsledku provedení SQL dotazu. Vrací Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest pro přenos dat globální / třídy / tabulky. Vrací Ens.Response.
  • isc.py.msg.SaveRequest pro uložení Python kontextu. Vrací Ens.StringResponse s identifikátorem kontextu.
  • isc.py.msg.RestoreRequest pro obnovení Python kontextu.

    Kromě toho, isc.py.ens.Operation má dvě nastavení:

    • Initializer — výběr třídy implementující rozhraní isc.py.init.Abstract. Může být použit k načítání funkcí, modulů, tříd atd. Spouští se jednou při spuštění procesu.
    • PythonLib — (pouze pro Linux) pokud vidíte chyby při načítání, nastavte jeho hodnotu na libpython3.6m.so nebo dokonce na úplnou cestu k Python knihovně.

Vytváření obchodních procesů

K dispozici jsou dvě třídy, které usnadňují vývoj obchodních procesů:

  • isc.py.ens.ProcessUtils umožňuje extrahovat anotace z aktivit s náhradou proměnných.
  • isc.py.util.BPEmulator umožňuje snadno testovat obchodní procesy s Pythonem. Může vykonávat obchodní proces (části v jazyce Python) v aktuálním procesu.

Náhrada proměnných

Veškeré obchodní procesy zděděné od isc.py.ens.ProcessUtils, mohou používat metodu GetAnnotation(name) k získání hodnoty anotace aktivity podle jejího názvu. Anotace aktivity může obsahovat proměnné, které budou vyhodnoceny na straně InterSystems IRIS před jejich předáním do Pythonu. Zde je syntaxe náhrady proměnných:

  • ${class:method:arg1:...:argN} — zavolání metody
  • #{expr} — vykonat kód v jazyce ObjectScript.

Příklad je k dispozici v testovacím obchodním procesu isc.py.test.Process, například v aktivitě Correlation Matrix: Graph: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). V tomto příkladu:

  • #{process.WorkDirectory} vrací vlastnost WorkDirectory objektu process, což je instance třídy isc.py.test.Process tj. aktuální obchodní proces.
  • ${%PopulateUtils:Integer:1:100} volá metodu Integer třídy %PopulateUtils, s předanými argumenty 1 a 100, vracející náhodné celé číslo v rozmezí 1...100.

Testovací obchodní proces

Testovací produkt a testovací obchodní proces jsou k dispozici ve výchozím nastavení jako součást Python Gateway. Pro jejich použití:

  1. V terminálu OS spusťte: pip install pandas matplotlib seaborn.
  2. V terminálu InterSystems IRIS spusťte: do ##class(isc.py.test.CannibalizationData).Import() pro naplnění testovacích dat.
  3. Spusťte produkt isc.py.test.Production.
  4. Odeslat požadavek typu Ens.Request v isc.py.test.Process.

Podívejme se, jak to všechno funguje dohromady. Otevřete isc.py.test.Process v editoru BPL:

Python Gateway v InterSystems IRIS

Spuštění kódu

Nejdůležitější volání — vykonání Python kódu:

Python Gateway v InterSystems IRIS

Používá se požadavek isc.py.msg.ExecutionRequest, zde jsou jeho vlastnosti:

  • Kód — Python kód.
  • SeparateLines — má být kód rozdělen na řádky pro vykonání. $c(10) (n) se používá k rozdělení řetězců. Všimněte si, že zpracovávat zprávu jako celek se nedoporučuje, tato funkce je určena pouze pro zpracování def a podobných víceřádkových výrazů. Ve výchozím nastavení 0.
  • Proměnné — se jedná o seznam proměnných oddělených čárkami, které budou přidány do odpovědi.
  • Serializace — Jak serializovat proměnné, které chceme vrátit. Možnosti: Str, Repr, JSON, Pickle a Dill, ve výchozím nastavení Str.

V našem případě jen nastavujeme vlastnost Kód, takže všechny ostatní vlastnosti používají výchozí hodnoty. Nastavujeme ji voláním process.GetAnnotation("Import pandas"), které během běhu vrací anotaci po provedení substituce proměnných. Nakonec kód import pandas as pd bude předán do Pythonu. GetAnnotation může být užitečná pro získání víceřádkových Python skriptů, ale na tento způsob získávání kódu nejsou žádná omezení. Můžete nastavit vlastnost Kód jakýmkoliv způsobem, který vám vyhovuje.

Získávání proměnných

Další zajímavé volání s použitím isc.py.msg.ExecutionRequest — Korelační matice: Tabulka:

Python Gateway v InterSystems IRIS

Vypočítává Korelační matici na straně Pythonu a extrahuje proměnnou corrmat zpět do InterSystems IRIS ve formátu JSON, tak, že nastavíme vlastnosti dotazu:

  • Proměnné: "corrmat"
  • Serializace: "JSON"

Můžeme vidět výsledky ve Visual Trace:

Python Gateway v InterSystems IRIS

A pokud tuto hodnotu budeme potřebovat v BP, můžeme ji získat takto: callresponse.Variables.GetAt("corrmat").

Přenos dat

Dále budeme mluvit o předávání dat z InterSystems IRIS do Pythonu, všechny dotazy na předávání dat implementují rozhraní isc.py.msg.DataRequest, které poskytuje následující vlastnosti:

  • Variable — proměnná Pythonu, do které se zapisují data.
  • Type — typ proměnné: dataframe (pandas dataframe) nebo list.
  • Namespace — oblast, ze které získáváme data. Balíček isc.py musí být v této oblasti dostupný. Může to být oblast bez podpory produktů.

Na základě tohoto rozhraní byly implementovány 4 třídy dotazů:

  • isc.py.msg.QueryRequest — nastavte vlastnost Dotaz pro předání SQL dotazu.
  • isc.py.msg.ClassRequest — nastavte vlastnost Class pro předání dat třídy.
  • isc.py.msg.TableRequest — nastavte vlastnost Table pro předání dat tabulky.
  • isc.py.msg.GlobalRequest — nastavte vlastnost Global pro předání dat globálu.

V testovacím procesu se podívejte na aktivitu RAW, kde isc.py.msg.QueryRequest zobrazenou v akci.

Python Gateway v InterSystems IRIS

Uložení/obnovení kontextu Pythonu

Nakonec můžeme uložit kontext Pythonu do InterSystems IRIS, abychom to udělali, odešleme isc.py.msg.SaveRequest s argumenty:

  • Maska — Ukládají se pouze proměnné vyhovující masce. Podporují se * a ?. Příklad: "Data*, Figure?". Ve výchozím nastavení *.
  • MaxLength — Maximální délka uchovávané proměnné. Pokud je serializace proměnné delší, bude ignorována. Nastavte 0 pro povolení proměnných libovolné délky. Ve výchozím nastavení $$$MaxStringLength.
  • Název — Název kontextu (volitelně).
  • Popis — Popis kontextu (volitelně).

Vrátí Ens.StringResponse s Id uloženého kontextu. V testovacím procesu sledujte aktivitu Uložit kontext.

Odpovídající požadavek isc.py.msg.RestoreRequest na načtení kontextu z InterSystems IRIS do Pythonu:

  • ContextId — identifikátor kontextu.
  • Clear — vyčistit kontext před obnovením.

Jupyter Notebook

Jupyter Notebook — je to open-source webová aplikace, která umožňuje vytvářet notebooky obsahující kód, vizualizace a text a publikovat je. Python Gateway umožňuje prohlížet a upravovat procesy BPL ve formátu Jupyter Notebook. Všimněte si, že se v současnosti používá standardní executor Python 3.

Toto rozšíření předpokládá, že anotace obsahují kód Python a využívají názvy aktivit jako předchozí nadpisy. Nyní je možné vyvíjet obchodní procesy PythonGateway v Jupyter Notebooku. Zde je, co je možné:

  • Vytvářet nové obchodní procesy
  • Mazat obchodní procesy
  • Vytvářet nové aktivity
  • Měnit aktivity
  • Mazat aktivity

Tady demo video. A několik snímků obrazovky:

Průzkumník procesů

Python Gateway v InterSystems IRIS

Editor procesu

Python Gateway v InterSystems IRIS

Instalace

  1. Budete potřebovat InterSystems IRIS 2019.2+.
  2. Nainstalujte PythonGateway v0.8+ (požaduje se pouze isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints a isc.py.ens.ProcessUtils).
  3. Aktualizujte kód ObjectScript z repozitáře.
  4. Proveďte do ##class(isc.py.util.Jupyter).Install() a postupujte podle pokynů.

Dokumentace.

Závěry

MLToolkit je sada nástrojů, jejímž cílem je spojit modely a transakční prostředí, aby bylo možné snadno používat vytvořené modely přímo ve vašich obchodních procesech. Python Gateway je součástí MLToolkit a zajišťuje integraci s jazykem Python, což umožňuje orchestraci jakýchkoliv algoritmů strojového učení vytvořených v Pythonu (hlavním prostředí pro mnoho Data Scientistů), využití mnoha připravených knihoven pro rychlé vytvoření adaptivních, automatizovaných analytických AI/ML řešení na platformě InterSystems IRIS.

Odkazy

MLToolkit

Skupina uživatelů MLToolkit je soukromé úložiště GitHub, vytvořené jako součást firemní organizace GitHub InterSystems. Je určena externím uživatelům, kteří instalují, zkoumají nebo již používají komponenty MLToolkit, včetně Python Gateway. Ve skupině je k dispozici řada realizovaných případových studií (se zdrojovým kódem a testovacími daty) v oblastech marketingu, výroby, medicíny a mnoha dalších odvětvích. Pokud se chcete připojit ke skupině uživatelů ML Toolkit, prosím, pošlete krátkou zprávu na e-mail na následující adresu: MLToolkit@intersystems.com a uveďte ve své zprávě následující údaje:

  • Uživatelské jméno GitHub
  • Organizace (kde pracujete nebo studujete)
  • Pozice (vaše skutečná pozice ve vaší organizaci, nebo "Student", nebo "Nezávislý").
  • Země

Těm, kdo si přečetli článek a mají zájem o možnosti InterSystems IRIS jako platformy pro vývoj nebo hostování mechanismů umělé inteligence a strojového učení, nabízíme možnost probrat možné scénáře, které by byly zajímavé pro vaši firmu. S radostí analyzujeme potřeby vaší firmy a společně určíme akční plán; kontaktní e-mailová adresa naší expertní skupiny AI/ML je – MLToolkit@intersystems.com.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster