Ten artykuł poświęcony jest Python Gateway – projektowi społecznościowemu o otwartym kodzie źródłowym dla platformy danych InterSystems IRIS. Projekt ten umożliwia orkiestrację wszelkich algorytmów uczenia maszynowego stworzonych w języku Python (głównej przestrzeni roboczej dla wielu Data Scientistów), wykorzystując liczne gotowe biblioteki do szybkiego tworzenia adaptacyjnych, zrobotyzowanych rozwiązań analitycznych AI/ML na platformie InterSystems IRIS. W tym artykule pokażę, jak InterSystems IRIS może orkiestruje procesy w języku Python, efektywnie realizując dwustronny transfer danych i tworząc inteligentne procesy biznesowe.
Plan
- Wprowadzenie.
- Narzędzia.
- Instalacja.
- API.
- Interopertywność.
- Jupyter Notebook.
- Wnioski.
- Linki.
- MLToolkit.
Wprowadzenie
Python to język programowania wysokiego poziomu ogólnego przeznaczenia, skoncentrowany na zwiększeniu wydajności programisty oraz czytelności kodu. W tej serii artykułów opowiem o możliwościach zastosowania języka Python na platformie InterSystems IRIS, z naciskiem na zastosowanie Pythona jako języka do tworzenia oraz wdrażania modeli uczenia maszynowego.
Uczenie maszynowe (ML) to klasa metod sztucznej inteligencji, dla których charakterystyczne jest nie bezpośrednie rozwiązanie problemu, ale uczenie się w procesie rozwiązywania wielu podobnych zadań.
Algorytmy i modele uczenia maszynowego stają się coraz bardziej powszechne. Jest wiele powodów tego stanu, ale wszystko sprowadza się do dostępności, prostoty oraz osiągania praktycznych wyników. Czy klasteryzacja lub nawet modelowanie neuronowe to nowe technologie?
Oczywiście, że nie, ale obecnie nie ma potrzeby pisania setek tysięcy linijek kodu, aby uruchomić jeden model, a koszty tworzenia i wdrażania modeli stają się coraz mniejsze.
Narzędzia ewoluują – chociaż nie mamy jeszcze całkowicie narzędzi AI/ML zorientowanych na GUI, postęp, który zauważyliśmy w wielu innych klasach systemów informacyjnych, na przykład BI (od pisania kodu do użycia frameworków i rozwiązań konfigurowalnych opartych na GUI), jest również dostrzegalny w narzędziach do tworzenia AI/ML. Już przeszliśmy etap pisania kodu i dziś korzystamy z frameworków do budowania i szkolenia modeli.
Inne ulepszenia, takie jak możliwość dystrybucji wstępnie wytrenowanego modelu, w którym końcowy użytkownik musi jedynie dokończyć trening modelu na swoich specyficznych danych, ułatwiają rozpoczęcie stosowania uczenia maszynowego. Te osiągnięcia znacznie upraszczają naukę uczenia maszynowego zarówno dla specjalistów, jak i dla firm jako całości.
Z drugiej strony zbieramy coraz więcej danych. Dzięki zintegrowanej platformie danych, takiej jak InterSystems IRIS, wszystkie te informacje mogą być natychmiast przygotowane i wykorzystane jako dane wyjściowe do modeli uczenia maszynowego.
Przejście na chmurę sprawia, że uruchamianie projektów AI/ML staje się łatwiejsze niż kiedykolwiek. Możemy korzystać tylko z tych zasobów, które są nam potrzebne. Co więcej, dzięki paralelizacji oferowanej przez platformy chmurowe, możemy zaoszczędzić czas.
Ale co z wynikami? Tutaj robi się trudniej. Istnieje wiele narzędzi do budowania modeli, o których opowiem dalej. Zbudowanie dobrego modelu nie jest proste, ale co dalej? Uzyskanie korzyści z wykorzystania modelu przez biznes także jest niełatwym zadaniem. Rdzeń problemu tkwi w rozdzieleniu obciążeń analitycznych i transakcyjnych oraz modeli danych. Gdy szkolimy model, zazwyczaj robimy to na danych historycznych. Ale miejsce dla zbudowanego modelu znajduje się w obróbce transakcyjnej danych. Co dobrego jest w najlepszym modelu wykrywania oszukańczych transakcji, jeśli uruchamiamy go raz dziennie? Oszuści już dawno uciekli z pieniędzmi. Musimy trenować model na danych historycznych, ale musimy go również stosować w czasie rzeczywistym na nowych danych przychodzących, aby nasze procesy biznesowe mogły działać zgodnie z prognozami, które model wygenerował.
ML Toolkit to zestaw narzędzi, którego celem jest właśnie to: połączenie modeli i środowiska transakcyjnego, aby zbudowane modele można było łatwo wykorzystać bezpośrednio w twoich procesach biznesowych. Python Gateway jest częścią ML Toolkit i zapewnia integrację z językiem Python (podobnie jak R Gateway, będąc częścią ML Toolkit, zapewnia integrację z językiem R).
Narzędzia
Zanim przejdziemy dalej, chciałbym opisać kilka narzędzi i bibliotek dla Pythona, które będziemy używać później.
Technologie
- Python to interpretowany, wysokopoziomowy język programowania ogólnego przeznaczenia. Główną zaletą języka jest obszerna biblioteka matematycznych, ML- i AI-bibliotek. Podobnie jak ObjectScript, jest to język obiektowy, ale wszystko definiowane jest dynamicznie, a nie statycznie. Wszystko jest również obiektem. W późniejszych artykułach zakłada się przelotne zapoznanie się z językiem. Jeśli chcesz zacząć naukę, polecam zacząć od .
- Do naszych następnych ćwiczeń zainstaluj .
- IDE: Używam , ale ogólnie można użyć też . Jeśli używasz Atelier, istnieje wtyczka Eclipse dla programistów Pythona. Jeśli korzystasz z VS Code, dostępne jest rozszerzenie dla Pythona.
- Notebook: zamiast IDE możesz pisać i dzielić się swoimi skryptami w internetowych notatnikach. Najpopularniejszy z nich to .
Biblioteki
Oto (niepełna) lista bibliotek do uczenia maszynowego:
- — podstawowy pakiet do obliczeń numerycznych.
- — struktury danych i narzędzia do analizy danych o wysokiej wydajności.
- — tworzenie wykresów.
- — wizualizacja danych oparta na matplotlib.
- — metody uczenia maszynowego.
- — algorytmy uczenia maszynowego w ramach metodologii gradient boosting.
- — NLP.
- — sieci neuronowe.
- — platforma do tworzenia modeli uczenia maszynowego.
- — platforma do budowania modeli uczenia maszynowego, skierowana na Pythona.
- — PMML z różnych modeli.
Technologie AI/ML pozwalają uczynić biznes bardziej efektywnym i elastycznym. Co więcej, dzisiaj te technologie stają się prostsze w rozwoju i wdrażaniu. Zacznij naukę technologii AI/ML i sprawdź, jak mogą pomóc Twojej organizacji w rozwoju.
Instalacja
Istnieje kilka sposobów na zainstalowanie i używanie Python Gateway:
- systemem operacyjnym
- Windows
- Linuxa
- Mac
- Docker
- Użyj obrazu z DockerHub
- Stwórz swój własny obraz
Bez względu na sposób instalacji, będziesz potrzebować kodu źródłowego. Jedynym miejscem do pobrania kodu jest . Zawiera ona przetestowane stabilne wydania, po prostu weź ostatnie. Na ten moment to 0.8, ale z czasem będą też nowe. Nie klonuj/nie ściągaj repozytorium, pobierz najnowsze wydanie.
systemem operacyjnym
Jeśli instalujesz Python Gateway w systemie operacyjnym, najpierw (bez względu na system operacyjny) musisz zainstalować Pythona. W tym celu:
- . Zaleca się zainstalowanie Pythona w katalogu domyślnym.
- Zainstaluj moduł
dill:pip install dill. - Pobierz kod ObjectScript (tzn.
do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) do dowolnego obszaru z produktami. W przypadku, gdy chcesz, aby istniejący obszar wspierał produkty, wykonaj:write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1). - Umieść do folderu
binTwojego instancji InterSystems IRIS. Plik biblioteki powinien być dostępny pod ścieżką, zwracaną przezwrite ##class(isc.py.Callout).GetLib().
Windows
- Upewnij się, że zmienna środowiskowa
PYTHONHOMEwskazuje na Pythona 3.6.7. - Upewnij się, że zmienna środowiskowa
ŚCIEŻKAzawiera zmiennąPYTHONHOME(lub katalog, na który wskazuje).
Linux (Debian/Ubuntu)
- Sprawdź, czy zmienna środowiskowa
ŚCIEŻKAzawiera/usr/libi/usr/lib/x86_64-linux-gnu. Użyj pliku/etc/environmentdo ustawienia zmiennych środowiskowych. - W przypadku błędów
undefined symbol: _Py_TrueStructustaw konfiguracjęPythonLib. Ponadto w jest sekcja Rozwiązywanie problemów.
Mac
- Obecnie wspierana jest tylko wersja Pythona 3.6.7 z . Sprawdź zmienną
ŚCIEŻKA.
Jeśli zmieniałeś zmienne środowiskowe, zrestartuj swój produkt InterSystems.
Docker
Użycie kontenerów ma wiele zalet:
- Przenośność
- Efektywność
- Izolacja
- Lekkość
- Niezmienność
Zapoznaj się z tą aby uzyskać więcej informacji na temat korzystania z Dockera z produktami InterSystems.
Wszystkie wersje Python Gateway na ten moment są oparte na kontenerach 2019.4.
Gotowy obraz
Wykonaj: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latest, aby pobrać i uruchomić Python Gateway z InterSystems IRIS Community Edition. To wszystko.
Stwórz swój własny obraz
Aby zbudować obraz Docker, wykonaj w głównym katalogu repozytorium: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
Domyślnie obraz jest budowany na podstawie obrazu store/intersystems/iris-community:2019.4.0.383.0, jednak możesz to zmienić, ustawiając zmienną IMAGE.
Aby zbudować z InterSystems IRIS, wykonaj: `docker build —build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 —force-rm —tag intersystemscommunity/irispy:latest`.
Następnie możesz uruchomić obraz docker:
docker run -d
-p 52773:52773
-v //:/mount
--name irispy
intersystemscommunity/irispy:latest
--key /mount/iris.keyJeśli używasz obrazu opartego na InterSystems IRIS Community Edition, możesz nie podawać klucza.
Komentarze
- Proces testowy
isc.py.test.Processzachowuje szereg obrazów w katalogu tymczasowym. Możesz chcieć zmienić tę ścieżkę na zamontowany katalog. W tym celu edytuj ustawienieWorkingDirokazując zamontowany katalog. - Aby uzyskać dostęp do terminala, wykonaj:
docker exec -it irispy sh. - Dostęp do Portalu Zarządzania Systemem za pomocą loginu
SuperUser/SYS. - Aby zatrzymać kontener, wykonaj:
docker stop irispy && docker rm --force irispy.
Sprawdzenie instalacji
Po zainstalowaniu Python Gateway warto sprawdzić, czy działa. Wykonaj ten kod w terminalu InterSystems IRIS:
set sc = ##class(isc.py.Callout).Setup()
set sc = ##class(isc.py.Main).SimpleString("x='HELLO'", "x", , .var).
write varW wyniku powinno być wyświetlone HELLO — wartość zmiennej Python x. Jeśli zwrócony status sc jest błędem lub var pusty, sprawdź .
API
Python Gateway jest zainstalowany i upewniłeś się, że działa. Czas zacząć go używać!
Głównym interfejsem do Python jest isc.py.Main. Oferuje on następujące grupy metod (wszystkie zwracają %Status):
- Wykonanie kodu
- Przesyłanie danych
- Pomocnicze
Wykonanie kodu
Te metody pozwalają na wykonanie dowolnego kodu Python.
SimpleString
SimpleString — to główna metoda. Przyjmuje 4 opcjonalne argumenty:
code— ciąg kodu do wykonania. Znak końca linii:$c(10).returnVariable— nazwa zmiennej do zwrócenia.serialization— jak serializować.returnVariable. 0 — string (domyślnie), 1 — repr.result— ByRef odniesienie do zmiennej, do której zapisywana jest wartośćreturnVariable.
Powyżej wykonaliśmy:
set sc = ##class(isc.py.Main).SimpleString("x='HELLO'", "x", , .var).W tym przykładzie przypisujemy zmiennej Python x wartość Cześć i chcemy zwrócić wartość zmiennej Python x do zmiennej ObjectScript var.
ExecuteCode
ExecuteCode jest bezpieczniejszą i mniej ograniczoną alternatywą SimpleString.
Ciągi w platformie InterSystems IRIS są ograniczone do 3 641 144 znaków, a jeśli chcesz wykonać dłuższy fragment kodu, musisz używać strumieni.
Przyjmuje dwa argumenty:
code— ciąg lub strumień kodu Python do wykonania.variable— (opcjonalnie) przypisuje wynik wykonaniacodetej zmiennej Python.
Przykład użycia:
set sc = ##class(isc.py.Main).ExecuteCode("2*3", "y").W tym przykładzie mnożymy 2 przez 3 i zapisujemy wynik w zmiennej Python y.
Przesyłanie danych
Przekazuj dane do Pythona i z powrotem.
Python -> InterSystems IRIS
Są 4 sposoby na uzyskanie wartości zmiennej Python w InterSystems IRIS, w zależności od potrzebnej serializacji:
Stringdla prostych typów danych i debugowania.Reprdo przechowywania prostych obiektów i debugowania.YANGdo łatwej manipulacji danymi po stronie InterSystems IRIS.Pickledo zapisywania obiektów.
Te metody pozwalają uzyskać zmienne z Pythona w postaci ciągu lub strumieni.
GetVariable(variable, serialization, .stream, useString)— otrzymaćserializationzmiennejvariabledostream. JeśliuseStringrówna 1, a serializacja jest umieszczona w ciągu, to zwracany jest ciąg, a nie strumień.GetVariableJson(variable, .stream, useString)— otrzymać serializację JSON zmiennej.GetVariablePickle(variable, .stream, useString, useDill)- otrzymać serializację Pickle (lub Dill) zmiennej.
Spróbujmy uzyskać naszą zmienną y.
set sc = ##class(isc.py.Main).GetVariable("y", , .val, 1)
write val
>6InterSystems IRIS -> Python
Ładujemy dane z InterSystems IRIS do Pythona.
ExecuteQuery(query, variable, type, namespace)— tworzy zbiór danych (pandasdataframelublist) z zapytania sql i przypisuje go do zmiennej Pythonavariable. Paczkaisc.pymusi być dostępna w obszarzenamespace— tam będzie wykonywane zapytanie.ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace)— ładuje dane globalneglobalz subskryptustartdoenddo Pythona jako zmienna typutype:list, lub pandasdataframe. Opis opcjonalnych argumentówmaskujilabelsdostępny w dokumentacji klasy i repozytorium .ExecuteClass(class, variable, type, start, end, properties, namespace)— ładuje dane klasyclassz idstartdoenddo Pythona jako zmienna typutype:list, lub pandasdataframe.properties— lista (separator — przecinek) właściwości klasy, które należy załadować do zbioru danych. Obsługiwane są maski*i?. Domyślnie —*(wszystkie właściwości). Właśćność%%CLASSNAMEjest ignorowane.ExecuteTable(table, variable, type, start, end, properties, namespace)— ładuje dane tabelistółz idstartdoenddo Pythona.
ExecuteQuery — jest uniwersalne (jakiekolwiek poprawne zapytanie SQL zostanie przekazane do Pythona). Jednakże, ExecuteGlobal i jego opakowania ExecuteClass i ExecuteTable działają z pewnymi ograniczeniami. Są znacznie szybsze (3-5 razy szybsze od sterownika ODBC i 20 razy szybsze ExecuteQuery). Dodatkowe informacje w .
Wszystkie te metody wspierają transfer danych z dowolnego obszaru. Paczka isc.py musi być dostępna w docelowym obszarze.
ExecuteQuery
ExecuteQuery(request, variable, type, namespace) — przekazywanie wyników dowolnego poprawnego zapytania SQL do Pythona. To najwolniejsza metoda transferu danych. Używaj jej, jeśli ExecuteGlobal i jego opakowania są niedostępne.
Argumenty:
query— zapytanie sql.variable— nazwa zmiennej Pythona, do której zapisywane są dane.type—listlub Pandasdataframe.namespace— obszar, w którym będzie wykonywane zapytanie.
ExecuteGlobal
ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) — przekazywanie globalnej w Pythona.
Argumenty:
global— nazwa globalnej bez^variable— nazwa zmiennej Pythona, do której zapisywane są dane.type—listlub Pandasdataframe.start— pierwszy subskrypt globalny. Obowiązkowy%Integer.end— ostatni subskrypt globalny. Obowiązkowy%Integer.maskuj— maska wartości globalnej. Maska może być krótsza niż liczba pól w globalnej (w takim przypadku pola na końcu zostaną pominięte). Jak sformatować maskę:+przekazać wartość taką, jaka jest.-pominąć wartość.b— Typ logiczny (0—Fałsz, wszystko inne —Prawda).d— Data (z $horolog, na Windows od 1970, na Linux od 1900).t— Czas ($horolog, sekundy po północy).m— Znacznik czasu (ciąg w formacie ROK-MIESIĄC-DZIEŃ GODZINA:MINUTA:SEKUNDA).
labels— %Lista nazw kolumn. Pierwszy element — nazwa subskryptu.namespace— obszar, w którym będzie wykonywane zapytanie.
ExecuteClass
Owijka nad ExecuteGlobal. Na podstawie definicji klasy przygotowuje wywołanie ExecuteGlobal i wykonuje je.
ExecuteClass(class, variable, type, start, end, properties, namespace) — przekazywanie danych klasy w Pythonie.
Argumenty:
class— nazwa klasyvariable— nazwa zmiennej Pythona, do której zapisywane są dane.type—listlub Pandasdataframe.start— początkowy Id.end— końcowy Idproperties— lista (separator — przecinek) właściwości klasy, które należy załadować do zbioru danych. Obsługiwane są maski*i?. Domyślnie —*(wszystkie właściwości). Właśćność%%CLASSNAMEjest ignorowane.namespace— obszar, w którym będzie wykonywane zapytanie.
Wszystkie właściwości są przekazywane dokładnie tak, jak są, z wyjątkiem właściwości typów %Date, %Czas, %Boolean i %ZnacznikCzasu — są konwertowane na odpowiadające klasy Pythona.
ExecuteTable
Owijka nad ExecuteClass. Przekazuje nazwę tabeli w nazwę klasy i wywołuje ExecuteClass. Podpis:
ExecuteTable(table, variable, type, start, end, properties, namespace) — przekazywanie danych tabeli w Pythonie.
Argumenty:
stół— nazwa tabeli.
Wszystkie pozostałe argumenty są przekazywane dokładnie tak, jak są doExecuteClass.
Notatki
ExecuteGlobal,ExecuteClassiExecuteTabledziałają z taką samą szybkością.ExecuteGlobal20 razy szybciej niżExecuteQueryna dużych zbiorach danych (czas przesyłu wynosi więcej niż >0.01 sekundy).ExecuteGlobal,ExecuteClassiExecuteTabledziałają na globalach o danej strukturze:^global(key) = $lb(prop1, prop2, ..., propN)gdziekey— liczba całkowita.- Dla
ExecuteGlobal,ExecuteClassiExecuteTableobsługiwany zakres wartości%Dateodpowiada zakresowimktimei zależy od systemu operacyjnego (: 1970-01-01, 1900-01-01, ). Użyj%ZnacznikCzasudo przekazywania danych poza tym zakresem lub użyj pandas dataframe, ponieważ to ograniczenie dotyczy tylko listy. - Dla
ExecuteGlobal,ExecuteClassiExecuteTablewszystkie argumenty oprócz źródła danych (globalnej, klasy lub tabeli) oraz zmiennej są opcjonalne.
Przykłady
Klasa testowa zawiera metodę, która demonstruje wszystkie sposoby przekazywania danych:
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"
// Ogólne argumenty
set variable = "df"
set type = "dataframe"
set start = 1
set end = $g(^isc.py.test.PersonD, start)
// Sposób 0: ExecuteGlobal bez argumentów
set sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 0, type)
// Sposób 1: ExecuteGlobal z argumentami
// Podczas przekazywania globalnych nazw pól definiujemy je ręcznie
// globalKey - nazwa subskryptu
set labels = $lb("globalKey", "Name", "DOB", "TS", "RandomTime", "AgeYears", "AgeDecimal", "AgeDouble", "Bool")
// maska zawiera o 1 element mniej niż etykiety, ponieważ "globalKey" - nazwa subskryptu
// Pomijamy %%CLASSNAME
set mask = "-+dmt+++b"
set sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 1, type, start, end, mask, labels)
// Sposób 2: ExecuteClass
set sc = ##class(isc.py.Main).ExecuteClass(class, variable _ 2, type, start, end)
// Sposób 3: ExecuteTable
set sc = ##class(isc.py.Main).ExecuteTable(table, variable _ 3, type, start, end)
// Sposób 4: ExecuteTable
set sc = ##class(isc.py.Main).ExecuteQuery(query, variable _ 4, type)Wywołaj metodę do ##class(isc.py.test.Person).Test() aby zobaczyć, jak działają wszystkie metody przesyłania danych.
Metody pomocnicze
GetVariableInfo(variable, serialization, .defined, .type, .length)— uzyskaj informacje o zmiennej: czy jest zdefiniowana, klasa i długość serializacji.GetVariableDefined(variable, .defined)— czy zmienna jest zdefiniowana.GetVariableType(variable, .type)— uzyskaj klasę zmiennej.GetStatus()— uzyskaj i usuń ostatni wyjątek po stronie Pythona.GetModuleInfo(module, .imported, .alias)— uzyskaj zmienną modułu i status importu.GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments)— uzyskaj informacje o funkcji.
Interoperacyjność
Nauczyłeś się wywoływać Python Gateway z terminala, teraz zaczniemy go używać w produkcji. Podstawą interakcji z Pythonem w tym trybie jest isc.py.ens.Operation. Umożliwia nam:
- Wykonywanie kodu w Pythonie
- Zapis/Przywracanie kontekstu Pythona
- Ładowanie i pobieranie danych z Pythona
W zasadzie operacja w Pythonie to opakowanie wokół isc.py.Main. Operacja isc.py.ens.Operation umożliwia interakcję z procesem Pythona z produkcji InterSystems IRIS. Obsługiwanych jest pięć zapytań:
isc.py.msg.ExecutionRequestdo wykonywania kodu w Pythonie. Zwracaisc.py.msg.ExecutionResponsez wynikiem wykonania i wartościami żądanych zmiennych.isc.py.msg.StreamExecutionRequestdo wykonywania kodu w Pythonie. Zwracaisc.py.msg.StreamExecutionResponsewynikiem wykonania i wartościami żądanych zmiennych. Odpowiednikisc.py.msg.ExecutionRequest, ale przyjmuje i zwraca strumienie zamiast łańcuchów.isc.py.msg.QueryRequestdo przekazywania wyniku wykonania zapytania SQL. ZwracaEns.Response.isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequestdo przekazywania danych globalnych/klas/tabllic. ZwracaEns.Response.isc.py.msg.SaveRequestdo zapisywania kontekstu Pythona. ZwracaEns.StringResponsez identyfikatorem kontekstu.isc.py.msg.RestoreRequestdo przywracania kontekstu Pythona.Ponadto,
isc.py.ens.Operationma dwie opcje:Initializer— wybór klasy, która implementuje interfejsisc.py.init.Abstract. Może być używana do ładowania funkcji, modułów, klas itp. Wykonywana jest jeden raz przy uruchamianiu procesu.PythonLib— (tylko dla systemu Linux) jeśli widzisz błędy podczas ładowania, ustaw jej wartość nalibpython3.6m.solub nawet na pełną ścieżkę do biblioteki Pythona.
Tworzenie procesów biznesowych
Dostępne są dwie klasy, które ułatwiają rozwój procesów biznesowych:
isc.py.ens.ProcessUtilsumożliwia wyodrębnianie adnotacji z aktywności z podstawianiem zmiennych.isc.py.util.BPEmulatorumożliwia łatwe testowanie procesów biznesowych w Pythonie. Może wykonywać proces biznesowy (części w języku Python) w bieżącym procesie.
Podstawianie zmiennych.
Wszystkie procesy biznesowe dziedziczące po isc.py.ens.ProcessUtils, mogą używać metody GetAnnotation(name) do uzyskiwania wartości adnotacji aktywności według jej nazwy. Adnotacja aktywności może zawierać zmienne, które będą obliczane po stronie InterSystems IRIS przed przekazaniem do Pythona. Oto składnia podstawiania zmiennych:
${class:method:arg1:...:argN}— wywołaj metodę#{expr}— wykonaj kod w języku ObjectScript.
Przykład dostępny w testowym procesie biznesowym isc.py.test.Process, na przykład w aktywności Macierz korelacji: Graf: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). W tym przykładzie:
#{process.WorkDirectory}zwraca właściwość WorkDirectory obiektuprocess, będącego instancją klasyisc.py.test.Processtj. bieżącego procesu biznesowego.${%PopulateUtils:Integer:1:100}wywołuje metodęIntegerklasy%PopulateUtils, przekazując argumenty1i100, zwracając losową liczbę całkowitą w zakresie1...100.
Testowy proces biznesowy
Testowy produkt i testowy proces biznesowy są dostępne domyślnie jako część bramy Python Gateway. Aby z nich skorzystać:
- W terminalu systemu operacyjnego wykonaj:
pip install pandas matplotlib seaborn. - W terminalu InterSystems IRIS wykonaj:
do ##class(isc.py.test.CannibalizationData).Import()aby załadować dane testowe. - Uruchom produkt
isc.py.test.Production. - Wyślij zapytanie typu
Ens.Requestdoisc.py.test.Process.
Zobaczmy, jak wszystko to działa razem. Otwórz isc.py.test.Process w edytorze BPL:

