目的
SPSS ModelerではAthena経由での読み取りのみがサポートされています。
https://www.ibm.com/docs/ja/spss-modeler/18.4.0?topic=guide-whats-new-in-version-1840
ここでは拡張の出力ノード内でboto3ライブラリを使用して、SPSS ModelerからS3へ書き込みを行う方法をまとめました。
boto3とは
boto3とはAWSのサービスをPythonから操作するための公式ライブラリです。
このライブラリを使うことで、AWSのクラウドサービスをプログラムで制御・管理できます。
https://aws.amazon.com/jp/sdk-for-python/
対象読者
・普段の業務でSPSS Modeler 18.5を使用しているデータ分析初級者~中級者の方
・データ加工をSPSS Modeler 18.5で行っていて、今後ファイルの保存先にAWS環境を検討されている方
・今後SPSS Modeler 18.5の導入を検討されている方
目次
1章 AWS環境の設定内容について
アカウントの作成
ここでは以下のポリシーを割り当てたIAMユーザーを作成します。
・AmazonAthenaFullAccess
・AmazonS3FullAccess
次にセキュリティ認証情報タブからアクセスキーとシークレットキーを取得します。
始めて作成される際には以下の記事が参考になると思います。
https://qiita.com/raimu_hosoda/items/24b587fe44ced5262722
*セキュリティリスクにつながりますので、アクセスキーとシークレットキーの管理は適切に行う必要があります。
S3バケットの作成
今回の出力バケットとフォルダを作成しましょう。
ここではspsstos3バケットとspsstos3test1フォルダを作成しています。
名前については任意で構いません。
2章 SPSS Modeler環境の設定内容について
各種ライブラリのインストール
ライブラリをインストールするPythonのパスはoptions.cfgに記載されています。
options.cfgは以下のディレクトリにあります。
C:\Program Files\IBM\SPSS\Modeler\18.5\config
options.cfg内のeas_pyspark_python_pathのパスを指定して、ライブラリをインストールしていきましょう。
# Set to the full path to the python executable (including the executable name) to enable use of PySpark.
eas_pyspark_python_path, "C:/Program Files/IBM/SPSS/Modeler/18.5/python_venv/Scripts/python.exe"
ここでは冒頭でご紹介したboto3とPythonアプリケーションで環境変数を管理するためのpython-dotenvをインストールしましょう。
"C:/Program Files/IBM/SPSS/Modeler/18.5/python_venv/Scripts/python.exe" -m pip install boto3
"C:/Program Files/IBM/SPSS/Modeler/18.5/python_venv/Scripts/python.exe" -m pip install python-dotenv
3章 S3への出力方法について
SPSS Modelerで読み込んだcsvファイルをS3へ出力してみましょう。
ここではSPSS Modelerをインストールした際に付属されている健康状態に関する「DRUG1n」というファイルを使用します。
パスは"C:\Program Files\IBM\SPSS\Modeler\18.5\Demos\DRUG1n"です。
次に、出力パレットにある拡張の出力ノードをキャンバスに追加してリンクしてください。
ここではストリームを実行した際の出力を確認するために拡張のエクスポートノードではなく、出力ノードを使用しています。
python syntax内にスクリプトを記述していきます。
boto3でのアップロードについて
以下がboto3を使用してS3へアップロードする方法の例です。
aws_access_key_idとaws_secret_access_keyにはそれぞれ1章で作成したアクセスキーとシークレットキーを指定し、region_nameにはバケットを作成したリージョンを指定します。
import boto3
client = boto3.client(
's3',
aws_access_key_id='○○',
aws_secret_access_key='○○',
region_name='○○'
)
client.upload_file(FileName, Bucket, Key)
下記が公式ドキュメントになります。
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3/client/upload_file.html
Python Syntax内のスクリプトについて
SPSS Modeler内でpythonを実行するためにmodelerpyというライブラリが準備されています。
詳しくはこちらを参照してください。
https://www.ibm.com/docs/ja/spss-modeler/18.5.0?topic=spark-native-python-apis
ここではSPSS Modelerで読み込んでいるcsvファイルを一時ファイルに変換してから、s3へ出力する流れを想定します。
import modelerpy
import boto3
import os
#モデラーのデータ取得
modelerData = modelerpy.readPandasDataframe()
#一時ファイルへの書き出し
temp_file = "tempfile.csv"
modelerData.to_csv(temp_file, index=False)
#s3へのアップロード情報について
client = boto3.client(
's3',
aws_access_key_id='○○',
aws_secret_access_key='○○',
region_name='○○'
)
#s3へのアップロード
try:
client.upload_file(temp_file, 'spsstos3', 'spsstos3test1/DRUG1n.csv')
print("File successfully uploaded")
except Exception as e:
print(f"File upload failed: {e}")
finally:
#一時ファイルを削除
os.remove(temp_file)
ノードを実行し、「File successfully uploaded」と出力されれば成功です。
1章で作成したS3内のフォルダへアップロードされていることも確認します。
4章 セキュリティ面の向上について
2章でインストールしたpython-dotenvを活用して、セキュリティ面の向上を図ります。
python-dotenvは.envファイルを作成することでアプリケーションに必要な設定を環境変数として管理することができます。
ここでは3章で直接スクリプト内に書き込んでいた、アクセスキー、シークレットキー、リージョンの情報を外部ファイルへ分離させることでセキュリティリスクの軽減を図ります。
下記のような形のファイルを作成し、.envという名前で任意の場所へ保存してください。
ここでは"C:\Program Files\IBM\SPSS\Modeler\18.5"に保存しています。
AWS_ACCESS_KEY_ID='○○'
AWS_SECRET_ACCESS_KEY='○○'
AWS_REGION='○○'
作成した.envファイルを使用してPython Syntax内のコードを改善してみましょう。
load_dotenv()を追加し、先ほど作成した.envファイルを読み込むことでアップロード情報として記載する引数をS3のみにすることが出来ます。
import modelerpy
import boto3
import os
from dotenv import load_dotenv
#モデラーのデータ取得
modelerData = modelerpy.readPandasDataframe()
#一時ファイルへの書き出し
temp_file = "tempfile.csv"
modelerData.to_csv(temp_file, index=False)
load_dotenv()
#s3へのアップロード情報について
client = boto3.client('s3')
#s3へのアップロード
try:
client.upload_file(temp_file, 'spsstos3', 'spsstos3test1/Drung1n2.csv')
print("File successfully uploaded")
except Exception as e:
print(f"File upload failed: {e}")
finally:
#一時ファイルを削除
os.remove(temp_file)
先ほどと同様にノードを実行するとS3へ出力されます。
あとがき
拡張の出力ノード内boto3を使用することでSPSS ModelerからS3へ書き込みを行うことが確認できました。
次回は今回の設定を生かした上で、S3へparquetファイルを出力し、Athenaのバージョニング機能を使用した上でSPSS Modelerにデータを読み込む方法をご紹介します。