Oracle Analytics Cloud：ADWのグラフ機能を利用してみる

# はじめに
Oracle Analytics Cloud（**OAC**）では、Autonomous Data Warehouse（**ADW**）のグラフ機能をデータフローから呼び出して使用することができます。
グラフ機能と言っても、棒グラフとか折れ線グラフとかのグラフではありません。
さまざまな関係構造をネットワークとして扱い、そのネットワークを点と線の集合として抽象化したものがグラフです。

# 1. 準備
何か良いデータはないかと探してみたのですが、気に入ったものが見つからず・・・。
Wikipediaを参考に、東京の地下鉄駅のリストを（地道に）作成しましたので、これをADWにロードして使うことにします。
（320の組み合わせになりました）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/f69eab9a-9621-dce0-9778-529b73a20c3f.png)
ADWとOACのインスタンスは作成済みという前提です。

# 2. OACでデータセットを作成
OACにログインし、「作成」から「データセット」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/96701703-2fe3-a0a5-5cc4-d2943ff60d54.png)
目的の表をダブルクリックするか、ドラッグ＆ドロップで選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/04a3a00d-7a68-5976-a2fe-8da0e9f1c5ed.png)
名前を「東京の地下鉄駅」として保存しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/54d3f15f-2713-ae5b-cab0-4d30e4c5b8d1.png)

## 2.1 中身を確認
作成したデータセットを使って、ワークブックを作ります。
「発駅」「着駅」「距離」をコントロールキーを押しながら選択し、右クリックして「ネットワーク」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/c08b90bb-947a-24c2-c7b8-c0147efe99e3.png)
こんな感じになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/17328894-b6bb-917c-d2c2-1300dd07b4c9.png)
ワークブックに名前を付けて保存しておきます。

## 2.2 カスタム・ビジュアライゼーションをインストール
OACのホーム画面に移動し、「サンプルのダウンロード」をクリックします。
「サンプルのダウンロード」が表示されていない場合は、こちら（[Oracle Analytics Extensions Library](https://www.oracle.com/business-analytics/data-visualization/extensions/)）をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/29c6db25-850f-e227-522b-f2518a3cc76a.png)
「network」と入力して検索します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/300e10b0-3da1-d6de-19d3-104aafbeb228.png)
「Graph Network Viz」をダウンロードします。
ダウンロードには、OTNライセンスに同意する必要があります。アカウントがない人は作成してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/ebad1d14-7fc4-770d-de12-db53ad76ba4e.png)
zipファイルがダウンロードされます。

:::note info
この作業を実施している時点では、customviz_com-company-network2Viz_060421.zipというファイルがダウンロードされました。
さらにこのzipを展開して、**customviz_com-company-network2Viz_6.0.zip** を取り出しておきます。
:::

OACに戻って「コンソール」に移動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/169f6435-d934-fa1d-be29-5c911051c35b.png)
「拡張機能」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/31868de2-3e09-7121-6b87-3577bf5045b2.png)
「拡張機能のアップロード」をクリックして、customviz_com-company-network2Viz_6.0.zipをアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/62a0a004-0a9f-d972-fa7d-59f54f3a4a9d.png)

## 2.3 もう一度、中身を確認
ブラウザを再読み込みして、保存しておいたワークブックを開きます。
ビジュアライゼーションのタイプを「ネットワーク」から、新しく登録した「Network 10K Plugin」に変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/d74cefbe-e9df-79a8-66f4-af3d60858095.png)
ラベル表示と凡例をオンにしてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/90b01d07-137c-4361-2750-7ed647f31005.png)

# 3. データフローを使用したデータセットの作成
一旦、ホーム画面に戻って「新規」から「データフロー」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/350fa01d-3017-c731-a1ed-de907576baf1.png)
「東京の地下鉄駅」データセットを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/9f0c0af0-b2d1-98db-fe9b-efd593d1ea13.png)

## 3.1 最短経路の計算
新宿からスカイツリーに行くための最短経路を計算してみます。
「＋」をクリックして、ステップを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/1f60f6ad-6491-9633-65d7-8f19472e08a3.png)
「グラフ分析」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/2a9c1a49-71f4-039d-e4ac-7d82c643f3e0.png)
「Shortest Path」を選択し、「OK」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/3383f11b-307e-1b92-2f43-8eb4274fa659.png)
出力列を次のようにしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/604ae714-3233-d0fa-83f1-f9ef2a93bc54.png)
reference_col2とreference_col3は今回は使用しません。
パラメータセクションで、「Source Vertex」の右側の「値を選択してください」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/5bce734e-6307-fdf2-a868-d38b26a8f489.png)
「発駅」列から「新宿」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/0beba0bd-0395-1679-8a17-84ecc303a01a.png)
同様の手順で他のパラメータを設定します。