Wykonanie kodu
Najważniejsze wywołanie — wykonanie kodu Pythona:

Używa zapytania isc.py.msg.ExecutionRequest, oto jego właściwości:
Kod— kod Pythona.SeparateLines— czy rozdzielać kod na wiersze do wykonania.$c(10)(n) jest używane do dzielenia linii. Proszę zauważyć, że NIE zaleca się przetwarzania wiadomości całkowicie na raz, ta funkcja jest przeznaczona tylko do przetwarzaniadefi innych podobnych wyrażeń wieloliniowych. Domyślnie0.Zmienne— lista zmiennych oddzielonych przecinkami, które zostaną dodane do odpowiedzi.Serializacja— Jak serializować zmienne, które chcemy zwrócić. Opcje:Str,Repr,YANG,PickleiDill, domyślnieStr.
W naszym przypadku tylko ustawiamy atrybut Kod, więc wszystkie pozostałe atrybuty używają wartości domyślnych. Ustawiamy to wywołując process.GetAnnotation("Import pandas"), który w czasie wykonywania zwraca adnotację po wykonaniu podstawień zmiennych. Ostatecznie kod import pandas as pd zostanie przekazany do Pythona. GetAnnotation może być przydatna do uzyskiwania wieloliniowych skryptów Pythona, ale nie ma żadnych ograniczeń co do tej metody pobierania kodu. Możesz ustawić atrybut Kod w dowolny sposób, który Ci odpowiada.
Uzyskiwanie zmiennych
Kolejne interesujące wywołanie przy użyciu isc.py.msg.ExecutionRequest — Macierz korelacji: Tabularna:

