CP4DのWatson StudioのJupyterからICOSを操作する


CP4DのWatson StudioのJupyterからICOSを操作します。
CP4Dの接続オブジェクトからICOSへの接続情報を取得して、ibm_boto3で接続します。

  • テスト環境
    • CP4D 4.0.4
    • ibm-watson-studio-lib 3.0.6
    • boto3 1.17.46
    • botocore 1.20.88

1 接続オブジェクトのリストを取得

Watson StudioのプロジェクトにICOSのバケットへの接続オブジェクト(例:200322icosbucket)を登録しておきます。

接続オブジェクトにはICOSのバケットに接続するための情報が記録されています。

ibm_watson_studio_libでPythonコードから接続オブジェクトにアクセスが可能です。
なお、資格情報としてJSON形式のまま入力すると、ibm_watson_studio_libでアクセスしにくいので、リソース・インスタンス ID、API 鍵、アクセス・キー、秘密鍵などを各入力欄に入力しておいてください。

list_connectionsで接続オブジェクトのリストを得ることができます。

接続オブジェクトのリスト
from ibm_watson_studio_lib import access_project_or_space
wslib = access_project_or_space()
#接続オブジェクトのリスト
assets=wslib.list_connections()
wslib.show(assets)

get_connectionで接続オブジェクトの設定を取得できます。api_key、resource_instance_id、bucketなどの情報が取れます。

接続オブジェクトの情報を取得
connection_config=wslib.get_connection('200322icosbucket')
connection_config

2 ICOSへの接続

ibm_boto3をAPIをつかってICOSへ接続します。

ICOS接続
from botocore.client import Config
import ibm_boto3

cosclient = ibm_boto3.client("s3",
    ibm_api_key_id=connection_config['api_key'],
    ibm_service_instance_id=connection_config['resource_instance_id'],
    ibm_auth_endpoint=connection_config['iam_url'],
    config=Config(signature_version="oauth"),
    endpoint_url='https://'+connection_config['url']
)

200322icosbucketの中には以下のようなオブジェクトが入っています。

これをAPIで取得してみます。

バケットのオブジェクトリストを取得
listobject=cosclient.list_objects(Bucket=connection_config['bucket'])
listobject['Contents']
ouput
[{'Key': 'Cond4n_e.csv',
  'LastModified': datetime.datetime(2020, 4, 22, 6, 9, 45, 212000, tzinfo=tzlocal()),
  'ETag': '"a2f6827a0f9433a1d91520607747276b"',
  'Size': 134617,
  'StorageClass': 'STANDARD',
  'Owner': {'DisplayName': '52aa9e0c-0aa7-45e5-b231-1a65d1a57a1a',
   'ID': '52aa9e0c-0aa7-45e5-b231-1a65d1a57a1a'}},
 {'Key': 'Cond4n_e104.csv',
  'LastModified': datetime.datetime(2020, 4, 22, 6, 9, 43, 413000, tzinfo=tzlocal()),
  'ETag': '"fdb3803425be82d35c6ed178a14c4305"',
  'Size': 146,
  'StorageClass': 'STANDARD',
  'Owner': {'DisplayName': '52aa9e0c-0aa7-45e5-b231-1a65d1a57a1a',
   'ID': '52aa9e0c-0aa7-45e5-b231-1a65d1a57a1a'}},
-----以下略-----------

3 ICOSからCSVのダウンロード

Cond4n_e104.csvをpandasに読み込んで、CSVとして出力します。

csvのダウンロード
import pandas as pd
from io import StringIO
body=cosclient.get_object(Bucket=connection_config['bucket'],Key='Cond4n_e104.csv')['Body']
df=pd.read_csv(StringIO(body.read().decode('utf-8')))
df.to_csv('Cond4new.csv', index=False)

4 ICOSへのCSVのアップロード

Cond4new.csvをICOSのBucketにアップロードします。

csvのアップロード
cosclient.put_object(Bucket=connection_config['bucket'],
                     Key='Cond4new.csv', Body='Cond4new.csv')

ICOSのbucketにアップロードされました。

サンプルコード

参考

Watson Studio (Notebook)からICOSにアクセスする