Oracle Analytics Cloud：バタフライグラフで人口ピラミッドを作成してみる

# はじめに
人口ピラミッドというものがあります。中央から左右に向けて棒が伸びたグラフです。
このタイプの表現方法は、Oracle Analytics Cloud（**OA**）では、バタフライグラフとして用意されています。
手に入りやすいデータを使って、バタフライグラフの実例を紹介します。

# データの入手
e-Statにアクセスして、令和2年（2020年）の国勢調査のデータをダウンロードします。

https://www.e-stat.go.jp/dbview?sid=0003445133

使用したのは「男女，年齢（各歳），国籍総数か日本人別人口－全国，都道府県，21大都市，特別区，人口50万以上の市」という統計表です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/f0358087-e7f6-3fd4-93d3-fd089ecf340e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/543e9fd5-9c20-c20a-2b3a-4c9f123cce47.png)
CSV形式でダウンロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/0fdb4866-562b-70c3-eeb6-3f1589b11ab3.png)
ダウンロードしたCSVをExcelで読み込んでみました。
1行目とE列は不要なので削除します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/0c7ace5c-7632-9bb9-97cd-036482672c68.png)
下の方にも不要なデータがありましたので、削除します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/0f59e95e-cafc-7c78-9586-5f9ff5c149b4.png)
この状態で、CSVとして保存しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/0e666de7-36e6-4de3-6b98-98233ac1c684.png)
ExcelからCSVとして保存すると、文字コードがShift JISになってしまったので（Windowsの場合）、OACにアップロードする前にUTF-8にしておきます。
※メモ帳で読み込んで「UTF-8」で保存するなどします。

# OACでバタフライグラフを作成
OACにログインします。

## データセットの作成
OACの「ホーム」画面にダウンロードし、加工したCSVファイルをドラッグ＆ドロップします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/13673d46-1c15-1e18-5a1d-b129a3853a1b.png)
データの内容を確認して「ビジュアル化」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/cc89b7c3-c1d7-c4a9-a49c-f1307678055c.png)

## バタフライグラフの作成
「年齢」「男」「女」をコントロールキーを押しながら同時に選択します。
右クリックして、表示されるメニューから「ビジュアライゼーションの選択」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/82a9b825-a68c-be15-be54-6c98ac48d0c3.png)
バタフライを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/35e576c6-4ecb-eaa0-dac5-7101d7d37102.png)
できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/1c3995d7-2f2d-5e04-636c-1d65a483743c.png)
ただ、よく見るとピラミッドの形が変です。
原因は縦軸です。
文字列データである「年齢」の並びが思ったようになっていません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/d284a4c3-1cd2-6e08-9ea9-5ffdf9bab579.png)

## 計算式の追加
文字列データの「歳」より前の部分を数値に変換することで並び順が年齢順になるようにします。
計算を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/498f8656-0260-fc90-4b37-ddacdb7740af.png)
式の例です。
```
cast(SUBSTRING(年齢 FROM 1 locate('歳',年齢)-1) as double)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/459473a9-1288-394b-b62b-4ba85fa49b75.png)
「カテゴリ (Y軸)」を作成した計算に変更し、ソート基準を「ZからA」にしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/d43c4d5f-3fcb-d897-933e-a4bc5cd69f7f.png)

## 色を変更する
バタフライグラフのメニューから「色」－「メジャーの色を含める」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/52398093-ac02-12bf-1e1f-523194d3470b.png)
完成です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/4c2698fb-c75c-adb5-af53-1f3bb2240cd0.png)

# データがクロス表形式でなかったらどうする？
つまり、こんな形式です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/6e33e179-1baa-1271-78fb-8758542d8815.png)
人口データが男女別に分かれておらず、E列の値によって男性の人口なのか女性の人口なのかを識別します。
リレーショナル・データベースでは、こちらのデータの保持方法がむしろ多いのではないかと思います。

## OACにアップロードしてみる
データセットとしてアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/2b986285-c4b9-0876-99e7-68cdfd6c3ccc.png)

## 計算に基づく新しい列を追加
作成したデータセットを右クリックし「開く」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/e53e1ab4-a004-e486-59fb-069bb6b3c648.png)
データセットに新しい列を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/bb22413a-9d2c-fd2f-273c-492e343392e4.png)
式の例です。
```
case when 男女='男' then 人口【人】 else null end
```
「ステップの追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/dbe5bc4d-d1bc-5e40-afa5-9281a26aeedb.png)
同様の方法で、もう一つ列を作成し「女性人口」とします。
作成した2つの列の処理形式を「メジャー」、集計を「合計」として保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/ab290a36-0de7-7520-58a5-c20489d6c81d.png)

## バタフライグラフの作成
追加した列を使って、バタフライグラフを作成できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/adfb88a7-ddea-13f5-628a-6ce030baaa4b.png)