Oblicza Macierz Korelacji po stronie Pythona i wyciąga zmienną corrmat z powrotem do InterSystems IRIS w formacie JSON, poprzez ustawienie atrybutów zapytania:
Zmienne:"corrmat"Serializacja:"JSON"
Możemy zobaczyć wyniki w Visual Trace:

I jeśli ta wartość będzie potrzebna w BP, można ją uzyskać w ten sposób: callresponse.Variables.GetAt("corrmat").
Przesyłanie danych
Następnie omówimy przesyłanie danych z InterSystems IRIS do Pythona, wszystkie żądania przesyłania danych wdrażają interfejs isc.py.msg.DataRequest, który zapewnia następujące atrybuty:
Variable— zmienna Pythona, do której zapisywane są dane.Type— typ zmiennej:dataframe(pandas dataframe) lublist.Namespace— obszar, z którego uzyskujemy dane. Pakietisc.pymusi być dostępny w tym obszarze. Może to być obszar bez wsparcia produktów.
Na podstawie tego interfejsu zrealizowano 4 klasy żądań:
isc.py.msg.QueryRequest— ustaw atrybutQuerydo przesyłania zapytania SQL.isc.py.msg.ClassRequest— ustaw atrybutClassdo przesyłania danych klasy.isc.py.msg.TableRequest— ustaw atrybutTabelado przesyłania danych tabeli.isc.py.msg.GlobalRequest— ustaw atrybutGlobaldo przesyłania danych globalnych.
W procesie testowym sprawdź aktywność RAW, gdzie isc.py.msg.QueryRequest pokazane w akcji.

