Dit artikel is gewijd aan Python Gateway — een community-project met open source voor het InterSystems IRIS dataplatform. Dit project maakt het mogelijk om verschillende machine learning-algoritmen, ontwikkeld in Python (de belangrijkste omgeving voor veel data scientists), te orkestreren, en gebruik te maken van talloze kant-en-klare bibliotheken voor het snel creëren van adaptieve, geautomatiseerde analytische AI/ML-oplossingen op het InterSystems IRIS-platform. In dit artikel laat ik zien hoe InterSystems IRIS processen in Python kan orkestreren, effectief bidirectionele gegevensoverdracht kan uitvoeren en intelligente bedrijfsprocessen kan creëren.
Plan
- Inleiding.
- Toolkit.
- Installatie.
- API.
- Interoperabiliteit.
- Jupyter Notebook.
- VictoriaMetrics en Thanos pakken vergelijkbare problemen aan, maar op verschillende manieren:
- Links.
- MLToolkit.
Inleiding
Python is een high-level programmeertaal voor algemene doeleinden, gericht op het verbeteren van de productiviteit van de ontwikkelaar en de leesbaarheid van de code. In deze serie artikelen bespreek ik de mogelijkheden van Python op het InterSystems IRIS-platform, waarbij de focus in dit artikel ligt op het gebruik van Python als taal voor het creëren en toepassen van machine learning-modellen.
Machine learning (ML) is een klasse van kunstmatige intelligentiemethoden waarbij niet direct een probleem wordt opgelost, maar waarin geleerd wordt door het oplossen van een reeks vergelijkbare problemen.
Machine learning-algoritmen en -modellen worden steeds vaker gebruikt. De redenen hiervoor zijn talrijk, maar alles draait om toegankelijkheid, eenvoud en het behalen van praktische resultaten. Is clustering of zelfs neuraal netwerkmodellering een nieuwe technologie?
Zeker niet, maar tegenwoordig is het niet meer nodig om honderden duizenden regels code te schrijven om één model te laten draaien, en de kosten voor het ontwikkelen en toepassen van modellen blijven dalen.
De tools ontwikkelen zich — terwijl we geen volledig GUI-georiënteerde AI/ML-tools hebben, zien we dezelfde vooruitgang zoals bij veel andere klassen informatiesystemen, bijvoorbeeld BI (van codering naar gebruik van frameworks en GUI-georiënteerde configureerbare oplossingen), ook optreden in de tools voor het creëren van AI/ML. We zijn al voorbij de fase van coderen en gebruiken nu frameworks voor het bouwen en trainen van modellen.
Andere verbeteringen, zoals de mogelijkheid om een vooraf getraind model te verspreiden, waarbij de eindgebruiker gewoon het model verder moet trainen op zijn specifieke gegevens, vergemakkelijken ook de toepassing van machine learning. Deze vooruitgangen maken het leren van machine learning aanzienlijk eenvoudiger, zowel voor specialisten als voor bedrijven in het algemeen.
Aan de andere kant verzamelen we steeds meer gegevens. Dankzij een uniforme dataplatform, zoals InterSystems IRIS, kan al deze informatie onmiddellijk worden voorbereid en gebruikt als invoergegevens voor machine learning modellen.
Met de overgang naar de cloud wordt het lanceren van AI/ML-projecten gemakkelijker dan ooit. We kunnen alleen de bronnen gebruiken die we nodig hebben. Bovendien kunnen we dankzij de parallelisering die cloudplatforms bieden tijd besparen.
Maar hoe zit het met de resultaten? Hier wordt het ingewikkelder. Er zijn veel tools voor het bouwen van modellen, waarover ik verderop zal vertellen. Een goed model bouwen is niet eenvoudig, maar wat dan? Winst halen uit het gebruik van het model door bedrijven is ook geen triviale taak. De kern van het probleem ligt in de scheiding van analytische en transactionele belasting en gegevensmodellen. Wanneer we een model trainen, doen we dat meestal op historische gegevens. Maar de plek voor het gebouwde model is in transactionele gegevensverwerking. Wat heb je aan het beste model voor het detecteren van frauduleuze transacties, als we het eens per dag draaien? Fraudeurs zijn al lang weg met het geld. We moeten het model trainen op historische gegevens, maar we moeten het ook toepassen in real-time op nieuwe binnenkomende gegevens, zodat onze bedrijfsprocessen kunnen handelen volgens de voorspellingen die door het model zijn gedaan.
ML Toolkit is een set tools, die specifiek is ontworpen om dit te bereiken: het combineren van modellen met de transactionele omgeving, zodat de gebouwde modellen eenvoudig in uw bedrijfsprocessen kunnen worden gebruikt. Python Gateway is een onderdeel van de ML Toolkit en biedt integratie met de programmeertaal Python (evenals R Gateway, dat als onderdeel van de ML Toolkit integratie met de taal R biedt).
Toolkit
Voordat we verder gaan, wil ik een paar tools en bibliotheken voor Python beschrijven die we later gaan gebruiken.
Technologieën
- Python is een geïnterpreteerde, high-level programmeertaal voor algemene doeleinden. Het belangrijkste voordeel van de taal is de uitgebreide bibliotheek van wiskundige, ML- en AI-bibliotheken. Net als ObjectScript is het een objectgeoriënteerde taal, maar alles wordt dynamisch en niet statisch gedefinieerd. Ook is alles een object. Latere artikelen veronderstellen een vluchtige kennismaking met de taal. Als je wilt beginnen met leren, raad ik je aan te starten met .
- Installeer voor onze volgende oefeningen .
- IDE: Ik gebruik , maar in het algemeen zijn er . Als je Atelier gebruikt, is er een Eclipse-plugin voor Python-ontwikkelaars. Als je VS Code gebruikt, is er een extensie voor Python.
- Notebook: in plaats van een IDE kun je je scripts schrijven en delen in online notebooks. De populairste hiervan is .
Bibliotheken
Hier is een (onvolledige) lijst van bibliotheken voor machine learning:
- — de fundamentele pakket voor numerieke berekeningen.
- — hoge prestaties datatypes en data-analyse tools.
- — grafieken maken.
- — datavisualisatie gebaseerd op matplotlib.
- — machine learning methoden.
- — machine learning algoritmen binnen de gradient boosting methodologie.
- — NLP.
- — neurale netwerken.
- — platform voor het bouwen van machine learning modellen.
- — platform voor het creëren van machine learning modellen, gericht op Python.
- — PMML van verschillende modellen.
AI/ML-technologieën maken bedrijven efficiënter en flexibeler. Bovendien worden deze technologieën vandaag de dag eenvoudiger in ontwikkeling en implementatie. Begin met het bestuderen van AI/ML-technologieën en hoe ze uw organisatie kunnen helpen groeien.
Installatie
Er zijn verschillende manieren om de Python Gateway te installeren en te gebruiken:
- het besturingssysteem
- Windows
- Linux
- Mac
- Docker
- Gebruik een afbeelding van DockerHub
- Maak je eigen afbeelding
Ongeacht de installatiemethode, heb je de broncode nodig. De enige plek om de code te downloaden is . Deze bevat goed geteste stabiele releases, neem gewoon de laatste. Op dit moment is dit 0.8, maar in de loop van de tijd komen er nieuwe versies. Kloneer/ download de repository niet, download de laatste release.
het besturingssysteem
Als u de Python Gateway op een besturingssysteem installeert, moet u eerst (ongeacht het besturingssysteem) Python installeren. Hiervoor:
- . Het is aanbevolen om Python in de standaarddirectory te installeren.
- Installeer de module
dill:pip install dill. - Download de ObjectScript-code (d.w.z.
do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) in een willekeurige namespace met producten. Als u wilt dat een bestaande namespace producten ondersteunt, voert u uit:write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1). - Plaats kopiëren naar de map
binvan uw InterSystems IRIS-instantie. Het bibliotheekbestand moet toegankelijk zijn via het pad dat wordt geretourneerd doorwrite ##class(isc.py.Callout).GetLib().
Windows
- Zorg ervoor dat de omgevingsvariabele
PYTHONHOMEverwijst naar Python 3.6.7. - Zorg ervoor dat de systeemomgevingsvariabele
PADde variabele bevatPYTHONHOME(of de directory waarop deze verwijst).
Linux (Debian/Ubuntu)
- Controleer of de omgevingsvariabele
PADde afbeelding van de tekst en andere scherpe details — fijne lijnen en diagrammen — evenals contrasterende afbeeldingen./usr/liben/usr/lib/x86_64-linux-gnu. Gebruik het bestand/etc/environmentom omgevingsvariabelen in te stellen. - In geval van fouten
undefined symbol: _Py_TrueStructstel de instellingPythonLib. Ook in is er een sectie Probleemoplossing.
Mac
- Momenteel wordt alleen Python 3.6.7 van . Controleer de variabele
PAD.
Als u omgevingsvariabelen heeft gewijzigd, start dan uw InterSystems-product opnieuw op.
Docker
Het gebruik van containers heeft verschillende voordelen:
- Haalbaarheid
- Efficiëntie
- Isolatie
- Lichtgewicht
- Immutabiliteit
Neem contact op met deze voor meer gedetailleerde informatie over het gebruik van Docker met InterSystems-producten.
Alle builds van Python Gateway zijn momenteel gebaseerd op containers. 2019.4.
Klaar beeld
Voer uit: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latest, om de Python Gateway met InterSystems IRIS Community Edition te downloaden en te starten. Dat is alles.
Maak je eigen afbeelding
Om het docker-image te bouwen, voert u het volgende uit in de hoofdmap van de repository: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
Standaard wordt het image gebouwd op basis van het image store/intersystems/iris-community:2019.4.0.383.0, maar u kunt dit wijzigen door de variabele IMAGE.
Voor het bouwen vanuit InterSystems IRIS voert u uit: `docker build —build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 —force-rm —tag intersystemscommunity/irispy:latest`.
Daarna kunt u het docker-image starten:
docker run -d
-p 52773:52773
-v //:/mount
--name irispy
intersystemscommunity/irispy:latest
--key /mount/iris.keyAls u een image gebruikt die is gebaseerd op InterSystems IRIS Community Edition, hoeft u de sleutel mogelijk niet op te geven.
Opmerkingen
- Testproces
isc.py.test.ProcessBewaar een reeks afbeeldingen in de tijdelijke map. Mogelijk wilt u dit pad wijzigen naar een gemonteerde map. Om dit te doen, bewerk de instellingWorkingDirdoor de gemonteerde directory op te geven. - Om toegang te krijgen tot de terminal, voer uit:
docker exec -it irispy sh. - Toegang tot het Systeem Beheerportaal via inloggen
SuperUser/SYS. - Om de container te stoppen, voer uit:
docker stop irispy && docker rm --force irispy.
Controleer de installatie
Nadat u de Python Gateway hebt geïnstalleerd, is het goed om te controleren of deze werkt. Voer deze code in de terminal van InterSystems IRIS uit:
set sc = ##class(isc.py.Callout).Setup()
set sc = ##class(isc.py.Main).SimpleString("x='HELLO'", "x", , .var).
write varHet resultaat moet zijn HELLO — de waarde van de Python-variabele x. Als de teruggegeven status sc een fout is of var leeg is, controleer .
API
Python Gateway is geïnstalleerd en u heeft gecontroleerd dat deze werkt. Het is tijd om ermee aan de slag te gaan!
De belangrijkste interface naar Python is isc.py.Main. Deze biedt de volgende groepen methoden (alle retourneren %Status):
- Code uitvoeren
- Gegevensoverdracht
- Hulpmiddelen
Code uitvoeren
Deze methoden stellen u in staat willekeurige Python-code uit te voeren.
SimpleString
SimpleString — is de belangrijkste methode. Het accepteert 4 optionele argumenten:
code— de code string die moet worden uitgevoerd. Nieuwe regel teken:$c(10).returnVariable— de naam van de variabele voor terug te geven.serialisatie— hoe te serialiseren.returnVariable. 0 — string (standaard), 1 — repr.resultaat— ByRef gezegd naar de variabele waarin de waarde wordt geschreven.returnVariable.
Hierboven hebben we uitgevoerd:
set sc = ##class(isc.py.Main).SimpleString("x='HELLO'", "x", , .var).In dit voorbeeld wijzen we de Python-variabele toe x de waarde Hallo en willen we de waarde van de Python-variabele teruggeven x aan de ObjectScript-variabele. var.
ExecuteCode
ExecuteCode is een veiligere en minder beperkte alternatieve optie. SimpleString.
Strings in het InterSystems IRIS-platform zijn beperkt tot 3.641.144 tekens, en als u een langere stuk code wilt uitvoeren, moet u streams gebruiken.
Er worden twee argumenten geaccepteerd:
code— de string of stream van Python code om uit te voeren.variable— (optioneel) wijs het resultaat van de uitvoering toecodeaan deze Python-variabele.
Voorbeeld van gebruik:
set sc = ##class(isc.py.Main).ExecuteCode("2*3", "y").In dit voorbeeld vermenigvuldigen we 2 met 3 en schrijven we het resultaat naar de Python-variabele. y.
Gegevensoverdracht
Gegevens doorgeven naar Python en terug.
Python -> InterSystems IRIS
Er zijn 4 manieren om de waarde van een Python-variabele in InterSystems IRIS te krijgen, afhankelijk van de serialisatie die u nodig heeft:
Stringvoor eenvoudige gegevenstypen en debugging.Reprvoor het opslaan van eenvoudige objecten en debugging.of een ander formaat.voor gemakkelijke manipulatie van gegevens aan de kant van InterSystems IRIS.Picklevoor het bewaren van objecten.
Deze methoden maken het mogelijk om variabelen vanuit Python te verkrijgen in de vorm van een string of streams.
GetVariable(variable, serialization, .stream, useString)— verkrijgenserialisatievariabelevariableinstream. AlsuseStringis gelijk aan 1 en de serialisatie wordt in een string geplaatst, dan wordt een string in plaats van een stream teruggegeven.GetVariableJson(variable, .stream, useString)— verkrijg JSON-serialisatie van de variabele.GetVariablePickle(variable, .stream, useString, useDill)— verkrijg Pickle (of Dill) serialisatie van de variabele.
Laten we proberen onze variabele te verkrijgen y.
set sc = ##class(isc.py.Main).GetVariable("y", , .val, 1)
write val
>6InterSystems IRIS -> Python
Laden van gegevens uit InterSystems IRIS in Python.
ExecuteQuery(query, variable, type, namespace)— creëert een gegevensset (pandasdataframeoflijst) uit een sql-query en stelt deze in als een Python-variabele.variableHet pakketisc.pymoet beschikbaar zijn in het gebiednamespace— daar zal de query uitgevoerd worden.ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace)— laadt gegevens van een globalglobalvan een subscrip.starttotendin Python als een variabele van het typetype:lijst, of pandasdataframe. Beschrijving van optionele argumentenmaskenlabelsbeschikbaar in de documentatie van de klasse en de repository .ExecuteClass(class, variable, type, start, end, properties, namespace)— laadt gegevens van de klasseklassevan idstarttotendin Python als een variabele van het typetype:lijst, of pandasdataframe.properties— lijst (gescheiden door een komma) van klasse-eigenschappen die in de gegevensset moeten worden geladen. Maskers worden ondersteund.*en?. Standaard —*(alle eigenschappen). Eigenschap%%CLASSNAMEwordt genegeerd.ExecuteTable(table, variable, type, start, end, properties, namespace)— laadt gegevens van de tabeltablevan idstarttotendin Python.
ExecuteQuery — is universeel (elke geldige SQL-query wordt doorgegeven aan Python). Echter, ExecuteGlobal en zijn wrappers ExecuteClass en ExecuteTable werken met een aantal beperkingen. Ze zijn veel sneller (3-5 keer sneller dan ODBC-driver en 20 keer sneller ExecuteQuery). Verdere informatie in .
Al deze methoden ondersteunen gegevensoverdracht vanuit elke ruimte. Het pakket isc.py moet beschikbaar zijn in de doelruimte.
ExecuteQuery
ExecuteQuery(request, variable, type, namespace) — overdracht van de resultaten van elke geldige SQL-query naar Python. Dit is de langzaamste methode voor gegevensoverdracht. Gebruik dit als ExecuteGlobal en zijn wrappers niet beschikbaar zijn.
Argumenten:
query— sql-query.variable— naam van de Python-variabele waarin gegevens worden opgeslagen.type—lijstof Pandasdataframe.namespace— gebied waarin de query zal worden uitgevoerd.
ExecuteGlobal
ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) — overdracht van de global naar Python.
Argumenten:
global— naam van de global zonder^variable— naam van de Python-variabele waarin gegevens worden opgeslagen.type—lijstof Pandasdataframe.start— eerste subscrip van de global. Verplicht%Integer.end— laatste subscrip van de global. Verplicht%Integer.mask— waarde mask van de globale. Het mask kan korter zijn dan het aantal velden in de globale (in dat geval worden de velden aan het einde overgeslagen). Hoe het mask te formatteren:+geef de waarde door zoals deze is.-sla de waarde over.b— Logisch type (0—False, alles andere is —Waar).We verwijderen de huidige partitie om een nieuwe aan te maken voor in totaal 50 GB.— Datum (vanaf $horolog, op Windows vanaf 1970, op Linux vanaf 1900).t— Tijd ($horolog, seconden na middernacht).m— Tijdstempel (string in het formaat JAAR-MAAND-DAG UUR:MINUUT:SECOND).
labels— %Lijst van kolomnamen. Het eerste element is de naam van de subscript.namespace— gebied waarin de query zal worden uitgevoerd.
ExecuteClass
Wrapper voor ExecuteGlobal. Bereidt de aanroep voor op basis van de klasse-definitie ExecuteGlobal en roept deze aan.
ExecuteClass(class, variable, type, start, end, properties, namespace) — gegevensoverdracht van de klasse in Python.
Argumenten:
klasse— naam van de klassevariable— naam van de Python-variabele waarin gegevens worden opgeslagen.type—lijstof Pandasdataframe.start— start Id.end— eind Idproperties— lijst (gescheiden door een komma) van klasse-eigenschappen die in de gegevensset moeten worden geladen. Maskers worden ondersteund.*en?. Standaard —*(alle eigenschappen). Eigenschap%%CLASSNAMEwordt genegeerd.namespace— gebied waarin de query zal worden uitgevoerd.
Alle eigenschappen worden doorgegeven zoals ze zijn, behalve de eigenschappen van types te, %Tijd, %Boolean en %Tijdstempel — deze worden geconverteerd naar de bijbehorende Python-klassen.
ExecuteTable
Wrapper voor ExecuteClass. Zet de tabelnaam om naar de klassenaam en roept deze aan ExecuteClass. Handtekening:
ExecuteTable(table, variable, type, start, end, properties, namespace) — gegevensoverdracht van de tabel naar Python.
Argumenten:
table— naam van de tabel.
Alle andere argumenten worden doorgegeven zoals ze zijn inExecuteClass.
Opmerkingen
ExecuteGlobal,ExecuteClassenExecuteTablewerken even snel.ExecuteGlobal20 keer sneller danExecuteQueryop grote datasets (overdrachtsduur meer dan >0.01 seconde).ExecuteGlobal,ExecuteClassenExecuteTablewerken op globalen met deze structuur:^global(key) = $lb(prop1, prop2, ..., propN)waarkey— geheel getal.- Voor
ExecuteGlobal,ExecuteClassenExecuteTableondersteunde waarde rangetekomt overeen met het bereikmktimeen afhankelijk van het besturingssysteem (: 1970-01-01, 1900-01-01, ). Gebruik%Tijdstempelvoor gegevensoverdracht buiten dit bereik of gebruik een pandas dataframe, aangezien deze beperking alleen voor de lijst geldt. - Voor
ExecuteGlobal,ExecuteClassenExecuteTablealle argumenten behalve de gegevensbron (globale, klasse of tabel) en de variabele zijn optioneel.
Voorbeelden
Testklasse bevat een methode die alle opties voor gegevensoverdracht demonstreert:
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"
// Algemene argumenten
set variable = "df"
set type = "dataframe"
set start = 1
set end = $g(^isc.py.test.PersonD, start)
// Methode 0: ExecuteGlobal zonder argumenten
set sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 0, type)
// Methode 1: ExecuteGlobal met argumenten
// Bij het doorgeven van de global worden de veldnamen handmatig ingesteld
// globalKey - naam van de subscript
set labels = $lb("globalKey", "Naam", "Geboortedatum", "TS", "RandomTime", "LeeftijdJaren", "LeeftijdDecimaal", "LeeftijdDubbel", "Bool")
// mask bevat 1 element minder dan labels omdat "globalKey" de naam van de subscript is
// We slaan %%CLASSNAME over
set mask = "-+dmt+++b"
set sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 1, type, start, end, mask, labels)
// Methode 2: ExecuteClass
set sc = ##class(isc.py.Main).ExecuteClass(class, variable _ 2, type, start, end)
// Methode 3: ExecuteTable
set sc = ##class(isc.py.Main).ExecuteTable(table, variable _ 3, type, start, end)
// Methode 4: ExecuteTable
set sc = ##class(isc.py.Main).ExecuteQuery(query, variable _ 4, type)Roep de methode aan do ##class(isc.py.test.Person).Test() om te zien hoe alle datatransfermethoden werken.
Hulpmethoden
GetVariableInfo(variable, serialization, .defined, .type, .length)— verkrijg informatie over de variabele: of deze is gedefinieerd, klasse en lengte van serialisatie.GetVariableDefined(variable, .defined)— is de variabele gedefinieerd.GetVariableType(variable, .type)— verkrijg de klasse van de variabele.GetStatus()— verkrijg en verwijder de laatste uitzondering aan de Python-zijde.GetModuleInfo(module, .imported, .alias)— verkrijg de variabele van de module en de importstatus.GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments)— verkrijg informatie over de functie.
Interoperabiliteit
U heeft geleerd om de Python Gateway vanuit de terminal aan te roepen, laten we het nu in de productie gebruiken. De basis van de interactie met Python in deze modus is isc.py.ens.Operation. Dit stelt ons in staat om:
- Python-code uit te voeren
- Python-context op te slaan/herstellen
- gegevens uit Python te laden en te ontvangen
In principe is de Python-operatie een wrapper rond isc.py.Main. De operatie isc.py.ens.Operation biedt de mogelijkheid tot interactie met het Python-proces vanuit InterSystems IRIS-producties. Vijf verzoeken worden ondersteund:
isc.py.msg.ExecutionRequestvoor het uitvoeren van Python-code. Retourneertisc.py.msg.ExecutionResponsemet het uitvoeringsresultaat en de gevraagde variabelen.isc.py.msg.StreamExecutionRequestvoor het uitvoeren van Python-code. Retourneertisc.py.msg.StreamExecutionResponsemet het uitvoeringsresultaat en de gevraagde variabelen. Dit is vergelijkbaar, maar accepteert en retourneert streams in plaats van tekens.isc.py.msg.ExecutionRequestisc.py.msg.QueryRequestvoor het doorgeven van het resultaat van de uitvoering van de SQL-aanroep. RetourneertEns.Responseisc.py.msg.GlobalRequest.isc.py.msg.ClassRequest/isc.py.msg.TableRequest/isc.py.msg.TableRequestvoor het overdragen van gegevens van de global/klasse/tabel. Retourneertisc.py.msg.GlobalRequest.isc.py.msg.SaveRequestvoor het opslaan van de Python-context. RetourneertEns.StringResponsemet de context-id.isc.py.msg.RestoreRequestvoor het herstellen van de Python-context.Daarnaast
isc.py.ens.Operationheeft twee instellingen:Initializer— selectie van de klasse die het interface implementeertisc.py.init.Abstract. Dit kan worden gebruikt voor het laden van functies, modules, klassen, enz. Het wordt eenmaal uitgevoerd bij het starten van het proces.PythonLib— (alleen voor Linux) als je fouten ziet bij het laden, stel de waarde in oplibpython3.6m.soof zelfs het volledige pad naar de Python-bibliotheek.
Businessprocessen creëren
Er zijn twee klassen beschikbaar die het ontwikkelen van businessprocessen vergemakkelijken:
isc.py.ens.ProcessUtilsmaakt het mogelijk om annotaties uit activiteiten te extraheren met variabelen.isc.py.util.BPEmulatormaakt het gemakkelijk om businessprocessen met Python te testen. Het kan een businessproces (delen in Python) in het huidige proces uitvoeren.
Variabelen substitueren
Alle businessprocessen die afstammen van isc.py.ens.ProcessUtils, kunnen de methode GetAnnotation(name) gebruiken om de waarde van de annotatie van een activiteit op basis van de naam op te halen. De annotatie van de activiteit kan variabelen bevatten, die aan de InterSystems IRIS-kant worden berekend voordat ze naar Python worden doorgestuurd. Hier is de syntaxis voor het substitueren van variabelen:
${class:method:arg1:...:argN}— aanroepen van de methode#{expr}— code uitvoeren in ObjectScript.
Een voorbeeld is beschikbaar in het testbusinessproces isc.py.test.Process, bijv. in de activiteit Correlation Matrix: Graph: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). In dit voorbeeld:
#{process.WorkDirectory}geeft de eigenschap WorkDirectory van het object terugprocess, dat een instantie is van de klasseisc.py.test.Processd.w.z. het huidige businessproces.${%PopulateUtils:Integer:1:100}de methodeIntegerklasse%PopulateUtils, met het doorgeven van argumenten1en100, retourneert een willekeurig geheel getal in het bereik1...100.
Testbusinessproces
Testproductie en testbusinessproces zijn standaard beschikbaar als onderdeel van de Python Gateway. Om ze te gebruiken:
- Voer in de OS-terminal uit:
pip install pandas matplotlib seaborn. - Voer in de InterSystems IRIS-terminal uit:
do ##class(isc.py.test.CannibalizationData).Import()om testgegevens in te vullen. - Start de productie
isc.py.test.Production. - Stuur een aanvraag van het type
Ens.Requestinisc.py.test.Process.
Laten we zien hoe dit allemaal samenwerkt. Open isc.py.test.Process in de BPL-editor:

