[Oracle Cloud] OCI Data Sciense ノートブック・セッションの作成してみた(2023/08/15)

# はじめに
Oracle Cloud Infrastructure Data Scienceでノートブック・セッションを作成し、OCI Object StorageのCSVファイルの取り込み、Autonomous Databaseの表データの取得を実施してみた。

# 作業ステップ

1. 前提条件の設定
1. プロジェクトの作成
1. ノートブック・セッションの作成
1. OCI Object Storage上のCSVファイルの取り込み
1. Autonomous Databaseの表データの取得


# 前提条件の設定

OCI Webコンソールメニューから「アナリティクスとAI」「データ・サイエンス」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/5e547d32-8594-fb3a-cab2-65b201398484.png)

データ・サイエンスの前提条件の「詳細情報の表示」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/161df3fa-2214-acc9-85a0-6ac4292c7bea.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/b144f51e-24c8-d60b-c386-14573ae86922.png)

#### ステップ1) VCNとサブネットの作成
仮想クラウド・ネットワーク > VCNウィザードの起動 > 「インターネット接続性を持つVCN」オプションを使ってVCNを作成。
（事前構成済のサービス管理VCNおよびサブネットの利用も可能）

#### ステップ2) 動的グループの作成
次の一致ルールをもつ動的グループを作成、
ALL { resource.type = 'datasciencenotebooksession' }

#### ステップ3) ポリシーの作成
次を作成

3.1 サービス・ポリシー
allow service datascience to use virtual-network-family in tenancy
3.2 非管理者ユーザー・ポリシー
allow group <data-scientists> to use virtual-network-family in tenancy
allow group <data-scientists> to manage data-science-family in tenancy
3.3 動的グループ・ポリシー
allow dynamic-group <dynamic-group> to manage data-science-family in tenancy


# プロジェクトの作成
OCI Webコンソールメニューから「アナリティクスとAI」「データ・サイエンス」を選択
「プロジェクトの作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/d37b5696-0296-4c3c-a70b-cf0a9fd15200.png)

「名前」を入力し、「作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/f5a7c520-9068-9035-712b-ce3e98f416d3.png)


# ノートブック・セッションの作成
プロジェクトの詳細画面で「ノートブック・セッションの作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/c5b04d8e-f56b-a13b-8fc1-700f858086f1.png)

「名前」を入力
「シェイプ」を選択
「ネットワーキング・リソース」で作成したVCNを使用する場合は、「カスタム・ネットワーキング」を選択し、VCN/サブネットを選択。
事前構成済のサービス管理VCNおよびサブネットを使用する場合は、「デフォルト・ネットワーキング」を選択
「作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/5e506d08-9597-d09d-b4d7-07c5299aad0e.png)

※ 3分程度で作成完了

サポートされているコンピュート・シェイプ

|シェイプ|OCPU|メモリ(GB)|
|:--|:--|:--|
|VM.Standard.E3.Flex|1–64|1-1024 (OCPU数に依存)|
|VM.Standard.E4.Flex|1–64|1-1024 (OCPU数に依存)|
|VM.Standard3.Flex|1–32|1-512 (OCPU数に依存)|
|VM.Optimized3.Flex|1–18|1-256 (OCPU数に依存)|
|VM.Standard2.1|1|15|
|VM.Standard2.2|2|30|
|VM.Standard2.4|4|60|
|VM.Standard2.8|8|120|
|VM.Standard2.16|16|240|
|VM.Standard2.24|24|320|

そのほか GPUシェイプの選択も可能


## ノートブックを開く
「ノートブック・セッションの詳細」画面から「開く」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/686d5bfd-3429-0acc-6348-a8e7b574fad5.png)

テナンシ名を確認し「Continue」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/d0d6128d-83d5-2ceb-d141-470a465c4c54.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/a9450a97-babe-b145-6a02-741c82519e42.png)

ノートブック・セッションが開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/5473bd00-a2b5-4d1e-0e93-7cef7a2a2319.png)


## サンプルノートブックの確認
「Notebook Explorer」からサンプルのノートブックを参照可能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/c42bcaa4-1f56-4dac-f54a-1ae76d2bf2a6.png)

「Notebook Explorer」のフィルタに「autonomous database」を入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/7f8f194e-7d19-0e6e-4b48-79b0c7a56232.png)

