【Power BI】学研まんがを66冊読んでデータ分析してみた

## はじめに
**学研のまんがでよくわかるシリーズを読んで勝手に評点をつける**、という趣味を1年くらい続けています。

https://kids.gakken.co.jp/himitsu/

https://note.com/anpanda_44075/m/me0f2eac3eac1

データが溜まってきたので、**今まで読んだ66冊分のデータをPower BIで分析**してみようと思い立ちました。66冊というキリがいいのか悪いのかわからないタイミングに意味はなく、Power BIを使って分析をアウトプットしたい欲求が強くなっただけです。

作成過程の説明がだいぶ長くなってしまったので、**作成過程はいいから完成品が見たいって方は目次から「完成品」へ**どうぞ。

## 最終イメージ
最終的なできあがりのイメージは、**5つの評価軸を使った散布図行列**です。こういうの。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464218/88691320-6938-a6b3-1880-9de3022c35ca.png)

https://bellcurve.jp/statistics/glossary/5495.html

**表の右上側には、相関係数を記載**しましょう。上図では、左上から右下のラインを中心に、X軸・Y軸を反転させた散布図を記載していますね。

**各グラフには、散布図ではなくバブルチャート**を使います。学研まんがの評点は1～5の5段階しかありません。2つの評点を組み合わせて取りうる値が5×5＝25個しかなく、同じポイントに複数の点が重なりますが、散布図では重なりを表現できないため。バブルチャートを使うことで、バブルのサイズで3つ目の要素＝点の重なりを表現できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464218/b7373239-8b3e-7cb7-10f0-5107cd1d9131.png "散布図とバブルチャート")

**評価軸**は下記の5つ。[角カッコ]が分析時の列名になります。

* **総合[総合]**：読んでほしいほど高い
* **テーマ[特化]**：特化しているほど高い
* **実用性[実用]**：生活に役立ちそうなほど高い
* **ストーリー[淡々]**：物語が淡々としているほど高い
* **ファンタジー[現実]**：物語が現実的なほど高い

> ファンタジーじゃないほどファンタジー評点が高くなるという設計ミスがありますが、今さら修正できないのでそのままです…

## データ準備

#### データ読み込み
**今まで読んだ学研まんがの評価データは、すべてNotion**にまとめてあります。Notionを使い始める前に読んだ分も、noteの投稿からNotionに転記してあります。育休中にやってました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464218/aa889914-0925-aa28-079f-0f56e98bcd1c.png "Notion一覧")

**NotionのデータベースをPower BIのソースにすることはできません**。CSVファイル経由で取り込みます。

> Power Platformを駆使すれば自動化可能ですが、技術力不足でいったん断念。Power AutomateのNotionコネクタを使ってデータベースを取得するところまではできたんですが、そのJSONデータから各プロパティを抜いてくるのがうまくいかず…

**Notionのエクスポート機能を利用**すると、データをCSVファイルに出力できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464218/3db63436-3b62-a457-ea36-e24ecf9ce9b8.png "右上の3点リーダからエクスポートを選択")

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464218/fe9f0a1a-a0a4-ca76-099c-6c440bd26bed.png "エクスポート画面。各オプションの挙動は未確認")

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464218/9f8e9b48-713e-e2da-c384-7f8be0dd6a63.png "CSVファイル")

**CSVファイルを、Power BI Desktopで読み込み**ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464218/26694d66-c638-51f6-aa57-ab82191aad76.png "Power BI Desktopでデータを取得")

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464218/04fab915-0558-eb35-bff8-e6373483a48f.png "CSVファイルを選択して「読み込み」")


## データ整形

**Power Queryを使って、データを整形**していきます。左ペインからデータビューに切り替えて、データの変換をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464218/806a4963-a063-20e6-d6ab-bee219e9d066.png "データビュー
")

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464218/444c7064-5b0a-6658-987b-85f91a387936.png "Power Query起動")

**データ整形した箇所は、下記の6点**です。DAX式に倣って、列名を[角カッコ]で囲んで表記しています。

