【入門】QuickSight × S3 でデータ可視化

S3 に保管されたデータを QuickSight で可視化するまでの流れをブログ化しました。
「S3 は普段から利用しているが、QuickSight は未経験」という方向けの内容です。

# 目次
- はじめに
- Amazon QuickSightとは
- ハンズオン
- 次の学びに向けて

# はじめに
システム運用を担当していると
「データが見たい」
「データを集計して欲しい」
という要望・作業依頼を受けることがあります。

データの属性によっては「業務での意思決定に必要」な場面も多く、また、「鮮度が重要なため常に最新のデータが必要」という理由により、割と高い温度感での集計実施を求められることが増えています。
その一方、昨今のマイクロサービスブームの影響により、必要な情報が複数のシステムに分散してしまい、「集計担当官」を設けなければ、欲しい情報1つすらままならない、という状況もちらほら見られます。

システムには「予め決められたことを、その通りに動作する」という原理原則があります。「データが見たい」という要望の裏には「いまのシステムでは欲しい情報が得られない」という悲しい現実があります。

もし「集計担当官」という役職を設けて、専属の作業者をアサインできるのであれば、集計作業自体は問題になりません。しかし、実際のところは「システム業務を担当するエンジニアが、付帯業務として集計を実施する」という運用方針になることが多いです。

これにより
①エンジニアは片手間で集計しているため、集計アウトプットが必ずしも高くはない
②「データが見たい」と依頼した人のもとには、その依頼とマッチするような結果が必ずしも得られない → **集計を再依頼する**
という負のループが回ってしまうことがあります。

「データベース」と「データを見たい非エンジニア」
をスムーズに繋げるルートがない（間にエンジニアが入らなければデータのやり取りができない）ことが問題の原因のため、「ある程度の検索柔軟性を保ちつつ、非エンジニアでも操作可能なUIで、環境用意がエンジニアの作業負荷ならずに済むデータ可視化・集計システム」用意できれば、エンジニアを介さずとも「データを見たい」という要望を叶えることができます。

今回はその簡易的に作成できる可視化・集計システムの1つとして「Amazon QuickSight」に触れてみました。

