Analytics Cloudを活用したPOSデータ分析　データ準備編①：会員顧客の誕生日から年齢や年代を計算する 

# はじめに #

Oracleのパブリッククラウドサービス、Oracle Cloud Infrastructure(OIC)を使って、POSデータを活用した分析を始めています。

OCIには、分析をおこなう上で必要なデータベースサービスや、分析サービスなどが揃っていますが、今回は、データベースとして、分析用途に最適化されたフルマネージドタイプのデータベースサービスであるAutonomous Data Warehouseと、同じくマネージドタイプの分析サービスであるAnalytics Cloudを活用しています。

POSデータは件数が、かなり多いので、セルフサービスBIツールだけでお手軽に可視化するにのも大変なので、データベースを併用することにしました。Autonomous Data Warehouseは、データベース管理やパフォーマンスのことを考慮したデータベース設計のことをあまり考えなくてもパワフルなオラクルデータベースの処理能力を利用することが出来るので、件数が多めのデータを分析したい時に、BIツールと併用すると、便利だと思います。

Analytics Cloudも、セットアップも楽で、Autonomous Data Warehouseとの接続定義もかなりスムーズにできるので、使い始めるまでの時間節約が出来ます。BIツールとしても、今どきのセルフサービスツールという感じで、直感的に使いこなせそうな操作感だと思います。



