SPSS ModelerスクリプトでHTMLのレポートを出力するサンプルストリームをマツダ株式会社 山口 幸司様に作っていただき、SPSS春のユーザー会2021でご発表いただきました。
公開してシェアいただく許可をいただきましたのでこちらで紹介します。
また、山口様ご自身による当日のご講演資料のスクリプト解説部分も公開していただきました。ビジュアルにまとめていただいていますので是非ご覧ください(2021/6/8)
■動作テスト環境
Modeler 18.2.1,18.2.2
Windows 10
■サンプルストリームとデータ
サンプルストリーム
サンプルデータ
1.動かし方
サンプルストリームの動かし方を説明します。
1-1. 出力先のフォルダの用意
デフォルトは"C:\tepmp\SPSS_data\サンプル出力\”になっています。
1-2. サンプルデータの確認
不動産の物件所情報のサンプルデータであるproperty_values_train.savの入力ノードをプレビューしてサンプルデータが参照できることを確認してください。
見つからない場合は以下を探してみてください。
<インストールディレクトリ>\DEMOS\japanese_ja\property_values_train.sav
一応以下にもアップロードしておきました。
サンプルデータ
1-3. サンプルの実行
出力先をデフォルトから変更する場合はmodeler scriptの3行目を変更してください。
出力先に、以下のようにグラフのpngファイルやレポートのHTMLファイルが出力されます。
このサンプルストリームでは不動産の物件情報を建物の種類ごとに、4つのグラフをもった5つのレポートが出力されます。
レポートのHTMLファイルは、以下のようにグラフを一覧するレポートをブラウザで開くことができます。ここでは2-onder-1 kap_グラフリストというレポートを開いています。他の建物種類のレポートも同様のフォーマットでレポートが作られています。
2.サンプルストリームとスクリプト解説
サンプルストリームとスクリプトを解説していきます。
ストリームは大きくわけてグラフ出力のパートとHTMLファイル出力のパートに分かれています。
modelerscriptも見ていきます。
まず、以下で建物種類選択の条件抽出ノードを書き換えていて、建物種類を絞り込んでいます。
stream.findByID("id8L4WF1NNZPK").setPropertyValue("condition",u"建物種類 = \"" + tatemono[x] + "\"")
次に以下で、グラフをファイルに出力しています。
graphs[z].setPropertyValue("use_graph_size", True)
graphs[z].setPropertyValue("graph_height", graphsizes[y][0])
graphs[z].setPropertyValue("graph_width", graphsizes[y][1])
graphs[z].setPropertyValue("output_mode", "File")
graphs[z].setPropertyValue("output_format", "PNG")
graphs[z].setPropertyValue("full_filename",foldname + "\\" + tatemono[x] + "_" + graphs[z].getPropertyValue("output_name") + ".png")
graphs[z].run(None)
対応するノードは以下です。ファイル名やフォーマットなどを設定して出力しています。4つすべてのグラフをループで処理し、ファイルに出力しています。
出力したグラフファイル名をユーザーインプットノードに設定します。
unode = stream.findByID("id4MWVZK1EHSL")
unode.setPropertyValue("names", [u"htmlソース"])
unode.setKeyedPropertyValue("data", u"htmlソース", graphnames)
unode.setKeyedPropertyValue("custom_storage", u"htmlソース", "String")
unode.setPropertyValue("data_mode", "Ordered")
対応するノードは以下です。ファイル名が値としてセットされています。
以下のスクリプトによってフラットファイル・エクスポートノードでhtmlファイルを出力しています。
stream.findByID("id8HMV4MDF8WJ").setPropertyValue("full_filename",foldname + "\\" + tatemono[x] + "_" + u"グラフリスト.html")
stream.findByID("id8HMV4MDF8WJ").run(None)
3.カスタマイズのポイント
このサンプルストリームとModeler Scriptは汎用的に作られていますので、少し書き換えることで好きなデータ、好きなグラフを使ったレポートを作ることができます。
カスタマイズのためにはまず、グラフを作りたいデータを選び、グラフを作ります。ポイントは、各グラフの出力のユーザー設定で「連番_グラフ名」を設定することです。
次に出力するカテゴリを絞り込むところを設定します。そして、HTMLのタイトルやレポート内に表示するカテゴリ名を設定します。
次に改行コードの位置を指定します。グラフいくつ並べてから改行するかを指定できます。
以下は-4行目と2.5行目に改行を入れています。
最終出力の中に、改行の<br>のタグが埋め込まれているのがわかります。
スクリプトは以下を修正します。
tatemono = ["2-onder-1 kap","Appartement","Hoekwoning","Tussenwoning","Vrijstaand"]
graphtypes = ["plot","histogram"]
graphsizes = [[600,700],[300,700]]
x = 0
while x < len(tatemono):
stream.findByID("id8L4WF1NNZPK").setPropertyValue("condition",u"建物種類 = \"" + tatemono[x] + "\"")
graphtypes で出力対象のグラフ種類をリストします。
graphsizes で出力するグラフのサイズをリストで指定します。
tatemono は絞り込むカテゴリです。具体的には以下の列のカテゴリを対象としたグラフとレポートを作っています。
4. レポートの共有と自動出力
レポートを共有フォルダに出力するようにすれば、Modelerを持っていないユーザーとも結果をシェアすることができます。
また、マツダ様ではSPSS Collaboration and Deployment Services(通称CADS)を使って、週次でレポートを出力し、そのリンクをメールで関係者に送付することを自動化されています。これによって様々な関係者と分析結果を簡単に共有することを実現されています。
5.最後に
Modelerの出力をパワーポイントに貼ってレポートを作っている方はたくさんいらっしゃると思います。しかし、HTMLで自動出力できるようにすることによって、作業時間を大幅削減することができます。
非常にユニークなアイディアでmodeler scriptを作成され、さらにそれを公開していただいたマツダ株式会社 山口 幸司様に改めて感謝いたします。