Code uitvoeren
De belangrijkste aanroep is het uitvoeren van Python-code:

Maakt gebruik van de aanvraag isc.py.msg.ExecutionRequest, hier zijn de eigenschappen:
Code— Python-code.SeparateLines— moet de code op verschillende regels worden uitgevoerd.$c(10)(n) wordt gebruikt om regels te scheiden. Let op, het is NIET aanbevolen om het bericht in één keer te verwerken; deze functie is alleen bedoeld voor verwerkingdefen soortgelijke meerregelige uitdrukkingen. Standaard0.Variabelen— een door komma's gescheiden lijst van variabelen die aan de reactie zullen worden toegevoegd.Serialisatie— Hoe variabelen te serialiseren die we willen retourneren. Opties:Str,Repr,of een ander formaat.,PickleenDill, standaardStr.
In ons geval stellen we alleen de eigenschap in Code, zodat alle andere eigenschappen standaardwaarden gebruiken. We stellen deze in door process.GetAnnotation("Import pandas"), die tijdens de uitvoering de annotatie retourneert na het uitvoeren van het substitutie van variabelen. Uiteindelijk zal de code import pandas as pd worden doorgegeven aan Python. GetAnnotation kan nuttig zijn voor het verkrijgen van meerregelige Python-scripts, maar er zijn geen beperkingen aan deze manier van het krijgen van code. U kunt de eigenschap Code op elke voor u handige manier instellen.
Het verkrijgen van variabelen
Nog een interessante oproep met gebruik van isc.py.msg.ExecutionRequest — Correlatiematrix: Tabel:

