Amazon Athena,QuickSightを使って統計データを可視化する

## 概要
AWSにおけるデータ分析サービスについて、理解を深めたいという思いから、Athena,QuickSightを使って何かアウトプットするために本記事を書きました。


## 今回試してみたこと
<strong><font color="Red">「日本のGDPデータを集計して、年毎の推移を見る」</font></strong>
内容自体は単純で、ググってしまえばいくらでも出てくる内容ですが、自身の理解のためにもまずは簡単な内容から始めていきたいと思ったのでこの内容にしました。
（大学時代のゼミでよく日本の経済成長について調べていたので、折角触ってみるなら自分の知識のあるデータの方が良いかな、という背景もありました。）

頭の整理のためにも、今回やることを図に起こしてみました。
![スクリーンショット 2024-01-21 144543.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3623937/2e78578f-3eed-7ab7-726e-7ea7366e9341.png)



## 手順
#### ①可視化する対象のデータを取得
総務省統計局が管理している政府統計ポータルサイトである[e-stat](https://www.e-stat.go.jp/statistics-by-theme)の、[国民経済計算](https://www.e-stat.go.jp/stat-search?page=1&layout=dataset&toukei=00100409)のページに移動すると、APIというボタンがあるので押下すると、下記のような画面が出てきます。
![スクリーンショット 2024-01-21 122912.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3623937/98811093-f9bb-f275-6a9f-00e0be4e4e57.png)

今回は、JSON形式でデータを取得、特定の要素を取得→それをCSVに書き出しgz形式で```csv_converted_data```バケットに格納するようにしました。
![スクリーンショット 2024-01-21 144012.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3623937/88566a96-db52-3dfd-4bed-374902aedfd5.png)

※詳細には、
レスポンスをJSONファイルに書き出し、そのファイルが、トリガーとなるバケットにアップロードされたらCSV変換されAthenaのクエリ実行用のバケットに格納されるLambdaが起動するようにした、という説明になりますが
ここではその説明は割愛します。（別の記事でまとめようと思います。）


※APIの利用には、事前のユーザー登録、アプリケーションIDの入手が必要です。
（手順については[こちら](https://monomonotech.jp/kurage/memo/m230419_register_estat_get_appid.html)が参考になりそうです）

書き出したcsvファイルの中身はこのような形（一部割愛）で、四半期毎の国内総生産（支出側）を1994-2023年まで抽出するようにしました。
```csvs
年度,四半期,GDP値
1994,0103,123456.5
1994,0406,124907.2
1994,0709,125739.3
1994,1012,136813.2
1995,0103,124499.2
1995,0406,127481.3
1995,0709,128698.3
1995,1012,140934.8
1996,0103,128185.1
1996,0406,131526.4
1996,0709,131449
```
#### ②S3に格納されているバケット内のCSVファイルを使い、Athenaにてテーブル定義
##### ②-1クエリ出力の場所を指定
Athenaにおけるクエリは、S3のバケットに保存されるので指定する必要があります。（[参照](https://docs.aws.amazon.com/ja_jp/athena/latest/ug/creating-databases.html)）
このような選択項目があった気がしています。（画面キャプチャがとれておらず記憶が定かではないですが）
![スクリーンショット 2024-01-21 132546.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3623937/29aabc49-37e7-9b57-b426-84d76bac8a7c.png)

##### ②-2データベースを作成
クエリエディタにて、まずはデータベースを作成します。標準のSQLと同じく、`CREATE DATABASE`が使えます。
```sql
CREATE DATABASE goverment_statistics;
```
![スクリーンショット 2024-01-21 145126.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3623937/8d2d2b59-ee1b-7962-a023-c6f2277f54fb.png)


##### ②-3テーブルを作成
テーブル作成時の注意点としては標準のSQLで使用している```CREATE TABLE```を使用しない点です。
その理由は、Athenaが外部テーブルを使用するシステムを使用しているからです。
標準SQLとは割と違いそうですが、一つ一つを見ていけばそこまで難しくない印象でした。



```sql
-- 各カラムを定義
CREATE EXTERNAL TABLE IF NOT EXISTS goverment_statistics.gdpdata(
    `year` string,
    `quarter` string,
    `gdp_value` double
)
ROW FORMAT DELIMITED   -- 行のフォーマットは区切り文字によって定義＝各行は区切り文字によって区別される
FIELDS TERMINATED BY ',' -- 各列はカンマ区切りで区切られる
STORED AS TEXTFILE　　-- データの格納形式
LOCATION 's3://athena-test-bucket-maeno/csv_converted_data/'　-- データの格納場所（今回はs3バケットのパス）
;
```
![スクリーンショット 2024-01-21 145751.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3623937/f80f06c1-ec1d-9e4a-420e-96102350cf45.png)

:::note info
<strong>外部テーブル</strong>
データベース外部にデータが存在する場合に使用。
Athenaにおいては、データ自体はS3の所定のバケット（ユーザーが指定する）に格納されたままの状態。

[Apache Hive](https://hive.apache.org/)においても同様の仕組みが採用されているようです。

:::


#### ③QuickSightでデータセット作成、データ加工
QuickSightの初期画面は下の画像のようになっています。
![スクリーンショット 2024-01-20 232322.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3623937/3e844eae-d178-37ec-47aa-4484c60f4f49.png)

画面が表示されたら<strong>データセット</strong>を押下します。
右上の<strong>新しいデータセット</strong>を押下すると、データソースを選択する画面に移動するので、Athenaを選択します。
![スクリーンショット 2024-01-21 141005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3623937/d306b58a-8ae1-0aad-fc53-307fb65f750a.png)
![スクリーンショット 2024-01-21 141018.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3623937/5885acbb-43d6-fad9-6366-bf1f258b1937.png)

データソース名をつけ、取り込みたいデータが入っているテーブルを選択し、Visualizeを押下すると、データセットの作成が完了します。
![スクリーンショット 2024-01-21 141033.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3623937/4f9416f9-8c8b-e85c-3a5c-e637f398bb96.png)
![スクリーンショット 2024-01-21 141114.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3623937/a68abda5-5ee6-478c-6cdd-071b4feb88d6.png)
![スクリーンショット 2024-01-21 141132.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3623937/f571facf-183d-dfa7-7f9a-7cc1c6dcb932.png)


#### ④データ可視化
##### ④-1データ加工
取り込んだデータを整え、可視化するにあたり少し見やすいように加工します。
今回、year（年度）,quarter（四半期（0103））, gdp_value（GDP額【ドル】）という形でAthenaでテーブルを定義していたので、
![スクリーンショット 2024-01-21 142215.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3623937/ce403138-b08e-4918-fabc-0bd43fa22b22.png)

これを年度毎のGDP（四半期GDPの平均をとる）集計にします。
<strong>計算フィールド</strong>という部分で、可視化対象のデータを加工することができます。
今回は各年、四半期のデータのを平均を取り、各年のデータとしたいので、
avg({gdp_value})という形で計算をします。


![スクリーンショット 2024-01-21 142402.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3623937/40dc389d-6813-89b8-eaee-c8fe0c18f9ff.png)


##### ④-2データ配置、可視化
X軸、Y軸に分析対象のデータを配置してあげます。
今回は年度毎のGDPの推移を見たいので、yearをX軸、GDP（④-1で計算したavg_gdp）をY軸にもっていきます。
分析対象のデータ形式に応じて、可視化のフォーマットもQuickSight側で色々準備されているようです。（折れ線、箱ひげ図、棒グラフ、円グラフ、などなど、、、他にも色々あります。下の画像の```ビジュアル```という部分から選択できます。）
![スクリーンショット 2024-01-21 135404.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3623937/e01174a9-cb76-af26-0c7d-114dfb3ec95d.png)


今回は折れ線グラフで可視化しました。
対象のデータさえ準備してしまえばあとは勝手に可視化してくれる点が便利だなと感じました。
最終形態はこのような形となりました。<br>単位が分かりづらかったり、推移が分かりづらいなど、諸々補正したい部分はありましたが、一旦はQuickSightで可視化できることが分かり今回の目的は達成と言うことで修正は行いませんでした。
![スクリーンショット 2024-01-21 120120.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3623937/626b1cd9-4626-07ba-6929-5567c749df6a.png)


## 最後に
今回行ったのはあくまでも簡単な分析で、Athenaが得意とする大量データの分析と使いどころはズレているかも知れませんが、大まかな使い方は理解できたので良かったかなと思います。
Athena,Quicksightに関して、今まで使ったことがなく、難しそうだな、というイメージしかなかったのですが、手を動かして触ってみると初学者でも慣れれば使いこなせそうだなという所感でした。

データ分析、活用は今後ますます重要な分野になってくると思うので引き続き学習していきたいなと思っています。

## 参考文献
https://docs.aws.amazon.com/ja_jp/athena/latest/ug/creating-databases.html
https://docs.aws.amazon.com/ja_jp/emr/latest/ReleaseGuide/emr-hive.html
https://aws.amazon.com/jp/what-is/presto/
https://www.e-stat.go.jp/statistics-by-theme
https://monomonotech.jp/kurage/memo/m230419_register_estat_get_appid.html



## [クレジット表示](https://www.e-stat.go.jp/api/api-info/credit)

本記事は、政府統計総合窓口(e-Stat)のAPI機能で取得したデータを使用していますが、資料の内容(数値)は国によって保証されたものではありません。