* [NO.]列の名前を[ID]に変更する
* [各評点]の列名から「a.」「b.」などの文字列を削除する
* [ID], [Name], [各評点]以外の列を削除する
* **[ID], [各評点]を整数型**に、[Name]をテキスト型に変更する
* [Name]から「のひみつ」の文字列を削除する(置換)
* **[総合]がnullの行を削除**する

**太字で表記したところは、データ整形をしないとこのあとの視覚化に影響がありそうな箇所**です。[ID], [各評点]は、数値の型にすることで、平均値や標準偏差などの計算ができるようになります。[総合]がnullの行は、読みたいと思ってNotionに記載したけどまだ読んでいないもの、つまり未評価なので、データ分析からは除外します。

**型の変更ボタンやフィルターをクリックするなど、ノーコードでひととおりのデータ整形**ができます。ノーコードでありながら、画像中央やや上あたりにコードっぽいモノ(M言語)が書かれているのが見えますね。M言語をバリバリ使いこなせれば、複雑な処理を実装したり、処理の合理化ができたりするようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464218/ee58413b-0a38-c988-bb7d-886f4faf64af.png "Power Queryで整形したデータ")

**Power Queryで「閉じて適用」を押すと、Power BIのデータビューにも反映**されます。これでようやくデータの下準備ができました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464218/34f81ebc-3854-cf50-dd10-c8eade164e34.png "データビューにも反映。すっきりした")


## メジャー作成

Power BIでは、**元データから計算した「メジャー」を作成し、分析に利用**することができます。今回は2種類のメジャーを作成しました。

#### 2つの評点の組み合わせ

**散布図のビジュアルのサイズ欄に量的データを入れることで、バブルチャートとして表示**することができます。今回サイズ欄に入れるのは、2つの評点の組み合わせてそれが出現する回数を示すデータです。現状ではそのデータを持つ列がないので、メジャーを作成しましょう。

```
総合・特化 =
COUNTX('学研まんが_notion_20230814',
CONCATENATE([総合], [特化]))
```

**DAX式のCONCATENATE関数・COUNTX関数を使って、総合・特化メジャーを作成**しました。CONCATENATE関数で総合列と特化列を連結して、21、35などの値を生成します。そして、その値がいくつ出現するかをCOUNTX関数でカウントしています。COUNTX関数は、ExcelにおけるCOUNTIF関数みたいなものですね。

総合・特化メジャーを作成したことで、**総合と特化の各組み合わせがいくつ出現するかをデータ化**することができました。他の組み合わせについても同じように作成してあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464218/49aa615d-83d3-385e-6c5e-2b9a8d4604e4.png "メジャーはデータビューには表示されないので、テーブルのビジュアルで確認")

#### 2つの評点の相関係数

**2つの評点の相関係数も、メジャーを作成する**必要があります。相関係数を計算するDAX関数は存在しないため、クイックメジャーで先人の知恵を借りました。使い方、合ってるかな…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464218/8e3d0347-56bd-ef9b-641f-786d6e6e5b5e.png "クイックメジャーで相関係数を計算")
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464218/1ddb0f69-a8a1-7a75-2655-9ba232850ab5.png "クイックメジャーからDAX式が生成され、相関係数を計算してくれる")

## ビジュアル作成

**データの準備ができたら、グラフを作成**していきます。Power BIでは、各種グラフのことをビジュアル(視覚化)と呼んでいます。ビジュアルを集めたものがレポートで、ページはExcelのシートみたいなものです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464218/d3ebf795-4849-37c1-4e5a-749d9c86f986.png)

https://learn.microsoft.com/ja-jp/training/modules/power-bi-effective-reports/1-introduction

#### バブルチャート

**まずはバブルチャートをひとつ作ってみます**。Power BIでのバブルチャートは、散布図のバリエーションのひとつとして扱われているので、視覚化ペインで散布図を選択。X軸・Y軸・サイズにデータを設定します。バブルが表示域からはみ出さないように、各軸は最小値0・最大値6で設定しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464218/13734c84-eb5a-9f10-30f9-640fb538a1e7.png "視覚化ペインから散布図を作成")

見た目を整えたら、**5項目の組み合わせ＝10パターン分のバブルチャート**をコピペで作成していきます。スペースの都合上、各バブルチャートはかなり小さくなってしまうので、余計な情報を削ぎ落とす必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464218/885f3b24-c77a-a2c1-f62f-2df8d4842223.png "最小限の情報のみで構成")

