InterSystems IRIS の Python ゲヌトりェむ

この蚘事は、InterSystems IRIS デヌタ プラットフォヌムのオヌプン ゜ヌス コミュニティ プロゞェクトである Python Gateway に぀いお説明したす。 このプロゞェクトでは、Python (倚くのデヌタ サむ゚ンティストにずっお䞻芁な環境) で䜜成された機械孊習アルゎリズムを調敎し、倚数の既補ラむブラリを䜿甚しお、適応型のロボット分析 AI/ML ゜リュヌションを InterSystems IRIS プラットフォヌム䞊で迅速に䜜成できたす。 この蚘事では、InterSystems IRIS が Python でプロセスを調敎し、双方向デヌタを効率的に通信し、むンテリゞェントなビゞネス プロセスを䜜成する方法を説明したす。

蚈画

  1. はじめに。
  2. ツヌル。
  3. むンストヌル
  4. APIです。
  5. 盞互運甚性。
  6. ゞュピタヌノヌト。
  7. 結論。
  8. リンク。
  9. MLツヌルキット。

導入

Python は、開発者の生産性ずコヌドの可読性を向䞊させるこずを目的ずした高レベルの汎甚プログラミング蚀語です。 この䞀連の蚘事では、InterSystems IRIS プラットフォヌムで Python を䜿甚する可胜性に぀いお説明したす。この蚘事の䞻な焊点は、機械孊習モデルを䜜成および実行するための蚀語ずしお Python を䜿甚するこずです。

機械孊習 (ML) は人工知胜手法の䞀皮であり、その特城は、問題を盎接解決するのではなく、倚くの同様の問題を解決する過皋で孊習するこずです。

機械孊習のアルゎリズムずモデルは、より䞀般的になり぀぀ありたす。 これには倚くの理由がありたすが、結局のずころ、アクセスしやすさ、シンプルさ、そしお実甚的な結果の達成に垰着したす。 クラスタリング、あるいはニュヌラル ネットワヌク モデリングは新しいテクノロゞヌですか?

もちろんそうではありたせんが、珟圚では、単䞀のモデルを実行するために䜕十䞇行ものコヌドを蚘述する必芁はなくなり、モデルの䜜成ず䜿甚にかかるコストはたすたす䜎くなり぀぀ありたす。

ツヌルは進化しおいたす。完党に GUI 䞭心の AI/ML ツヌルはありたせんが、BI などの他の倚くのクラスの情報システムで芋おきた進歩は (コヌドの蚘述からフレヌムワヌクや GUI 䞭心の構成可胜な゜リュヌションの䜿甚たで)、 AI/ML を䜜成するツヌルでも芳察されたす。 私たちはすでにコヌドを曞く段階を過ぎおおり、珟圚はフレヌムワヌクを䜿甚しおモデルを構築およびトレヌニングしおいたす。

゚ンドナヌザヌが特定のデヌタでモデルのトレヌニングを完了するだけで枈む事前トレヌニング枈みモデルを配垃する機胜など、その他の改善点により、機械孊習を簡単に開始できるようになりたした。 これらの進歩により、専門家ず䞀般䌁業の䞡方にずっお、機械孊習の孊習がはるかに簡単になりたした。

その䞀方で、私たちはたすたす倚くのデヌタを収集しおいたす。 InterSystems IRIS のような統合デヌタ プラットフォヌムを䜿甚するず、これらすべおの情報をすぐに準備しお、機械孊習モデルぞの入力ずしお䜿甚できたす。

クラりドぞの移行により、AI/ML プロゞェクトの立ち䞊げがこれたでより簡単になりたした。 私たちは必芁なリ゜ヌスだけを消費するこずができたす。 さらに、クラりド プラットフォヌムが提䟛する䞊列化のおかげで、費やす時間を節玄できたす。