Het berekent de correlatiematrix aan de Python-kant en haalt de variabele corrmat terug naar InterSystems IRIS in JSON-formaat, door de eigenschappen van de aanvraag in te stellen:
Variabelen:"corrmat"Serialisatie:"JSON"
We kunnen de resultaten zien in Visual Trace:

En als we deze waarde nodig hebben in BP, kan deze zo worden verkregen: callresponse.Variables.GetAt("corrmat").
Gegevensoverdracht
Laten we vervolgens praten over het verzenden van gegevens van InterSystems IRIS naar Python; alle datatransfer-aanvragen implementeren de interface isc.py.msg.DataRequest, die de volgende eigenschappen biedt:
Variabele— een Python-variabele waarin de gegevens worden opgeslagen.Type— het type variabele:dataframe(pandas dataframe) oflijst.Namespace— het gebied waaruit we gegevens ophalen. Het pakketisc.pymoet beschikbaar zijn in dit gebied. Dit kan een gebied zijn zonder ondersteuning voor producten.
Op basis van deze interface zijn er 4 klassen van aanvragen geïmplementeerd:
voor het doorgeven van het resultaat van de uitvoering van de SQL-aanroep. Retourneert— stel de eigenschap inQueryom een SQL-aanroep door te geven.isc.py.msg.TableRequest— stel de eigenschap inClassom gegevens van een klasse door te geven.isc.py.msg.TableRequest— stel de eigenschap inTableom gegevens van een tabel door te geven.isc.py.msg.ClassRequest— stel de eigenschap inGlobalom gegevens van een globale door te geven.
Tijdens het testproces kijk naar de activiteit RAW, waar voor het doorgeven van het resultaat van de uitvoering van de SQL-aanroep. Retourneert getoond in actie.