「Loading Data With Pandas & Dask」を参照

# OCI Object Storage上のCSVファイルの取り込み
「Python [conda env:root] *」 の「Create Notebook」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/a5e2f35c-1806-6428-7b62-3537b37581cb.png)


ノートブックで以下の入力

必要なライブラリのインストール
```
!pip install -U oracle-ads
!pip install geopandas
!pip install datefinder
```

ライブラリのインポートとリソースプリンシパル認証

```
import ads
import logging
import numpy as np
import os
import pandas as pd
from ads.dataset.factory import DatasetFactory
from os import path
import ads
ads.set_auth(auth='resource_principal')
```

OCI Object Storageのnamespace名、バケット名、オブジェクト名（CSVファイル）を指定して CSVファイルを読み込み

```
namespace = "<namespace名>"
bucket_name = "<バケット名?"
file_name = "<オブジェクト名?"
df = pd.read_csv(
    f"oci://{bucket_name}@{namespace}/{file_name}",
    storage_options=ads.common.auth.default_signer(),
)
```

データセットの確認

```
df.head()

Name	PClass	Age	Sex	Survived
0	Allen, Miss Elisabeth Walton	1st	29.00	female	1
1	Allison, Miss Helen Loraine	1st	2.00	female	0
2	Allison, Mr Hudson Joshua Creighton	1st	30.00	male	0
3	Allison, Mrs Hudson JC (Bessie Waldo Daniels)	1st	25.00	female	0
4	Allison, Master Hudson Trevor	1st	0.92	male	1
```

```
ds = DatasetFactory.from_dataframe(df)
ds.show_in_notebook()
```



### python SDKを使った認証の場合
上述のリソースプリンシパルのかわりにPython SDKを使った認証も可能

ノートブックLauncher から「Terminal」を開き
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/0b3bf34b-4353-3898-60f4-ddb3f8cfd281.png)


```
$ oci setup config
```

でコンフィグを設定し、以下で認証


```
import ads
import logging
import numpy as np
import os
import pandas as pd
from ads.dataset.factory import DatasetFactory
from os import path
import oci
from oci.data_science import DataScienceClient
rps = oci.auth.signers.get_resource_principals_signer()
dsc = DataScienceClient(config={}, signer=rps)
```

# Autonomous Databaseの表データの取得

WalletのZipファイルをUpload
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/753cdac3-1db1-992e-8fdd-c5b6a25750ed.png)

必要なライブラリのインストール
```
!pip install -U oracle-ads
!pip install geopandas
!pip install datefinder
```

### Autonomous Databaseに接続
Walletファイル名、Databaseユーザ名、パスワード、サービス名を指定

```
connection_parameters = {
    "user_name": "<ユーザ名>",
    "password": "<パスワード>",
    "service_name": "adb_low",
    "wallet_location": "<Walletファイル名>",
}
```

### SELECT文の実行

```
import pandas as pd
import ads

df = pd.DataFrame.ads.read_sql(
    "SELECT * FROM SH.SALES",
    connection_parameters=connection_parameters,
)
```

### データの確認

```
df.head()

PROD_ID	CUST_ID	TIME_ID	CHANNEL_ID	PROMO_ID	QUANTITY_SOLD	AMOUNT_SOLD
0	13	524	1998-01-20	2	999	1.0	1205.99
1	13	2128	1998-04-05	2	999	1.0	1250.25
2	13	3212	1998-04-05	2	999	1.0	1250.25
3	13	3375	1998-04-05	2	999	1.0	1250.25
4	13	5204	1998-04-05	2	999	1.0	1250.25
```

```
from ads.dataset.factory import DatasetFactory
import pandas as pd
ds = DatasetFactory.from_dataframe(df)
ds.show_in_notebook()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/6cab913a-d3d2-aba1-cb41-feb5d11c3683.png)

# おわりに

OCI Data Scienceでノートブック・セッションを作成し、
パブリックIPアドレスアクセスするOCI Object Storage、Autonomous Databaseからデータを取得してみました。


# 参考情報

- [Oracle Cloud Infrastructure (OCI)データ・サイエンス](https://docs.oracle.com/ja-jp/iaas/data-science/using/overview.htm)
- [Connecting to Data Sources](https://accelerated-data-science.readthedocs.io/en/latest/user_guide/loading_data/connect.html#connecting-to-data-sources)