しかし、結果はどうでしょうか ここで事態はさらに耇雑になりたす。 モデルを構築するためのツヌルは数倚くありたすが、それに぀いおは次に説明したす。 優れたモデルを構築するのは簡単ではありたせんが、次に䜕をすればよいでしょうか? ビゞネスモデルを䜿甚しお利益を䞊げるこずも簡単な䜜業ではありたせん。 問題の根本は、分析ワヌクロヌドずトランザクション ワヌクロヌド、およびデヌタ モデルの分離にありたす。 モデルをトレヌニングするずきは、通垞、履歎デヌタに基づいおトレヌニングを行いたす。 ただし、構築されたモデルの圹割はトランザクション デヌタ凊理にありたす。 最適な䞍正取匕怜出モデルを XNUMX 日に XNUMX 回実行した堎合、どのような効果があるでしょうか? 詐欺垫たちはずっず前に金を持っお立ち去った。 履歎デヌタに基づいおモデルをトレヌニングする必芁がありたすが、ビゞネス プロセスがモデルによっお行われた予枬に基づいお動䜜できるように、新しい受信デヌタにモデルをリアルタむムで適甚する必芁もありたす。

ML ツヌルキットは、モデルずトランザクション環境を統合しお、構築されたモデルをビゞネス プロセスで盎接簡単に䜿甚できるようにするこずを目的ずしたツヌル セットです。 Python Gateway は ML Toolkit の䞀郚であり、Python 蚀語ずの統合を提䟛したす (ML Toolkit の䞀郚である R Gateway が R 蚀語ずの統合を提䟛するのず同様です)。

ツヌルキット

先に進む前に、埌で䜿甚する Python ツヌルずラむブラリに぀いおいく぀か説明したいず思いたす。

技術

  • Python は、むンタヌプリタ型の高レベルの汎甚プログラミング蚀語です。 この蚀語の䞻な利点は、数孊、ML、AI ラむブラリの倧芏暡なラむブラリであるこずです。 ObjectScript ず同様に、これはオブゞェクト指向蚀語ですが、すべおは静的ではなく動的に定矩されたす。 たた、すべおはオブゞェクトです。 以降の蚘事は、この蚀語にある皋床慣れおいるこずを前提ずしおいたす。 孊習を始めたい堎合は、から始めるこずをお勧めしたす ドキュメンテヌション.
  • 埌続の挔習では、次のように蚭定したす。 Python 3.6.7 64 ビット.
  • IDE: 䜿っおいたす PyCharm、しかし䞀般的に圌らは ЌМПгП。 Atelier を䜿甚する堎合は、Python 開発者向けの Eclipse プラグむンがありたす。 VS Code を䜿甚しおいる堎合は、Python 甚の拡匵機胜がありたす。
  • ノヌトブック: IDE の代わりに、オンラむン ノヌトブックでスクリプトを䜜成しお共有できたす。 その䞭で最も人気のあるのは、 ゞュピタヌ.

ラむブラリ

以䞋は機械孊習ラむブラリの (すべおではない) リストです。

  • ナンシヌ — 正確な蚈算のための基本的なパッケヌゞ。
  • パンダ — 高性胜のデヌタ構造ずデヌタ分析ツヌル。
  • matplotlib — グラフの䜜成。
  • シヌボヌン — matplotlib に基づくデヌタの芖芚化。
  • スクラヌン — 機械孊習手法。
  • XGブヌスト — 募配ブヌスティング手法の枠組み内の機械孊習アルゎリズム。
  • ゲンシム — NLP。
  • ケラス - ニュヌラルネットワヌク。
  • テン゜ルフロヌ — 機械孊習モデルを䜜成するためのプラットフォヌム。
  • パむトヌチ は、Python を䞭心ずした機械孊習モデルを䜜成するためのプラットフォヌムです。
  • nyoka - さたざたなモデルの PMML。

AI/ML テクノロゞヌにより、ビゞネスがより効率的になり、適応可胜になりたす。 さらに、今日では、これらのテクノロゞヌの開発ず実装が容易になっおきおいたす。 AI/ML テクノロゞヌず、それが組織の成長にどのように圹立぀かに぀いお孊び始めたしょう。

むンストヌル

Python Gateway をむンストヌルしお䜿甚するには、いく぀かの方法がありたす。

  • ОС
    • Windows
    • Linux
    • Mac
  • デッカヌ
    • DockerHub のむメヌゞを䜿甚する
    • 独自の倖芳を䜜成したす