Opslaan/herstellen van de Python-context
Ten slotte kunnen we de Python-context opslaan in InterSystems IRIS; om dit te doen, sturen we isc.py.msg.SaveRequest met argumenten:
Mask— Alleen die variabelen worden opgeslagen die aan de masker voldoen. Ondersteunde formaten zijn*en?. Voorbeeld:"Data*, Figure?". Standaard*.MaxLength— Maximale lengte van de opgeslagen variabele. Als de serialisatie van de variabele langer is, wordt deze genegeerd. Stel 0 in om variabelen van elke lengte te krijgen. Standaard.$$$MaxStringLength.Naam— Naam van de context (optioneel).Beschrijving— Beschrijving van de context (optioneel).
Geeft terug Ens.StringResponse met Id van de opgeslagen context. Kijk naar de activiteit in het testproces. Save Context.
De overeenkomstige aanvraag isc.py.msg.RestoreRequest laadt de context van InterSystems IRIS in Python:
ContextId— identificatie van de context.Wis— de context leegmaken voordat deze wordt hersteld.
Jupyter Notebook
— is een webtoepassing met open source die het mogelijk maakt om notebooks te creëren met code, visualisaties en tekst en deze te publiceren. Python Gateway maakt het mogelijk om BPL-processen te bekijken en te bewerken in de vorm van Jupyter Notebook. Let op dat momenteel de reguliere Python 3 executor wordt gebruikt.
Deze uitbreiding gaat ervan uit dat annotaties Python-code bevatten en activiteitnamen gebruiken als voorafgaande titels. Het is nu mogelijk om PythonGateway-bureauprocessen te ontwikkelen in Jupyter Notebook. Dit is wat mogelijk is:
- Nieuwe bedrijfsprocessen creëren
- Bedrijfsprocessen verwijderen
- Nieuwe activiteiten creëren
- Activiteiten wijzigen
- Activiteiten verwijderen
Hier is . En enkele screenshots:
Procesverkenner