| パラメータ | 値 |
|:-|:-|
|Source Vertex|発駅 = 新宿|
|Destination Vertex|着駅 = 押上 \<スカイツリー前\>|
|Weight Column|距離|
|Reference Column1|路線名|
|Reference Column2| \<使用しない\> |
|Reference Column3| \<使用しない\> |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/2d5c7977-fce4-0b81-7ac3-d7eba4d9eaea.png)
ステップを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/67fefa9a-2a2a-1a1d-99cd-c55913acb521.png)
「データの保存」を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/ca048647-91bf-c04b-d196-1de42db6bd78.png)
「データセット」として「最短経路」を入力します。
「表」として「SHORTEST_PATH」と入力します。表や列は、ADWで許されている命名規則でアルファベットで入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/2cd1fbfe-facc-8501-9c9d-eaf342125ac6.png)
データフローを保存して、実行します。
ADWのグラフ機能による計算結果を使用して表が作成され、その表を参照するデータセットが自動的に作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/aaf6cbc5-7325-428f-5b8f-bfef277304ed.png)

### 3.1.1 最短経路を確認
データセットをクリックしてワークブックを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/20edfa1d-92ef-be36-3f7e-dfae86e76356.png)
当然ですが、乗り換えにかかる時間や列車ダイヤ、接続駅での徒歩移動の可能性など一切考慮されていないので、独特のルート選択になりましたが、最短距離ではあるようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/daa5f672-6c74-0685-94e5-9c3d9dae8fdf.png)
ワークブックにデータセットとして「東京の地下鉄駅」を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/e1019591-acf1-ed0e-85da-05a09c490e0c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/8c6b8d54-d40d-79f2-2955-a03b12865a72.png)
Network 10K Pluginで可視化しました。
最短経路がわかりやすいように、Link Series Colorを赤「#FF0000」にしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/8b44c77f-1074-926a-634b-7271766021ff.png)

## 3.2 ノードランクの計算
今度はノード（今回の例では駅）のランキングを計算してみましょう。
最も重要な駅はどの駅かを見極めます。
新たにデータフローを作成しますが、最初に「東京の地下鉄駅」データセットを選択し、「グラフ分析」ステップを追加するところまでは同じです。
今度は、グラフ操作として「Node Ranking」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/e4ea6923-3d25-e06c-d03d-8d9630bf5cb8.png)
出力セクションで、「Node_Vertex」の列名を「発駅」、「Rank」の列名を「ランク」とします。
パラメータセクションでは、「Source Column」を「発駅」、「Destination Column」を「着駅」とします。
グラフ分析の右の「＋」をクリックして「データの保存」ステップを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/5df88fda-9583-0d76-66ca-30aae221d431.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/a0088be3-c26d-beba-2bb2-fee826daec5e.png)
データ保存のパラメータを入力し、データフローを保存後、実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/c74aa446-564e-4565-ca9d-8c888fe0303e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/1ba9beed-fb5d-88c9-05ec-dafd8fc2de81.png)

### 3.2.1 ノード（駅）ランクを確認
作成されたデータセットをクリックして可視化します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/c0c24de4-f06d-1b9d-7a32-c7ae44eb2f3d.png)
東京の地下鉄駅で最も重要な駅は、大手町でした（まあ、ですよね）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/e3282206-1e55-81e9-1d81-888a312628f3.png)
では、「東京の地下鉄駅」データセットを追加して、Network 10K Pluginで重要度に応じてノードのサイズを変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/4ae8b6f9-c457-3f0b-9690-5fce78fdcf72.png)

## 3.3 ホップ数の計算
最後に、大手町から3ホップでどこまで行けるかをグラフ機能で計算します。
新しいデータフローを作成します。最初に「東京の地下鉄駅」データセットを選択し、「グラフ分析」ステップを追加するところまでは同じです。
今度は、グラフ操作として「Sub Graph」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/e419f69e-9e2f-69dd-ecd3-7f18f46eef20.png)
出力セクションは次のように設定しました。
| 出力 | 列名 |
|:-|:-|
| Source  | 発駅  |
| Destination  | 着駅  |
| Hop Number  | ホップ数  |
| reference_col1  | \<使用しない\>  |
| reference_col2  | \<使用しない\>  |
| reference_col3  | \<使用しない\>  |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/b7e6913d-d93a-e88f-e9c5-82e50d7c978d.png)

パラメータセクションは次のように設定しました。
| パラメータ | 値 |
|:-|:-|
| Source Vertex | 発駅 = 大手町  |
| Destination Column  | 着駅  |
| Number of Hops  | 3  |
| reference_col1  | \<使用しない\>  |
| reference_col2  | \<使用しない\>  |
| reference_col3  | \<使用しない\>  |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/4589796b-97e4-18ef-5679-033b12f58262.png)
「データの保存」ステップを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/7bf4f05a-942f-78cb-82b8-e26fc0e3e62c.png)
データフローを保存して実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/f43ce825-5dfa-139f-fae6-2b823962f29f.png)

### 3.3.1 ホップ数を確認
「東京の地下鉄駅」データセットと組み合わせました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/1734d17a-481f-2850-eca3-070060c2cc31.png)

# 4. 参考情報
- [Oracle Databaseの空間およびグラフ機能](https://www.oracle.com/jp/database/technologies/spatialandgraph.html)