
Amazon QuickSightでソースデータの日付列の値をもとに曜日列を定義して可視化してみた
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、CX事業本部の若槻です。
今回は、Amazon QuickSightでソースデータの日付列の値をもとに曜日列を定義して可視化してみました。
やってみる
ソースデータの入手
今回、ソースデータには「東京都 新型コロナウイルス感染症対策サイト」の報告日別による陽性者数の推移のデータを使用しました。
サイトを開き、[報告日別による陽性者数の推移]の[オープンデータを入手]をクリックします。

「東京都オープンデータカタログサイト」のデータセットページが開くので、[探索] - [ダウンロード]をクリックしてソースデータのCSVファイルをダウンロードします。

QuickSightのデータセットにファイルをアップロード
Amazon QuickSightのコンソールを開き、[データセット]タブで[新しいデータセット]をクリック。

[ファイルのアップロード]をクリック。

先程ダウンロードしたCSVファイルを開きます。

ダイアログで[設定の編集とデータの準備]をクリック。

データセットにデータが読み込まれました。

データの列は次のようになっています。
- No(Int)
 - 全国地方公共団体コード(Int)
 - 都道府県名(String)
 - 市区町村名(String)
 - 公表_年月日(Data)
 - 発症_年月日(String)
 - 確定_年月日(String)
 - 患者_居住地(String)
 - 患者_年代(String)
 - 患者_性別(String)
 - 患者_職業(String)
 - 患者_状態(String)
 - 患者_症状(String)
 - 患者_渡航歴の有無フラグ
 - 患者_接触歴の有無フラグ
 - 備考(String)
 - 退院済フラグ(Int)
 
そのうち日付を表す列は公表_年月日、発症_年月日、確定_年月日ですが、今回は値が必ず入っている公表_年月日列をもとにして曜日列を定義したいと思います。

「曜日番号」列の定義
ここでは、実際の曜日名(日、月、火...)を表す「曜日」列を定義する前に、まず曜日を番号で表す「曜日番号」列を定義します。QuickSightでカスタム列を定義したい場合は計算フィールドを使用します。
[計算フィールドを追加]をクリック。

ここで、日付値をもとにした情報を取得したい場合はextract関数を使用します。
今回の場合は第一引数にWD、第二引数に列名公表_年月日を指定すれば、行毎の曜日を番号で取得できます。(日曜日が1)
extract('WD', 公表_年月日)
列名として曜日番号、エディターにextract('WD', 公表_年月日)を入力し、[保存]をクリック。

データセットに計算フィールドとして「曜日番号」列を追加できました。

[保存]をクリックしてデータセットを一度保存します。

「曜日」列を定義
今度は「曜日」列の定義を行います。
[データセット]タブで先程保存したデータセットをクリック。

下記のようなダイアログが開くので、[データセットの編集]をクリック。

[計算フィールドを追加]をクリック。

ここで、日付番号列の値をもとに日、月、火…を定義したい場合はifelse関数を使用します。
列名に曜日、エディターに下記計算式を入力し、[保存]をクリック。
ifelse(
    曜日番号 = 1, "日",
    曜日番号 = 2, "月",
    曜日番号 = 3, "火",
    曜日番号 = 4, "水",
    曜日番号 = 5, "木",
    曜日番号 = 6, "金",
    "土"
)

計算フィールドとして「曜日」列が追加されました。[保存して視覚化]をクリック。

「曜日」列を軸にしたグラフで可視化してみる
先程のデータセットの分析ページが開きます。[ビジュアルタイプ]として垂直積み上げ棒グラフを選択します。

フィールドリストから曜日を[X軸]に追加します。すると「曜日ごとの患者数(公表日ベース)」が可視化できました。しかしX軸を見ると曜日順に並んでいません。なのでこれを曜日順に並ぶようにします。

グラフの領域右下を摘んで引き伸ばすと、グラフ下部に[v]が表示されるのでクリックし、表示されたメニューで[曜日]の[>] - [並び替えオプション]を選択。

すると[並び替えオプション]が表示されるので、[フィールドを選択]で曜日番号を選択。

[適用]をクリック。

X軸を日から始まる曜日順に並び替えできました。

おわりに
Amazon QuickSightでソースデータの日付列の値をもとに曜日列をカスタムフィールドとして定義してみました。
実際のケースにおいては、可視化するデータへの曜日列の付加は本当はETL側で処理するべきなのでしょうが、QuickSight側でもある程度柔軟にデータがいじれるのは良いですね。
以上