むンストヌル方法に関係なく、゜ヌスコヌドが必芁になりたす。 コヌドをダりンロヌドできる唯䞀の堎所は、 リリヌスペヌゞ。 テスト枈みの安定版リリヌスが含たれおいるため、最新のものを䜿甚しおください。 珟時点では 0.8 ですが、時間の経過ずずもに新しいものが出おくるでしょう。 リポゞトリの耇補/ダりンロヌドを行わず、最新のリリヌスをダりンロヌドしおください。

ОС

Python Gateway をオペレヌティング システムにむンストヌルする堎合は、(オペレヌティング システムに関係なく) たず Python をむンストヌルする必芁がありたす。 このために

  1. Python 3.6.7 64 ビットをむンストヌルする。 Python はデフォルトのディレクトリにむンストヌルするこずをお勧めしたす。
  2. モゞュヌルをむンストヌルする dill: pip install dill.
  3. ObjectScript コヌドをダりンロヌドしたす (぀たり、 do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)補品のあるあらゆる゚リアに。 既存の゚リアで補品をサポヌトしたい堎合は、次を実行したす。 write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. 堎所 コヌルアりト DLL/SO/DYLIB フォルダに bin InterSystems IRIS むンスタンス。 ラむブラリ ファむルは返されたパスで䜿甚できる必芁がありたす write ##class(isc.py.Callout).GetLib().

Windows

  1. 環境倉数を確認しおください PYTHONHOME Python 3.6.7 を指したす。
  2. システム環境倉数が次であるこずを確認しおください。 PATH 倉数が含たれおいたす PYTHONHOME (たたはそれが指すディレクトリ)。

Linux (Debian/Ubuntu)

  1. 環境倉数が次であるこずを確認したす。 PATH 含たれおいたす /usr/lib О /usr/lib/x86_64-linux-gnu。 ファむルを䜿甚する /etc/environment 環境倉数を蚭定したす。
  2. ゚ラヌの堎合 undefined symbol: _Py_TrueStruct 蚭定をする PythonLib。 たた Readmeファむル トラブルシュヌティングセクションがありたす。

Mac

  1. 珟圚、Python 3.6.7 のみがサポヌトされおいたす Python.org。 倉数を確認しおください PATH.

環境倉数を倉曎した堎合は、むンタヌシステムズ補品を再起動したす。

デッカヌ

コンテナヌを䜿甚するず、次のような倚くの利点がありたす。

  • 移怍性
  • 有効性
  • 断熱
  • 軜さ
  • 䞍倉性

これをチェックしおください 䞀連の蚘事 むンタヌシステムズ補品での Docker の䜿甚の詳现に぀いおは、「Docker をむンタヌシステムズ補品で䜿甚する方法」を参照しおください。

珟圚、すべおの Python Gateway ビルドはコンテナベヌスです 2019.4.

準備完了むメヌゞ

走る docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latestInterSystems IRIS Community Edition で Python Gateway をダりンロヌドしお実行したす。 それだけです。

独自の倖芳を䜜成したす

Docker むメヌゞを構築するには、リポゞトリのルヌトで実行したす。 docker build --force-rm --tag intersystemscommunity/irispy:latest ..
デフォルトでは、むメヌゞはむメヌゞに基づいお構築されたす。 store/intersystems/iris-community:2019.4.0.383.0ただし、倉数を蚭定するこずでこれを倉曎できたす IMAGE.
InterSystems IRIS からビルドするには、「docker build --build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 --force-rm --tag intersystemscommunity/irispy:latest」を実行したす。

この埌、docker むメヌゞを実行できたす。

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

InterSystems IRIS Community Edition に基づくむメヌゞを䜿甚しおいる堎合は、キヌを省略できたす。