Proceseditor

Installatie
- U heeft InterSystems IRIS 2019.2+ nodig.
- Installeer PythonGateway v0.8+ (alleen nodig
isc.py.util.Jupyter,isc.py.util.JupyterCheckpointsenisc.py.ens.ProcessUtils). - Werk de ObjectScript code bij uit de repository.
- Voer uit
do ##class(isc.py.util.Jupyter).Install()en volg de aanwijzingen.
.
Conclusies
MLToolkit is een set hulpmiddelen met als doel modellen en transactieomgevingen te combineren, zodat de gebouwde modellen gemakkelijk kunnen worden gebruikt in uw bedrijfsprocessen. Python Gateway is onderdeel van MLToolkit en biedt integratie met de programmeertaal Python, waardoor elke machine learning-algoritme die in Python is gemaakt (de belangrijkste omgeving voor veel Data Scientists), kan worden georkestreerd met talrijke kant-en-klare bibliotheken voor het snel creëren van aanpasbare, geautomatiseerde analytische AI/ML-oplossingen op het InterSystems IRIS-platform.
Links
MLToolkit
De MLToolkit-gebruikersgroep is een privérepository op GitHub, opgericht als onderdeel van de bedrijfsorganisatie InterSystems op GitHub. Het is gericht op externe gebruikers die componenten van MLToolkit installeren, bestuderen of al gebruiken, inclusief de Python Gateway. In de groep zijn verschillende gerealiseerde casestudies beschikbaar (met broncode en testgegevens) in de sectoren marketing, productie, geneeskunde en veel andere industrieën. Om lid te worden van de ML Toolkit-gebruikersgroep, stuur alstublieft een kort bericht per e-mail naar het volgende adres: en vermeld in uw e-mail de volgende gegevens:
- GitHub-gebruikersnaam
- Organisatie (waar u werkt of studeert)
- Functie (uw huidige functie in uw organisatie, of "Student", of "Freelancer").
- Land
Degenen die het artikel hebben gelezen en geïnteresseerd zijn in de mogelijkheden van InterSystems IRIS als platform voor de ontwikkeling of hosting van kunstmatige intelligentie en machine learning mechanismen, bieden we aan om mogelijke scenario's te bespreken die interessant zijn voor uw onderneming. We analyseren graag de behoeften van uw bedrijf en bepalen gezamenlijk een actieplan; e-mailadres van onze AI/ML-expertgroep is: .
Bron: habr.com
