この記事は NTTテクノクロス Advent Calendar 2021 22日目の記事です。
こんにちは。NTTテクノクロスの木村です。
本記事では Amazon QuickSight について、ちょっとしたノウハウや検証したことを共有します。
概要
Amazon QuickSightとは、様々なデータの分析及びビジュアライズが容易にできるAWSのBIサービスです。
多様な機能が提供されており、今回は以下3つの機能を使用してみたいと思います。
- パラメータ(変数):オリジナルの変数を作成し、フィルター条件や計算フィールドに使用できる
- カスタムアクション:ビジュアルにURL呼び出しやワンクリックフィルタ等のアクションを指定できる
- カスタムSQL:データに対してクエリを発行できる
構成
構成は以下の通りです。
S3に可視化するデータを格納し、Athenaでテーブル定義して、QuickSightへ連携します。
可視化するデータ
家族が観葉植物好きな関係で、普段より室内の温度・湿度・光量をセンサで測定しています。
せっかく取得したデータなので、可視化してみたい思います。
date,room_temp,room_hum,room_light
2021-11-11 0:00:04,22.62,51.19,0
2021-11-11 1:00:06,22.35,50.7,0
2021-11-11 2:00:09,22.21,51.12,0
2021-11-11 3:00:04,21.98,48.87,0
2021-11-11 4:00:04,21.79,47.38,0
:
カラム | 内容 |
---|---|
date | 日付 |
room_temp | 温度 |
room_hum | 湿度 |
room_light | 光量 |
手順
1. S3にデータを格納
任意のS3バケットに可視化データ(sensor.csv)をアップロードしておきます。
2. Athenaにテーブル作成
Athenaのクエリエディタで以下のクエリを実行し、可視化データ用のデータベース、テーブルを作成します。
今回はデータベース名「qs」、テーブル名「sensor」で作成しました。
「S3 URI」には、手順1で可視化データを格納したプレフィックスを指定します。
CREATE DATABASE qs;
CREATE EXTERNAL TABLE IF NOT EXISTS `qs`.`sensor` (
`date` timestamp,
`room_temp` float,
`room_hum` float,
`room_light` float
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = ',',
'field.delim' = ','
) LOCATION '<S3 URI>'
TBLPROPERTIES ('has_encrypted_data'='false');
3. QuickSightの準備
3.1 権限設定
QuickSightからS3、Athenaに連携するにあたり、アクセス権限を付与します。
「QuickSightの管理」>「セキュリティとアクセス権限」>「QuickSight の AWS のサービスへのアクセス」 からS3とAthenaへの許可を設定し、保存します。
3.2 データセット作成
「データセットの作成」>「新しいデータセット」>「Athena」を選択し、データソース名を入力して「データソースを作成」を押下します。
テーブルの選択で、カタログ、データベース、テーブルを選び、「選択」を押下し、そのまま「Visualize」に進みます。
4. 機能検証
4.1 パラメータ(変数)
まずはパラメータを使ってみます。
サンプルとして、2021/11/11~2021/11/20の温度と湿度の折れ線グラフ、平均値を描画します。
特定の日付のオリジナルなパラメータを作成し、データをフィルタリングしてみます。
「パラメータ」>「+」を選択し、以下の通りパラメータを作成します。
今回は2021/11/15のみを対象として、「20211115」というパラメータを作成しました。
項目 | 設定値 |
---|---|
名前 | 20211115 |
データタイプ | 日時 |
時間詳細度 | 日 |
時間詳細度 | 2021/11/15 |
「フィルター」>「+」を選択し、先ほど作成したパラメータを指定します。
フィルタリングする対象に「date」を選択し、以下の設定で作成します。
項目 | 設定値 |
---|---|
フィルタタイプ | 日付と時刻の範囲 次と等しい |
パラメータを使用 | チェック |
日付パラメータ | 20211115 |
適用すると、2021/11/11~2021/11/20のデータから、パラメータで指定した2021/11/15のデータのみフィルタできました。
4.2 カスタムアクション
次にカスタムアクションです。今回は指定したシートに遷移する「ナビゲーションアクション」を作成します。
まずはアクション時の遷移先とするシート2に、温度と湿度のテーブルを作成します。
「アクション」で手順4.1で作成したシート1 の折れ線グラフにカスタムアクションを作成します。
シート1を選択し、「アクション」>「カスタムアクションを定義する」から以下の設定で作成します。
項目 | 設定値 |
---|---|
アクション名 | テーブルへ遷移 |
アクティベーション | メニューオプション |
アクションタイプ | ナビゲーションアクション |
ターゲットシート | シート2 |
作成したアクションを動作確認します。
シート1のビジュアル内で右クリックし「テーブルへ遷移」を選択すると、シート2へ遷移できました。
4.3 カスタムSQL
次にカスタムSQLです。サンプルとして、温度・光量の散布図と相関係数を描画してみます。
まずはデータセット作成でカスタムSQLを実行し、相関係数を取得します。
手順3.2と同じ手順でデータソースを新規作成し、テーブルの選択で「カスタムSQLを使用」に進みます。
「カスタムSQLクエリの入力」でクエリを入力して「クエリの確認」>「Visualize」を選択します。
今回作成したクエリ名は「corr_sql」、入力したクエリは以下の通りです。
select corr(room_temp, room_light) as corr from "qs"."sensor";
散布図と相関係数を描画します。
相関係数はデータセットに「corr_sql」を選択し、ビジュアルタイプに「KPI」を選択します。
次に散布図を作成します。
デフォルトのデータセットが「corr_sql」なので、「この分析のデータセット」で「データセットの追加」を選択し、手順3.2で作成したデータセット「sensor」を追加します。
データセットに「sensor」を指定し、ビジュアルタイプに散布図を選択すれば、描画完了です。
温度と光量は相関関係あるかと予想したのですが、期待していたより弱い相関でした。
4.4 ダッシュボード化
最後に作成したビジュアルを整形&まとめて、テーマを「Seaside」に変更しダッシュボード化してみました。
おわりに
今回はデータが少量のため簡易な分析でしたが、得た知見を今後のデータ可視化作業で応用できればと思います。
また可視化データは手動で持ち込みましたが、AWS IoTを使えばデータ連携も自動化できそうです。
QuickSightは新機能がどんどん追加されているため、これからも継続してウォッチしたいですね。
それでは、 NTTテクノクロス Advent Calendar 2021 23日目も、引き続きお楽しみください。