Gateway Python dalam InterSystems IRIS

Artikel ini adalah mengenai Python Gateway, projek komuniti sumber terbuka untuk platform data InterSystems IRIS. Projek ini membolehkan anda mengatur sebarang algoritma pembelajaran mesin yang dibuat dalam Python (persekitaran utama bagi kebanyakan Saintis Data), menggunakan banyak perpustakaan siap sedia untuk mencipta penyelesaian AI / ML analitik robotik adaptif dengan pantas pada platform InterSystems IRIS. Dalam artikel ini, saya akan menunjukkan cara InterSystems IRIS boleh mengatur proses dalam Python, menyampaikan data dua hala dengan cekap dan mencipta proses perniagaan yang pintar.

Plane

  1. Pengenalan.
  2. Alatan.
  3. Pemasangan.
  4. API.
  5. Saling kendali.
  6. Buku Nota Jupyter.
  7. Kesimpulan.
  8. Pautan.
  9. MLTToolkit.

Pengenalan

Python ialah bahasa pengaturcaraan tujuan umum peringkat tinggi yang bertujuan untuk meningkatkan produktiviti pembangun dan kebolehbacaan kod. Dalam siri artikel ini, saya akan membincangkan kemungkinan menggunakan Python pada platform InterSystems IRIS, dengan fokus utama artikel ini ialah penggunaan Python sebagai bahasa untuk mencipta dan menjalankan model pembelajaran mesin.

Pembelajaran mesin (ML) ialah kelas kaedah kecerdasan buatan, ciri ciri yang bukan penyelesaian langsung masalah, tetapi pembelajaran dalam proses menyelesaikan banyak masalah yang serupa.

Algoritma dan model pembelajaran mesin menjadi lebih biasa. Terdapat banyak sebab untuk ini, tetapi semuanya bergantung kepada kebolehaksesan, kesederhanaan dan mencapai hasil praktikal. Adakah pengelompokan atau pemodelan rangkaian saraf adalah teknologi baharu?

Sudah tentu tidak, tetapi pada masa kini tidak perlu menulis ratusan ribu baris kod untuk menjalankan satu model, dan kos mencipta dan menggunakan model semakin berkurangan.

Alat sedang berkembang - walaupun kami tidak mempunyai alatan AI/ML berpusatkan GUI sepenuhnya, kemajuan yang telah kami lihat dengan banyak kelas sistem maklumat lain, seperti BI (daripada menulis kod kepada menggunakan rangka kerja dan penyelesaian boleh dikonfigurasi berpusatkan GUI) , adalah juga diperhatikan dalam alatan untuk mencipta AI/ML. Kami telah pun melepasi peringkat menulis kod dan hari ini kami menggunakan rangka kerja untuk membina dan melatih model.

Penambahbaikan lain, seperti keupayaan untuk mengedarkan model pra-latihan di mana pengguna akhir hanya perlu menyelesaikan latihan model pada data khusus mereka, juga memudahkan untuk memulakan pembelajaran mesin. Kemajuan ini menjadikan pembelajaran mesin pembelajaran lebih mudah untuk profesional dan syarikat secara amnya.

Sebaliknya, kami mengumpul lebih banyak data. Dengan platform data bersatu seperti InterSystems IRIS, semua maklumat ini boleh disediakan dengan segera dan digunakan sebagai input kepada model pembelajaran mesin.

Dengan peralihan ke awan, pelancaran projek AI/ML menjadi lebih mudah berbanding sebelum ini. Kita hanya boleh menggunakan sumber yang kita perlukan. Selain itu, terima kasih kepada penyejajaran yang ditawarkan oleh platform awan, kami dapat menjimatkan masa yang dihabiskan.

Tetapi bagaimana dengan hasilnya? Di sinilah keadaan menjadi lebih rumit. Terdapat banyak alat untuk membina model, yang akan saya bincangkan seterusnya. Membina model yang baik bukanlah mudah, tetapi apa yang seterusnya? Membuat keuntungan daripada menggunakan model perniagaan juga merupakan tugas yang tidak remeh. Punca masalah ialah pemisahan beban kerja analitikal dan transaksi, dan model data. Apabila kami melatih model, kami biasanya melakukannya berdasarkan data sejarah. Tetapi tempat untuk model yang dibina adalah dalam pemprosesan data transaksi. Apakah kebaikan model pengesanan transaksi penipuan yang terbaik jika kita menjalankannya sekali sehari? Penipu telah lama meninggalkan wang itu. Kami perlu melatih model pada data sejarah, tetapi kami juga perlu menerapkannya dalam masa nyata pada data masuk baharu supaya proses perniagaan kami boleh bertindak mengikut ramalan yang dibuat oleh model.