でも、やっぱり、苦労するのはデータ準備のところだと思います。いざPOSデータを使った分析をしようとすると、データベース側で用意していなかったデータ項目や属性情報が欲しくなってくるので、そのあたりは、[Analytics Cloudで用意されている関数](https://docs.oracle.com/cd/E83857_01/paas/analytics-cloud/acubi/functions.html#GUID-8A4462E9-68C8-4064-8A98-D7390207F92A)を使うことになるのですが、ドキュメントを見ても、関数の使い方がピンと来なかったりするので、色々と試行錯誤が必要になっています。



何回かシリーズに分けて、POS分析をする上で、試行錯誤したデータ準備や分析テーマの実現方法について、備忘を兼ねて共有したいと思います。





# 利用環境 #

データベース：Oracle Autonomous Data Warehouse　容量(1OPCU)
BIサービス：Oracle Analytics Cloud  機能セット(Enterprise Analytics) 、容量(２OPCU)

# 用意したデータについて #

アパレル事業の店舗POS売上明細データ：　ID付きPOSデータなので、会員ID付きの売上データです。商品属性（カラーコード、サイズ）、ブランドなどは、連結済み
会員マスタデータ：会員の基本属性データですが、ポイント増減に関する情報も、連結済みのデータ


# Analytics Cloudを活用したPOSデータ分析　データ準備編①：会員顧客の誕生日から年齢や年代を計算する



**「会員データに含まれる誕生日から、会員の年齢や年代を計算したい」**というニーズは良くある事だと思います。

データベースの会員マスタテーブルに年齢カラムを用意する方法で対応しても良いとは思いますが、年代については、年代の区切り方が度々変わるものです。BIツール側で計算した方が、柔軟性が増します。

今回は**Analytics Cloudの関数を使って年齢や年齢層のカラムを作成する方法**をご紹介します。

完成形イメージ
**年齢層別の会員分布**
![015.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/e2bc8bbb-441a-d9d7-f8ee-0121063d4a55.jpeg)




# ステップ１:　誕生日から年齢を計算する

Analytics Cloudには、カレンダ関数が用意されていて、日付タイプのカラムデータを操作することが出来るようになっています。カレンダ関数のCURRENT_DATEは、現在の日付を返します。日付はAnalytics Cloudが実行されているシステム日付が返されます。

[カレンダ関数](https://docs.oracle.com/cd/E83857_01/paas/analytics-cloud/acubi/functions.html#GUID-4CBCE8D4-CF17-43BD-AAEF-C5D614A8040A)については、Analytics Cloudの製品ドキュメントの関数リファレンスを参照してください。



年齢は、現在の日付（CURRENT_Date）- 会員の誕生日で計算できます。ちなみに誕生日カラムはYYYYMMDDのフォーマットで定義していますが、CURRENT_Date - 会員の誕生日は日数で値が返ってきます。これをとりあえず、365で除算すれば、ざっくり年数(年齢）が求められます



小数点以下は必要ないので、[TRUNCATE](https://docs.oracle.com/cd/E83857_01/paas/analytics-cloud/acubi/functions.html#GUID-8D744A53-6F3F-4917-BD91-108DE6C7B668)関数を使って、小数点以下を切り捨てます。



```
計算式：TRUNCATE((CYRRENT_DATE-誕生日)/365, 0)
```



年齢カラムを新たに追加する際は、顧客マスタのデータセットを開いて、誕生日カラムをクリックして”作成”を選択して列の作成エディタを開きます。


![001.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/3145a9ef-4ec3-75c0-0e17-8b6aa51014a3.jpeg)


列の作成で、計算式を入力し、念のため”検証”をクリックして、式が正しいことを確認してから、”ステップの追加”をクリックします。

![002.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/3eb7b64b-20f4-41be-661a-ab2489ba949d.jpeg)


式が正しく保存されると、以下の様に、年齢カラムが作成されました。CURRENT_DATEを使って動的に計算しているので、誕生日が来ると、年齢の情報も随時更新されます。

![003.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/2c356e55-8613-f3cc-61e5-62b62b46f542.jpeg)



# ステップ２:　年齢を年齢層で区分する

年齢カラムは、会員の年齢分布を把握したり、特定の範囲の年齢の会員にデータ絞り込む時など使い道がありますが、年齢層で分析出来た方が便利な時もあるので、ついでに年齢層カラムも作成したいと思います。

Analytics Cloudには、BIN関数が用意されていて、データの範囲を指定して、データをグルーピングすることが出来るようになっています。BIN関数は自分で計算式を書くことももちろんできますが、ノンコーディングでBIN関数を組むことが出来るようにエディタが用意されているので、今回はこちらを利用することにします。

[BIN関数](https://docs.oracle.com/cd/E83857_01/paas/analytics-cloud/acubi/functions.html#GUID-4CBCE8D4-CF17-43BD-AAEF-C5D614A8040A)については、Analytics Cloudの製品ドキュメントの関数リファレンスを参照してください。



ステップ１で作成した年齢カラムをクリックして”ビン”を選択してビン列エディタを開きます。

![010.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/1994a03a-d03c-8ffd-2775-d57112dcad1b.jpeg)



今回は、20代から40代まで5歳刻みで、年齢をグルーピングしたいと思います。

まず、”新規要素名”にカラムの名称として今回は、”年齢層”と入力します。次に”方法”から”手動”を選択し、グルーピングの数だけ”ビン数”を指定します。各グルーピングの名称(20-24歳や25-29歳など)とレンジ（幅）を入力してから、”ステップの追加”をクリックします。

![013.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/17f6afb9-bdb8-9cfe-ec1a-4778d49312c0.jpeg)


式が正しく保存されると、以下の様に、年齢層カラムが作成されました。プレビュー画面で年齢層の分布も大まかに確認できるので、便利ですね


![014.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/c2f9749d-7ab5-ed56-529c-5d6ec5a309d0.jpeg)



# ビジュアライズの作成

ここまで出来れば、年齢データの準備作業は完了です。作成した年齢や年齢層カラムは、Analytics Cloudの可視化機能を使って簡単にビジュアライズに利用することが出来ます

サンプルイメージ：**年齢別の会員分布**
![011.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/fdb2cb9b-ff16-a4fb-5dc7-c38f03cf68c5.jpeg)

サンプルイメージ：**年齢層別の会員分布**
![015.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/e2bc8bbb-441a-d9d7-f8ee-0121063d4a55.jpeg)