Python Gateway sa InterSystems IRIS

Ang artikulong ito ay tungkol sa Python Gateway, isang open source na proyekto ng komunidad para sa InterSystems IRIS data platform. Binibigyang-daan ka ng proyektong ito na ayusin ang anumang mga algorithm sa pag-aaral ng makina na ginawa sa Python (ang pangunahing kapaligiran para sa maraming Data Scientist), gumamit ng maraming handa na mga aklatan upang mabilis na lumikha ng adaptive, robotic analytical AI / ML na mga solusyon sa InterSystems IRIS platform. Sa artikulong ito, ipapakita ko kung paano maaaring ayusin ng InterSystems IRIS ang mga proseso sa Python, mahusay na makipag-usap ng two-way na data, at lumikha ng mga matalinong proseso ng negosyo.

Plano

  1. Panimula.
  2. Mga gamit.
  3. Pag-install
  4. API.
  5. Interoperability.
  6. Jupyter Notebook.
  7. Mga konklusyon.
  8. Mga link.
  9. MLToolkit.

Pagpapakilala

Ang Python ay isang mataas na antas, pangkalahatang layunin na programming language na naglalayong pahusayin ang pagiging produktibo ng developer at pagiging madaling mabasa ng code. Sa seryeng ito ng mga artikulo, tatalakayin ko ang mga posibilidad ng paggamit ng Python sa InterSystems IRIS platform, na ang pangunahing pokus ng artikulong ito ay ang paggamit ng Python bilang isang wika para sa paglikha at pagpapatakbo ng mga modelo ng machine learning.

Ang pag-aaral ng makina (ML) ay isang klase ng mga pamamaraan ng artipisyal na katalinuhan, ang katangiang katangian nito ay hindi direktang solusyon ng isang problema, ngunit pag-aaral sa proseso ng paglutas ng maraming katulad na problema.

Ang mga algorithm at modelo ng machine learning ay nagiging mas karaniwan. Mayroong maraming mga dahilan para dito, ngunit ang lahat ay nauuwi sa pagiging naa-access, pagiging simple at pagkamit ng mga praktikal na resulta. Ang clustering o kahit neural network modeling ay isang bagong teknolohiya?

Siyempre hindi, ngunit sa ngayon ay hindi na kailangang magsulat ng daan-daang libong linya ng code upang magpatakbo ng isang modelo, at ang gastos sa paggawa at paggamit ng mga modelo ay unti-unting bumababa.

Ang mga tool ay umuunlad - habang wala kaming ganap na GUI-centric AI/ML na mga tool, ang pag-unlad na nakita namin sa maraming iba pang mga klase ng mga sistema ng impormasyon, tulad ng BI (mula sa pagsusulat ng code hanggang sa paggamit ng mga frameworks at GUI-centric na mga solusyong nako-configure) , ay naobserbahan din sa mga tool para sa paglikha ng AI/ML. Nalampasan na namin ang yugto ng pagsulat ng code at ngayon ay gumagamit kami ng mga balangkas upang bumuo at magsanay ng mga modelo.

Ang iba pang mga pagpapahusay, tulad ng kakayahang ipamahagi ang isang pre-trained na modelo kung saan kailangan lang tapusin ng end user ang pagsasanay sa modelo sa kanilang partikular na data, ay nagpapadali din sa pagsisimula sa machine learning. Ang mga pagsulong na ito ay ginagawang mas madali ang pag-aaral ng machine learning para sa mga propesyonal at para sa mga kumpanya sa pangkalahatan.

Sa kabilang banda, kami ay nangongolekta ng higit at higit pang data. Sa isang pinag-isang platform ng data tulad ng InterSystems IRIS, ang lahat ng impormasyong ito ay maaaring ihanda kaagad at magamit bilang input sa mga modelo ng machine learning.

Sa paglipat sa cloud, ang paglulunsad ng mga proyekto ng AI/ML ay nagiging mas madali kaysa dati. Maaari lamang nating ubusin ang mga mapagkukunang kailangan natin. Bukod dito, salamat sa parallelization na inaalok ng mga cloud platform, makakatipid tayo ng oras na ginugol.

Ngunit ano ang tungkol sa mga resulta? Dito nagiging mas kumplikado ang mga bagay. Mayroong maraming mga tool para sa pagbuo ng mga modelo, na tatalakayin ko sa susunod. Ang pagbuo ng isang magandang modelo ay hindi madali, ngunit ano ang susunod? Ang paggawa ng kita mula sa paggamit ng isang modelo ng negosyo ay isa ring di-maliit na gawain. Ang ugat ng problema ay ang paghihiwalay ng analytical at transactional na mga workload, at mga modelo ng data. Kapag nagsasanay kami ng isang modelo, karaniwan naming ginagawa ito sa makasaysayang data. Ngunit ang lugar para sa itinayong modelo ay nasa transactional data processing. Ano ang pakinabang ng pinakamahusay na modelo ng pagtuklas ng mapanlinlang na transaksyon kung patakbuhin natin ito isang beses sa isang araw? Matagal nang umalis ang mga scammer dala ang pera. Kailangan naming sanayin ang modelo sa makasaysayang data, ngunit kailangan din namin itong ilapat nang real time sa bagong papasok na data para makakilos ang aming mga proseso sa negosyo sa mga hula na ginawa ng modelo.