ML Toolkit ialah satu set alatan yang bertujuan untuk melakukan perkara itu sahaja: menyatukan model dan persekitaran transaksi supaya model yang dibina boleh digunakan secara langsung dalam proses perniagaan anda dengan mudah. Python Gateway ialah sebahagian daripada ML Toolkit dan menyediakan integrasi dengan bahasa Python (sama seperti bagaimana R Gateway, menjadi sebahagian daripada ML Toolkit menyediakan integrasi dengan bahasa R).

Alat

Sebelum kita meneruskan, saya ingin menerangkan beberapa alat dan perpustakaan Python yang akan kita gunakan kemudian.

Teknologi

  • Python ialah bahasa pengaturcaraan tujuan umum yang ditafsirkan, peringkat tinggi. Kelebihan utama bahasa ini ialah perpustakaan besar perpustakaan matematik, ML dan AI. Seperti ObjectScript, ia adalah bahasa berorientasikan objek, tetapi semuanya ditakrifkan secara dinamik dan bukannya statik. Juga segala-galanya adalah objek. Artikel kemudiannya menganggap bahasa itu sudah biasa. Jika anda ingin mula belajar, saya cadangkan bermula dengan dokumentasi.
  • Untuk latihan seterusnya kami, tetapkan Python 3.6.7 64 bit.
  • IDE: Saya guna PyCharm, tetapi secara umumnya mereka много. Jika anda menggunakan Atelier, terdapat pemalam Eclipse untuk pembangun Python. Jika anda menggunakan Kod VS, terdapat sambungan untuk Python.
  • Buku Nota: Daripada IDE, anda boleh menulis dan berkongsi skrip anda dalam buku nota dalam talian. Yang paling popular ialah Musytari.

Perpustakaan

Berikut ialah senarai (tidak lengkap) perpustakaan pembelajaran mesin:

  • Kekenyangan — pakej asas untuk pengiraan yang tepat.
  • Pandas — struktur data berprestasi tinggi dan alat analisis data.
  • Matplotlib - penciptaan graf.
  • Laut Laut — visualisasi data berdasarkan matplotlib.
  • Sklearn — kaedah pembelajaran mesin.
  • XGBoost — algoritma pembelajaran mesin dalam rangka metodologi peningkatan kecerunan.
  • Gensim - NLP.
  • Keras - rangkaian saraf.
  • Aliran Tensor — platform untuk mencipta model pembelajaran mesin.
  • PyTorch ialah platform untuk mencipta model pembelajaran mesin, memfokuskan pada Python.
  • Nyoka - PMML daripada pelbagai model.

Teknologi AI/ML menjadikan perniagaan lebih cekap dan boleh disesuaikan. Lebih-lebih lagi, hari ini teknologi ini menjadi lebih mudah untuk dibangunkan dan dilaksanakan. Mula belajar tentang teknologi AI/ML dan cara ia boleh membantu organisasi anda berkembang.

Pemasangan

Terdapat beberapa cara untuk memasang dan menggunakan Gateway Python:

  • OS
    • Windows
    • Linux
    • Mac
  • buruh pelabuhan
    • Gunakan imej daripada DockerHub
    • Cipta penampilan anda sendiri

Tidak kira kaedah pemasangan, anda memerlukan kod sumber. Satu-satunya tempat untuk memuat turun kod adalah halaman keluaran. Ia mengandungi keluaran stabil yang diuji, cuma ambil yang terkini. Pada masa ini ia adalah 0.8, tetapi lama kelamaan akan ada yang baru. Jangan klon/muat turun repositori, muat turun keluaran terkini.

OS

Jika anda memasang Python Gateway pada sistem pengendalian, mula-mula (tanpa mengira sistem pengendalian) anda perlu memasang Python. Untuk ini:

  1. Pasang Python 3.6.7 64 bit. Adalah disyorkan untuk memasang Python dalam direktori lalai.
  2. Pasang modul dill: pip install dill.
  3. Muat turun kod ObjectScript (iaitu. do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) ke mana-mana kawasan dengan produk. Sekiranya anda mahukan kawasan sedia ada untuk menyokong produk, jalankan: write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. Tempat petak bual DLL/SO/DYLIB ke folder bin contoh IRIS InterSystems anda. Fail perpustakaan mesti tersedia dalam laluan yang dikembalikan write ##class(isc.py.Callout).GetLib().