#### カード

**全体の対称軸(左上から右下)には、項目名と、平均・標準偏差**を列記します。また、全体の右上側には項目同士の相関係数を表示します。単一の数値を表示する場合に使うのは、カードの視覚化。せっせとコピペして並べて、を繰り返していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464218/ae4091c4-ac44-c506-96c7-c26670fc9cab.png "平均・標準偏差・相関係数は、カードで表示")

**相関係数が負の値の場合、テキストの色を赤に変更**しました。Excelの条件付き書式のような設定です。基準にするフィールドは、各カードごとに変更する必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464218/a65c408d-edf1-6e89-1d48-29cbb289b34e.png "相関係数カードの設定")

#### その他

ページの右の方が空いているので、**スライサーとテーブルを追加**しました。スライサーがあることで、総合が5のものに絞って調べる、などの分析が可能。テーブルは、具体的なデータを確認するときに便利です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464218/b913b1b4-9ec4-ab18-9b95-a53ce7baa597.png "スライサーとテーブル")

## 完成品
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464218/9967a026-74ad-5e7d-e62f-c0b4341fe382.png "完成したレポートの全体像")
**学研まんがの評点データをレポート1枚**にまとめることができました。空いてたから入れただけの右下のテーブルが結構便利。フィルターやソートも効くので、データを簡単に確認することができます。

**一方、メインであるはずのバブルチャートが思っていたより仕事してない**感じがしますね… 数値で確認できる相関係数の方がわかりやすいです。バブルチャートで傾向を観察するには、データが不足しているor5段階では狭すぎるのかもしれません。

#### 評点の組み合わせの相関係数について考察

評点の組み合わせ10個のうち、**強い相関係数を示している3個について考察**してみました。

* **総合×実用(正の相関 0.39)**：実用性が高い作品ほど、総合評価が高い傾向にあります。生活に役立ちそうなほど、読後の満足感が高いと言えます。
* **特化×淡々(負の相関 -0.32)**：テーマが汎用的だと、様々な説明にページを割く必要があり、ストーリー展開にかけられるページが減ると考えられます。
* **淡々×現実(正の相関 0.31)**：ファンタジーモノの場合、タイムリープして歴史上の人物に会ったり、妖精との出会いや別れが描かれたりするため、ストーリーが起伏に富んだものになると考えられます。

#### 総合5の作品の傾向
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464218/20441a1d-0ebb-501c-dfac-7bd3779034c4.png "総合＝5でフィルター")
**スライサーを使えば、各評点でフィルターして分析することも簡単**です。上図は、総合評価が5のものをフィルターして表示したものです。総合5の傾向としては、実用寄り(平均が4.27と高め)で、現実かファンタジーのどちらかに振り切っている(現実5と現実1に集中している)ものが多いようですね。


## おわりに

**データの準備に手こずりました**。CONCATENATE関数で連結するとか、クイックメジャーで相関係数を作るとか、もっと使い慣れないと自信が持てないですね。修業あるのみ。

**データ分析って、仮説を立てるのと、データ準備とで8割くらい占めてる印象**です。今回はビジュアル作りでも試行錯誤してましたが、やはり準備が大切。

**評価に影響を与えていそうな項目**は他にも挙げられます。ID以外はデータを取っていないので、これらが強い影響を与えていると考えるなら、ちゃんとデータを取る必要があります。

* 出版年月日(ID)：新しい作品ほど、SDGsの推しが強い傾向
* 構成：ウェルテ作品はハズレがない
* 絵師：好みは多少ある
* ページ数：一部の特別編は短編扱い

* **散布図行列を作りたいときは、Rを使う方が簡単そう**。10月からの「社会人のためのデータサイエンス演習」でRを学ぶ予定なので、学研まんが分析R版も作るかもしれません。

https://note.com/akiyama924/n/ncd97a2472527


#図解 #読書 #書評 #最近の学び #PowerBI #PowerPlatform #Notion #データ #データ分析 #分析 #データサイエンス #散布図 #散布図行列 #相関 #学研 #学研まんが

https://note.com/anpanda_44075/n/n6b5ad2c7ddb0