Zapis / przywracanie kontekstu Pythona
Na koniec możemy zapisać kontekst Pythona w InterSystems IRIS, aby to zrobić, wyślemy isc.py.msg.SaveRequest z argumentami:
Mask— Zapisane zostaną tylko zmienne, które odpowiadają masce. Obsługiwane*i?. Przykład:"Data*, Figure?". Domyślnie*.MaxLength— Maksymalna długość przechowywanej zmiennej. Jeśli serializacja zmiennej będzie dłuższa, zostanie zignorowana. Ustaw 0, aby uzyskać zmienne dowolnej długości. Domyślnie$$$MaxStringLength.Nazwa— Nazwa kontekstu (opcjonalnie).Opis— Opis kontekstu (opcjonalnie).
Zwraca Ens.StringResponse z Id przechowywanego kontekstu. W procesie testowym sprawdź aktywność Zapisz kontekst.
Odpowiednie zapytanie isc.py.msg.RestoreRequest ładuje kontekst z InterSystems IRIS do Pythona:
ContextId— identyfikator kontekstu.Wyczyść— wyczyść kontekst przed przywróceniem.
Jupyter Notebook
— to aplikacja internetowa z otwartym źródłem, która pozwala tworzyć notatniki zawierające kod, wizualizacje i tekst oraz publikować je. Python Gateway pozwala przeglądać i edytować procesy BPL w formie Jupyter Notebook. Zwróć uwagę, że obecnie używany jest standardowy executor Pythona 3.
To rozszerzenie zakłada, że adnotacje zawierają kod Pythona i wykorzystują nazwy aktywności jako wcześniejsze nagłówki. Teraz możliwe jest rozwijanie procesów biznesowych PythonGateway w Jupyter Notebook. Oto co jest możliwe:
- Tworzyć nowe procesy biznesowe
- Usuwać procesy biznesowe
- Tworzyć nowe aktywności
- Modyfikować aktywności
- Usuwać aktywności
Oto . I kilka zrzutów ekranu:
Eksplorator procesów