Windows

  1. Pastikan pembolehubah persekitaran PYTHONHOME menunjuk kepada Python 3.6.7.
  2. Pastikan pembolehubah persekitaran sistem adalah PATH mengandungi pembolehubah PYTHONHOME (atau direktori yang ditunjukkannya).

Linux (Debian/Ubuntu)

  1. Semak sama ada pembolehubah persekitaran adalah PATH mengandungi /usr/lib и /usr/lib/x86_64-linux-gnu. Gunakan fail /etc/environment untuk menetapkan pembolehubah persekitaran.
  2. Sekiranya berlaku kesilapan undefined symbol: _Py_TrueStruct tetapkan tetapan PythonLib. juga dalam Readme terdapat bahagian Penyelesaian Masalah.

Mac

  1. Pada masa ini hanya Python 3.6.7 disokong python.org. Semak pembolehubah PATH.

Jika anda menukar pembolehubah persekitaran, mulakan semula produk InterSystems anda.

buruh pelabuhan

Menggunakan bekas mempunyai beberapa kelebihan:

  • Mudah alih
  • Keberkesanan
  • Insulation
  • Keringanan
  • Ketidakbolehubahan

Semak ini siri artikel untuk mendapatkan maklumat lanjut tentang menggunakan Docker dengan produk InterSystems.

Semua binaan Python Gateway pada masa ini berasaskan kontena 2019.4.

Gambar sedia

Jalankan: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latestuntuk memuat turun dan menjalankan Python Gateway dengan InterSystems IRIS Community Edition. Itu sahaja.

Cipta penampilan anda sendiri

