【ETL処理】第二弾：S3のDatawarehouseに溜めたデータを用いてQuickSightで可視化する流れ

# 最初に
この記事は、ETL処理シリーズの第２弾です！

第一弾：https://qiita.com/ishidao/items/fafb933de5373e8df534
第二弾：本記事！！

前回では、Datalakeに保存した生データを、加工してDatawarehouseに送るという処理を書いていきました。

今回は、Datawarehouseのデータを利用して、AWSが提供するBIツールのQuickSightで可視化するまでの流れを書きたいと思います。

# できるようになること

- QuickSightでのデータの可視化

# 利用サービス

- AWS S3
- QuickSight

# 分析アーキテクチャ
前回のETL処理フローに加え、右側が追加されています。

![スクリーンショット 2021-12-06 11.47.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/845778/d8659847-59cf-b66e-1089-603dbbfb9733.png)


# マニフェストファイルの準備
マニフェストファイルというのは、QuickSightで読み込むファイル形式や、S3のパスを指定するjsonファイルのことです。

フォーマットはAWSのドキュメントにあるので、その形に従って書けばOKです。

```json
{
    "fileLocations": [
        {
            "URIPrefixes": [
                "https://datawarehouse-trading.s3.ap-northeast-1.amazonaws.com/"
            ]
        }
    ],
    "globalUploadSettings": {
        "format": "CSV",
        "delimiter": ",",
        "textqualifier": "'",
        "containsHeader": "true"
    }
}
```

具体的には、URIPrefixesにデータのパスを書いています。
ファイルの名前は、manifest-trading.jsonとしておきましょう！

作成したファイルは[datawarehouse-trading/]に置きます。

## URIPrefixesの取得
一応ここの取得方法も書いておきます。

前回までで、S3にdatawarehouse-tradingというバケットを作り、そこにcsvファイルが直置きされていると思います。

ここの適当なオブジェクトを選択して、URLをコピーとしたときの、オブジェクト手前までが、こちらのパスになります。
![5088449f1fe251069ec45c08df64be18[1].png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/845778/0ce26ebd-54c7-229c-8df8-78847dbe404b.png)

# QuickSight側の流れ
ここからは実際にQuickSightを触っていきます。

## アクセス権限の付与
自分が躓いたポイントです！ここでは、QuickSightがS3にアクセスをする権限を与えます。
QuickSightコンソール画面より、QuickSightの管理を選択します。
![1ababbf480725f0e64be268f2a3e2464[1].png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/845778/70f37eb6-cfdf-3e0d-6eae-d3955149e20c.png)

[セキュリティとアクセス権限]を選択し、QuickSightのAWSのサービスへのアクセス欄より、[Manage]を選択します。

Amazon S3にチェックを入れ、S3バケットを選択するという項目があるので、そこから[datawarehouse-trading]のバケットを選択します。

## 新しいデータセットの作成
QuickSightにログインしたら、[新しい分析]というタブから分析を作成していきます。
![85a9713e4a03b7587db199c845d298f1[1].png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/845778/9cbe09cb-c3e6-1d80-9051-8e2c4737607d.png)


新しいデータセットを選択し、新規データソースには[S3]を選択します。
![1a01feefcf26c1f52dd67cf992109947[1].png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/845778/c0b3b165-b6e9-8708-0bfb-3378e35db0ff.png)

データソース名：Trading-history-analysis
マニフェストファイルのアップロード：s3://datawarehouse-trading/manifest-trading.json

成功するとこのような画面が出ると思います。
![8abc7293611a892594a1ce4bf4638af4[1].png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/845778/be2ad7df-ef33-6a9a-c27e-f317b2d3f2da.png)

[視覚化する]を選択して、可視化していきましょう！

## 可視化要件の確認
前回記事にはなりますが、こんなことを言っていました。

個人的に分析したいこと

- 証拠金増減の時系列グラフ
- 各通貨の勝率
- 手法別での勝率
- High-Low別の勝率

この辺のグラフを作成していこうと思います！

### 証拠金増減の時系列グラフ
使うビジュアルタイプは折れ線グラフ
x軸：entry_end（エントリーの終了時間）
y軸：deposit（週の収益増減）
![712ec95c01d5ec71ae686d7213709688[1].png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/845778/4dc9a5f0-9a3d-1125-1794-c2a4dd3f0496.png)
このように週初めを0として、直近1週間での利益増減を見ることができます。

### 各通貨の勝率
使うビジュアルタイプは垂直積み上げ100%棒グラフ
x軸：currency（通貨）
値：win_lose（勝敗）
グループ：win_lose（勝敗）
![22a203e94836cb0fdf9e7087a88c9ed3[1].png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/845778/851338d7-ca5a-25a9-bd67-6b2106b8dba6.png)

###手法別での勝率
現在僕は、手法でエントリー金額を分けているのですが、金額別でラベルをつけるのを忘れていました。

このように、分析したい内容があっても、それを満たす特徴量を用意していないと可視化できないことが多々あります。

このようなミスは、データ分析案件の修正依頼として、データ加工の部分を修正しなければならず、修正案件となって分析チームに降りてきます。

###High-Low別の勝率
使うビジュアルタイプは水平積み上げ100%棒グラフ
y軸：HighLow（High or Low）
値：win_lose（勝敗）
グループ：win_lose（勝敗）
![e7c431b50392543508a4c058033132f4[1].png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/845778/0c4eb008-7bcc-2788-11cb-ccf82477af95.png)

### 全体勝率とエントリー数
グループ/色：win_lose（勝敗）
値：win_lose（勝敗）

![2a6c688d84ada59c401be0a32181abd0[1].png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/845778/dea9ad14-a406-4ff9-7e38-1242b8e464df.png)

今回の要件では、このグラフを用意する必要はありませんでした。

しかし、上で、HighLow別の勝利を用意していることから、1段抽象度の高い、「全体としての勝率」があったほうが、分析がしやすいと思って追加しました。

これがあるおかげで、全体勝率が60%のうち、Highにエントリーしたものの方が勝率が高いことがわかります。

このように、要件にないことであっても、時間の余裕やインサイトの追加として、分析事項を加えることもあります。

### Tips
datawarehouseには、データをバンバン貯めていきます。
なので、今は2021年の11月分しか入っていませんが、今後増えることを見越してフィルターを作成することをお勧めします。

具体的には、直近3か月の収支や勝率分析、及び直近1週間の収支や勝率分析を並べて比較する。など。


# 最後に
加工したデータをQuickSightで可視化すると、matplotlibではいろいろパラメータを設定しなければならないのが直感的にポチポチするだけで実行できます。

AWSにアクセスできるユーザーであれば、権限次第で分析を共有することもできる面では、QuickSightは有用なツールだなと改めて実感しました。