泚釈

  • テストプロセス isc.py.test.Process 倚数の画像を䞀時ディレクトリに保存したす。 このパスをマりントされたディレクトリに倉曎するこずもできたす。 これを行うには、蚭定を線集したす WorkingDir マりントされたディレクトリを指定したす。
  • タヌミナルにアクセスするには、次のコマンドを実行したす。 docker exec -it irispy sh.
  • ログむンによるシステム管理ポヌタルぞのアクセス SuperUser/SYS.
  • コンテナを停止するには、次を実行したす。 docker stop irispy && docker rm --force irispy.

むンストヌルの確認

Python Gateway をむンストヌルしたら、それが動䜜しおいるこずを確認しおください。 InterSystems IRIS タヌミナルで次のコヌドを実行したす。

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

結果は次のようになりたす。 HELLO — Python 倉数の倀 x。 返品ステヌタスの堎合 sc ゚ラヌであるか、 var 空です、チェックしおください Readme - トラブルシュヌティング セクション.

API

Python Gateway がむンストヌルされ、動䜜するこずが確認されたした。 さあ、䜿い始める時が来たした
Python ぞの䞻なむンタヌフェむスは次のずおりです。 isc.py.Main。 以䞋のメ゜ッドのグルヌプを提䟛したす (すべおのメ゜ッドが返されたす) %Status):

  • コヌドの実行
  • デヌタ転送
  • 補助的な

コヌドの実行

これらのメ゜ッドを䜿甚するず、任意の Python コヌドを実行できたす。

単玔な文字列

SimpleString - これが䞻な方法です。 4 ぀のオプションの匕数を取りたす。

  • code — 実行するコヌド行。 改行文字: $c(10).
  • returnVariable — 返す倉数の名前。
  • serialization - シリアル化する方法 returnVariable。 0 — 文字列 (デフォルト)、1 — 再珟。
  • result — ByRef 倀が曞き蟌たれる倉数ぞの参照 returnVariable.

䞊蚘では次のようにしたした。

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

この䟋では、Python 倉数に代入したす。 x зМачеМОе Hello Python 倉数の倀を返したい x ObjectScript 倉数ぞ var.

コヌドの実行

ExecuteCode は、より安党で制限の少ない代替手段です SimpleString.
InterSystems IRIS プラットフォヌムの行数は 3 文字に制限されおおり、それより長いコヌドを実行する堎合はスレッドを䜿甚する必芁がありたす。
次の XNUMX ぀の匕数が受け入れられたす。

  • code — 実行される Python コヌドの行たたはストリヌム。
  • variable — (オプション) 実行結果を割り圓おたす。 code この Python 倉数。

䜿甚䟋:

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

この䟋では、2 ず 3 を乗算し、結果を Python 倉数に曞き蟌みたす。 y.

デヌタ転送

Python ずの間でデヌタを受け枡したす。

Python -> むンタヌシステムズ IRIS

InterSystems IRIS で Python 倉数の倀を取埗するには、必芁なシリアル化に応じお 4 ぀の方法がありたす。

  • String 単玔なデヌタ型ずデバッグ甚。
  • Repr 単玔なオブゞェクトの保存ずデバッグに䜿甚されたす。
  • JSON InterSystems IRIS 偎でのデヌタ操䜜を容易にしたす。
  • Pickle オブゞェクトを保存したす。

これらのメ゜ッドを䜿甚するず、Python から倉数を文字列たたはストリヌムずしお取埗できたす。

  • GetVariable(variable, serialization, .stream, useString) - 埗る serialization 倉数 variable в stream。 もし useString が 1 で、シリアル化が文字列に配眮されるず、ストリヌムではなく文字列が返されたす。
  • GetVariableJson(variable, .stream, useString) — 倉数の JSON シリアル化を取埗したす。
  • GetVariablePickle(variable, .stream, useString, useDill) -get 倉数の Pickle (たたは Dill) シリアル化。

倉数を取埗しおみたしょう y.

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

むンタヌシステムズ 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 倚くの制限がある䞭で䜜業したす。 非垞に高速です (ODBC ドラむバヌより 3  5 倍、20 倍高速です) ExecuteQuery。 詳现に぀いおは、 デヌタ転送に関するドキュメント.
これらの方法はすべお、あらゆる゚リアからのデヌタ転送をサポヌトしたす。 ビニヌル袋 isc.py 察象゚リアで利甚可胜である必芁がありたす。

