🏋️♀️
WebFOCUSでPython関数を利用する
WebFOCUSでPython関数が使えると出来るようになること
- データ解析
- pandasなどを使って簡単にデータ解析を行える
- 自動化
- サーバ側で動くサブルーチンとして利用できる
- 情報収集
- スクレイピングによりWebサイトから情報を収集できる
Python関数構文
PYTHON(Python_MFD[, input_field1[, input_field2[, ...]]], output_field)
-
Python_MFD: APP名/シノニム名
-
input_field1: python関数で定義したcsvinの列1に渡す項目
-
input_field1: python関数で定義したcsvinの列2に渡す項目(任意の個数)
-
output_field: python関数で定義したcsvoutの出力したい列名
- 例文
COMPUTE OUTPUT/I9 = PYTHON(python/newfunc_kakezan,NO1,NO2,seki);
- 例文
Python関数サンプル
kakezan.py
import csv
def kakezan(csvin, csvout):
with open(csvin, 'r', newline='') as file_in,\
open(csvout, 'w', newline='') as file_out:
fieldnames = ['col1', 'col2', 'seki']
reader = csv.DictReader(file_in, quoting=csv.QUOTE_NONNUMERIC)
writer = csv.DictWriter(file_out, quoting=csv.QUOTE_NONNUMERIC,
fieldnames=fieldnames)
writer.writeheader()
for row in reader:
ret1 = row['col1'] * row['col2']
writer.writerow({
'col1': row['col1'],
'col2': row['col2'],
'seki': ret1
})
WebFOCUS用Python関数のポイント
-
プログラム内にmainを含めず関数のみを宣言する
-
関数の引数は、入出力ともにcsvファイルとなるので
(csvin, csvout)
固定となる -
with句も同様に固定となる
def kakezan(csvin, csvout): with open(csvin, 'r', newline='') as file_in,\ open(csvout, 'w', newline='') as file_out:
-
fieldnamesには、WebFOCUSのPYTHON関数でoutput_fieldとして指定する項目を指定
fieldnames = ['col1', 'col2', 'seki']
-
readerとwriterは、入出力の形式に沿った記述とする(例では入出力ともに数値型)
reader = csv.DictReader(file_in, quoting=csv.QUOTE_NONNUMERIC) writer = csv.DictWriter(file_out, quoting=csv.QUOTE_NONNUMERIC, fieldnames=fieldnames)
-
必ずヘッダー付でcsv出力する
writer.writeheader()
-
処理部分は自由に記述するが、csvinと同じ行数をcsvoutに出力する
for row in reader: ret1 = row['col1'] * row['col2'] writer.writerow({ 'col1': row['col1'], 'col2': row['col2'], 'seki': ret1 })
WebFOCUS側の設定
Pythonアダプタを作成
- WebFOCUSのアダプタとしてPythonアダプタを追加する
- PythonインストールディレクトリはWebFOCUSサーバに同梱されているpythonのパスを登録する
C:\ibi\srv90\home\etc\python
- PythonインストールディレクトリはWebFOCUSサーバに同梱されているpythonのパスを登録する
- WebFOCUS Reportingサーバを再起動する
関数アクセス用シノニムを作成
- シノニム作成用サンプルCSVを準備する
- python関数開発時に利用したもので問題ない(件数は任意)
- タイトル付のCSVを作成する
- 関数のcsvinで定義した列名を必ず含める
- 拡張子はcsv
- 他の関数用サンプルと兼用するため、csvinで利用しない項目を含んでも良い
sample.csv"col1","col2","col3","col4" 1,2,3,4 2,3,4,5 10,20,30,40 100,200,300,400
- 利用する関数を含む**.pyファイルとサンプルCSV**を有効なAPPパスに配置
- PYTHONアダプタからシノニムを作成
- Pythonスクリプト: 利用する関数を含むpyファイルを選択
- 関数名: pyファイルに含まれる関数名を選択
- Pythonスクリプトのサンプル入力データファイル: 1.で作成したcsvファイルを選択
- ヘッダ付きCSVファイル: サンプルCSVとcsvoutともにヘッダ付きを想定しているので入力・出力ともに✅をつける
- アプリケーション: Python_MFDの保存場所(有効なパスにを選択)
- シノニム名: Python_MFDの名称(関数内で指定する名称)
- 作成時にエラーが発生しなければ、WebFOCUSでPYTHON関数として利用できる
動作確認
kakezan.pyとsample.csvをapps/pythonフォルダに配置し、Python_MFDをapps/pythonフォルダにnewfunc_kakezan
の名称で作成している前提
test.fex
DEFINE FILE SYSTABLE
NO1/P20 = NO1 + 1;
NO2/P20 = 5;
END
TABLE FILE SYSTABLE
PRINT NAME NO1 NO2
COMPUTE 出力/P20 = PYTHON(python/newfunc_kakezan, NO1, NO2, SEKI);
END
PYTHON(Python_MFD[, input_field1[, input_field2[, ...]]], output_field)
- Python_MFD: python/newfunc_kakezan(apps/pythonフォルダにnewfunc_kakezan.masがある)
- input_field1,inputfield2: csvinで読み込む項目が2つあるため、col1,col2として2つの数値項目を指定
- output_field: csvoutに含まれる項目のうち一つを指定(SEKI)
Discussion