Untuk membina imej docker, jalankan dalam akar repositori: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
Secara lalai, imej dibina berdasarkan imej store/intersystems/iris-community:2019.4.0.383.0, walau bagaimanapun anda boleh mengubahnya dengan menetapkan pembolehubah IMAGE.
Untuk membina daripada InterSystems IRIS, jalankan: `docker build --build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 --force-rm --tag intersystemscommunity/irispy:latest ".

Selepas ini anda boleh menjalankan imej docker:

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

Jika anda menggunakan imej berdasarkan InterSystems IRIS Edisi Komuniti, anda boleh meninggalkan kunci.

Comments

  • Proses ujian isc.py.test.Process menyimpan beberapa imej ke direktori sementara. Anda mungkin mahu menukar laluan ini kepada direktori yang dipasang. Untuk melakukan ini, edit tetapan WorkingDir menentukan direktori yang dipasang.
  • Untuk mengakses larian terminal: docker exec -it irispy sh.
  • Akses ke Portal Pengurusan Sistem dengan log masuk SuperUser/SYS.
  • Untuk menghentikan bekas, jalankan: docker stop irispy && docker rm --force irispy.

Mengesahkan pemasangan

Sebaik sahaja anda telah memasang Python Gateway, anda perlu menyemak bahawa ia berfungsi. Jalankan kod ini dalam terminal InterSystems IRIS:

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

Hasilnya sepatutnya: HELLO — Nilai pembolehubah Python x. Jika status pulangan sc adalah kesilapan atau var kosong, semak Readme - Bahagian penyelesaian masalah.

API

Python Gateway dipasang dan anda telah mengesahkan bahawa ia berfungsi. Sudah tiba masanya untuk mula menggunakannya!
Antara muka utama kepada Python ialah isc.py.Main. Ia menawarkan kumpulan kaedah berikut (semua kembali %Status):

  • Pelaksanaan Kod
  • Pemindahan data
  • Anak syarikat

Pelaksanaan Kod

Kaedah ini membolehkan anda melaksanakan kod Python sewenang-wenangnya.

SimpleString

SimpleString - ini adalah kaedah utama. Ia memerlukan 4 hujah pilihan:

  • code — baris kod untuk dilaksanakan. Watak suapan baris: $c(10).
  • returnVariable — nama pembolehubah untuk dikembalikan.
  • serialization - bagaimana untuk bersiri returnVariable. 0 — rentetan (lalai), 1 — repr.
  • result — ByRef merujuk kepada pembolehubah di mana nilai ditulis returnVariable.

Di atas kami lakukan:

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

Dalam contoh ini, kami menetapkan kepada pembolehubah Python x nilai Hello dan ingin mengembalikan nilai pembolehubah Python x kepada pembolehubah ObjectScript var.

ExecuteCode

ExecuteCode ialah alternatif yang lebih selamat dan kurang ketat SimpleString.
Baris dalam platform InterSystems IRIS terhad kepada 3 aksara, dan jika anda ingin melaksanakan sekeping kod yang lebih panjang, anda perlu menggunakan benang.
Dua hujah diterima:

  • code — baris atau aliran kod Python untuk dilaksanakan.
  • variable — (pilihan) memberikan hasil pelaksanaan code pembolehubah Python ini.

Contoh untuk digunakan:

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

Dalam contoh ini, kita darab 2 dengan 3 dan menulis hasilnya kepada pembolehubah Python y.

Pemindahan data

Hantar data ke dan dari Python.

Python -> InterSystems IRIS

Terdapat 4 cara untuk mendapatkan nilai pembolehubah Python dalam InterSystems IRIS, bergantung pada siri yang anda perlukan:

  • String untuk jenis data mudah dan penyahpepijatan.
  • Repr untuk menyimpan objek mudah dan nyahpepijat.
  • JSON untuk manipulasi data yang mudah di sisi InterSystems IRIS.
  • Pickle untuk menyimpan objek.

Kaedah ini membolehkan anda mendapatkan semula pembolehubah daripada Python sebagai rentetan atau aliran.

  • GetVariable(variable, serialization, .stream, useString) - dapatkan serialization pemboleh ubah variable в stream. Jika useString ialah 1 dan siri diletakkan pada rentetan, kemudian rentetan dikembalikan dan bukan aliran.
  • GetVariableJson(variable, .stream, useString) — dapatkan siri JSON pembolehubah.
  • GetVariablePickle(variable, .stream, useString, useDill) -mendapatkan siri Pickle (atau Dill) pembolehubah.

Mari cuba dapatkan pembolehubah kami y.

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

InterSystems IRIS -> Python

Memuatkan data daripada InterSystems IRIS ke dalam Python.

  • ExecuteQuery(query, variable, type, namespace) - mencipta set data (pandas dataframe atau list) daripada pertanyaan sql dan menetapkannya kepada pembolehubah Python variable. Beg plastik isc.py mesti ada di kawasan tersebut namespace — permintaan akan dilaksanakan di sana.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) - memuatkan data global global daripada subskrip start kepada end dalam Python sebagai pembolehubah jenis type: list, atau panda dataframe. Penerangan tentang hujah pilihan mask and labels tersedia dalam dokumentasi kelas dan repositori Dokumen Pemindahan Data.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) - memuatkan data kelas class daripada id start kepada end dalam Python sebagai pembolehubah jenis type: list, atau panda dataframe. properties — senarai (dipisahkan dengan koma) sifat kelas yang perlu dimuatkan ke dalam set data. Topeng disokong * и ?. Lalai - * (semua sifat). Harta benda %%CLASSNAME diabaikan.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) - memuatkan data jadual table daripada id start kepada end dalam Python.

ExecuteQuery — universal (sebarang pertanyaan SQL yang betul akan dihantar kepada Python). Walau bagaimanapun, ExecuteGlobal dan pembalutnya ExecuteClass и ExecuteTable bekerja dengan beberapa sekatan. Mereka jauh lebih pantas (3-5 kali lebih pantas daripada pemandu ODBC dan 20 kali lebih pantas ExecuteQuery). Maklumat lanjut di Dokumen Pemindahan Data.
Semua kaedah ini menyokong pemindahan data dari mana-mana kawasan. Beg plastik isc.py mesti ada di kawasan sasaran.

ExecuteQuery

ExecuteQuery(request, variable, type, namespace) — memindahkan hasil sebarang pertanyaan SQL yang betul kepada Python. Ini adalah kaedah pemindahan data yang paling perlahan. Gunakannya jika ExecuteGlobal dan pembalutnya tidak tersedia.

Hujah:

  • query - pertanyaan sql.
  • variable — nama pembolehubah Python tempat data ditulis.
  • type - list atau Panda dataframe.
  • namespace — kawasan di mana permintaan akan dilaksanakan.

ExecuteGlobal

ExecuteGlobal(global, variable, type, start, end, mask, labelels, namespace) - lulus global dalam Python.

Hujah:

  • global - nama global tanpa ^
  • variable — nama pembolehubah Python tempat data ditulis.
  • type - list atau Panda dataframe.
  • start — subskrip pertama global. Semestinya %Integer.
  • end — subskrip terakhir global. Semestinya %Integer.
  • mask — topeng nilai global. Topeng boleh menjadi lebih pendek daripada bilangan medan dalam global (dalam keadaan ini medan pada penghujung akan dilangkau). Cara memformat topeng:
    • + lulus nilai sebagaimana adanya.
    • - nilai langkau.
    • b — Jenis Boolean (0 - False, selebihnya - True).
    • d — Tarikh (dari $horolog, pada Windows dari 1970, pada Linux dari 1900).
    • t — Masa ($horolog, saat selepas tengah malam).
    • m — Cap masa (rentetan format YEAR-MONTH-DAY HOUR:MINUTE:SECOND).
  • labels — %Senarai nama lajur. Elemen pertama ialah nama subskrip.
  • namespace — kawasan di mana permintaan akan dilaksanakan.

ExecuteClass

Bungkus ExecuteGlobal. Berdasarkan definisi kelas, menyediakan panggilan ExecuteGlobal dan memanggilnya.

ExecuteClass(class, variable, type, start, end, properties, namespace) - menghantar data kelas dalam Python.

Hujah:

  • class - nama kelas
  • variable — nama pembolehubah Python tempat data ditulis.
  • type - list atau Panda dataframe.
  • start - ID permulaan.
  • end - Id akhir
  • properties — senarai (dipisahkan dengan koma) sifat kelas yang perlu dimuatkan ke dalam set data. Topeng disokong * и ?. Lalai - * (semua sifat). Harta benda %%CLASSNAME diabaikan.
  • namespace — kawasan di mana permintaan akan dilaksanakan.

Semua sifat diluluskan sebagaimana adanya kecuali sifat jenis %Date, %Time, %Boolean и %TimeStamp - mereka ditukar kepada kelas Python yang sepadan.

Laksanakan Jadual

Bungkus ExecuteClass. Menterjemahkan nama jadual ke dalam nama kelas dan panggilan ExecuteClass. Tandatangan:

ExecuteTable(table, variable, type, start, end, properties, namespace) - menghantar data jadual kepada Python.

Hujah:

  • table - nama jadual.
    Semua hujah lain diluluskan sebagaimana adanya ExecuteClass.

Nota

  • ExecuteGlobal, ExecuteClass и ExecuteTable kerja sama cepat.
  • ExecuteGlobal 20 kali lebih cepat daripada ExecuteQuery pada set data yang besar (masa pemindahan >0.01 saat).
  • ExecuteGlobal, ExecuteClass и ExecuteTable bekerja pada global dengan struktur ini: ^global(key) = $lb(prop1, prop2, ..., propN) mana key Adalah bilangan bulat.
  • Untuk ExecuteGlobal, ExecuteClass и ExecuteTable julat nilai yang disokong %Date sepadan dengan julat mktime dan bergantung pada OS (tingkap: 1970-01-01, linux 1900-01-01, mac). guna %TimeStampuntuk memindahkan data di luar julat ini atau menggunakan bingkai data panda kerana ini adalah had senarai sahaja.
  • Untuk ExecuteGlobal, ExecuteClass и ExecuteTable semua hujah kecuali sumber data (global, kelas atau jadual) dan pembolehubah adalah pilihan.

contoh

Kelas ujian isc.py.test.Person mengandungi kaedah yang menunjukkan semua pilihan pemindahan 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)

Panggil kaedah do ##class(isc.py.test.Person).Test() untuk melihat cara semua kaedah pemindahan data berfungsi.

Kaedah Pembantu

  • GetVariableInfo(variable, serialization, .defined, .type, .length) — dapatkan maklumat tentang pembolehubah: sama ada ia ditakrifkan, kelas dan panjang bersirinya.
  • GetVariableDefined(variable, .defined) — sama ada pembolehubah ditakrifkan.
  • GetVariableType(variable, .type) - dapatkan kelas pembolehubah.
  • GetStatus() - dapatkan dan keluarkan pengecualian terakhir pada bahagian Python.
  • GetModuleInfo(module, .imported, .alias) — dapatkan pembolehubah modul dan status import.
  • GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments) — dapatkan maklumat tentang fungsi.

Kebolehoperasian

Anda telah mempelajari cara memanggil Python Gateway dari terminal, sekarang mari kita mula menggunakannya dalam pengeluaran. Asas untuk berinteraksi dengan Python dalam mod ini ialah isc.py.ens.Operation. Ia membolehkan kami:

  • Jalankan kod dalam Python
  • Simpan/Pulihkan konteks Python
  • Muatkan dan terima data daripada Python

Pada asasnya, operasi Python adalah pembalut berakhir isc.py.Main. Operasi isc.py.ens.Operation menyediakan keupayaan untuk berinteraksi dengan proses Python daripada produk InterSystems IRIS. Lima pertanyaan disokong:

  • isc.py.msg.ExecutionRequest untuk melaksanakan kod Python. Pulangan isc.py.msg.ExecutionResponse dengan hasil pelaksanaan dan nilai pembolehubah yang diminta.
  • isc.py.msg.StreamExecutionRequest untuk melaksanakan kod Python. Pulangan isc.py.msg.StreamExecutionResponse hasil pelaksanaan dan nilai pembolehubah yang diminta. Analog isc.py.msg.ExecutionRequest, tetapi menerima dan mengembalikan strim dan bukannya rentetan.
  • isc.py.msg.QueryRequest untuk menghantar hasil melaksanakan pertanyaan SQL. Pulangan Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest untuk menghantar data global/kelas/jadual. Pulangan Ens.Response.
  • isc.py.msg.SaveRequest untuk menyimpan konteks Python. Pulangan Ens.StringResponse dengan ID konteks.
  • isc.py.msg.RestoreRequest untuk memulihkan konteks Python.

    Tambahan pula, isc.py.ens.Operation mempunyai dua tetapan:

    • Initializer — memilih kelas yang melaksanakan antara muka isc.py.init.Abstract. Ia boleh digunakan untuk memuatkan fungsi, modul, kelas, dll. Ia dilaksanakan sekali apabila proses bermula.
    • PythonLib - (Linux sahaja) jika anda melihat ralat semasa memuatkan, tetapkan nilainya kepada libpython3.6m.so atau bahkan dalam laluan penuh ke perpustakaan Python.

Penciptaan proses perniagaan

Terdapat dua kelas tersedia yang memudahkan pembangunan proses perniagaan:

  • isc.py.ens.ProcessUtils membolehkan anda mengekstrak anotasi daripada aktiviti dengan penggantian berubah-ubah.
  • isc.py.util.BPEmulator memudahkan untuk menguji proses perniagaan dengan Python. Ia boleh melaksanakan proses perniagaan (bahagian Python) dalam proses semasa.

Penggantian Pembolehubah

Semua proses perniagaan diwarisi daripada isc.py.ens.ProcessUtils, boleh guna kaedah GetAnnotation(name) untuk mendapatkan nilai anotasi aktiviti dengan namanya. Anotasi aktiviti boleh mengandungi pembolehubah yang akan dikira pada bahagian InterSystems IRIS sebelum dihantar ke Python. Berikut ialah sintaks untuk penggantian pembolehubah:

  • ${class:method:arg1:...:argN} - panggilan kaedah
  • #{expr} — jalankan kod dalam bahasa ObjectScript.

Satu contoh tersedia dalam proses perniagaan ujian isc.py.test.Process, sebagai contoh, dalam aktiviti Correlation Matrix: Graph: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). Dalam contoh ini:

  • #{process.WorkDirectory} mengembalikan harta WorkDirectory objek process, yang merupakan contoh kelas isc.py.test.Process mereka. proses perniagaan semasa.
  • ${%PopulateUtils:Integer:1:100} memanggil kaedah Integer kelas %PopulateUtils, meluluskan hujah 1 и 100, mengembalikan integer rawak dalam julat 1...100.

Menguji proses perniagaan

Produk ujian dan proses perniagaan ujian tersedia secara lalai sebagai sebahagian daripada Gateway Python. Untuk menggunakannya:

  1. Dalam terminal OS, jalankan: pip install pandas matplotlib seaborn.
  2. Dalam terminal InterSystems IRIS, jalankan: do ##class(isc.py.test.CannibalizationData).Import() untuk mengisi data ujian.
  3. Lancarkan produk isc.py.test.Production.
  4. Hantar jenis permintaan Ens.Request в isc.py.test.Process.

Mari lihat bagaimana semuanya berfungsi bersama. Buka isc.py.test.Process dalam editor BPL:

Gateway Python dalam InterSystems IRIS

Pelaksanaan Kod

Cabaran yang paling penting ialah melaksanakan kod Python:

Gateway Python dalam InterSystems IRIS

Pertanyaan digunakan isc.py.msg.ExecutionRequest, berikut adalah sifat-sifatnya:

  • Code — Kod Python.
  • SeparateLines — sama ada untuk membahagikan kod kepada baris untuk pelaksanaan. $c(10) (n) digunakan untuk memisahkan rentetan. Sila ambil perhatian bahawa TIDAK disyorkan untuk memproses keseluruhan mesej sekaligus, fungsi ini hanya bertujuan untuk memproses def dan ungkapan berbilang baris yang serupa. Lalai 0.
  • Variables — senarai pembolehubah yang dipisahkan koma yang akan ditambahkan pada respons.
  • Serialization — Cara mensiri pembolehubah yang ingin kami kembalikan. Pilihan: Str, Repr, JSON, Pickle и Dill, lalai Str.

Dalam kes kami, kami hanya menetapkan harta Code, jadi semua sifat lain menggunakan nilai lalai. Kami menetapkannya dengan memanggil process.GetAnnotation("Import pandas"), yang pada masa jalan mengembalikan anotasi selepas penggantian pembolehubah telah dilakukan. Lagipun, kod import pandas as pd akan dihantar kepada Python. GetAnnotation mungkin berguna untuk mendapatkan skrip Python berbilang baris, tetapi tiada sekatan pada kaedah mendapatkan kod ini. Anda boleh menetapkan harta itu Code dalam apa jua cara yang sesuai untuk anda.

Mendapatkan Pembolehubah

Satu lagi cabaran menarik menggunakan isc.py.msg.ExecutionRequest - Correlation Matrix: Tabular:

Gateway Python dalam InterSystems IRIS

Ia mengira Matriks Korelasi pada bahagian Python dan mengekstrak pembolehubah corrmat kembali ke InterSystems IRIS dalam format JSON dengan menetapkan sifat permintaan:

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

Kita boleh melihat hasilnya dalam Visual Trace:

Gateway Python dalam InterSystems IRIS

Dan jika kita memerlukan nilai ini dalam BP, kita boleh mendapatkannya seperti ini: callresponse.Variables.GetAt("corrmat").

Pemindahan data

Seterusnya, mari bercakap tentang memindahkan data daripada InterSystems IRIS ke Python; semua permintaan untuk pemindahan data melaksanakan antara muka isc.py.msg.DataRequestyang menyediakan sifat-sifat berikut:

  • Variable — pembolehubah Python di mana data ditulis.
  • Type — jenis pembolehubah: dataframe (bingkai data panda) atau list.
  • Namespace — kawasan dari mana kami menerima data. Beg plastik isc.py harus ada di kawasan ini. Ini mungkin kawasan tanpa sokongan produk.

Berdasarkan antara muka ini, 4 kelas permintaan dilaksanakan:

  • isc.py.msg.QueryRequest - tetapkan harta Query untuk menghantar pertanyaan SQL.
  • isc.py.msg.ClassRequest - tetapkan harta Class untuk menghantar data kelas.
  • isc.py.msg.TableRequest - tetapkan harta Table untuk memindahkan data jadual.
  • isc.py.msg.GlobalRequest - tetapkan harta Global untuk pemindahan data global.

Dalam proses ujian, lihat aktiviti RAWJika isc.py.msg.QueryRequest ditunjukkan dalam tindakan.

Gateway Python dalam InterSystems IRIS

Menyimpan/Memulihkan Konteks Python

Akhirnya, kami boleh menyimpan konteks Python dalam InterSystems IRIS, untuk melakukan ini kami akan menghantar isc.py.msg.SaveRequest dengan hujah:

  • Mask — Hanya pembolehubah yang sepadan dengan topeng disimpan. Disokong * и ?. Contoh: "Data*, Figure?". lalai *.
  • MaxLength — Panjang maksimum pembolehubah yang disimpan. Jika siri pembolehubah lebih panjang, ia akan diabaikan. Tetapkan kepada 0 untuk mendapatkan pembolehubah dari sebarang panjang. Lalai $$$MaxStringLength.
  • Name — Nama konteks (pilihan).
  • Description — Penerangan konteks (pilihan).

Pulang Ens.StringResponse с Id konteks yang disimpan. Dalam proses ujian, lihat aktiviti Save Context.

Permintaan berkaitan isc.py.msg.RestoreRequest memuatkan konteks dari InterSystems IRIS ke dalam Python:

  • ContextId — pengecam konteks.
  • Clear — kosongkan konteks sebelum memulihkan.

Notebook Jupyter

Notebook Jupyter ialah aplikasi web sumber terbuka yang membolehkan anda membuat dan menerbitkan buku nota yang mengandungi kod, visualisasi dan teks. Python Gateway membolehkan anda melihat dan mengedit proses BPL dalam bentuk Buku Nota Jupyter. Sila ambil perhatian bahawa pelaksana Python 3 biasa sedang digunakan.

Sambungan ini menganggap bahawa anotasi mengandungi kod Python dan menggunakan nama aktiviti sebagai tajuk sebelumnya. Kini mungkin untuk membangunkan proses perniagaan PythonGateway dalam Jupyter Notebook. Inilah yang mungkin:

  • Buat proses perniagaan baharu
  • Padamkan proses perniagaan
  • Buat aktiviti baharu
  • Tukar aktiviti
  • Padamkan aktiviti

di sini ialah video demo. Dan beberapa tangkapan skrin:

Penjelajah Proses

Gateway Python dalam InterSystems IRIS

Editor proses

Gateway Python dalam InterSystems IRIS

Pemasangan

  1. Anda memerlukan InterSystems IRIS 2019.2+.
  2. Pasang PythonGateway v0.8+ (hanya diperlukan isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints и isc.py.ens.ProcessUtils).
  3. Kemas kini kod ObjectScript dari repositori.
  4. Laksanakan do ##class(isc.py.util.Jupyter).Install() dan ikut arahan.

Dokumentasi.

Penemuan

MLToolkit ialah satu set alat yang matlamatnya adalah untuk menggabungkan model dan persekitaran transaksi supaya model yang dibina boleh digunakan secara langsung dalam proses perniagaan anda dengan mudah. Python Gateway ialah sebahagian daripada MLToolkit dan menyediakan integrasi dengan bahasa Python, membolehkan anda mengatur sebarang algoritma pembelajaran mesin yang dicipta dalam Python (persekitaran utama untuk ramai Saintis Data), menggunakan banyak perpustakaan siap sedia untuk mencipta AI / analisis robotik yang adaptif dengan pantas. Penyelesaian ML pada platform InterSystems IRIS.

rujukan

MLTToolkit

Kumpulan pengguna MLToolkit ialah repositori GitHub peribadi yang dibuat sebagai sebahagian daripada organisasi GitHub korporat InterSystems. Ia bertujuan untuk pengguna luar yang memasang, belajar atau sudah menggunakan komponen MLToolkit, termasuk Gateway Python. Kumpulan itu mempunyai beberapa kes yang dilaksanakan (dengan kod sumber dan data ujian) dalam bidang pemasaran, pembuatan, perubatan dan banyak industri lain. Untuk menyertai Kumpulan Pengguna ML Toolkit, sila hantar e-mel ringkas ke alamat berikut: [e-mel dilindungi] dan sertakan maklumat berikut dalam surat anda:

  • nama pengguna GitHub
  • Organisasi (anda bekerja atau belajar)
  • Jawatan (jawatan sebenar anda dalam organisasi anda, sama ada "Pelajar" atau "Bebas").
  • Negara

Bagi mereka yang telah membaca artikel tersebut dan berminat dengan keupayaan InterSystems IRIS sebagai platform untuk membangunkan atau mengehoskan kecerdasan buatan dan enjin pembelajaran mesin, kami menjemput anda untuk membincangkan kemungkinan senario yang menarik minat perusahaan anda. Kami dengan senang hati akan menganalisis keperluan syarikat anda dan bersama-sama menentukan pelan tindakan; Alamat e-mel hubungan pasukan pakar AI/ML kami – [e-mel dilindungi].

Sumber: www.habr.com

Tambah komen