Oracle Cloud Infrastructure Data Scienceを使って、OCI Object StorageとAWS S3のファイルデータにアクセスしてみる

#本記事の狙い
2020/2に、Oracle Cloud Infrastructure Data Science(OCI-Data Science)がリリースされました。
前回、OCI-Data ScienceからOracle Autonomous Database(ADW)上のデータにクエリしてみたので（[Qiita記事：Oracle Cloud Infrastructure Data Scienceを使ってOracle Autonomous Database(ADW)のデータにアクセスしてみる](https://qiita.com/maato/items/d946e83facad12faf184)）、本記事では、実際にOCI-Data Scienceを使って、Oracle Cloud Infrastructure Object Storage（OCI-Object Storage）と、AWS S3上のファイルからデータを取得する手順を、実際に実施してみたいと思います。

#参考文献
###実施に参考になるリンク
- [Oracle Cloud Infrastructure Data Science（OCI-Data Science）を使ってみよう](https://community.oracle.com/docs/DOC-1036110)
- [OCI-Data Science 公式ドキュメント](https://docs.cloud.oracle.com/en-us/iaas/data-science/using/overview.htm)
- [Oracle Accelerated Data Science SDK (ADS) 公式ドキュメント（Loading Data)](https://docs.cloud.oracle.com/en-us/iaas/tools/ads-sdk/latest/user_guide/loading_data/loading_data.html)
- [Qiita記事：AWSアクセスキー作成](https://qiita.com/miwato/items/291c7a8c557908de5833)

#手順
以下のような手順で実施します。
1.OCI-Data Scienceの設定
2.OCI-Object Storage上にファイルをおき、OCI-Data Scienceからアクセスする
3.OCI-Data Science上にファイルををおき、OCI-Data Scienceからアクセスする
4.AWS S3上にファイルをおき、OCI-Data Scienceからアクセスする

###1.OCI-Data Scienceの設定
上記参考文献の「Oracle Cloud Infrastructure Data Science（OCI-Data Science）を使ってみよう」を参考にOCI-Data Scienceのノートブック環境を構築、設定をします。
手順とおりに実施すれば、それほど難しくないのでは、と思います。

1. Oracle Cloudの基本的な設定の後に、ノートブック環境を構築します。
2. **getting-started.ipynb**を使って、ノートブック環境（JupyerLab）の初期作業を行います。


###2.OCI-Object Storage上にファイルをおき、OCI-Data Scienceからアクセスする
OCI-Data Scienceの中には、**/home/datascience/ads-examples** 配下のディレクトリに、多くのサンプルノートブックファイルが存在します。
これらサンプルファイルで、基本的な使い方は大体網羅されていますが、今回はその中の一つ、**ads_loading_data-2.ipynb** というサンプルファイルを使います。
このサンプルノートブックの順序に従ってやれば、大体できるようになっています。

#### a.OCI-Object Storageにファイルをおく
- 左のナビゲートから、**オブジェクト・ストレージ**を選択します。
- **「バゲットの作成」**ボタンから、バゲットを作成します。（例：bucket-20200323-2255）
- バゲットができたら、**「オブジェクトのアップロード」**ボタンから、ファイルをアップロードします。（例：Purchase_Item.csv）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109157/2b6cafca-5910-6320-72fc-64061f36f334.png)

#### b.OCI-Data Scienceからファイルにアクセスする
OCI-Data Scienceのノートブック環境から、**ads_loading_data-2.ipynb** を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109157/1d3ecdbe-1f3b-6f4c-03bb-0ba4ed0650bf.png)

必要なライブラリを読み込みます。

```python
import pandas as pd
import numpy as np

import warnings
warnings.filterwarnings('ignore')

import logging
logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.ERROR)

from ads.dataset.factory import DatasetFactory
from ads.dataset.dataset_browser import DatasetBrowser
```

OCI-Object Storageへの接続にあたっては、`OCI configuration file`の設定が必要ですが、こちらは、**getting-started.ipynb**を使って、先に設定しておく必要があります。参考文献の「Oracle Cloud Infrastructure Data Science（OCI-Data Science）を使ってみよう」を参考にOCI-Data Scienceのノートブック環境を構築、設定しておいてください。

実際にOCI-Object Storage上のデータにアクセスしてみます。
OCI-Object Storage上のファイルにアクセスするには、`ADS`に含まれる`DatasetFactory.open`を使って、`oci://<bucket-name>/<file-name>`のように指定します。

以下のように記載します。

```python
ds_oci = DatasetFactory.open("oci://bucket-20200323-2255/Purchase_Item.csv", 
                         storage_options={"config":"~/.oci/config", "profile":"DEFAULT"}, delimiter=",")
```
以上です。
`OCI configuration file`を利用し、CSVファイルをカンマ区切りで読み込んでいます。
正常に取得できたか、確認してみます。

```python
ds_oci.head()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109157/19e2805b-e343-5605-0c9f-1708879b782e.png)

きちんとOCI-Object Storage上のファイルからデータが取得されています。
簡単ですね。

###3.OCI-Data Science上にファイルをおき、OCI-Data Scienceからアクセスする
**ads_loading_data-2.ipynb** の中には、**Local File Storage**という、OCI-Data Scienceのノートブック環境上にファイルをおいてアクセスする方法も紹介されているのでやってみます。

#### a.OCI-Data Science上にファイルをおく
**/home/datascience/ads-examples/data**ディレクトリ配下には、デフォルトでサンプルデータが置いてあります。
同じようにデータをこのディレクトリ（もしくは適当なディレクトリ）に置きます。ファイルのアップロードには、JupyterLabのアップロードボタンを利用すると便利です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109157/842f67bb-6d90-e305-63c3-8bee0f0013ff.png)

#### b.OCI-Data Scienceからファイルにアクセスする
今回は**ads_loading_data-2.ipynb**にあるとおり、**/home/datascience/ads-examples/data**ディレクトリ配下に、デフォルトで存在するサンプルデータを利用します。
この場合も、`ADS`に含まれる`DatasetFactory.open`を使って、以下のように記載します。

```python
ds_ocids = DatasetFactory.open("/home/datascience/ads-examples/data/multiclass_fk_10k.csv")
```

確認してみます。

```python
ds_ocids.head()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109157/b01ba3e8-35b4-2ab4-b1e4-53597314f7b2.png)

うむ。
難しくないですね。

#### c.OCI-Data Science上に新規ファイルを作成し、データをロードする
今度は逆に、Notebook上のデータを使って、OCI-Data Science上のノートブック環境に新規ファイルを作成し、上記で使用した`ds_ocids`のデータをロードしてみます。
この場合は、`ADSDataset`に含まれる、`to_csv()`メソットを利用します。

```python
import os
# Generate CSV of our data
[ds_link] = ds_ocids.to_csv("./data/test_multiclass.csv")
```

確認します。
確かに新規ファイルが作成され、データがファイルにロードされていますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109157/296f3c4a-383e-e71d-0a17-3d8bb1fa51be.png)