Ang ML Toolkit ay isang hanay ng mga tool na naglalayong gawin iyon: pag-isahin ang mga modelo at isang transactional na kapaligiran upang ang mga binuo na modelo ay madaling magamit nang direkta sa iyong mga proseso ng negosyo. Ang Python Gateway ay bahagi ng ML Toolkit at nagbibigay ng integrasyon sa wikang Python (katulad ng kung paano ang R Gateway, bilang bahagi ng ML Toolkit ay nagbibigay ng integrasyon sa wikang R).

Toolkit

Bago tayo magpatuloy, gusto kong ilarawan ang ilang tool at library ng Python na gagamitin natin mamaya.

Teknolohiya

  • Ang Python ay isang binibigyang kahulugan, mataas na antas, pangkalahatang layunin na programming language. Ang pangunahing bentahe ng wika ay ang malaking aklatan ng matematika, ML at AI na mga aklatan. Tulad ng ObjectScript, ito ay isang object-oriented na wika, ngunit ang lahat ay dynamic na tinukoy sa halip na statically. Gayundin ang lahat ay isang bagay. Ang mga susunod na artikulo ay ipinapalagay ang isang dumaan na pamilyar sa wika. Kung gusto mong simulan ang pag-aaral, inirerekumenda kong magsimula sa dokumentasyon.
  • Para sa aming mga kasunod na pagsasanay, itakda Python 3.6.7 64 bit.
  • IDE: Ginagamit ko PyCharm, ngunit sa pangkalahatan sila много. Kung gumagamit ka ng Atelier, mayroong isang Eclipse plugin para sa mga developer ng Python. Kung gumagamit ka ng VS Code, mayroong isang extension para sa Python.
  • Notebook: Sa halip na isang IDE, maaari mong isulat at ibahagi ang iyong mga script sa mga online na notebook. Ang pinakasikat sa kanila ay jupyter.

Mga aklatan

Narito ang isang (hindi kumpletong) listahan ng mga library ng machine learning:

  • numpy — isang pangunahing pakete para sa tumpak na mga kalkulasyon.
  • Pandas — mga istruktura ng data na may mataas na pagganap at mga tool sa pagsusuri ng data.
  • matplotlib - paglikha ng mga graph.
  • taga-dagat — visualization ng data batay sa matplotlib.
  • Sklearn — mga pamamaraan sa pag-aaral ng makina.
  • XGBoost — machine learning algorithm sa loob ng balangkas ng gradient boosting methodology.
  • Gensim — NLP.
  • Keras - mga neural network.
  • daloy ng tensor — isang platform para sa paglikha ng mga modelo ng machine learning.
  • PyTorch ay isang platform para sa paglikha ng mga modelo ng machine learning, na nakatuon sa Python.
  • Nyoka - PMML mula sa iba't ibang mga modelo.

Ang mga teknolohiya ng AI/ML ay ginagawang mas mahusay at madaling ibagay ang negosyo. Bukod dito, ngayon ang mga teknolohiyang ito ay nagiging mas madaling bumuo at ipatupad. Simulan ang pag-aaral tungkol sa mga teknolohiya ng AI/ML at kung paano sila makakatulong sa iyong organisasyon na lumago.

Instalasyon

Mayroong ilang mga paraan upang i-install at gamitin ang Python Gateway:

  • OS
    • Windows
    • Linux
    • Kapote
  • Manggagawa sa pantalan
    • Gumamit ng larawan mula sa DockerHub
    • Lumikha ng iyong sariling hitsura

Anuman ang paraan ng pag-install, kakailanganin mo ang source code. Ang tanging lugar upang i-download ang code ay pahina ng paglabas. Naglalaman ito ng nasubok na mga stable na release, kunin lang ang pinakabago. Sa ngayon ito ay 0.8, ngunit sa paglipas ng panahon magkakaroon ng mga bago. Huwag i-clone/i-download ang repository, i-download ang pinakabagong release.

OS