# Amazon QuickSightとは
[公式 Amazon QuickSight](https://aws.amazon.com/jp/quicksight/)

Amazon QuickSight は、AWS がサーバレスで提供する BI（Business Intelligence）サービスの1つです。
BI サービスとしてデータの集計・可視化ができ、そのデータ参照先として「S3, RDS, Aurora, DynamoDB, Timestream」などの AWS サービス群が利用できます。
データ自体が存在するならば、自前で集計・可視化環境を構築せずとも、QuickSight 経由でそれらを実現することができます。

QuickSight で作成したダッシュボードは、Emailなどで別ユーザとも共有可能です。

![quicksight-workflow-overview.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261058/85daa790-bba4-2156-e09a-51c8a1b5abce.png)

（画像引用元: [Amazon QuickSight の仕組み](https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/how-quicksight-works.html)）

公式が QuickSight のサンプルを公開しているので、こちらをご覧になれば、QuickSight の表現の幅が伝わると思います。

日本語版: [小売り業界の売上分析ダッシュボード](https://d2lzvqq4w5ulk4.cloudfront.net/?dashboardName=jpRetail)
英語版: [Amazon QuickSight Gallery](https://aws.amazon.com/jp/quicksight/gallery/)

# ハンズオン
QuickSight のはじめの一歩として、「S3 に保存されたデータの可視化」をやってみます。

今回利用するリソースは
- Amazon S3
- Amazon QuickSight

の2つです。

![Screen Shot 2021-12-11 at 21.31.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261058/b396686f-b50a-c613-d92b-af1153f5028f.png)

可視化用のデータとして、以下を `data.csv` として利用します。

```csv
id,name,age,gender,pc-os,mobile-os
00001,Ken,40,man,windows,android
00002,Judy,30,woman,windows,android
00003,Dybit,20,man,windows,ios
00004,Eubda,35,woman,windows,ios
00005,Ashton,30,man,mac,android
00006,Gwendolyn,25,woman,mac,android
00007,Cade,28,man,mac,android
00008,Jamie,41,woman,mac,ios
00009,Korbin,23,man,mac,ios
00010,Citlalli,32,man,mac,ios
```

## S3の準備
今回のハンズオン用の S3 を作成して、data.csv をアップロードします。

S3 のデータを QuickSight で読み取るには、マニフェストファイルが必要になります。
公式が[マニフェストファイルのフォーマット](https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/supported-manifest-file-format.html)を公開しており、こちらをコピーして適切に加工すれば、そのまま利用できます。

```json:マニュフェストファイルのフォーマット
{
    "fileLocations": [
        {
            "URIs": [
                "uri1",
                "uri2",
                "uri3"
            ]
        },
        {
            "URIPrefixes": [
                "prefix1",
                "prefix2",
                "prefix3"
            ]
        }
    ],
    "globalUploadSettings": {
        "format": "CSV",
        "delimiter": ",",
        "textqualifier": "'",
        "containsHeader": "true"
    }
}
```

各項目の意味は
- fileLocations: QuickSight が取得するファイルの場所
- globalUploadSettings: ファイルの設定（ファイル形式、区切り文字、ヘッダーの有無）

なので、ハンズオンのファイル `data.csv` に沿って記述すると以下になります。

```json:manifest.json
{
    "fileLocations": [
        {
            "URIs": [
                "https://<S3のバケット名>.s3.amazonaws.com/data.csv"
            ]
        }
    ],
    "globalUploadSettings": {
        "format": "CSV",
        "delimiter": ",",
        "containsHeader": "true"
    }
}
```

サンプルデータをマニフェストファイルを、どちらもS3にアップロードしてしましょう。

![Screen Shot 2021-12-11 at 21.51.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261058/30bd05ab-db2c-8dc6-3674-fa9cb699ec58.png)

以上で、S3の準備は完了です。

## QuickSightの準備
まずは、QuickSight から指定の S3 に接続できるよう設定します。
AWS マネジメントコンソールから QuickSight に移動して、アカウント名から「QuickSight の管理」を選択します。

![Screen Shot 2021-12-11 at 22.01.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261058/39b92c2a-c343-2a2b-90b4-a69864f995e0.png)

「セキュリティとアクセス権限」から QuickSight の AWS サービスへのアクセスを変更できます。
管理画面へ移動し、今回のハンズオン用に作成した S3 バケットを選択して、「保存」ボタンを選択します。

![Screen Shot 2021-12-11 at 22.02.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261058/0af3d8bb-aa9f-66e0-066a-fa55908004ba.png)

これで、QuickSight から S3 内バケットのデータにアクセスする準備が整いました。

## QuickSight に S3 からデータインポート
QuickSight のホーム画面化で「新しい分析」→「新しいデータセット」を選択すると、インポート元として利用可能なサービス一覧が表示されます。

![Screen Shot 2021-12-11 at 22.08.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261058/87ab3cb8-9e68-c1d6-223e-91b6a99d6f89.png)

S3 を選択すると
- データソース名
- マニフェストファイルのアップロード

の入力が求められるので、それぞれ適切に入力します。

![Screen Shot 2021-12-11 at 22.10.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261058/1cde77de-b632-0f9e-ae39-28b04fadc529.png)

マニフェストファイルは S3 にアップロード済みなので、S3 オブジェクトに移動して、画面の「オブジェクトURL」をそのままコピー&ペーストするだけです。

![Screen Shot 2021-12-11 at 22.13.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261058/51f62c2a-e89a-3321-1258-1f1f50dbcf92.png)

データソース名、マニュフェストファイルの URL を入力後、「接続」をクリックするとデータインポート始まります。
インポートが成功すれば、以下のようのメッセージが表示されるので「視覚化する」をクリックすれば、QuickSight のダッシュボード画面に移動できます。

![Screen Shot 2021-12-11 at 22.20.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261058/cf7f7f20-e60f-ebe3-3171-ab171b2e0d87.png)

## QuickSight で可視化
BI 画面に移動すると、以下のような画面が表示されます。

![Screen Shot 2021-12-11 at 22.22.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261058/567d4b4e-d278-cc1b-90df-7db8600c147e.png)

画面左側に
- age
- gender
- id
- mobile-os
- name
- pc-os

と項目が並んでおり、インポートした `data.csv` に対応していることが分かります。

QuickSight は可視化・集計したい内容を利用者側で設定する必要があります。
「フィールドリスト」と「ビジュアルタイプ」を選択すると、QuickSight 側が自動で可視化してくれるので、いろいろ試してみましょう。

### 例1
フィールドリスト
- gender

ビジュアルタイプ
- ドーナッツグラフ

![Screen Shot 2021-12-11 at 22.36.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261058/555b4705-e733-b730-b7be-f69b92e8dbe4.png)

### 例2
フィールドリスト
- gender
- mobile-os
- pc-os

ビジュアルタイプ
- ピボットテーブル

![Screen Shot 2021-12-11 at 22.34.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261058/195bfaee-46dd-920c-8f62-5b95a3d0e045.png)

データセットのインポートにさえ成功できれば、「項目選択 × 可視化方法の選択」だけで、QuickSight 側がいい感じのグラフを作成してくれます。

今回のハンズオンでは `data.csv` を利用しましたが、インポートするデータを変えた上で可視化してみるのも面白いでしょう。

# 次の学びに向けて
本記事では
- 「QuickSight × S3」によるデータ可視化

のハンズオンを説明しました。

データセットがあれば QuickSight で簡単にデータ可視化が可能なことを知っていただき「QuickSight に触れてみる」機会に繋がればと思います。

今回の可視化程度では Excel で十分に代替可能なため、QuickSight を使う旨味が伝わっていないかもしれません。
次の学習ステップとして、以下がオススメです。

- [Amazon QuickSightのBIダッシュボードで小売りデータを分析する](https://aws.amazon.com/jp/blogs/news/quicksight-dashboard-analysis-retail/)
- [【開催報告＆資料公開】Amazon QuickSight のノウハウ総まとめ！ 〜BI設計から運用まで〜](https://aws.amazon.com/jp/blogs/news/quicksight-matome-20201014/)

AWS に溜まったデータを QuickSight でサッと集計・可視化できれば、「データ活用」の幅が大きく広がると思います。

ここまでお付き合いいただき、ありがとうございました。