###4.AWS S3上にファイルをおき、OCI-Data Scienceからアクセスする
次に、AWS S3上のデータに、OCI-Data Scienceからアクセスしてみます。

#### a.AWS S3にファイルをおく
- S3上にバゲットを作成し、ファイルをアップします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109157/30ef15af-9f90-844f-6dc7-4a50a5453ac5.png)

OCI-Data Scienceからアクセスするには、アクセスキーID、シークレットアクセスキーが必要となります。
**参考文献「AWSアクセスキー作成」**を参考にしながら、以下を実施します。

- グループ作成
- ユーザー作成
- アクセスキーID、シークレットアクセスキーIDの確認

また、バケットへのエンドポイントURLを確認しておきます。S3上のファイル詳細の**オブジェクトURL**に記載あります。（もっといい確認方法があるかもしれません、、、）
例：https://<バケット名>.s3-ap-northeast-1.amazonaws.com

#### b.OCI-Data Scienceからファイルにアクセスする
AWS S3上のファイルにアクセスする場合も、OCI-Object Storageと同様に、`ADS`に含まれる`DatasetFactory.open`を使って、`oci://<bucket-name>/<file-name>`のように指定します。
以下のように記載します。

```python
aws_key = '<上記で確認したアクセスキーID>'
aws_secret = '<上記で確認したシークレットアクセスキーID>'
ds_s3 = DatasetFactory.open("s3://<バケット名>/<ファイル名>", storage_options = {
    'key': aws_key,
    'secret': aws_secret,
    'client_kwargs': {
            "endpoint_url": "<エンドポイントURL>"
    }
})
```

確認してみます。

```python
ds_s3.head()
```
確かに、無事取得できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109157/5f4f5c60-5097-6403-b8e5-dc04226e2edf.png)

これでAWS S3上のデータを使って、OCI-Data Science上でデータ分析を実施したり、OCI-Object StorageとAWS S3上のデータを結合してOCI-Data Scienceで利用したり、分析の幅が広がりますね。


#終わりに
今回は、OCI-Data Scienceにサンプルとして含まれる、**ads_loading_data-2.ipynb** をベースに、OCI-Data Scienceから、OCI-Object Storageと、AWS S3上のファイルにアクセスし、データを取得してみました。

またこの方法以外にもADSを使って、様々なデータソースからデータを取得する方法が、サンプルノートブックや、[ADSのドキュメントの「Loading Data」](https://docs.cloud.oracle.com/en-us/iaas/tools/ads-sdk/latest/user_guide/loading_data/loading_data.html#)に記載しているので参考にしてみてください。

OCI-Data Scienceは、最大30日間300$分の無償クレジットが使える[Oracle Free Trial](https://www.oracle.com/jp/cloud/free/#free-cloud-trial)の、対象サービスですので、ぜひ実際に使ってみることをおすすめします。

#### Let's Enjoy Data Science!