ク゚リの実行

ExecuteQuery(request, variable, type, namespace) — 正しい SQL ク゚リの結果を Python に転送したす。 これは最も遅いデヌタ転送方法です。 以䞋の堎合に䜿甚しおください ExecuteGlobal そしおそのラッパヌは利甚できたせん。

匕数

  • query - SQLク゚リ。
  • variable — デヌタが曞き蟌たれる Python 倉数の名前。
  • type - list たたはパンダ dataframe.
  • namespace — リク゚ストが実行される領域。

実行グロヌバル

ExecuteGlobal(global, variable, type, start, end, mask, labelels, namespace) - Python でグロヌバルを枡す。

匕数

  • global - グロヌバル名なし ^
  • variable — デヌタが曞き蟌たれる Python 倉数の名前。
  • type - list たたはパンダ dataframe.
  • start — グロヌバルの最初の添字。 必然的に %Integer.
  • end — グロヌバルの最埌の添字。 必然的に %Integer.
  • mask — グロヌバル倀マスク。 マスクはグロヌバル内のフィヌルドの数よりも短くするこずができたす (その堎合、最埌のフィヌルドはスキップされたす)。 マスクをフォヌマットする方法:
    • + 倀をそのたた枡したす。
    • - スキップ倀。
    • b — ブヌル型 (0 - False、残りはすべお - True).
    • d — 日付 ($horolog より、Windows では 1970 幎から、Linux では 1900 幎から)。
    • t — 時間 ($horolog、午前 XNUMX 時からの秒数)。
    • m — タむムスタンプ (圢匏文字列 YEAR-MONTH-DAY HOUR:MINUTE:SECOND)。
  • labels — %列名のリスト。 最初の芁玠は添え字の名前です。
  • namespace — リク゚ストが実行される領域。

実行クラス

ラップオヌバヌ ExecuteGlobal。 クラス定矩に基づいお呌び出しを準備したす ExecuteGlobal そしお圌に電話したす。

ExecuteClass(class, variable, type, start, end, properties, namespace) - Python でクラス デヌタを枡したす。

匕数

  • class - クラス名
  • variable — デヌタが曞き蟌たれる Python 倉数の名前。
  • type - list たたはパンダ dataframe.
  • start — 開始ID。
  • end — 最終ID
  • properties — デヌタセットにロヌドする必芁があるクラスプロパティのリスト (カンマで区切られおいたす)。 マスクのサポヌト * О ?。 デフォルト - * (すべおのプロパティ)。 財産 %%CLASSNAME 無芖されたした。
  • namespace — リク゚ストが実行される領域。

型プロパティを陀くすべおのプロパティはそのたた枡されたす。 %Date, %Time, %Boolean О %TimeStamp - 察応する Python クラスに倉換されたす。

実行テヌブル

ラップオヌバヌ ExecuteClass。 テヌブル名をクラス名に倉換しお呌び出したす。 ExecuteClass。 サむン

ExecuteTable(table, variable, type, start, end, properties, namespace) - テヌブル デヌタを Python に枡したす。

匕数

  • 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 OSによっお異なりたすりィンドりズ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) — 倉数が定矩されおいるかどうか。
  • GetVariableType(variable, .type) — 倉数のクラスを取埗したす。
  • GetStatus() - Python 偎で最埌の䟋倖を取埗しお削陀したす。
  • GetModuleInfo(module, .imported, .alias) — モゞュヌル倉数ずむンポヌトステヌタスを取埗したす。
  • GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments) — 関数に関する情報を取埗したす。

盞互運甚性

タヌミナルから Python Gateway を呌び出す方法を孊習したした。今床は実皌働環境で Python Gateway を䜿甚しおみたしょう。 このモヌドで Python を操䜜するための基瀎は次のずおりです。 isc.py.ens.Operation。 それにより次のこずが可胜になりたす。

  • Pythonでコヌドを実行する
  • Python コンテキストの保存/埩元
  • Python からデヌタをロヌドおよび受信する

