Այս հոդվածը Python Gateway-ի մասին է, որը բաց կոդով համայնքային նախագիծ է InterSystems IRIS տվյալների պլատֆորմի համար: Այս նախագիծը թույլ է տալիս կազմակերպել Python-ում ստեղծված ցանկացած մեքենայական ուսուցման ալգորիթմ (բազմաթիվ տվյալների գիտնականների հիմնական միջավայրը), օգտագործել բազմաթիվ պատրաստի գրադարաններ InterSystems IRIS հարթակում արագորեն հարմարվողական, ռոբոտային վերլուծական AI/ML լուծումներ ստեղծելու համար: Այս հոդվածում ես ցույց կտամ, թե ինչպես է InterSystems IRIS-ը կարող է համակարգել գործընթացները Python-ում, արդյունավետ կերպով հաղորդակցել երկկողմանի տվյալներ և ստեղծել խելացի բիզնես գործընթացներ:
Պլան
Ներածություն:
Գործիքներ.
Տեղադրում.
API:
Փոխգործունակություն.
Jupyter Notebook.
Եզրակացություններ:
Հղումներ.
MLToolkit.
Ներածություն
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-ի մի քանի գործիքներ և գրադարաններ, որոնք մենք հետագայում կօգտագործենք:
Տեխնոլոգիա
Python-ը մեկնաբանված, բարձր մակարդակի, ընդհանուր նշանակության ծրագրավորման լեզու է: Լեզվի հիմնական առավելությունը մաթեմատիկական, ML և AI գրադարանների մեծ գրադարանն է: Ինչպես ObjectScript-ը, այն օբյեկտի վրա հիմնված լեզու է, բայց ամեն ինչ սահմանվում է դինամիկ, այլ ոչ թե ստատիկ: Նաև ամեն ինչ օբյեկտ է։ Հետագա հոդվածները ենթադրում են լեզվին անցնող ծանոթություն: Եթե ցանկանում եք սկսել սովորել, խորհուրդ եմ տալիս սկսել դրանից փաստաթղթավորում.
IDE: Ես օգտագործում եմ PyCharm, բայց ընդհանուր առմամբ նրանք շատ. Եթե դուք օգտագործում եք Atelier, ապա կա Eclipse հավելված Python ծրագրավորողների համար: Եթե դուք օգտագործում եք VS Code, կա Python-ի ընդլայնում:
Նոթատետր. IDE-ի փոխարեն կարող եք գրել և տարածել ձեր սցենարները առցանց նոթատետրերում: Դրանցից ամենատարածվածն է Յուպիտեր.
Գրադարաններ
Ահա մեքենայական ուսուցման գրադարանների (ոչ ամբողջական) ցանկը.
AI/ML տեխնոլոգիաները բիզնեսը դարձնում են ավելի արդյունավետ և հարմարվող: Ավելին, այսօր այդ տեխնոլոգիաները դառնում են ավելի հեշտ մշակելն ու կիրառել։ Սկսեք սովորել AI/ML տեխնոլոգիաների մասին և ինչպես դրանք կարող են օգնել ձեր կազմակերպության զարգացմանը:
Տեղակայում
Python Gateway-ը տեղադրելու և օգտագործելու մի քանի եղանակ կա.
ОС
Windows
Linux
Mac
դոկեր
Օգտագործեք պատկեր DockerHub-ից
Ստեղծեք ձեր սեփական տեսքը
Անկախ տեղադրման եղանակից, ձեզ անհրաժեշտ կլինի սկզբնական կոդը: Կոդը ներբեռնելու միակ տեղն է թողարկումների էջ. Այն պարունակում է փորձարկված կայուն թողարկումներ, պարզապես վերցրեք վերջինը: Այս պահին այն 0.8 է, բայց ժամանակի ընթացքում նորերը կլինեն։ Մի կլոնավորեք/ներբեռնեք պահոցը, ներբեռնեք վերջին թողարկումը:
ОС
Եթե դուք Python Gateway-ն եք տեղադրում օպերացիոն համակարգի վրա, ապա նախ (անկախ օպերացիոն համակարգից) պետք է տեղադրել Python-ը։ Սրա համար:
Ներբեռնեք ObjectScript կոդը (այսինքն. do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) ապրանքներով ցանկացած տարածք: Եթե ցանկանում եք, որ գոյություն ունեցող տարածքը աջակցի արտադրանքին, գործարկեք. write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
Տեղը զանգ 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 կա Անսարքությունների վերացման բաժին:
Mac
Ներկայումս միայն Python 3.6.7-ն է աջակցվում Python.org- ը. Ստուգեք փոփոխականը PATH.
Եթե փոխել եք միջավայրի փոփոխականները, վերագործարկեք ձեր InterSystems արտադրանքը:
դոկեր
Բեռնարկղերի օգտագործումն ունի մի շարք առավելություններ.
Դյուրատարություն
Արդյունավետություն
Մեկուսացում
Թեթևություն
Անփոփոխելիություն
Ստուգեք սա հոդվածների շարք InterSystems-ի արտադրանքի հետ Docker-ի օգտագործման վերաբերյալ լրացուցիչ տեղեկությունների համար:
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:last»:
Դրանից հետո դուք կարող եք գործարկել դոկերի պատկերը.
Եթե դուք օգտագործում եք պատկեր, որը հիմնված է InterSystems IRIS Community Edition-ի վրա, կարող եք բաց թողնել բանալին:
Comments
Փորձարկման գործընթաց isc.py.test.Process պահում է մի շարք պատկերներ ժամանակավոր գրացուցակում: Դուք կարող եք փոխել այս ուղին դեպի տեղադրված գրացուցակը: Դա անելու համար խմբագրեք կարգավորումը WorkingDir նշելով տեղադրված գրացուցակը:
Տերմինալի գործարկում մուտք գործելու համար՝ docker exec -it irispy sh.
Մուտք գործել Համակարգի կառավարման պորտալ մուտք գործելու միջոցով SuperUser/SYS.
Երբ դուք տեղադրել եք 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 բաժին.
API
Python Gateway-ը տեղադրված է, և դուք հաստատել եք, որ այն աշխատում է: Ժամանակն է սկսել օգտագործել այն:
Python-ի հիմնական ինտերֆեյսն է isc.py.Main. Այն առաջարկում է մեթոդների հետևյալ խմբերը (բոլորը վերադարձ %Status):
Կոդի կատարում
Տվյալների փոխանցում
Օժանդակ
Կոդի կատարում
Այս մեթոդները թույլ են տալիս կատարել Python կամայական կոդ:
SimpleString
SimpleString - սա է հիմնական մեթոդը: Այն պահանջում է 4 կամընտիր փաստարկ.
code - գործարկելու համար նախատեսված կոդի տող: Գծի հոսքի բնույթ. $c(10).
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 նիշով, և եթե ցանկանում եք ավելի երկար կոդի գործարկել, ապա պետք է օգտագործեք թելեր:
Ընդունված է երկու փաստարկ.
code — Python կոդի տող կամ հոսք, որը պետք է կատարվի:
variable — (ըստ ցանկության) նշանակում է կատարման արդյունքը code այս Python փոփոխականը:
Օգտագործման օրինակ.
set sc = ##class(isc.py.Main).ExecuteCode("2*3", "y").
Այս օրինակում մենք 2-ը բազմապատկում ենք 3-ով և արդյունքը գրում Python փոփոխականի վրա y.
Տվյալների փոխանցում
Տվյալների փոխանցում Python-ին և դրանից:
Python -> InterSystems IRIS
InterSystems IRIS-ում Python փոփոխականի արժեքը ստանալու 4 եղանակ կա՝ կախված ձեզ անհրաժեշտ սերիալացումից.
String պարզ տվյալների տեսակների և վրիպազերծման համար:
Repr պարզ օբյեկտների պահպանման և վրիպազերծման համար:
JSON InterSystems IRIS-ի կողմից տվյալների հեշտ մանիպուլյացիայի համար:
Pickle օբյեկտները փրկելու համար.
Այս մեթոդները թույլ են տալիս առբերել փոփոխականները Python-ից որպես տող կամ հոսք:
GetVariable(variable, serialization, .stream, useString) - ստանալ serialization փոփոխական variable в stream. Եթե useString 1 է, և սերիականացումը տեղադրվում է տողի վրա, այնուհետև վերադարձվում է տողը և ոչ թե հոսք:
GetVariablePickle(variable, .stream, useString, useDill) -ստացե՛ք Pickle (կամ սամիթ) փոփոխականի սերիականացում:
Փորձենք ստանալ մեր փոփոխականը 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) - ստեղծում է տվյալների բազա (պանդաներ dataframe կամ list) sql հարցումից և սահմանում է Python փոփոխական variable. Պլաստիկ տոպրակ isc.py պետք է հասանելի լինի տարածքում namespace — հարցումը կկատարվի այնտեղ։
ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) - բեռնում է գլոբալ տվյալները global բաժանորդագրությունից start դեպի end Python-ում որպես տիպի փոփոխական type: list, կամ պանդաներ dataframe. կամընտիր փաստարկների նկարագրություն mask և labels հասանելի է դասի փաստաթղթերում և պահոցում Տվյալների փոխանցման փաստաթղթեր.
ExecuteClass(class, variable, type, start, end, properties, namespace) - բեռնում է դասի տվյալները class ID-ից start դեպի end Python-ում որպես տիպի փոփոխական type: list, կամ պանդաներ 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) Լրացուցիչ տեղեկություններ այստեղ Տվյալների փոխանցման փաստաթղթեր.
Այս բոլոր մեթոդներն աջակցում են տվյալների փոխանցմանը ցանկացած տարածքից: Պլաստիկ տոպրակ isc.py պետք է հասանելի լինի թիրախային տարածքում:
ExecuteQuery
ExecuteQuery(request, variable, type, namespace) — ցանկացած ճիշտ SQL հարցման արդյունքների փոխանցում Python-ին: Սա տվյալների փոխանցման ամենադանդաղ մեթոդն է: Օգտագործեք այն, եթե ExecuteGlobal իսկ դրա փաթաթանները հասանելի չեն:
Փաստարկներ:
query - sql հարցում:
variable — Python փոփոխականի անունը, որի մեջ գրված են տվյալները:
type - list կամ Պանդաներ dataframe.
namespace - այն տարածքը, որտեղ կիրականացվի հարցումը:
variable — Python փոփոխականի անունը, որի մեջ գրված են տվյալները:
type - list կամ Պանդաներ dataframe.
start — գլոբալ առաջին բաժանորդը։ Պարտադիր %Integer.
end - գլոբալ վերջին բաժանորդագրությունը: Պարտադիր %Integer.
mask - համաշխարհային արժեքային դիմակ: Դիմակը կարող է ավելի կարճ լինել, քան գլոբալ դաշտերի քանակը (որ դեպքում վերջում գտնվող դաշտերը բաց կթողնեն): Ինչպես ձևավորել դիմակ.
+ փոխանցեք արժեքը այնպես, ինչպես կա:
- բաց թողնել արժեքը.
b - Բուլյան տիպ (0 - False, մնացած բոլորը - True).
d — Ամսաթիվ ($horolog-ից, Windows-ում՝ 1970-ից, Linux-ում՝ 1900-ից):
t — Ժամանակը ($horolog, կեսգիշերից վայրկյաններ անց):
m — Ժամային դրոշմակնիք (տողի ձևաչափը ՏԱՐԻ-ԱՄԻՍ-ՕՐ ԺԱՄ: MINUTE:SECOND):
labels — %Սյունակների անունների ցանկ։ Առաջին տարրը բաժանորդի անունն է:
namespace - այն տարածքը, որտեղ կիրականացվի հարցումը:
ExecuteClass
Փաթաթել ExecuteGlobal. Դասի սահմանման հիման վրա պատրաստում է զանգ ExecuteGlobal և կանչում է նրան.
variable — Python փոփոխականի անունը, որի մեջ գրված են տվյալները:
type - list կամ Պանդաներ dataframe.
start - մեկնարկային ID:
end - վերջնական ID
properties — դասի հատկությունների ցուցակ (բաժանված ստորակետերով), որոնք պետք է բեռնվեն տվյալների հավաքածուում: Դիմակներն աջակցվում են * и ?. Կանխադրված - * (բոլոր հատկությունները): Սեփականություն %%CLASSNAME անտեսված.
namespace - այն տարածքը, որտեղ կիրականացվի հարցումը:
Բոլոր հատկությունները փոխանցվում են այնպես, ինչպես կա, բացառությամբ տիպի հատկությունների %Date, %Time, %Boolean и %TimeStamp - դրանք վերածվում են համապատասխան Python դասերի:
ExecuteTable
Փաթաթել ExecuteClass. Թարգմանում է աղյուսակի անվանումը դասի անվան և կանչերի ExecuteClass. Ստորագրություն:
table - սեղանի անվանումը.
Մնացած բոլոր փաստարկներն ընդունվում են այնպես, ինչպես կա ExecuteClass.
Նշումներ
ExecuteGlobal, ExecuteClass и ExecuteTable աշխատել նույնքան արագ:
ExecuteGlobal 20 անգամ ավելի արագ, քան ExecuteQuery տվյալների մեծ հավաքածուներում (փոխանցման ժամանակը >0.01 վայրկյան):
ExecuteGlobal, ExecuteClass и ExecuteTable աշխատել գլոբալների վրա այս կառուցվածքով. ^global(key) = $lb(prop1, prop2, ..., propN) որտեղ key - ամբողջ թիվ.
Համար ExecuteGlobal, ExecuteClass и ExecuteTable աջակցվող արժեքների շրջանակ %Date համապատասխանում է միջակայքին mktime և կախված է ՕՀ-ից (ապակիները1970-01-01, Linux 1900-01-01, Mac) Օգտագործեք %TimeStampտվյալ տիրույթից դուրս տվյալներ փոխանցելու համար կամ օգտագործել պանդաների տվյալների շրջանակը, քանի որ սա միայն ցանկի սահմանափակում է:
Համար 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) - արդյոք փոփոխականը սահմանված է:
GetStatus() - ստացեք և հեռացրեք Python-ի վերջին բացառությունը:
GetModuleInfo(module, .imported, .alias) — ստանալ մոդուլի փոփոխական և ներմուծման կարգավիճակ:
GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments) — տեղեկություններ ստանալ գործառույթի մասին:
Փոխգործունակություն
Դուք սովորել եք, թե ինչպես զանգահարել Python Gateway-ին տերմինալից, հիմա եկեք սկսենք օգտագործել այն արտադրության մեջ: Այս ռեժիմում Python-ի հետ փոխգործակցության հիմքն է isc.py.ens.Operation. Այն մեզ թույլ է տալիս.
Կատարեք կոդը Python-ում
Պահպանել/Վերականգնել Python համատեքստը
Բեռնել և ստանալ տվյալներ Python-ից
Ըստ էության, Python գործողությունը ավարտված է isc.py.Main. Գործողություն isc.py.ens.Operation ապահովում է InterSystems IRIS արտադրանքներից Python գործընթացի հետ փոխազդելու հնարավորություն: Աջակցվում է հինգ հարցում.
isc.py.msg.ExecutionRequest Python կոդը գործարկելու համար: Վերադարձնում է isc.py.msg.ExecutionResponse կատարման արդյունքով և պահանջվող փոփոխականների արժեքներով:
isc.py.msg.StreamExecutionRequest Python կոդը գործարկելու համար: Վերադարձնում է isc.py.msg.StreamExecutionResponse կատարման արդյունքը և պահանջվող փոփոխականների արժեքները: Անալոգային isc.py.msg.ExecutionRequest, բայց ընդունում և վերադարձնում է հոսքերը տողերի փոխարեն:
isc.py.msg.QueryRequest SQL հարցման կատարման արդյունքը փոխանցելու համար։ Վերադարձնում է Ens.Response.
isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest գլոբալ/դասի/աղյուսակի տվյալների փոխանցման համար։ Վերադարձնում է Ens.Response.
isc.py.msg.SaveRequest Python-ի համատեքստը պահպանելու համար: Վերադարձնում է Ens.StringResponse համատեքստի ID-ով:
isc.py.msg.RestoreRequest վերականգնել Python համատեքստը:
Բացի այդ, isc.py.ens.Operation ունի երկու կարգավորում.
Initializer — ինտերֆեյսը իրականացնող դասի ընտրություն isc.py.init.Abstract. Այն կարող է օգտագործվել ֆունկցիաներ, մոդուլներ, դասեր և այլն բեռնելու համար: Այն իրականացվում է մեկ անգամ, երբ գործընթացը սկսվում է:
PythonLib - (միայն Linux-ը), եթե բեռնելիս սխալներ եք տեսնում, սահմանեք դրա արժեքը libpython3.6m.so կամ նույնիսկ Python գրադարանի ամբողջ ճանապարհին:
Բիզնես գործընթացների ստեղծում
Գոյություն ունեն երկու դաս, որոնք նպաստում են բիզնես գործընթացների զարգացմանը.
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-ի մաս: Դրանք օգտագործելու համար.
OS տերմինալում գործարկեք՝ 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-ում.
Եվ եթե մեզ անհրաժեշտ է այս արժեքը BP-ում, մենք կարող ենք այն ստանալ այսպես. callresponse.Variables.GetAt("corrmat").
Տվյալների փոխանցում
Հաջորդը, եկեք խոսենք InterSystems IRIS-ից Python տվյալների փոխանցման մասին; տվյալների փոխանցման բոլոր հարցումներն իրականացնում են ինտերֆեյսը: isc.py.msg.DataRequestորն ապահովում է հետևյալ հատկությունները.
Variable — Python փոփոխական, որի մեջ գրված են տվյալները:
Type - փոփոխական տեսակ. 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-ի համատեքստը պահել 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-ում.
ContextId - համատեքստի նույնացուցիչ:
Clear — մաքրել համատեքստը նախքան վերականգնելը:
Jupyter Notebook
Jupyter Notebook բաց կոդով վեբ հավելված է, որը թույլ է տալիս ստեղծել և հրապարակել կոդ, վիզուալիզացիա և տեքստ պարունակող նոթատետրեր: Python Gateway-ը թույլ է տալիս դիտել և խմբագրել BPL գործընթացները Jupyter Notebook-ի տեսքով: Խնդրում ենք նկատի ունենալ, որ ներկայումս օգտագործվում է սովորական Python 3 կատարողը:
Այս ընդլայնումը ենթադրում է, որ անոտացիաները պարունակում են Python կոդ և օգտագործում են գործունեության անվանումները որպես նախորդ վերնագրեր: Այժմ հնարավոր է զարգացնել PythonGateway բիզնես գործընթացները Jupyter Notebook-ում։ Ահա թե ինչ է հնարավոր.
MLToolkit-ը գործիքների մի շարք է, որի նպատակն է համատեղել մոդելները և գործարքային միջավայրը, որպեսզի կառուցված մոդելները հեշտությամբ օգտագործվեն անմիջապես ձեր բիզնես գործընթացներում: Python Gateway-ը MLToolkit-ի մի մասն է և ապահովում է Python լեզվի հետ ինտեգրում՝ թույլ տալով կազմակերպել Python-ում ստեղծված ցանկացած մեքենայական ուսուցման ալգորիթմ (բազմաթիվ տվյալների գիտնականների հիմնական միջավայրը), օգտագործել բազմաթիվ պատրաստի գրադարաններ՝ արագորեն ստեղծելու հարմարվողական, ռոբոտային վերլուծական AI / ML լուծումներ InterSystems IRIS հարթակի վրա:
MLToolkit օգտատերերի խումբը մասնավոր GitHub պահոց է, որը ստեղծվել է որպես InterSystems կորպորատիվ GitHub կազմակերպության մաս: Այն նախատեսված է արտաքին օգտատերերի համար, ովքեր տեղադրում են, սովորում կամ արդեն օգտագործում են MLToolkit բաղադրիչները, ներառյալ Python Gateway-ը: Խումբն ունի մի շարք իրականացված դեպքեր (աղբյուրային կոդով և թեստային տվյալներով) շուկայավարման, արտադրության, բժշկության և բազմաթիվ այլ ոլորտներում։ ML Toolkit User Group-ին միանալու համար խնդրում ենք կարճ նամակ ուղարկել հետևյալ հասցեով. [էլեկտրոնային փոստով պաշտպանված] և ձեր նամակում ներառեք հետևյալ տեղեկությունները.
GitHub օգտվողի անուն
Կազմակերպություն (դուք աշխատում եք կամ սովորում)
Պաշտոնը (ձեր փաստացի պաշտոնը ձեր կազմակերպությունում՝ «Ուսանող» կամ «Անկախ»):
Երկիր
Նրանց համար, ովքեր կարդացել են հոդվածը և հետաքրքրված են InterSystems IRIS-ի հնարավորություններով՝ որպես արհեստական ինտելեկտի և մեքենայական ուսուցման շարժիչների մշակման կամ հոսթինգի հարթակ, հրավիրում ենք ձեզ քննարկելու ձեր ձեռնարկությանը հետաքրքրող հնարավոր սցենարները: Մենք ուրախ կլինենք վերլուծել ձեր ընկերության կարիքները և համատեղ որոշել գործողությունների ծրագիր. Մեր AI/ML փորձագիտական թիմի էլփոստի հասցեն – [էլեկտրոնային փոստով պաշտպանված].