Edytor procesu

Instalacja
- Potrzebujesz InterSystems IRIS 2019.2+.
- Zainstaluj PythonGateway v0.8+ (wymagane tylko
isc.py.util.Jupyter,isc.py.util.JupyterCheckpointsiisc.py.ens.ProcessUtils). - Zaktualizuj kod ObjectScript z repozytorium.
- Wykonaj
do ##class(isc.py.util.Jupyter).Install()i postępuj zgodnie z instrukcjami.
.
Wnioski
MLToolkit to zestaw narzędzi mający na celu integrację modeli i środowiska transakcyjnego, aby stworzone modele można było łatwo wykorzystywać bezpośrednio w twoich procesach biznesowych. Python Gateway jest częścią MLToolkit i zapewnia integrację z językiem Python, umożliwiając orkiestrację wszelkich algorytmów uczenia maszynowego tworzonych w języku Python (główne środowisko dla wielu naukowców danych), a także korzystanie z licznych gotowych bibliotek do szybkiego tworzenia adaptacyjnych, zrobotyzowanych rozwiązań analitycznych AI/ML na platformie InterSystems IRIS.
Linki
MLToolkit
Grupa użytkowników MLToolkit to prywatne repozytorium GitHub, utworzone w ramach korporacyjnej organizacji GitHub InterSystems. Jest skierowana do zewnętrznych użytkowników, którzy instalują, badają lub już korzystają z komponentów MLToolkit, w tym Python Gateway. W grupie dostępny jest szereg zrealizowanych przypadków (z kodem źródłowym i danymi testowymi) w obszarach marketingu, produkcji, medycyny i wielu innych branż. Aby dołączyć do grupy użytkowników ML Toolkit, prosimy o wysłanie krótkiej wiadomości e-mail na adres: i podanie w swoim liście następujących danych:
- Nazwa użytkownika GitHub
- Organizacja (w której pracujesz lub się uczysz)
- Stanowisko (twoje rzeczywiste stanowisko w organizacji, lub "Student", lub "Freelancer").
- Kraj
Osobom, które przeczytały artykuł i są zainteresowane możliwościami InterSystems IRIS jako platformy dla rozwoju lub hostingowych mechanizmów sztucznej inteligencji i uczenia maszynowego, proponujemy omówienie możliwych scenariuszy, które mogą być interesujące dla twojego przedsiębiorstwa. Chętnie przeanalizujemy potrzeby twojego przedsiębiorstwa i wspólnie określimy plan działania; adres e-mail naszej ekspertnej grupy AI/ML to: .
Źródło: habr.com