基本的に、Python 操䜜はラッパヌです。 isc.py.Main。 手術 isc.py.ens.Operation InterSystems IRIS 補品から Python プロセスず察話する機胜を提䟛したす。 次の XNUMX ぀のク゚リがサポヌトされおいたす。

  • 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 XNUMX ぀の蚭定がありたす:

    • Initializer — むンタヌフェヌスを実装するクラスの遞択 isc.py.init.Abstract。 関数、モゞュヌル、クラスなどをロヌドするために䜿甚できたす。 プロセス開始時に䞀床実行されたす。
    • PythonLib - (Linux のみ) ロヌド時に゚ラヌが衚瀺された堎合は、その倀を次のように蚭定したす。 libpython3.6m.so たたは Python ラむブラリぞのフルパスでも。

ビゞネスプロセスの䜜成

ビゞネス プロセスの開発を容易にする XNUMX ぀のクラスが利甚可胜です。

  • isc.py.ens.ProcessUtils 倉数眮換を䜿甚しおアクティビティからアノテヌションを抜出できたす。
  • isc.py.util.BPEmulator Python を䜿甚しおビゞネス プロセスを簡単にテストできたす。 珟圚のプロセス内でビゞネスプロセスPython郚品を実行できたす。

倉数の眮換

すべおのビゞネス プロセスは次から継承されたす。 isc.py.ens.ProcessUtils、メ゜ッドを䜿甚できたす GetAnnotation(name) アクティビティのアノテヌション倀を名前で取埗したす。 アクティビティ アノテヌションには、Python に枡される前に InterSystems IRIS 偎で蚈算される倉数を含めるこずができたす。 倉数眮換の構文は次のずおりです。

  • ${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 ゲヌトりェむの䞀郚ずしおデフォルトで利甚可胜です。 それらを䜿甚するには:

  1. OS タヌミナルで次を実行したす。 pip install pandas matplotlib seaborn.
  2. InterSystems IRIS タヌミナルで、次を実行したす。 do ##class(isc.py.test.CannibalizationData).Import() テストデヌタを入力したす。
  3. 補品を発売する isc.py.test.Production.
  4. 送信リク゚ストタむプ Ens.Request в isc.py.test.Process.

すべおがどのように連携しお機胜するかを芋おみたしょう。 開ける isc.py.test.Process BPL ゚ディタヌで:

InterSystems IRIS の Python ゲヌトりェむ

コヌドの実行

最も重芁な課題は、Python コヌドを実行するこずです。

InterSystems IRIS の 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 あなたにずっお郜合の良い方法で。

倉数の取埗

を䜿甚したもう XNUMX ぀の興味深い課題 isc.py.msg.ExecutionRequest - Correlation Matrix: Tabular:

InterSystems IRIS の Python ゲヌトりェむ

Python偎で盞関行列を蚈算し、倉数を抜出したす。 corrmat リク゚ストのプロパティを蚭定しお、JSON 圢匏で InterSystems IRIS に戻りたす。

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

結果は Visual Trace で確認できたす。

InterSystems IRIS の Python ゲヌトりェむ

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 アクションで瀺されおいたす。

InterSystems IRIS の Python ゲヌトりェむ

Python コンテキストの保存/埩元

最埌に、Python コンテキストを InterSystems IRIS に保存できたす。これを行うには、 isc.py.msg.SaveRequest 匕数付き:

  • Mask — マスクに䞀臎する倉数のみが保存されたす。 サポヌトされおいたす * О ?。 䟋 "Data*, Figure?"。 デフォルト *.
  • MaxLength — 栌玍される倉数の最倧長。 倉数のシリアル化が長い堎合は無芖されたす。 任意の長さの倉数を取埗するには、0 に蚭定したす。 デフォルト $$$MaxStringLength.
  • Name — コンテキスト名 (オプション)。
  • Description — コンテキストの説明 (オプション)。

戻り倀 Ens.StringResponse с Id 保存されたコンテキスト。 テストプロセスでアクティビティを確認したす Save Context.

関連リク゚スト isc.py.msg.RestoreRequest InterSystems IRIS から Python にコンテキストをロヌドしたす。

  • ContextId — コンテキスト識別子。
  • Clear — 埩元する前にコンテキストをクリアしたす。

ゞュピタヌノヌト

ゞュピタヌノヌト は、コヌド、ビゞュアラむれヌション、テキストを含むノヌトブックを䜜成および公開できるオヌプン ゜ヌス Web アプリケヌションです。 Python Gateway を䜿甚するず、BPL プロセスを Jupyter Notebook の圢匏で衚瀺および線集できたす。 珟圚、通垞の Python 3 ゚グれキュヌタヌが䜿甚されおいるこずに泚意しおください。

この拡匵機胜は、泚釈に Python コヌドが含たれおいるこずを前提ずし、アクティビティ名を先行タむトルずしお䜿甚したす。 Jupyter Notebook で PythonGateway ビゞネス プロセスを開発できるようになりたした。 可胜なこずは次のずおりです。

  • 新しいビゞネスプロセスを䜜成する
  • ビゞネスプロセスを削陀する
  • 新しいアクティビティを䜜成する
  • 倉曎掻動
  • アクティビティの削陀

ここで デモビデオ。 そしおいく぀かのスクリヌンショット:

プロセス゚クスプロヌラヌ

InterSystems IRIS の Python ゲヌトりェむ

プロセス゚ディタヌ

InterSystems IRIS の Python ゲヌトりェむ

むンストヌル

  1. InterSystems IRIS 2019.2 以降が必芁です。
  2. PythonGateway v0.8+ をむンストヌルしたす (必須のみ) isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints О isc.py.ens.ProcessUtils).
  3. リポゞトリから ObjectScript コヌドを曎新したす。
  4. 実行する do ##class(isc.py.util.Jupyter).Install() そしおプロンプトに埓っおください。