Kung nag-i-install ka ng Python Gateway sa isang operating system, pagkatapos ay una (anuman ang operating system) kailangan mong i-install ang Python. Para dito:

  1. I-install ang Python 3.6.7 64 bit. Inirerekomenda na i-install ang Python sa default na direktoryo.
  2. I-install ang module dill: pip install dill.
  3. I-download ang ObjectScript code (i.e. do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) sa anumang lugar na may mga produkto. Kung nais mo ang isang umiiral na lugar upang suportahan ang mga produkto, patakbuhin ang: write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. Lugar callout DLL/SO/DYLIB sa folder bin iyong InterSystems IRIS instance. Dapat na available ang file ng library sa path na ibinalik write ##class(isc.py.Callout).GetLib().

Windows

  1. Siguraduhin ang variable ng kapaligiran PYTHONHOME tumuturo sa Python 3.6.7.
  2. Tiyaking ang variable ng kapaligiran ng system ay PATH naglalaman ng variable PYTHONHOME (o ang direktoryo na itinuturo nito).

Linux (Debian/Ubuntu)

  1. Suriin kung ang variable ng kapaligiran ay PATH ay naglalaman /usr/lib и /usr/lib/x86_64-linux-gnu. Gamitin ang file /etc/environment upang magtakda ng mga variable ng kapaligiran.
  2. Sa kaso ng mga pagkakamali undefined symbol: _Py_TrueStruct itakda ang setting PythonLib. din sa Readme mayroong isang seksyon ng Pag-troubleshoot.

Kapote

  1. Sa kasalukuyan, ang Python 3.6.7 lamang ang sinusuportahan python.org. Suriin ang variable PATH.

Kung binago mo ang mga variable ng kapaligiran, i-restart ang iyong produkto ng InterSystems.

Manggagawa sa pantalan

Ang paggamit ng mga lalagyan ay may ilang mga pakinabang:

  • Portability
  • Epektibo
  • Pagkakabukod
  • Kagaanan
  • Kawalang pagbabago

Tingnan mo ito serye ng mga artikulo para sa higit pang impormasyon tungkol sa paggamit ng Docker sa mga produkto ng InterSystems.

Ang lahat ng mga build ng Python Gateway ay kasalukuyang nakabatay sa container 2019.4.

Handa na larawan

Patakbuhin: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latestupang i-download at patakbuhin ang Python Gateway na may InterSystems IRIS Community Edition. Iyon lang.

Lumikha ng iyong sariling hitsura

