0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

boto3を使用したSPSS Modeler上でのS3への出力方法について

Posted at

目的

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.png

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"です。
image.png

次に、出力パレットにある拡張の出力ノードをキャンバスに追加してリンクしてください。
ここではストリームを実行した際の出力を確認するために拡張のエクスポートノードではなく、出力ノードを使用しています。
python syntax内にスクリプトを記述していきます。
image.png

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」と出力されれば成功です。

image.png

1章で作成したS3内のフォルダへアップロードされていることも確認します。

無題.png

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へ出力されます。

無題3.png

あとがき

拡張の出力ノード内boto3を使用することでSPSS ModelerからS3へ書き込みを行うことが確認できました。
次回は今回の設定を生かした上で、S3へparquetファイルを出力し、Athenaのバージョニング機能を使用した上でSPSS Modelerにデータを読み込む方法をご紹介します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?