ДПкуЌеМтацОя.

所芋

MLToolkit は、モデルずトランザクション環境を組み合わせお、構築されたモデルをビゞネス プロセスで簡単に盎接䜿甚できるようにするこずを目的ずした䞀連のツヌルです。 Python Gateway は MLToolkit の䞀郚であり、Python 蚀語ずの統合を提䟛したす。これにより、Python (倚くのデヌタ サむ゚ンティストにずっお䞻芁な環境) で䜜成された機械孊習アルゎリズムを調敎し、倚数の既補のラむブラリを䜿甚しお、適応性のあるロボット分析 AI を迅速に䜜成できたす。 InterSystems プラットフォヌム IRIS 䞊の ML ゜リュヌション。

リファレンス

MLツヌルキット

MLToolkit ナヌザヌ グルヌプは、InterSystems 䌁業 GitHub 組織の䞀郚ずしお䜜成されたプラむベヌト GitHub リポゞトリです。 これは、Python ゲヌトりェむを含む MLToolkit コンポヌネントをむンストヌル、孊習、たたはすでに䜿甚しおいる倖郚ナヌザヌを察象ずしおいたす。 このグルヌプは、マヌケティング、補造、医療、その他倚くの業界の分野で倚数の実装事䟋 (゜ヌス コヌドずテスト デヌタを含む) を持っおいたす。 ML Toolkit ナヌザヌ グルヌプに参加するには、次のアドレスに短い電子メヌルを送信しおください。 [メヌル保護] そしお、手玙には次の情報を含めおください。

  • GitHubのナヌザヌ名
  • 組織仕事たたは勉匷
  • 圹職 (組織内での実際の圹職、「孊生」たたは「独立者」のいずれか)。
  • 囜

この蚘事を読んで、人工知胜および機械孊習゚ンゞンを開発たたはホストするためのプラットフォヌムずしおの InterSystems IRIS の機胜に興味がある方は、貎瀟にずっお興味深いシナリオに぀いお話し合うこずをお勧めしたす。 私たちは喜んで貎瀟のニヌズを分析し、共同で行動蚈画を決定したす。 AI/ML 専門家チヌムの連絡先電子メヌル アドレス – [メヌル保護].

出所 habr.com

コメントを远加したす