2021/04/02

Python連携

Pythonスクリプトの入出力

このコンテンツでは、Pythonスクリプトの入出力について説明していきます。なお、本コンテンツで利用したバージョンはSpotfire10.10です。ご利用環境によって、一部画面構成が異なる可能性がありますので、ご了承ください。

サンプルファイルの読み込み 

本コンテンツで利用するサンプルファイルは、こちらからダウンロードしてください。

サンプルファイルは、チップIDごとにパラメータが入っているデモデータです。

Pythonスクリプトの入出力

Pythonとはデータ分析を実装する際によく使われるプログラミング言語です。Spotfireで使えるPythonには以下の2種類があります。

①テキストエリアなどで使えるironPython
②データ関数で使えるPython 3.7.5(ver10.10 LTS)

前回の記事では、①のironPythonを使用してメッセージボックスを表示する方法をご紹介しました。
今回もironPythonを使用し、Spotfireからデータを渡したり、Pythonの結果をSpotfireに戻したりする処理をご紹介します。プロパティの値やカスタム演算式の値をPythonに渡して、結果をプロパティで受け取っていきます。

外れ値への処理

以下のように、大きな外れ値が発生しているグラフがあるとします。

このような外れ値には何らかの処理を行う場合が多く、その際に、Spotfireでは「プロパティ」という機能を使って上限閾値を設定することができます。
他にも外れ値の処理方法はありますが、インタラクティブな操作との相性が良いことから、プロパティの使用頻度が高いです。

今回は、このグラフに閾値のラインを引くことで外れ値を検出できるようにします。ドキュメントプロパティを新規に作成し、そこに上限値を入力すると閾値の線が引かれます。

例えば、20と入力すると以下ような閾値の線が引かれます。

プロパティの作成

はじめに、プロパティを作成します。
新規ビジュアライゼーション一覧から「テキストエリア」を選択し、鉛筆マークから編集モードにします。

「プロパティコントロールの挿入」から「入力フィールド」を選択します。

「プロパティコントロール」ダイアログでは「新規」をクリックします。

「新しいプロパティ」では、以下のように設定してください。

  • プロパティ名:UL
  • データ型:Real
  • 値:5

「OK」をクリックしテキストエリアを保存して閉じます。
これで、テキストエリアに入力フィールドが作成できました。

作成したULプロパティと連動した線をラインチャートに反映させる設定をしていきます。
プロパティの「線およびカーブ」から「追加」をクリックします。「水平線」をクリックし、右に表示される「直線」をクリックします。

カスタム演算式を選択し、「編集」から以下を入力してプロパティを指定します。
${UL}

入力フィールドに値を入力すると、閾値の線が変更されます。

Pythonへのインプット

閾値を超えている場合をPythonで判別して、テキストエリアの表示を変更します。

まずはテキストエリアにPythonを埋め込んだボタンを作成していきます。
ボタンの詳細については、こちらの記事を参照してください。

テキストエリアを編集モードにし、「アクションコントロールの挿入」をクリックします。

左の選択項目から「スクリプト」を選択し「新規」をクリックしてください。

新規スクリプトでは以下を設定してください。

  • スクリプト名:helloPython
  • スクリプト:下記のスクリプトを記載してください。
import clr
from System.Windows.Forms import MessageBox

clr.AddReference("System.Windows.Forms")
MessageBox.Show("hello Python")

「OK」をクリックし、表示テキストにも「helloPython」と入力します。

保存すると、テキストエリアにボタンが表示されています。

パラメータ設定

ここからは、閾値を超えている場合をPythonで判別して、テキストエリアの表示を変更ししていきます。

プロパティの渡し方

まずはプロパティ変数として、上限の閾値を設定します。
テキストエリアの編集画面で作成したボタンをダブルクリックし、スクリプトの「編集」をクリックします。

スクリプトのパラメータで「追加」を選択します。

スクリプトパラメータの追加ダイアログでは、以下を入力します。

  • 名前:upperLimit
  • タイプ:Real
  • 値:プロパティ ULを指定

これで、SpotfireのULプロパティをPython側ではupperLimitとして扱えます。

次に、最大値を集計して渡していきます。スクリプトのパラメータで「追加」を選択し、以下を設定します。

  • 名前:maxVal
  • デバッグ値 - 式(「式の編集」をクリックして入力):Max([PT_Para])

パラメータの設定が完了しました。スクリプトには以下の式を入力してください。

import clr
from System.Windows.Forms import MessageBox

clr.AddReference("System.Windows.Forms")
MessageBox.Show("上限閾値は" + str(upperLimit) + " 最大値は " + str(maxVal))

メッセージボックスで表示する内容を設定する式で、パラメータとして渡されているulvalとmaxValを使用しています。

上記で作成したボタンでは、Pythonへの入力はできますが出力はできません。
そこで新規のプロパティでラベルを作成し、結果を出力します。他にも結果プロパティを作成することで、計算カラムやカスタム演算式の内容や、テキストエリアの中身など様々な変更が可能になります。

結果プロパティの作成

テキストエリアを編集モードにし、「プロパティの作成」で「ラベル」を選択します。

「新規」をクリックします。

「新しいプロパティ」ダイアログでは以下のように入力してください。

  • プロパティ名:pythonOutput
  • データ型:String
  • 初期値:デフォルト

OKを押し、保存すると、「デフォルト」というラベルがボタンの横に表示されます。

ドキュメントプロパティの変更

パラメータ設定時のPythonを編集します。
プロパティをPythonから変更するには、以下のようなAPIを使用します。

Document.Properties['property name'] = '変更したい内容'

今回は分岐で上限値を超えている場合は「閾値オーバー」と表示させます。
以下の式でスクリプトを編集してください。

import clr
from System.Windows.Forms import MessageBox

clr.AddReference("System.Windows.Forms")
outputStr = ""

if upperLimit < maxVal :
outputStr = ("閾値オーバー:上限閾値は" + str(upperLimit) + " 最大値は " + str(maxVal))
else:
outputStr = ("上限閾値は" + str(upperLimit) + " 最大値は " + str(maxVal))

Document.Properties['pythonOutput'] = outputStr

スクリプトを実行しOKを押すと、結果が表示されます。
上限値を20にした場合は閾値に引っかかるため、閾値オーバーになります。

閾値をオーバーしない場合は、以下のような実行結果になります。

【Python連携】記事一覧に戻る
全記事一覧に戻る