Upang bumuo ng isang docker na imahe, tumakbo sa ugat ng repositoryo: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
Bilang default, ang imahe ay binuo batay sa larawan store/intersystems/iris-community:2019.4.0.383.0, gayunpaman maaari mong baguhin ito sa pamamagitan ng pagtatakda ng variable IMAGE.
Upang bumuo mula sa InterSystems IRIS, patakbuhin ang: `docker build --build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 --force-rm --tag intersystemscommunity/irispy:latest ".

Pagkatapos nito maaari mong patakbuhin ang imahe ng docker:

docker run -d 
  -p 52773:52773 
  -v /<HOST-DIR-WITH-iris.key>/:/mount 
  --name irispy 
  intersystemscommunity/irispy:latest 
  --key /mount/iris.key

Kung gumagamit ka ng larawan batay sa InterSystems IRIS Community Edition, maaari mong alisin ang susi.

Comments

  • Proseso ng pagsubok isc.py.test.Process nagse-save ng ilang larawan sa isang pansamantalang direktoryo. Maaaring gusto mong baguhin ang landas na ito sa naka-mount na direktoryo. Upang gawin ito, i-edit ang setting WorkingDir pagtukoy sa naka-mount na direktoryo.
  • Upang ma-access ang terminal run: docker exec -it irispy sh.
  • Access sa System Management Portal sa pamamagitan ng pag-login SuperUser/SYS.
  • Upang ihinto ang lalagyan, patakbuhin ang: docker stop irispy && docker rm --force irispy.

Bine-verify ang pag-install

Kapag na-install mo na ang Python Gateway, sulit na suriin kung gumagana ito. Isagawa ang code na ito sa InterSystems IRIS terminal:

set sc = ##class(isc.py.Callout).Setup() 
set sc = ##class(isc.py.Main).SimpleString("x='HELLO'", "x", , .var).
write var

Ang resulta ay dapat na: HELLO — Variable value ng Python x. Kung ang katayuan sa pagbabalik sc ay isang error o var walang laman, suriin Readme - Seksyon ng pag-troubleshoot.

API

Ang Python Gateway ay naka-install at na-verify mo na ito ay gumagana. Oras na para simulan itong gamitin!
Ang pangunahing interface sa Python ay isc.py.Main. Nag-aalok ito ng mga sumusunod na grupo ng mga pamamaraan (lahat ay bumalik %Status):

  • Pagpapatupad ng Code
  • Paglilipat ng data
  • Katulong

Pagpapatupad ng Code

Binibigyang-daan ka ng mga pamamaraang ito na magsagawa ng arbitrary Python code.

SimpleString

SimpleString - ito ang pangunahing pamamaraan. Kailangan ng 4 na opsyonal na argumento:

  • code — linya ng code na ipapatupad. Line feed character: $c(10).
  • returnVariable — pangalan ng variable na ibabalik.
  • serialization - paano mag-serialize returnVariable. 0 — string (default), 1 — repr.
  • result — ByRef reference sa variable kung saan nakasulat ang value returnVariable.

Sa itaas ginawa namin:

set sc = ##class(isc.py.Main).SimpleString("x='HELLO'", "x", , .var).

Sa halimbawang ito, nagtalaga kami sa isang variable ng Python x halaga Hello at nais na ibalik ang halaga ng isang variable ng Python x sa isang variable ng ObjectScript var.

ExecuteCode

Ang ExecuteCode ay isang mas ligtas at mas mahigpit na alternatibo SimpleString.
Ang mga linya sa InterSystems IRIS platform ay limitado sa 3 character, at kung gusto mong magsagawa ng mas mahabang piraso ng code, kailangan mong gumamit ng mga thread.
Dalawang argumento ang tinatanggap:

  • code — isang linya o stream ng Python code na isasagawa.
  • variable — (opsyonal) nagtatalaga ng resulta ng pagpapatupad code ang variable na Python na ito.

Halimbawang gagamitin:

set sc = ##class(isc.py.Main).ExecuteCode("2*3", "y").

Sa halimbawang ito, i-multiply namin ang 2 sa 3 at isulat ang resulta sa isang variable ng Python y.

Paglilipat ng data

Ipasa ang data papunta at mula sa Python.

Python -> InterSystems IRIS

Mayroong 4 na paraan upang makuha ang halaga ng isang variable ng Python sa InterSystems IRIS, depende sa serialization na kailangan mo:

  • String para sa mga simpleng uri ng data at pag-debug.
  • Repr para sa pag-iimbak ng mga simpleng bagay at pag-debug.
  • JSON para sa madaling pagmamanipula ng data sa panig ng InterSystems IRIS.
  • Pickle upang i-save ang mga bagay.

Binibigyang-daan ka ng mga paraang ito na kunin ang mga variable mula sa Python bilang isang string o mga stream.

  • GetVariable(variable, serialization, .stream, useString) - makuha serialization variable variable в stream. Kung useString ay 1 at ang serialization ay inilalagay sa isang string, pagkatapos ay isang string ay ibinalik at hindi isang stream.
  • GetVariableJson(variable, .stream, useString) — kumuha ng JSON serialization ng isang variable.
  • GetVariablePickle(variable, .stream, useString, useDill) -get Pickle (o Dill) serialization ng isang variable.

Subukan nating makuha ang ating variable y.

set sc = ##class(isc.py.Main).GetVariable("y", , .val, 1)
write val
>6

InterSystems IRIS -> Python

Naglo-load ng data mula sa InterSystems IRIS sa Python.

  • ExecuteQuery(query, variable, type, namespace) - lumilikha ng isang dataset (pandas dataframe o list) mula sa sql query at itinakda ito sa isang variable ng Python variable. Plastik na bag isc.py dapat na available sa lugar namespace — ang kahilingan ay isasagawa doon.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) - naglo-load ng pandaigdigang data global mula sa subscript start sa end sa Python bilang isang uri ng variable type: list, o mga panda dataframe. Paglalarawan ng mga opsyonal na argumento mask at labels magagamit sa dokumentasyon ng klase at imbakan Mga dokumento sa Paglilipat ng Data.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) - naglo-load ng data ng klase class mula sa id start sa end sa Python bilang isang uri ng variable type: list, o mga panda dataframe. properties — isang listahan (na pinaghihiwalay ng kuwit) ng mga katangian ng klase na kailangang i-load sa set ng data. Sinusuportahan ang mga maskara * и ?. Default - * (lahat ng pag-aari). Ari-arian %%CLASSNAME hindi pinansin.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) - naglo-load ng data ng talahanayan table mula sa id start sa end sa Python.

ExecuteQuery — universal (anumang tamang SQL query ay ipapasa sa Python). gayunpaman, ExecuteGlobal at mga balot nito ExecuteClass и ExecuteTable gumana na may ilang mga paghihigpit. Ang mga ito ay mas mabilis (3-5 beses na mas mabilis kaysa sa ODBC driver at 20 beses na mas mabilis ExecuteQuery). Higit pang impormasyon sa Mga dokumento sa Paglilipat ng Data.
Sinusuportahan ng lahat ng mga pamamaraang ito ang paglilipat ng data mula sa anumang lugar. Plastik na bag isc.py dapat na magagamit sa target na lugar.

ExecuteQuery

ExecuteQuery(request, variable, type, namespace) — paglilipat ng mga resulta ng anumang tamang SQL query sa Python. Ito ang pinakamabagal na paraan ng paglilipat ng data. Gamitin ito kung ExecuteGlobal at hindi available ang mga wrapper nito.

Mga Pangangatwiran:

  • query - sql query.
  • variable — ang pangalan ng variable ng Python kung saan nakasulat ang data.
  • type - list o mga Panda dataframe.
  • namespace — ang lugar kung saan isasagawa ang kahilingan.

ExecuteGlobal

ExecuteGlobal(global, variable, type, start, end, mask, labelels, namespace) - pagpasa ng isang global sa Python.

Mga Pangangatwiran:

  • global - pandaigdigang pangalan na wala ^
  • variable — ang pangalan ng variable ng Python kung saan nakasulat ang data.
  • type - list o mga Panda dataframe.
  • start — ang unang subscript ng global. Kailangan %Integer.
  • end — ang huling subscript ng global. Kailangan %Integer.
  • mask — global value mask. Ang mask ay maaaring mas maikli kaysa sa bilang ng mga field sa global (kung saan ang mga field sa dulo ay lalaktawan). Paano mag-format ng mask:
    • + ipasa ang halaga bilang ay.
    • - laktawan ang halaga.
    • b — Uri ng Boolean (0 - False, lahat ng iba pa - True).
    • d — Petsa (mula sa $horolog, sa Windows mula 1970, sa Linux mula 1900).
    • t — Oras ($horolog, segundo pagkatapos ng hatinggabi).
    • m — Timestamp (format string YEAR-MONTH-DAY HOUR:MINUTE:SECOND).
  • labels — %Listahan ng mga pangalan ng column. Ang unang elemento ay ang pangalan ng subscript.
  • namespace — ang lugar kung saan isasagawa ang kahilingan.

ExecuteClass

Balutin ExecuteGlobal. Batay sa kahulugan ng klase, naghahanda ng isang tawag ExecuteGlobal at tumatawag sa kanya.

ExecuteClass(class, variable, type, start, end, properties, namespace) - pagpasa ng data ng klase sa Python.

Mga Pangangatwiran:

  • class - pangalan ng klase
  • variable — ang pangalan ng variable ng Python kung saan nakasulat ang data.
  • type - list o mga Panda dataframe.
  • start — panimulang ID.
  • end — panghuling Id
  • properties — isang listahan (na pinaghihiwalay ng kuwit) ng mga katangian ng klase na kailangang i-load sa set ng data. Sinusuportahan ang mga maskara * и ?. Default - * (lahat ng pag-aari). Ari-arian %%CLASSNAME hindi pinansin.
  • namespace — ang lugar kung saan isasagawa ang kahilingan.

Ang lahat ng mga pag-aari ay ipinasa kung ano ay maliban sa mga katangian ng uri %Date, %Time, %Boolean и %TimeStamp - sila ay na-convert sa kaukulang mga klase ng Python.

ExecuteTable

Balutin ExecuteClass. Isinasalin ang pangalan ng talahanayan sa pangalan ng klase at mga tawag ExecuteClass. Lagda:

ExecuteTable(table, variable, type, start, end, properties, namespace) - pagpasa ng data ng talahanayan sa Python.

Mga Pangangatwiran:

  • table - pangalan ng talahanayan.
    Ang lahat ng iba pang mga argumento ay ipinasa gaya ng dati ExecuteClass.

Mga Tala

  • ExecuteGlobal, ExecuteClass и ExecuteTable magtrabaho nang pantay na mabilis.
  • ExecuteGlobal 20 beses na mas mabilis kaysa ExecuteQuery sa malalaking set ng data (oras ng paglipat >0.01 segundo).
  • ExecuteGlobal, ExecuteClass и ExecuteTable magtrabaho sa mga global na may ganitong istraktura: ^global(key) = $lb(prop1, prop2, ..., propN) saan key - isang integer.
  • Para sa ExecuteGlobal, ExecuteClass и ExecuteTable sinusuportahang hanay ng mga halaga %Date tumutugma sa saklaw mktime at depende sa OS (bintana: 1970-01-01, linux 1900-01-01, kapote). Gamitin %TimeStampupang maglipat ng data sa labas ng saklaw na ito o gumamit ng pandas dataframe dahil ito ay isang listahan-lamang na limitasyon.
  • Para sa ExecuteGlobal, ExecuteClass и ExecuteTable lahat ng argumento maliban sa data source (global, class o table) at variable ay opsyonal.

Mga halimbawa

Test klase isc.py.test.Person naglalaman ng paraan na nagpapakita ng lahat ng opsyon sa paglilipat ng data:

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)

Tawagan ang pamamaraan do ##class(isc.py.test.Person).Test() upang makita kung paano gumagana ang lahat ng paraan ng paglilipat ng data.

Mga Paraan ng Katulong

  • GetVariableInfo(variable, serialization, .defined, .type, .length) — kumuha ng impormasyon tungkol sa variable: kung ito ay tinukoy, ang klase nito at ang haba ng serialization.
  • GetVariableDefined(variable, .defined) — kung ang variable ay tinukoy.
  • GetVariableType(variable, .type) — kunin ang klase ng variable.
  • GetStatus() - kunin at alisin ang huling pagbubukod sa bahagi ng Python.
  • GetModuleInfo(module, .imported, .alias) — kumuha ng variable ng module at katayuan sa pag-import.
  • GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments) — kumuha ng impormasyon tungkol sa function.

Interoperability

Natutunan mo kung paano tumawag sa Python Gateway mula sa terminal, ngayon simulan natin itong gamitin sa produksyon. Ang batayan para sa pakikipag-ugnayan sa Python sa mode na ito ay isc.py.ens.Operation. Ito ay nagpapahintulot sa amin:

  • Ipatupad ang code sa Python
  • I-save/Ibalik ang konteksto ng Python
  • Mag-load at tumanggap ng data mula sa Python

Talaga, ang isang Python operation ay isang wrapper over isc.py.Main. Operasyon isc.py.ens.Operation nagbibigay ng kakayahang makipag-ugnayan sa proseso ng Python mula sa mga produkto ng InterSystems IRIS. Limang query ang sinusuportahan:

  • isc.py.msg.ExecutionRequest upang maisagawa ang Python code. Nagbabalik isc.py.msg.ExecutionResponse kasama ang resulta ng pagpapatupad at ang mga halaga ng hiniling na mga variable.
  • isc.py.msg.StreamExecutionRequest upang maisagawa ang Python code. Nagbabalik isc.py.msg.StreamExecutionResponse ang resulta ng pagpapatupad at ang mga halaga ng hiniling na mga variable. Analogue isc.py.msg.ExecutionRequest, ngunit tumatanggap at nagbabalik ng mga stream sa halip na mga string.
  • isc.py.msg.QueryRequest upang maipadala ang resulta ng pagsasagawa ng SQL query. Nagbabalik Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest para sa pagpasa ng global/class/table data. Nagbabalik Ens.Response.
  • isc.py.msg.SaveRequest upang i-save ang konteksto ng Python. Nagbabalik Ens.StringResponse may context ID.
  • isc.py.msg.RestoreRequest upang maibalik ang konteksto ng Python.

    Bilang karagdagan, isc.py.ens.Operation may dalawang setting:

    • Initializer — pagpili ng klase na nagpapatupad ng interface isc.py.init.Abstract. Maaari itong magamit upang i-load ang mga function, module, klase, atbp. Isinasagawa ito nang isang beses kapag nagsimula ang proseso.
    • PythonLib - (Linux lang) kung makakita ka ng mga error kapag naglo-load, itakda ang halaga nito sa libpython3.6m.so o kahit na sa buong landas sa Python library.

Paglikha ng mga proseso ng negosyo

Mayroong dalawang klase na magagamit na nagpapadali sa pagbuo ng mga proseso ng negosyo:

  • isc.py.ens.ProcessUtils nagbibigay-daan sa iyong mag-extract ng mga anotasyon mula sa mga aktibidad na may variable na pagpapalit.
  • isc.py.util.BPEmulator ginagawang madali ang pagsubok sa mga proseso ng negosyo gamit ang Python. Maaari itong magsagawa ng proseso ng negosyo (mga bahagi ng Python) sa kasalukuyang proseso.

Variable Substitution

Lahat ng proseso ng negosyo ay minana mula sa isc.py.ens.ProcessUtils, maaaring gamitin ang pamamaraan GetAnnotation(name) upang makuha ang halaga ng anotasyon ng aktibidad ayon sa pangalan nito. Ang anotasyon ng aktibidad ay maaaring maglaman ng mga variable na kakalkulahin sa panig ng InterSystems IRIS bago ipasa sa Python. Narito ang syntax para sa variable substitution:

  • ${class:method:arg1:...:argN} - tawag sa pamamaraan
  • #{expr} — execute code sa ObjectScript language.

Ang isang halimbawa ay magagamit sa pagsubok na proseso ng negosyo isc.py.test.Process, halimbawa, sa aktibidad Correlation Matrix: Graph: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). Sa halimbawang ito:

  • #{process.WorkDirectory} ibinabalik ang pag-aari ng WorkDirectory ng bagay process, na isang instance ng klase isc.py.test.Process mga. kasalukuyang proseso ng negosyo.
  • ${%PopulateUtils:Integer:1:100} tinatawag na isang pamamaraan Integer klase %PopulateUtils, pagpasa ng mga argumento 1 и 100, nagbabalik ng random na integer sa hanay 1...100.

Subukan ang proseso ng negosyo

Ang mga pagsubok na produkto at pagsubok na proseso ng negosyo ay available bilang default bilang bahagi ng Python Gateway. Upang gamitin ang mga ito:

  1. Sa OS terminal, patakbuhin ang: pip install pandas matplotlib seaborn.
  2. Sa InterSystems IRIS terminal, patakbuhin ang: do ##class(isc.py.test.CannibalizationData).Import() upang punan ang data ng pagsubok.
  3. Ilunsad ang mga produkto isc.py.test.Production.
  4. Ipadala ang uri ng kahilingan Ens.Request в isc.py.test.Process.

Tingnan natin kung paano ito gumagana nang magkasama. Bukas isc.py.test.Process sa editor ng BPL:

Python Gateway sa InterSystems IRIS

Pagpapatupad ng Code

Ang pinakamahalagang hamon ay ang pagpapatupad ng Python code:

Python Gateway sa InterSystems IRIS

Ginamit ang query isc.py.msg.ExecutionRequest, narito ang mga katangian nito:

  • Code — Python code.
  • SeparateLines — kung hahatiin ang code sa mga linya para sa pagpapatupad. $c(10) (n) ay ginagamit upang paghiwalayin ang mga string. Pakitandaan na HINDI inirerekumenda na iproseso ang buong mensahe nang sabay-sabay, ang function na ito ay inilaan lamang upang iproseso def at mga katulad na multiline na expression. Default 0.
  • Variables — isang listahan ng mga variable na pinaghihiwalay ng kuwit na idaragdag sa tugon.
  • Serialization — Paano i-serialize ang mga variable na gusto naming ibalik. Mga Pagpipilian: Str, Repr, JSON, Pickle и Dill, default Str.

Sa aming kaso, itinakda lamang namin ang pag-aari Code, kaya ginagamit ng lahat ng iba pang property ang mga default na value. Itinakda namin ito sa pamamagitan ng pagtawag process.GetAnnotation("Import pandas"), na sa runtime ay nagbabalik ng annotation pagkatapos maisagawa ang variable substitution. Pagkatapos ng lahat, ang code import pandas as pd ipapasa sa Python. GetAnnotation ay maaaring maging kapaki-pakinabang para sa pagkuha ng maraming linyang Python script, ngunit walang mga paghihigpit sa pamamaraang ito ng pagkuha ng code. Maaari mong itakda ang ari-arian Code sa anumang paraan na maginhawa para sa iyo.

Pagkuha ng mga Variable

Isa pang kawili-wiling hamon gamit isc.py.msg.ExecutionRequest - Correlation Matrix: Tabular:

Python Gateway sa InterSystems IRIS

Kinakalkula nito ang Correlation Matrix sa bahagi ng Python at kinukuha ang variable corrmat bumalik sa InterSystems IRIS sa JSON na format sa pamamagitan ng pagtatakda ng mga katangian ng kahilingan:

  • Variables: "corrmat"
  • Serialization: "JSON"

Makikita natin ang mga resulta sa Visual Trace:

Python Gateway sa InterSystems IRIS

At kung kailangan natin ang halagang ito sa BP, makukuha natin ito ng ganito: callresponse.Variables.GetAt("corrmat").

Paglilipat ng data

Susunod, pag-usapan natin ang paglilipat ng data mula sa InterSystems IRIS patungo sa Python; lahat ng kahilingan para sa paglilipat ng data ay nagpapatupad ng interface isc.py.msg.DataRequestna nagbibigay ng mga sumusunod na katangian:

  • Variable — isang variable ng Python kung saan nakasulat ang data.
  • Type — uri ng variable: dataframe (pandas dataframe) o list.
  • Namespace — ang lugar kung saan kami tumatanggap ng data. Plastik na bag isc.py dapat na magagamit sa lugar na ito. Ito ay maaaring isang lugar na walang suporta sa produkto.

Batay sa interface na ito, 4 na klase ng mga kahilingan ang ipinatupad:

  • isc.py.msg.QueryRequest - itakda ang ari-arian Query para magpadala ng SQL query.
  • isc.py.msg.ClassRequest - itakda ang ari-arian Class upang ipasa ang data ng klase.
  • isc.py.msg.TableRequest - itakda ang ari-arian Table upang ilipat ang data ng talahanayan.
  • isc.py.msg.GlobalRequest - itakda ang ari-arian Global para sa pandaigdigang paglilipat ng data.

Sa proseso ng pagsubok, tingnan ang aktibidad RAWSaan isc.py.msg.QueryRequest ipinapakita sa aksyon.

Python Gateway sa InterSystems IRIS

Pag-save/Pagpapanumbalik ng Konteksto ng Python

Sa wakas, maaari naming i-save ang konteksto ng Python sa InterSystems IRIS, para magawa ito ipapadala namin isc.py.msg.SaveRequest may mga argumento:

  • Mask — Ang mga variable lang na tumutugma sa mask ang nai-save. Sinusuportahan * и ?... Halimbawa: "Data*, Figure?". Default *.
  • MaxLength — Ang maximum na haba ng nakaimbak na variable. Kung mas mahaba ang serialization ng isang variable, hindi ito papansinin. Itakda sa 0 upang makakuha ng mga variable ng anumang haba. Default $$$MaxStringLength.
  • Name — Pangalan ng konteksto (opsyonal).
  • Description — Paglalarawan ng konteksto (opsyonal).

Nagbabalik Ens.StringResponse с Id naka-save na konteksto. Sa proseso ng pagsubok, tingnan ang aktibidad Save Context.

Kaugnay na kahilingan isc.py.msg.RestoreRequest naglo-load ng konteksto mula sa InterSystems IRIS sa Python:

  • ContextId — tagatukoy ng konteksto.
  • Clear — i-clear ang konteksto bago ibalik.

Jupiter Notebook

Jupiter Notebook ay isang open source na web application na nagbibigay-daan sa iyong gumawa at mag-publish ng mga notebook na naglalaman ng code, visualization, at text. Pinapayagan ka ng Python Gateway na tingnan at i-edit ang mga proseso ng BPL sa anyo ng isang Jupyter Notebook. Pakitandaan na kasalukuyang ginagamit ang normal na Python 3 executor.

Ipinapalagay ng extension na ito na ang mga anotasyon ay naglalaman ng Python code at gumagamit ng mga pangalan ng aktibidad bilang mga naunang pamagat. Posible na ngayong bumuo ng mga proseso ng negosyo ng PythonGateway sa Jupyter Notebook. Narito kung ano ang posible:

  • Lumikha ng mga bagong proseso ng negosyo
  • Tanggalin ang mga proseso ng negosyo
  • Lumikha ng mga bagong aktibidad
  • Baguhin ang mga aktibidad
  • Tanggalin ang mga aktibidad

Dito demo na video. At ilang mga screenshot:

Explorer ng Proseso

Python Gateway sa InterSystems IRIS

Editor ng proseso

Python Gateway sa InterSystems IRIS

Instalasyon

  1. Kakailanganin mo ang InterSystems IRIS 2019.2+.
  2. I-install ang PythonGateway v0.8+ (kailangan lang isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints и isc.py.ens.ProcessUtils).
  3. I-update ang ObjectScript code mula sa repository.
  4. Magpatupad do ##class(isc.py.util.Jupyter).Install() at sundin ang mga senyas.

Records.

Natuklasan

Ang MLToolkit ay isang set ng mga tool na ang layunin ay pagsamahin ang mga modelo at isang transactional na kapaligiran upang ang mga binuo na modelo ay madaling magamit nang direkta sa iyong mga proseso ng negosyo. Ang Python Gateway ay bahagi ng MLToolkit at nagbibigay ng integrasyon sa wikang Python, na nagbibigay-daan sa iyong i-orkestrate ang anumang machine learning algorithm na nilikha sa Python (ang pangunahing kapaligiran para sa maraming Data Scientist), gumamit ng maraming handa na mga aklatan upang mabilis na lumikha ng adaptive, robotic analytical AI / Mga solusyon sa ML sa platform ng InterSystems na IRIS.

sanggunian

MLToolkit

Ang MLToolkit user group ay isang pribadong GitHub repository na ginawa bilang bahagi ng InterSystems corporate GitHub organization. Ito ay inilaan para sa mga panlabas na user na nag-i-install, natututo, o gumagamit na ng mga bahagi ng MLToolkit, kabilang ang Python Gateway. Ang grupo ay may ilang ipinatupad na mga kaso (na may source code at data ng pagsubok) sa larangan ng marketing, pagmamanupaktura, medisina at marami pang ibang industriya. Upang sumali sa ML Toolkit User Group, mangyaring magpadala ng maikling email sa sumusunod na address: [protektado ng email] at isama ang sumusunod na impormasyon sa iyong liham:

  • GitHub username
  • Organisasyon (nagtatrabaho ka o nag-aaral)
  • Posisyon (ang iyong aktwal na posisyon sa iyong organisasyon, alinman sa "Mag-aaral" o "Independent").
  • Bansa

Para sa mga nakabasa ng artikulo at interesado sa mga kakayahan ng InterSystems IRIS bilang isang platform para sa pagbuo o pagho-host ng mga artificial intelligence at machine learning engine, inaanyayahan ka naming talakayin ang mga posibleng sitwasyon na interesado sa iyong negosyo. Ikalulugod naming suriin ang mga pangangailangan ng iyong kumpanya at sama-samang tukuyin ang isang plano ng aksyon; Makipag-ugnayan sa email address ng aming AI/ML expert team – [protektado ng email].

Pinagmulan: www.habr.com

Magdagdag ng komento