CP4DaaS Watson Studio で作成したSPSSジョブをAPI (Python Code)で実行する方法

# 目次
0:概要
1:モデルの構築
2:IBM Cloud object storage（※以降ICOSと省略） に接続
3:SPSSジョブをAPI（Python Code）で実行
4:SPSSジョブを外部からAPIで実行


# 0:概要
CP4DaaS環境でSPSSモデルを構築しています。
SPSSモデルは@makaishiさんの[SPSS Modeler Flowで決定木をつくる](https://qiita.com/5zm/items/044ae86993c8e693b7e9)を参考にして構築します。
モデルの計算結果は、拡張エクスポートを活用して、IBM Cloud object Storage に出力するようにしています。
プロジェクト上でモデルをジョブ化し、外部からAPIで実行できるようにしています。

# 1:モデルの構築
@makaishiさんの[SPSS Modeler Flowで決定木をつくる](https://qiita.com/5zm/items/044ae86993c8e693b7e9)を参考にして、モデルの構築をお願いします。

モデル構築が完了すると、以下のような状態になっていると思います。（※拡張エクスポートは除く）
![スクリーンショット 2022-12-07 13.06.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031347/60e57ba8-c07d-70fc-9203-cb05121eac0b.png)


# 2:IBM Cloud object storage（※以降ICOSと省略） に接続
拡張エクスポートを活用したICOSへの計算結果出力方法を解説します。
![スクリーンショット 2022-12-07 13.09.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031347/b5d8f472-0bfa-ef7e-a123-f7146dd3f8bf.png)

2-1:ICOSの立ち上げ
IBM Cloudにログイン頂き、リソースリストからICOSを選択してください。
※ICOSがない場合は新しくリソースの作成をお願いします。
※今回はICOSに出力しますが、必要に応じて出力先を変更してください。
![スクリーンショット 2022-12-07 13.14.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031347/988b0f8b-fca1-79d7-d1d3-c57b97ef3345.png)

2-2：バケットの作成
すぐに始めるをタップ（※必要に応じてカスタマイズをお願いします。）
![スクリーンショット 2022-12-07 13.52.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031347/b6147362-c995-c003-83f4-f91928821cdc.png)
バケットネームを任意に設定
![スクリーンショット 2022-12-07 13.54.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031347/0d2d687f-f173-a4be-4f54-afd2e28c9159.png)

そのあとは、デフォルト設定及びファイルアップロードなしで、バケットを構築します
構築が完了すると以下のように、ICOSにバケット(demo1207)を作成できていると思います。
![スクリーンショット 2022-12-07 17.04.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031347/756da32a-d723-319d-8c90-0ec53b91a1d1.png)

:::note info
インフォメーション
バケット作成の際、**バケットカスタマイズ**を選択する場合は、別途サービス資格者情報を構築する必要があります。
![スクリーンショット 2022-12-15 14.38.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031347/54c6f292-a695-9fd9-3d39-f444dceb4c35.png)
:::



2-3:サービス資格情報の確認
バケットを作成すると、サービス資格情報も同時に作成されます。
![スクリーンショット 2022-12-07 17.55.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031347/6d110568-1dd8-d793-96af-962716c141c2.png)
サービス資格情報を確認すると、API情報が記載されています。
これらの情報を活用して、プロジェクトにICOSを紐付けます。
![スクリーンショット 2022-12-07 17.56.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031347/ccfbc247-f2e2-db4d-b034-567cd095e659.png)

2-４:拡張エクスポートにICOSを接続
プロジェクトに戻り、モデルに拡張エクスポートを追加
![スクリーンショット 2022-12-07 18.43.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031347/a58d565d-1b12-feb3-2631-2564a4fd2a67.png)

拡張エクスポートをダブルクリック、"Python for spark"を選択する。
![スクリーンショット 2022-12-07 18.45.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031347/0a2e0965-a0a4-dc8d-db0c-1c36bd22116c.png)

Pythonシンタックスに、[Github_Python_for_spark](https://github.com/s-kochi/CP4DaaS_Watson_Studio_SPSS_API/blob/main/Python_for_spark.py)のスクリプトをコピー＆ペーストしてください。
ICOS_バケットのサービス資格情報を”＊＊＊”に追記してください。
![スクリーンショット 2022-12-07 19.25.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031347/6f232910-d806-33d4-71ef-477b7948229d.png)

:::note info
インフォメーション
スクリプト・タイプは、Pythonも選択可能です。
Pythonを選択する場合は、[Github_Native_Python](https://github.com/s-kochi/CP4DaaS_Watson_Studio_SPSS_API/blob/main/native_python.py)のスクリプトをコピー＆ペーストしてください。
:::


2-5：出力確認
Python_for_Sparkの設定が完了した後、モデルを実行します。
問題なければ、出力が無事実行されました。
![スクリーンショット 2022-12-07 19.33.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031347/e57aa8db-d560-f5b6-0e7b-46a37f9e7031.png)

ICOSに移動して、出力先のバケット_demo1207を確認すると、先ほど実行したモデルの計算結果が無事出力されていることを確認。
ファイルネームがモデル実行時間になっている。
![スクリーンショット 2022-12-07 19.36.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031347/9f1a791e-e6c7-cf72-7aea-35c6e38fed9c.png)

# 3:SPSSジョブをAPI（Python Code）で実行
外部からAPIでJOBを実行する方法を説明します。
※誰もが使えるように、サービスIDを作成しAPI_Keyを生成するとこからから説明をします。
個人のAPI_Keyを使用する場合は、3-2からセットアップをお願いします。

~~3-1：サービスIDの作成と権限の付与~~
~~※下記の記事を参考にして、サービスIDの作成と権限付与の実施をお願いします。~~
[IBM Cloud サービスID作成方法](https://qiita.com/c_crisp/private/4c12ee8209283a6e7972)

:::note info
（2023年4月3日追記）
・現在のWatson Studioジョブにおいて、サービスIDの利用はサポートされません。
・Watson Studioジョブは、ジョブ作成ユーザーによる実行が必要です。ジョブ実行には、ジョブ作成ユーザーの個人APIキーをご利用ください。
:::

3-2:SPSSモデルフローのジョブ化
プロジェクトで構築したフローの新規ジョブを選択
![スクリーンショット 2022-12-08 13.46.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031347/b312b27f-a92a-5840-7c5b-90fa9d773cea.png)

名前：任意のジョブネーム
説明：任意の説明
環境定義：任意の環境を選択
記入が完了したら次へを選択
![スクリーンショット 2022-12-08 13.49.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031347/dc953b3d-b3f7-67d0-f683-d5d52cb8d13b.png)

ジョブはターミナルノードを選択
※必要に応じて、ブランチを個別選択してください
選択が完了したら次へを選択
![スクリーンショット 2022-12-08 13.52.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031347/7aeb55db-3cf4-22b5-37ff-a8a1058b64b1.png)

APIで実施するため、スケジュールはOFFにします
※API側で定期事項処理が可能なため、SPSS側では設定を行いません
![スクリーンショット 2022-12-08 13.56.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031347/396b2d91-1bce-a4ac-7de1-516577506cfe.png)

ジョブの作成
通知はOFFで設定する
![スクリーンショット 2022-12-08 18.03.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031347/7fbb5265-9ddd-00d0-0f32-6be562123594.png)

問題がなければジョブを作成する
![スクリーンショット 2022-12-08 18.05.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031347/fef6d4b2-abf1-2035-f53c-965dfac74e99.png)

問題なくジョブを作成することができました
![スクリーンショット 2022-12-08 18.06.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031347/4603eaae-69c9-a664-4f1c-b8bb7a36e60f.png)

3-3：API実行環境の構築
Githubから[REJ_sample.py](https://github.com/s-kochi/CP4DaaS_Watson_Studio_SPSS_API/blob/main/REJ_sample.py)のダウンロードをお願いします。

下記の部分は、＊＊＊に必要事項を記入してください。
api_key:サービスIDに紐付けしたAPI_key※1 or 個人API_Key
job_name:プロジェクトのジョブ名※２
project_id:プロジェクトID※３
![スクリーンショット 2022-12-08 13.42.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031347/b17d8efc-724a-04b3-3021-43fae860a0ca.png)

下記の部分は、モデルの処理状況に合わせて変更をお願いします。
※処理が長引く場合は、数値を大きくした方が無難です。
![スクリーンショット 2022-12-09 14.25.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031347/259c36eb-7476-5f71-8daa-4d67d9e5428c.png)

※１：[IBM Cloud サービスID作成方法](https://qiita.com/c_crisp/private/4c12ee8209283a6e7972)、で作成したサービスIDのAPI_keyを使用してます。
※２：プロジェクト→プロジェクトネーム→ジョブ
外部APIで実行したジョブ名を選択してください。
今回は、先ほど作成した、Taitanic_REJ_2_sampleを使います
![スクリーンショット 2022-12-09 10.07.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031347/56134000-6fe0-78a7-55be-ce91ee41dbe6.png)
※３：プロジェクト→プロジェクトネーム→資産
赤枠のプロジェクトIDを使用してください。
![スクリーンショット 2022-12-09 10.11.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031347/cf915a31-cf05-6d60-1acd-df4a6a7a2bc3.png)

3-5：コラボレーターの追加
プロジェクト→管理→アクセス制御→コラボレーターの追加
![スクリーンショット 2022-12-09 13.18.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031347/441a0100-f936-175d-f45c-0490b92c9ebe.png)

サービスIDの追加
![スクリーンショット 2022-12-09 13.20.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031347/3b1d31c3-0298-a1fd-9067-ae8b8f643690.png)

先ほど作ったサービスIDを選択
ロール：エディター以上
選択が終わったら、追加
![スクリーンショット 2022-12-09 13.28.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031347/72c52c13-1253-3ca6-f08c-fb5a7b009c2e.png)

以上で、プロジェクトのJOBを外部からAPIで実行するための環境設定は完了です。

# 4:SPSSジョブを外部からAPIで実行
必要事項を記入した、[REJ_sample.py](https://github.com/s-kochi/CP4DaaS_Watson_Studio_SPSS_API/blob/main/REJ_sample.py)を任意のフォルダに格納してください。
※任意のファイルネームに変更して使用してください。

REJ_sample.pyが保存されているディレクトリに移動をして、
```ruby:
Python3 REJ_sample.py
```
を実行します。
問題がなければ、JOBを実行することができます。
正常に実行が完了すると、Compleatedが表示されます。
![スクリーンショット 2022-12-09 13.30.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031347/7e7003b9-8ff7-49d2-acfd-569fe320ca60.png)

計算結果も、問題なくICOS_バケット(demo1207)に出力されています。
![スクリーンショット 2022-12-09 14.21.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031347/2910ce0c-571a-5681-ed0b-10f87f134879.png)
CP4DaaS Watson Studio で作成したSPSSジョブをAPI (Python Code)で実行する方法の解説は、以上です。

# 製品リンク
[SPSS Modeler ジョブの作成](https://dataplatform.cloud.ibm.com/docs/content/wsj/manage-data/create-job-spss.html?audience=wdp)
[SPSS チュートリアル](https://dataplatform.cloud.ibm.com/docs/content/wsd/tutorials.html?audience=wdp)