Dieser Artikel konzentriert sich auf das Python Gateway, ein Open Source-Community-Projekt für die InterSystems IRIS-Datenplattform. Mit diesem Projekt können Sie alle in Python (der Hauptumgebung für viele Data Scientists) erstellten Algorithmen für maschinelles Lernen orchestrieren und mithilfe zahlreicher vorgefertigter Bibliotheken schnell adaptive, robotergesteuerte analytische AI / ML-Lösungen auf der Basis der InterSystems IRIS-Plattform erstellen. In diesem Artikel werde ich zeigen, wie InterSystems IRIS Prozesse in Python orchestrieren, die bidirektionale Datenübertragung effizient implementieren und intelligente Geschäftsprozesse erstellen kann.
Planen
- Einführung
- Werkzeuge.
- Installation
- API
- Interoperabilität
- Jupyter Notizbuch.
- Ergebnisse.
- Verweise
- MLToolkit.
Einführung
Python — , . Python InterSystems IRIS, Python .
(ML) — , , .
. , , . ?
, , , .
— GUI- AI/ML-, , , , BI ( GUI- ), AI/ML. .
, , , . , .
, . , InterSystems IRIS, .
AI/ML- , -. , . , , , .
? . , . , ? . , . , . — . , ? . , , - , .
ML Toolkit — , : , -. Python Gateway ML Toolkit Python ( R Gateway, ML Toolkit R).
, Python, .
() :
AI/ML . , . AI/ML- , .
Python Gateway:
, . — . , . 0.8, . / , .
Python Gateway , ( ) Python. :
- Python 3.6.7 64 bit. Python .
dill
: pip install dill
.- ObjectScript (..
do $system.OBJ.ImportDir("C:\InterSystems\Repos\Python\isc\py\", "*.cls", "c",,1)
) . , , , : write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1)
. - callout DLL/SO/DYLIB
bin
InterSystems IRIS. , write ##class(isc.py.Callout).GetLib()
.
Windows
- ,
PYTHONHOME
Python 3.6.7. - ,
PATH
PYTHONHOME
( , ).
Linux (Debian/Ubuntu)
- ,
PATH
/usr/lib
/usr/lib/x86_64-linux-gnu
. /etc/environment
. undefined symbol: _Py_TrueStruct
PythonLib
. Readme Troubleshooting.
Mac
- 3.6.7 Python.org.
PATH
.
, InterSystems.
Docker
:
Docker InterSystems.
Python Gateway 2019.4
.
: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latest
, Python Gateway InterSystems IRIS Community Edition. .
- : docker build --force-rm --tag intersystemscommunity/irispy:latest .
.
store/intersystems/iris-community:2019.4.0.383.0
, , IMAGE
.
InterSystems IRIS : `docker build --build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 --force-rm --tag intersystemscommunity/irispy:latest ``.
-:
docker run -d \
-p 52773:52773 \
-v /<HOST-DIR-WITH-iris.key>/:/mount \
--name irispy \
intersystemscommunity/irispy:latest \
--key /mount/iris.key
, InterSystems IRIS Community Edition, .
isc.py.test.Process
. , . WorkingDir
.- :
docker exec -it irispy sh
. SuperUser
/SYS
.- , :
docker stop irispy && docker rm --force irispy
.
, Python Gateway, , . InterSystems IRIS:
set sc = ##class(isc.py.Callout).Setup()
set sc = ##class(isc.py.Main).SimpleString("x='HELLO'", "x", , .var).
write var
HELLO
— Python- x
. sc
var
, Readme — Troubleshooting section.
API
Python Gateway , , . !
Python isc.py.Main
. ( %Status
):
Python-.
SimpleString
SimpleString
— . 4 :
code
— . : $c(10)
.returnVariable
— .serialization
— returnVariable
. 0 — string ( ), 1 — repr.result
— ByRef , returnVariable
.
:
set sc = ##class(isc.py.Main).SimpleString("x='HELLO'", "x", , .var).
Python x
Hello
Python x
ObjectScript var
.
ExecuteCode
ExecuteCode SimpleString
.
InterSystems IRIS 3 641 144 , , .
:
code
— Python .variable
— () code
Python .
:
set sc = ##class(isc.py.Main).ExecuteCode("2*3", "y").
2 3 Python y
.
Python .
Python -> InterSystems IRIS
4 Python InterSystems IRIS, , :
String
.Repr
.JSON
InterSystems IRIS.Pickle
.
Python .
GetVariable(variable, serialization, .stream, useString)
— serialization
variable
stream
. useString
1 , .GetVariableJson(variable, .stream, useString)
— JSON .GetVariablePickle(variable, .stream, useString, useDill)
- Pickle ( Dill) .
y
.
set sc = ##class(isc.py.Main).GetVariable("y", , .val, 1)
write val
>6
InterSystems IRIS -> Python
InterSystems IRIS Python.
ExecuteQuery(query, variable, type, namespace)
— (pandas dataframe
list
) sql Python variable
. isc.py
namespace
— .ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace)
— global
start
end
Python type
: list
, pandas dataframe
. mask
and labels
Data Transfer docs.ExecuteClass(class, variable, type, start, end, properties, namespace)
— class
id start
end
Python type
: list
, pandas dataframe
. properties
— ( — ) , . *
?
. — *
( ). %%CLASSNAME
.ExecuteTable(table, variable, type, start, end, properties, namespace)
— table
id start
end
Python.
ExecuteQuery
— ( SQL- Python). , ExecuteGlobal
ExecuteClass
ExecuteTable
. ( 3-5 ODBC- 20 ExecuteQuery
). Data Transfer docs.
. isc.py
.
ExecuteQuery
ExecuteQuery(request, variable, type, namespace)
— SQL- Python. . , ExecuteGlobal
.
:
query
— sql .variable
— Python .type
— list
Pandas dataframe
.namespace
— .
ExecuteGlobal
ExecuteGlobal(global, variable, type, start, end, mask, labelels, namespace)
— Python.
:
global
— ^
variable
— Python .type
— list
Pandas dataframe
.start
— . %Integer
.end
— . %Integer
.mask
— . , ( ). :
+
.-
.b
— (0
— False
, — True
).d
— ( $horolog, Windows 1970, Linux 1900).t
— ($horolog, ).m
— ( YEAR-MONTH-DAY HOUR:MINUTE:SECOND).
labels
— %List . — .namespace
— .
ExecuteClass
ExecuteGlobal
. ExecuteGlobal
.
ExecuteClass(class, variable, type, start, end, properties, namespace)
— Python.
:
class
—variable
— Python .type
— list
Pandas dataframe
.start
— Id.end
— Idproperties
— ( — ) , . *
?
. — *
( ). %%CLASSNAME
.namespace
— .
%Date
, %Time
, %Boolean
%TimeStamp
— Python.
ExecuteTable
ExecuteClass
. ExecuteClass
. :
ExecuteTable(table, variable, type, start, end, properties, namespace)
— Python.
:
ExecuteGlobal
, ExecuteClass
ExecuteTable
.ExecuteGlobal
20 ExecuteQuery
( >0.01 ).ExecuteGlobal
, ExecuteClass
ExecuteTable
: ^global(key) = $lb(prop1, prop2, ..., propN)
key
— .ExecuteGlobal
, ExecuteClass
ExecuteTable
%Date
mktime
(windows: 1970-01-01, linux 1900-01-01, mac). %TimeStamp
pandas dataframe .. .ExecuteGlobal
, ExecuteClass
ExecuteTable
(, ) .
isc.py.test.Person , :
set global = "isc.py.test.PersonD"
set class = "isc.py.test.Person"
set table = "isc_py_test.Person"
set query = "SELECT * FROM isc_py_test.Person"
//
set variable = "df"
set type = "dataframe"
set start = 1
set end = $g(^isc.py.test.PersonD, start)
// 0: ExecuteGlobal
set sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 0, type)
// 1: ExecuteGlobal
//
// globalKey -
set labels = $lb("globalKey", "Name", "DOB", "TS", "RandomTime", "AgeYears", "AgeDecimal", "AgeDouble", "Bool")
// mask 1 labels "globalKey" -
// %%CLASSNAME
set mask = "-+dmt+++b"
set sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 1, type, start, end, mask, labels)
// 2: ExecuteClass
set sc = ##class(isc.py.Main).ExecuteClass(class, variable _ 2, type, start, end)
// 3: ExecuteTable
set sc = ##class(isc.py.Main).ExecuteTable(table, variable _ 3, type, start, end)
// 4: ExecuteTable
set sc = ##class(isc.py.Main).ExecuteQuery(query, variable _ 4, type)
do ##class(isc.py.test.Person).Test()
.
GetVariableInfo(variable, serialization, .defined, .type, .length)
— : , .GetVariableDefined(variable, .defined)
— .GetVariableType(variable, .type)
— .GetStatus()
— Python.GetModuleInfo(module, .imported, .alias)
— .GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments)
— .
Python Gateway , . Python — isc.py.ens.Operation
. :
, Pyhton isc.py.Main
. isc.py.ens.Operation
Python InterSystems IRIS. :
-
, -:
isc.py.ens.ProcessUtils
.isc.py.util.BPEmulator
- Python. - ( Python) .
-, isc.py.ens.ProcessUtils
, GetAnnotation(name)
. , InterSystems IRIS Python. :
${class:method:arg1:...:argN}
—#{expr}
— ObjectScript.
- isc.py.test.Process
, , Correlation Matrix: Graph
: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png')
. :
#{process.WorkDirectory}
WorkDirectory process
, isc.py.test.Process
.. -.${%PopulateUtils:Integer:1:100}
Integer
%PopulateUtils
, 1
100
, 1...100
.
-
- Python Gateway. :
- :
pip install pandas matplotlib seaborn
. - InterSystems IRIS :
do ##class(isc.py.test.CannibalizationData).Import()
. isc.py.test.Production
.Ens.Request
isc.py.test.Process
.
, . isc.py.test.Process
BPL:

— Python :

isc.py.msg.ExecutionRequest
, :
Code
— Python .SeparateLines
— . $c(10)
(\n
) . , , def
. 0
.Variables
— , .Serialization
— , . : Str
, Repr
, JSON
, Pickle
Dill
, Str
.
, Code
, . process.GetAnnotation("Import pandas")
, . , import pandas as pd
Python. GetAnnotation
Python , . Code
.
isc.py.msg.ExecutionRequest
— Correlation Matrix: Tabular
:

Python corrmat
InterSystems IRIS JSON, :
Variables
: "corrmat"
Serialization
: "JSON"
Visual Trace:

, : callresponse.Variables.GetAt("corrmat")
.
InterSystems IRIS Python, isc.py.msg.DataRequest
, :
Variable
— Python .Type
— : dataframe
(pandas dataframe) list
.Namespace
— . isc.py
. .
4 :
isc.py.msg.QueryRequest
— Query
SQL .isc.py.msg.ClassRequest
— Class
.isc.py.msg.TableRequest
— Table
.isc.py.msg.GlobalRequest
— Global
.
RAW
, isc.py.msg.QueryRequest
.

/ Python
, Python InterSystems IRIS, , isc.py.msg.SaveRequest
:
Mask
— , . *
?
. : "Data*, Figure?"
. *
.MaxLength
— . , . 0, . $$$MaxStringLength
.Name
— ().Description
— ().
Ens.StringResponse
Id
. Save Context
.
isc.py.msg.RestoreRequest
InterSystems IRIS Python:
Jupyter Notebook
Jupyter Notebook — - , , , . Python Gateway BPL- Jupyter Notebook. , executor Python 3.
, Python . - PythonGateway Jupyter Notebook. :
-. :


- InterSystems IRIS 2019.2+.
- PythonGateway v0.8+ (
isc.py.util.Jupyter
, isc.py.util.JupyterCheckpoints
isc.py.ens.ProcessUtils
). - ObjectScript .
do ##class(isc.py.util.Jupyter).Install()
.
.
MLToolkit — , , -. Python Gateway MLToolkit Python , Python ( Data Scientists), , AI/ML- InterSystems IRIS.
MLToolkit — GitHub-, GitHub- InterSystems. , , MLToolkit, Python Gateway. ( ) , , . ML Toolkit, , : MLToolkit@intersystems.com :
, InterSystems IRIS , , . ; AI/ML – MLToolkit@intersystems.com.