11.5.2 ユーザー定義Python関数の実行

oml.do_eval関数を使用して、データを明示的に取得する、または外部データが不要なユーザー定義の入力関数を実行します。

oml.do_eval関数は、データベース環境によって生成および管理されるPythonエンジンでユーザー定義Python関数を実行します。

oml.do_eval関数の構文は次のとおりです。

oml.do_eval(func, func_owner=None, graphics=False, **kwargs)

func引数は、実行する関数です。これには次のいずれかを指定できます。

  • Python関数

  • OML4Pyスクリプト・リポジトリ内のユーザー定義Python関数の名前を表す文字列

  • Python関数を定義する文字列
  • oml.script.load関数によって返されるoml.script.script.Callableオブジェクト

オプションのfunc_owner引数は文字列またはNone (デフォルト)で、引数funcが登録済ユーザー定義Python関数名の場合に、登録済ユーザー定義Python関数の所有者を指定します。

graphics引数は、イメージを検索するかどうかを指定するブール値です。デフォルト値は、Falseです。

**kwargsパラメータを使用すると、func関数に追加の引数を渡すことができます。oml_で始まる特殊な制御引数は、funcで指定された関数に渡されるのではなく、関数の実行前または実行後の動作を制御します。

oml.do_eval関数は、Pythonオブジェクトまたはoml.embed.data_image._DataImageを返します。ユーザー定義Python関数でイメージがレンダリングされない場合、oml.do_evalは、関数によって返されたPythonオブジェクトを返します。それ以外の場合は、oml.embed.data_image._DataImageオブジェクトを返します。

例11-6 oml.do_eval関数の使用

この例では、列IDおよびRESを含むPandas DataFrameを返すPython関数を定義します。次に、その関数をoml.do_eval関数に渡します。

import pandas as pd
import oml

def return_df(num, scale):
    import pandas as pd
    id = list(range(0, int(num)))
    res = [i/scale for i in id]
    return pd.DataFrame({"ID":id, "RES":res})

res = oml.do_eval(func=return_df, scale = 100, num = 10)
type(res)

res

この例のリスト

>>> import pandas as pd
>>> import oml
>>>
>>> def return_df(num, scale):
...     import pandas as pd
...     id = list(range(0, int(num)))
...     res = [i/scale for i in id]
...     return pd.DataFrame({"ID":id, "RES":res})
... 
>>>
>>> res = oml.do_eval(func=return_df, scale = 100, num = 10)
>>> type(res)
<class 'pandas.core.frame.DataFrame'>
>>>
>>> res
   ID  RES
0 0.0 0.00
1 1.0 0.01
2 2.0 0.02
3 3.0 0.03
4 4.0 0.04
5 5.0 0.05
6 6.0 0.06
7 7.0 0.07
8 8.0 0.08
9 9.0 0.09