Ten artykuł dotyczy Python Gateway, projektu społeczności open source dla platformy danych InterSystems IRIS. Projekt ten pozwala na orkiestrację dowolnych algorytmów uczenia maszynowego stworzonych w Pythonie (głównym środowisku dla wielu Data Scientist), wykorzystanie licznych gotowych bibliotek do szybkiego tworzenia adaptacyjnych, zrobotyzowanych rozwiązań analitycznych AI/ML na platformie InterSystems IRIS. W tym artykule pokażę, w jaki sposób InterSystems IRIS może koordynować procesy Pythona, przeprowadzać wydajną komunikację dwukierunkową i tworzyć inteligentne procesy biznesowe.
plan
- Wstęp.
- Narzędzia.
- Instalacja.
- API.
- Interoperacyjność.
- Notatnik Jupytera.
- Wnioski.
- Spinki do mankietów.
- M.L.Toolkit.
Wprowadzenie
Python to język programowania wysokiego poziomu ogólnego przeznaczenia, którego celem jest poprawa produktywności programistów i czytelność kodu. W tej serii artykułów opowiem o możliwościach wykorzystania języka Python na platformie InterSystems IRIS, natomiast głównym tematem tego artykułu jest wykorzystanie Pythona jako języka do tworzenia i stosowania modeli uczenia maszynowego.
Uczenie maszynowe (ML) to klasa metod sztucznej inteligencji, których cechą charakterystyczną nie jest bezpośrednie rozwiązanie problemu, ale uczenie się w procesie rozwiązywania wielu podobnych problemów.
Algorytmy i modele uczenia maszynowego stają się coraz bardziej powszechne. Powodów jest wiele, ale wszystko sprowadza się do dostępności, prostoty i osiągania praktycznych rezultatów. Czy klastrowanie, a nawet modelowanie sieci neuronowych to nowa technologia?
Oczywiście, że nie, ale w dzisiejszych czasach nie ma potrzeby pisania setek tysięcy linii kodu, aby uruchomić jeden model, a koszty tworzenia i korzystania z modeli są coraz mniejsze.
Narzędzia ewoluują - chociaż nie mamy narzędzi AI/ML w pełni zorientowanych na GUI, widoczny jest również postęp, jaki zaobserwowaliśmy w przypadku wielu innych klas systemów informatycznych, takich jak BI (od pisania kodu po używanie frameworków i konfigurowalnych rozwiązań zorientowanych na GUI) w narzędziach do tworzenia AI/ML. Etap pisania kodu mamy już za sobą i dziś używamy frameworków do budowania i uczenia modeli.
Inne ulepszenia, takie jak możliwość propagowania wstępnie wytrenowanego modelu, w którym użytkownik końcowy musi po prostu dokończyć trenowanie modelu na swoich określonych danych, również ułatwiają rozpoczęcie stosowania uczenia maszynowego. Te postępy znacznie ułatwiają naukę uczenia maszynowego, zarówno profesjonalistom, jak i firmom jako całości.
Z drugiej strony gromadzimy coraz więcej danych. Dzięki ujednoliconej platformie danych, takiej jak InterSystems IRIS, wszystkie te informacje można natychmiast przygotować i wykorzystać jako dane wejściowe do modeli uczenia maszynowego.
Wraz z przejściem do chmury uruchamianie projektów AI/ML jest łatwiejsze niż kiedykolwiek. Możemy konsumować tylko te zasoby, których potrzebujemy. Co więcej, dzięki równoległości oferowanej przez platformy chmurowe, możemy zaoszczędzić stracony czas.
Ale co z wynikami? Tutaj sprawy się komplikują. Istnieje wiele narzędzi do budowania modeli, które omówię dalej. Zbudowanie dobrego modelu nie jest łatwe, ale co dalej? Nietrywialnym zadaniem jest również czerpanie korzyści z wykorzystania modelu przez biznes. Źródłem problemu jest oddzielenie obciążeń analitycznych i transakcyjnych oraz modeli danych. Kiedy trenujemy model, zwykle robimy to na danych historycznych. Ale miejsce dla skonstruowanego modelu jest w transakcyjnym przetwarzaniu danych. Jaki jest pożytek z najlepszego modelu wykrywania nieuczciwych transakcji, jeśli uruchamiamy go raz dziennie? Oszuści już dawno wyszli z pieniędzmi. Musimy wyszkolić model na danych historycznych, ale musimy również zastosować go w czasie rzeczywistym na nowych przychodzących danych, aby nasze procesy biznesowe mogły działać zgodnie z przewidywaniami modelu.
ML Toolkit to zestaw narzędzi, który właśnie to robi: łączy modele i środowisko transakcyjne, dzięki czemu modele, które budujesz, można łatwo wykorzystać bezpośrednio w 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 Pythona, z których będziemy korzystać później.
Technologia
- Python to interpretowany język programowania wysokiego poziomu ogólnego przeznaczenia. Główną zaletą języka jest duża biblioteka bibliotek matematycznych, ML i AI. Podobnie jak ObjectScript, jest to język zorientowany obiektowo, ale wszystko jest definiowane dynamicznie, a nie statycznie. Także wszystko jest przedmiotem. Późniejsze artykuły zakładają przelotną znajomość języka. Jeśli chcesz zacząć się uczyć, polecam zacząć od .
- Do naszych następnych ćwiczeń zestaw .
- IDE: Używam , ale generalnie . Jeśli używasz Atelier, dostępna jest wtyczka Eclipse dla programistów Pythona. Jeśli używasz VS Code, istnieje rozszerzenie dla Pythona.
- Notatnik: zamiast IDE możesz pisać i udostępniać swoje skrypty w notatnikach online. Najpopularniejszym z nich jest .
biblioteki
Oto (częściowa) lista bibliotek uczenia maszynowego:
- — podstawowy pakiet do dokładnych obliczeń.
- — wydajne struktury danych i narzędzia do analizy danych.
- - Tworzenie wykresów.
- - wizualizacja danych w oparciu o matplotlib.
- — metody uczenia maszynowego.
- — algorytmy uczenia maszynowego w ramach metodologii Gradient Boosting.
- — NLP.
- - sieci neuronowe.
- to platforma do tworzenia modeli uczenia maszynowego.
- to platforma do tworzenia modeli uczenia maszynowego skupiona na Pythonie.
- - PMML z różnych modeli.
Technologie AI/ML sprawiają, że biznes jest bardziej wydajny i elastyczny. Co więcej, obecnie technologie te stają się coraz łatwiejsze do opracowania i wdrożenia. Zacznij poznawać technologie AI/ML i dowiedz się, jak mogą one pomóc Twojej organizacji w rozwoju.
Instalacja
Istnieje kilka sposobów instalacji i używania Python Gateway:
- ОС
- Windows
- Linux
- Mac
- Doker
- Użyj obrazu z DockerHub
- Stwórz swój własny wizerunek
Niezależnie od metody instalacji będziesz potrzebować kodu źródłowego. Jedynym miejscem do pobrania kodu jest . Zawiera przetestowane stabilne wersje, po prostu pobierz najnowszą. W tej chwili jest to 0.8, ale z czasem pojawią się nowe. Nie klonuj/pobieraj repozytorium, pobierz najnowszą wersję.
ОС
Jeśli instalujesz Python Gateway w systemie operacyjnym, najpierw (niezależnie od systemu operacyjnego) musisz zainstalować Pythona. Dla tego:
- . Zaleca się zainstalowanie Pythona w domyślnym katalogu.
- Zainstaluj moduł
dill:pip install dill. - Pobierz kod ObjectScript (tj.
do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) do dowolnego obszaru z produktami. Jeśli chcesz, aby istniejący obszar obsługiwał produkty, uruchom:write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1). - Miejsce do folderu
binTwojej instancji InterSystems IRIS. Plik biblioteki musi być dostępny w ścieżce zwróconej przezwrite ##class(isc.py.Callout).GetLib().
Windows
- Upewnij się, że zmienna środowiskowa to
PYTHONHOMEwskazuje na Pythona 3.6.7. - Upewnij się, że zmienna środowiskowa systemu to
PATHzawiera zmiennąPYTHONHOME(lub katalogu, na który wskazuje).
Linux (Debian/Ubuntu)
- Sprawdź, czy zmienna środowiskowa jest
PATHzawiera/usr/libи/usr/lib/x86_64-linux-gnu. Użyj pliku/etc/environmentustawić zmienne środowiskowe. - W przypadku błędów
undefined symbol: _Py_TrueStructustaw ustawieniePythonLib. także w znajduje się sekcja Rozwiązywanie problemów.
Mac
- Obecnie obsługiwany jest tylko python 3.6.7 . Sprawdź zmienną
PATH.
Jeśli zmieniłeś zmienne środowiskowe, zrestartuj produkt InterSystems.
Doker
Korzystanie z kontenerów ma szereg zalet:
- Ruchliwość
- Skuteczność
- Izolacja
- Lekkość
- Niezmienność
Sprawdź to aby uzyskać więcej informacji na temat używania platformy Docker z produktami InterSystems.
Wszystkie kompilacje Python Gateway są obecnie oparte na kontenerach. 2019.4.
Gotowy obraz
Uruchomić: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latestaby pobrać i uruchomić Python Gateway z InterSystems IRIS Community Edition. To wszystko.
Stwórz swój własny wizerunek
Aby zbudować obraz dokera, uruchom w katalogu głównym repozytorium: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
Domyślnie obraz jest tworzony na podstawie obrazu store/intersystems/iris-community:2019.4.0.383.0, jednak możesz to zmienić, ustawiając zmienną IMAGE.
Aby skompilować z InterSystems IRIS, uruchom: `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 dokera:
docker run -d
-p 52773:52773
-v /<HOST-DIR-WITH-iris.key>/:/mount
--name irispy
intersystemscommunity/irispy:latest
--key /mount/iris.keyJeśli używasz obrazu opartego na InterSystems IRIS Community Edition, możesz pominąć klucz.
Komentarze
- Proces testowy
isc.py.test.Processzapisuje kilka obrazów w katalogu tymczasowym. Możesz zmienić tę ścieżkę na zamontowany katalog. W tym celu edytuj ustawienieWorkingDirokreślając zamontowany katalog. - Aby uzyskać dostęp do terminala, uruchom:
docker exec -it irispy sh. - Dostęp do portalu zarządzania systemem po zalogowaniu
SuperUser/SYS. - Aby zatrzymać kontener, uruchom:
docker stop irispy && docker rm --force irispy.
Sprawdzenie instalacji
Po zainstalowaniu Python Gateway warto sprawdzić, czy działa. Uruchom 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 varWynik powinien być HELLO - wartość zmiennej Pythona x. Jeśli status zwrotu sc jest błędem lub var pusty, sprawdź .
API
Python Gateway jest zainstalowany i zweryfikowałeś, że działa. Czas zacząć go używać!
Głównym interfejsem Pythona jest isc.py.Main. Oferuje następujące grupy metod (wszystkie zwracają %Status):
- Wykonanie kodu
- Transfer danych
- Pomocniczy
Wykonanie kodu
Te metody pozwalają na wykonanie dowolnego kodu Pythona.
Prosty ciąg
SimpleString jest główną metodą. Wymaga 4 opcjonalnych argumentów:
codeto linia kodu do wykonania. Znak wysuwu wiersza:$c(10).returnVariablejest nazwą zmiennej do zwrócenia.serialization- jak serializowaćreturnVariable. 0 - ciąg znaków (domyślnie), 1 - repr.result- ByRef odniesienie do zmiennej, w której zapisana jest wartośćreturnVariable.
Powyżej wykonaliśmy:
set sc = ##class(isc.py.Main).SimpleString("x='HELLO'", "x", , .var).W tym przykładzie przypisujemy do zmiennej Pythona x значение Hello i chcesz zwrócić wartość zmiennej Pythona x do zmiennej ObjectScript var.
Wykonaj kod
ExecuteCode to bezpieczniejsza i mniej restrykcyjna alternatywa SimpleString.
Linie w platformie InterSystems IRIS są ograniczone do 3 641 144 znaków, a jeśli chcesz wykonać dłuższy fragment kodu, musisz użyć strumieni.
Przyjmuje dwa argumenty:
code— ciąg znaków lub strumień kodu Pythona do wykonania.variable- (opcjonalnie) przypisuje wynik wykonaniacodeta zmienna Pythona.
Zaproponuj użycie:
set sc = ##class(isc.py.Main).ExecuteCode("2*3", "y").W tym przykładzie mnożymy 2 przez 3 i zapisujemy wynik w zmiennej Pythona y.
Transfer danych
Przekazuj dane do i z Pythona.
Python -> InterSystems IRIS
Istnieją 4 sposoby uzyskania wartości zmiennej Pythona w InterSystems IRIS, w zależności od potrzebnej serializacji:
Stringdla prostych typów danych i debugowania.Reprdo przechowywania prostych obiektów i debugowania.JSONdo łatwej manipulacji danymi po stronie InterSystems IRIS.Pickledo ratowania obiektów.
Te metody pozwalają odbierać zmienne z Pythona jako ciąg znaków lub jako strumienie.
GetVariable(variable, serialization, .stream, useString)- Dostawaćserializationzmiennyvariableвstream. JeśliuseStringwynosi 1, a serializacja jest umieszczana w łańcuchu, zwracany jest ciąg, a nie strumień.GetVariableJson(variable, .stream, useString)— uzyskaj serializację JSON zmiennej.GetVariablePickle(variable, .stream, useString, useDill)- Uzyskaj serializację zmiennej Pickle (lub Dill).
Spróbujmy pobrać naszą zmienną y.
set sc = ##class(isc.py.Main).GetVariable("y", , .val, 1)
write val
>6InterSystems IRIS -> Python
Ładowanie danych z InterSystems IRIS do Pythona.
ExecuteQuery(query, variable, type, namespace)- tworzy zestaw danych (pandasdataframelublist) z zapytania sql i ustaw go na zmienną pythonvariable. Plastikowa torbaisc.pypowinny być dostępne w okolicynamespace- żądanie zostanie tam wykonane.ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace)- ładuje dane globalneglobalz indeksu dolnegostartdoendw Pythonie jako zmienną typutype:listlub pandydataframe. Opis opcjonalnych argumentówmaskorazlabelsdostępne w dokumentacji klasy i repozytorium .ExecuteClass(class, variable, type, start, end, properties, namespace)- ładuje dane klasyclassz identyfikatorastartdoendw Pythonie jako zmienną typutype:listlub pandydataframe.properties— lista (oddzielona przecinkami) właściwości klasy, które mają zostać załadowane do zbioru danych. Obsługiwane maski*и?. Domyślny -*(wszystkie właściwości). Nieruchomość%%CLASSNAMEjest ignorowany.ExecuteTable(table, variable, type, start, end, properties, namespace)- ładuje dane tabelitablez identyfikatorastartdoendw Pythonie.
ExecuteQuery - uniwersalne (każde poprawne zapytanie SQL zostanie przekazane do Pythona). Jednakże, ExecuteGlobal i jego okłady ExecuteClass и ExecuteTable pracować z wieloma ograniczeniami. Są znacznie szybsze (3-5 razy szybsze niż sterownik ODBC i 20 razy szybsze niż ExecuteQuery). Więcej informacji w .
Wszystkie te metody wspierają transfer danych z dowolnego obszaru. Plastikowa torba isc.py muszą być dostępne na obszarze docelowym.
WykonajZapytanie
ExecuteQuery(request, variable, type, namespace) - przekazywanie wyników dowolnego poprawnego zapytania SQL do Pythona. Jest to najwolniejsza metoda przesyłania danych. Użyj go, jeśli ExecuteGlobal a jego opakowania nie są dostępne.
Argumenty:
query- zapytanie sql.variable- nazwa zmiennej Pythona, w której zapisane są dane.type-listlub pandydataframe.namespace- obszar, w którym żądanie będzie realizowane.
Wykonaj globalnie
ExecuteGlobal(global, variable, type, start, end, mask, labelels, namespace) - przekazanie global do Pythona.
Argumenty:
globalto nazwa globalnego bez^variable- nazwa zmiennej Pythona, w której zapisane są dane.type-listlub pandydataframe.start— pierwszy indeks dolny global. Koniecznie%Integer.endjest ostatnim indeksem dolnym global. Koniecznie%Integer.mask— maska wartości globalnych. Maska może być krótsza niż liczba pól w globalnym (w takim przypadku pola na końcu zostaną pominięte). Jak sformatować maskę:+przekazać wartość bez zmian.-pomiń wartość.b— typ boolowski (0-False, cała reszta -True).d— Data (z $horolog, w systemie Windows od 1970 r., w systemie Linux od 1900 r.).t- Czas ($horolog, sekundy po północy).m— Znacznik czasu (ciąg formatu ROK-MIESIĄC-DZIEŃ GODZINA:MINUTA:SEKUNDA).
labels- %Lista nazw kolumn. Pierwszym elementem jest nazwa indeksu dolnego.namespace- obszar, w którym żądanie będzie realizowane.
Wykonaj klasę
zawijać ExecuteGlobal. Przygotowuje wywołanie na podstawie definicji klasy ExecuteGlobal i dzwoni do niego.
ExecuteClass(class, variable, type, start, end, properties, namespace) - przekazywanie danych klasy do Pythona.
Argumenty:
class- Nazwa klasyvariable- nazwa zmiennej Pythona, w której zapisane są dane.type-listlub pandydataframe.start— identyfikator startowy.end- ostateczny identyfikatorproperties— lista (oddzielona przecinkami) właściwości klasy, które mają zostać załadowane do zbioru danych. Obsługiwane maski*и?. Domyślny -*(wszystkie właściwości). Nieruchomość%%CLASSNAMEjest ignorowany.namespace- obszar, w którym żądanie będzie realizowane.
Wszystkie właściwości są przekazywane bez zmian, z wyjątkiem właściwości typu %Date, %Time, %Boolean и %TimeStamp - są konwertowane na odpowiednie klasy Pythona.
WykonajTabelę
zawijać ExecuteClass. Tłumaczy nazwę tabeli na nazwę klasy i wywołania ExecuteClass. Podpis:
ExecuteTable(table, variable, type, start, end, properties, namespace) - przekazywanie danych z tabeli do Pythona.
Argumenty:
table- Nazwa tabeli.
Wszystkie inne argumenty są przekazywane bez zmian.ExecuteClass.
Uwagi
ExecuteGlobal,ExecuteClassиExecuteTabledziałać równie szybko.ExecuteGlobal20 razy szybciej niżExecuteQueryna dużych zbiorach danych (czas przesyłania >0.01 sekundy).ExecuteGlobal,ExecuteClassиExecuteTablepracuj nad globalami o tej strukturze:^global(key) = $lb(prop1, prop2, ..., propN)gdziekeyjest liczbą całkowitą.- dla
ExecuteGlobal,ExecuteClassиExecuteTableobsługiwany zakres wartości%Dateodpowiada zakresowimktimei zależy od systemu operacyjnego: 1970-01-01, 1900-01-01, ). Używać%TimeStampaby przekazać dane poza ten zakres lub użyć ramki danych pandy jako to ograniczenie dotyczy tylko listy. - dla
ExecuteGlobal,ExecuteClassиExecuteTablewszystkie argumenty z wyjątkiem źródła danych (globalne, klasa lub tabela) i zmiennej są opcjonalne.
Примеры
klasa testowa zawiera metodę demonstrującą wszystkie opcje przesyłania 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"
// Общие аргументы
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)metoda wywołania 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)- uzyskać informacje o zmiennej: czy jest zdefiniowana, klasa i długość serializacji.GetVariableDefined(variable, .defined)- czy zmienna jest zdefiniowana.GetVariableType(variable, .type)- pobierz klasę zmiennej.GetStatus()- pobierz i usuń ostatni wyjątek po stronie Pythona.GetModuleInfo(module, .imported, .alias)— pobierz zmienną modułu i status importu.GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments)- uzyskać informacje o funkcji.
Interoperacyjność
Nauczyłeś się wywoływać Python Gateway z terminala, teraz zacznijmy używać go w produkcji. Podstawą interakcji z Pythonem w tym trybie jest isc.py.ens.Operation. Pozwala nam:
- Wykonaj kod Pythona
- Zapisz/przywróć kontekst Pythona
- Ładuj i odbieraj dane z Pythona
Zasadniczo operacja w Pythonie jest opakowaniem isc.py.Main. Operacja isc.py.ens.Operation umożliwia interakcję z procesem Python z produktów InterSystems IRIS. Obsługiwanych jest pięć żądań:
isc.py.msg.ExecutionRequestwykonać kod Pythona. zwrotyisc.py.msg.ExecutionResponsez wynikiem wykonania i wartościami żądanych zmiennych.isc.py.msg.StreamExecutionRequestwykonać kod Pythona. zwrotyisc.py.msg.StreamExecutionResponsewynik wykonania i wartości żądanych zmiennych. analogisc.py.msg.ExecutionRequest, ale akceptuje i zwraca strumienie zamiast łańcuchów.isc.py.msg.QueryRequestdo przekazania wyniku wykonania zapytania SQL. zwrotyEns.Response.isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequestprzekazać dane globalne/klasowe/tabelowe. zwrotyEns.Response.isc.py.msg.SaveRequestaby zapisać kontekst Pythona. zwrotyEns.StringResponsez identyfikatorem kontekstu.isc.py.msg.RestoreRequestaby przywrócić kontekst Pythona.RљSЂRѕRјRμ S, RѕRіRѕ,
isc.py.ens.Operationma dwa ustawienia:Initializer- wybór klasy implementującej interfejsisc.py.init.Abstract. Może być używany do ładowania funkcji, modułów, klas i tym podobnych. Jest wykonywany raz, gdy proces się rozpoczyna.PythonLib- (Tylko Linux) jeśli widzisz błędy rozruchu, ustaw jego wartość nalibpython3.6m.solub nawet w pełnej ścieżce do biblioteki Pythona.
Tworzenie procesów biznesowych
Dostępne są dwie klasy ułatwiające rozwój procesów biznesowych:
isc.py.ens.ProcessUtilspozwala na wyodrębnianie adnotacji z czynności z podstawieniem zmiennych.isc.py.util.BPEmulatorułatwia testowanie procesów biznesowych za pomocą Pythona. Może wykonać proces biznesowy (części Pythona) w bieżącym procesie.
Podstawianie zmiennych
Wszystkie procesy biznesowe odziedziczone z isc.py.ens.ProcessUtils, może skorzystać z metody GetAnnotation(name) aby uzyskać wartość adnotacji działania według jej nazwy. Adnotacja działania może zawierać zmienne, które zostaną ocenione po stronie InterSystems IRIS przed przekazaniem do Pythona. Oto składnia zastępowania zmiennych:
${class:method:arg1:...:argN}- wywołanie metody#{expr}- wykonać kod w języku ObjectScript.
Przykład jest dostępny w testowym procesie biznesowym isc.py.test.Processna przykład w aktywności Correlation Matrix: Graph: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). W tym przykładzie:
#{process.WorkDirectory}zwraca właściwość WorkDirectory obiektuprocess, która jest instancją klasyisc.py.test.Processte. bieżący proces biznesowy.${%PopulateUtils:Integer:1:100}wywołuje metodęIntegerklasa%PopulateUtils, przekazując argumenty1и100, zwracając losową liczbę całkowitą z zakresu1...100.
Przetestuj proces biznesowy
Produkcja testowa i testowy proces biznesowy są domyślnie dostępne jako część Python Gateway. Aby z nich skorzystać:
- W terminalu systemu operacyjnego uruchom:
pip install pandas matplotlib seaborn. - W terminalu InterSystems IRIS uruchom:
do ##class(isc.py.test.CannibalizationData).Import()wypełnić dane testowe. - Uruchom produkty
isc.py.test.Production. - Wyślij typ żądania
Ens.Requestвisc.py.test.Process.
Zobaczmy, jak to wszystko razem działa. otwarty isc.py.test.Process w edytorze BPL:

Wykonanie kodu
Najważniejszym wywołaniem jest wykonanie kodu Pythona:

Żądanie wykorzystane isc.py.msg.ExecutionRequest, oto jego właściwości:
Code— Kod Pythona.SeparateLines- czy podzielić kod na linie do wykonania.$c(10)(n) służy do oddzielania łańcuchów. Pamiętaj, że NIE zaleca się przetwarzania całej wiadomości na raz, ta funkcja służy tylko do przetwarzaniadefi podobne wyrażenia wielowierszowe. Domyślny0.Variablesto oddzielona przecinkami lista zmiennych, które zostaną dodane do odpowiedzi.Serialization- Jak serializować zmienne, które chcemy zwrócić. Opcje:Str,Repr,JSON,PickleиDill, domyślnyStr.
W naszym przypadku ustawiamy tylko właściwość Code, tak aby wszystkie inne właściwości używały swoich wartości domyślnych. Ustaliliśmy to dzwoniąc process.GetAnnotation("Import pandas"), która w czasie wykonywania zwraca adnotację po wykonaniu podstawienia zmiennej. Wreszcie kod import pandas as pd zostanie przekazany do Pythona. GetAnnotation może być przydatne do uzyskiwania wielowierszowych skryptów Pythona, ale nie ma ograniczeń co do tego sposobu uzyskiwania kodu. Możesz ustawić właściwość Code w dowolny dogodny dla Ciebie sposób.
Pobieranie zmiennych
Kolejne ciekawe wyzwanie z użyciem isc.py.msg.ExecutionRequest - Correlation Matrix: Tabular:

Oblicza macierz korelacji po stronie Pythona i wyodrębnia zmienną corrmat z powrotem do InterSystems IRIS w formacie JSON ustawiając właściwości żądania:
Variables:"corrmat"Serialization:"JSON"
Wyniki możemy zobaczyć w Visual Trace:

A jeśli potrzebujemy tej wartości w BP, można ją uzyskać w następujący sposób: callresponse.Variables.GetAt("corrmat").
Transfer danych
Następnie porozmawiajmy o przesyłaniu danych z InterSystems IRIS do Pythona, wszystkie żądania przesyłania danych implementują interfejs isc.py.msg.DataRequest, który zapewnia następujące właściwości:
Variablejest zmienną Pythona, do której zapisywane są dane.Type- typ zmiennej:dataframe(ramka danych pandy) lublist.Namespace- obszar, z którego otrzymujemy dane. Plastikowa torbaisc.pypowinny być dostępne w tym obszarze. Może to być obszar bez wsparcia produktu.
W oparciu o ten interfejs realizowane są 4 klasy żądań:
isc.py.msg.QueryRequest- ustawić właściwośćQuerywysłać zapytanie SQL.isc.py.msg.ClassRequest- ustawić właściwośćClassprzekazać dane klasy.isc.py.msg.TableRequest- ustawić właściwośćTableprzekazać dane tabeli.isc.py.msg.GlobalRequest- ustawić właściwośćGlobaldo globalnego przesyłania danych.
W procesie testowym spójrz na aktywność RAWGdzie isc.py.msg.QueryRequest pokazane w akcji.

Zapisywanie/przywracanie kontekstu Pythona
Wreszcie możemy przechowywać kontekst Pythona w InterSystems IRIS, aby to zrobić, wyślij isc.py.msg.SaveRequest z argumentami:
Mask— Zapisywane są tylko zmienne, które spełniają wymagania maski. Utrzymany*и?. Przykład:"Data*, Figure?". Domyślny*.MaxLength— Maksymalna długość przechowywanej zmiennej. Jeśli serializacja zmiennej jest dłuższa, zostanie zignorowana. Ustaw na 0, aby uzyskać zmienne o dowolnej długości. Domyślny$$$MaxStringLength.Name— Nazwa kontekstu (opcjonalnie).Description— Opis kontekstu (nieobowiązkowo).
zwroty Ens.StringResponse с Id zapisany kontekst. W procesie testowym spójrz na aktywność Save Context.
Powiązane żądanie isc.py.msg.RestoreRequest ładuje kontekst z InterSystems IRIS do Pythona:
ContextIdjest identyfikatorem kontekstu.Clear— wyczyść kontekst przed przywróceniem.
Notebook Jupyter
to aplikacja internetowa typu open source, która umożliwia tworzenie i publikowanie notatników zawierających kod, wizualizacje i tekst. Python Gateway umożliwia przeglądanie i edytowanie procesów BPL jako Jupyter Notebook. Zauważ, że obecnie używany jest zwykły executor Pythona 3.
To rozszerzenie zakłada, że adnotacje zawierają kod Pythona i używają nazw działań jako poprzedzających tytułów. Obecnie możliwe jest tworzenie procesów biznesowych PythonGateway w Jupyter Notebook. Oto, co jest możliwe:
- Twórz nowe procesy biznesowe
- Usuń procesy biznesowe
- Twórz nowe działania
- Zmień czynności
- Usuń działania
tutaj jest . I kilka zrzutów ekranu:
Eksplorator procesów

Edytor procesów

Instalacja
- Będziesz potrzebował InterSystems IRIS 2019.2+.
- Zainstaluj PythonGateway v0.8+ (wymaga tylko
isc.py.util.Jupyter,isc.py.util.JupyterCheckpointsиisc.py.ens.ProcessUtils). - Zaktualizuj kod ObjectScript z repozytorium.
- Wykonać
do ##class(isc.py.util.Jupyter).Install()i postępuj zgodnie z instrukcjami.
.
odkrycia
MLToolkit to zestaw narzędzi, który ma na celu połączenie modeli i środowiska transakcyjnego tak, aby zbudowane modele można było łatwo wykorzystać bezpośrednio w Twoich procesach biznesowych. Python Gateway jest częścią MLToolkit i zapewnia integrację z językiem Python, umożliwiając orkiestrację dowolnych algorytmów uczenia maszynowego stworzonych w Pythonie (głównym środowisku dla wielu Data Scientist), korzystanie z wielu gotowych bibliotek do szybkiego tworzenia adaptacyjnej, zrobotyzowanej analitycznej AI / Rozwiązania ML na platformie InterSystems IRIS.
referencje
MLTookit
Grupa użytkowników MLToolkit to prywatne repozytorium GitHub utworzone w ramach korporacyjnej organizacji GitHub firmy InterSystems. Jest skierowany do użytkowników zewnętrznych, którzy instalują, uczą się lub już używają komponentów MLToolkit, w tym Python Gateway. Grupa ma na swoim koncie szereg wdrożonych przypadków (z kodem źródłowym i danymi testowymi) z dziedzin marketingu, produkcji, medycyny i wielu innych branż. Aby dołączyć do grupy użytkowników ML Toolkit, wyślij krótką wiadomość e-mail na następujący adres: i umieść w swoim liście następujące informacje:
- Nazwa użytkownika GitHub
- Organizacja (pracujesz lub studiujesz)
- Stanowisko (Twoja rzeczywista pozycja w organizacji, „Student” lub „Niezależny”).
- kraj
Tych, którzy przeczytali artykuł i są zainteresowani InterSystems IRIS jako platformą do tworzenia lub hostowania mechanizmów sztucznej inteligencji i uczenia maszynowego, zapraszamy do omówienia możliwych scenariuszy interesujących Państwa przedsiębiorstwo. Chętnie przeanalizujemy potrzeby Twojego przedsiębiorstwa i wspólnie ustalimy plan działania; kontaktowy adres e-mail naszej grupy ekspertów AI/ML – .
Źródło: www.habr.com
