【Power BI】ネットワークグラフの比較



## はじめに

Power BIでネットワークグラフのビジュアルを使いたかったので、仕様について調べてみました。

# 対象

- [Network Navigator Chart](https://appsource.microsoft.com/ja-jp/product/power-bi-visuals/wa104380795?tab=overview&exp=kyyw)
- [Social Network Graph](https://appsource.microsoft.com/ja-jp/product/power-bi-visuals/wa104381236?tab=overview&exp=kyyw)
- [Force-Directed Graph](https://appsource.microsoft.com/ja-jp/product/power-bi-visuals/wa104380764?tab=overview&exp=kyyw)

他にもありますが有償のようなので除外。
また、無償の[Journey Chary by MAQ Software](https://appsource.microsoft.com/en-us/product/power-bi-visuals/wa104380989?tab=overview&exp=kyyw)もネットワークグラフっぽいですが、使ってみた結果、上記3つと用途が大きく異なると判断したため除外しました。

※2023年6月時点の情報なので、今後アップデートで仕様変更があったり、有償化する可能性があります。


# 忙しい人のための結論

個人的な解釈ですが、以下のような判断で採用するビジュアルを決めます。


- 有向グラフを作りたい → **Force-Directed Graph**

- 無向グラフでも良い。ノードに画像を使いたい → **Social Network Graph**

- それ以外 → **Network Navigator Chart**

# 各ビジュアルの概要

### Network Navigator Chart
![nnc.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/09983a70-84a6-40dd-abbe-fc9188bff694.png)

ノード・エッジに関して色・大きさなどを詳細に設定でき、ビジュアル内で移動・拡大・縮小ができるため、可視化しやすいレポートに仕上げることが可能です。ノードをクリックするとクロスフィルタリングも可能で、他のビジュアルとも組み合わせやすいです。
簡易的なテキスト検索を使って、マッチするノードを拡大表示することもできます。

以下のようなノード・エッジの数が多くなりがちな無向グラフに適用します。

- ウェブネットワーク
- 交通ネットワーク

### Social Network Graph

![sng.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/f3e97731-c06d-0d39-28c0-30c3a16f7988.png)

名前の通りソーシャルネットワーク等の可視化に使います。
URLベースのリンクを使用してノードに画像を貼る事ができます。しかし画像を使わない場合はラベル表示がない識別不能な真っ白なノードがたくさん並ぶビジュアルになってしまうため使いづらいです。

以下のような画像を使う無向グラフの可視化に向いています。

- ソーシャルネットワーク
- オンラインコミュニティ
- 組織図


### Force-Directed Graph

![fdg.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/da2d19f4-0341-437d-4569-b1aa9cf006ff.png)

3つの中で唯一有向グラフが作成できるため、ノード間の関係を可視化することができます。エッジにラベルを表示させることもできます。
ただしノード・エッジが多くなるとビジュアルが複雑になります。エッジが必ず曲線になるのも見ずらさの要因かもしれません。

以下のような有向グラフの可視化に適切です。


- 関係図/相関図
- 状態遷移図


# 実際使ってみる

いくつかサンプルデータを使って可視化してみます。





作成&使用したサンプルデータ以下の通り、見たい人は▶押してください。

<details><summary>1. 【ポケモン赤緑】カントー地方地図</summary><div>
各タウン・シティ(Source)から各タウン・シティ(Target)へどこを経由するか(エッジのラベル)を表しています。

| Source | Target | 経由 |
|---|---|---|
| マサラタウン | トキワシティ |  |
| マサラタウン | グレンタウン |  |
| トキワシティ | セキエイ高原 | チャンピオンロード |
| トキワシティ | ニビシティ | トキワのもり |
| …|…|…|…|…|…|

row=16
</div></details>


<details><summary>2. 【ポケモンレジェンズアルセウス】組織図</summary><div>

レジェンズアルセウスの作中内の組織図。メインキャラのみ画像付き。
あるキャラクター(Source)から見てどのキャラクター(Target)が直属上司になっているかを表しています。
モブNPCも入れているため、115キャラ分のデータになっています。

| Source | Target | Source Photo Url | Target Photo Url | Source Size | Target Size | Source 役職 | Target 役職 | Source 所属 | Target 所属 |
|---|---|---|---|---|---|---|---|---|---|
| シマボシ | デンボク | https://www.pokemon.co.jp/ex/legends_arceus/assets/img/pages/character/210818_04/thumb.png | https://www.pokemon.co.jp/ex/legends_arceus/assets/img/pages/character/210818_03/thumb.png | 2 | 3 | 隊長 | 団長 | ギンガ団 | ギンガ団 |
| テル | シマボシ | http://drive.google.com/uc?export=view&id=1dEn12ThF_h_bjWM3ZAbrJTSXzm6YZjIy | https://www.pokemon.co.jp/ex/legends_arceus/assets/img/pages/character/210818_04/thumb.png | 1 | 2 | 団員 | 隊長 | ギンガ団 | ギンガ団 |
| ショウ | シマボシ | http://drive.google.com/uc?export=view&id=16wSLWgQo_rDDovaaSh-aE27ZjM5XPiOX | https://www.pokemon.co.jp/ex/legends_arceus/assets/img/pages/character/210818_04/thumb.png | 1 | 2 | 団員 | 隊長 | ギンガ団 | ギンガ団 |
| ラベン | シマボシ | https://www.pokemon.co.jp/ex/legends_arceus/assets/img/pages/character/210818_02/thumb.png | https://www.pokemon.co.jp/ex/legends_arceus/assets/img/pages/character/210818_04/thumb.png | 1 | 2 | 団員 | 隊長 | ギンガ団 | ギンガ団 |
| ヨネ | セキ | https://www.pokemon.co.jp/ex/legends_arceus/assets/img/pages/character/210928_01/thumb.png | https://www.pokemon.co.jp/ex/legends_arceus/assets/img/pages/character/211215_01/thumb.png | 2 | 3 | キャプテン | 団長 | コンゴウ団 | コンゴウ団 |
| ヒナツ | セキ | https://www.pokemon.co.jp/ex/legends_arceus/assets/img/pages/character/210928_04/thumb.png | https://www.pokemon.co.jp/ex/legends_arceus/assets/img/pages/character/211215_01/thumb.png | 2 | 3 | キャプテン | 団長 | コンゴウ団 | コンゴウ団 |
|…|…|…|…|…|…|…|…|…|…|…|

row=115

</div></details>



<details><summary>3.  ポケモンタイプ相性表</summary><div>

ポケモンシリーズお馴染みのタイプ相性表。重みつきの完全ネットワーク。
攻撃側タイプ(Source)と防御側タイプ(Target)とダメージの倍率を表しています。SourceとTargetを識別するため有向グラフで作ることが前提となります。


| 攻撃側タイプ | 防御側タイプ | ダメージ倍率 |
|---|---|---|
| ほのお | ノーマル | 1 |
| ほのお | ほのお | 0.5 | 
| ほのお | みず | 0.5 | 
| ほのお | でんき | 1 |
| ほのお | くさ | 2 | 
|…|…|…|…|

row=325


</div></details>


~~ポケモンばっか~~



### 作成したPower BI レポート

実際に弄ってUIを試してください。

https://app.powerbi.com/view?r=eyJrIjoiYzhiOWIwMmQtZGFjOS00Y2M1LTkwNzItYTAyMzNmZTM0ZGRjIiwidCI6IjdhNWU4NmVhLTY4NDItNGVhMy04YTdlLWViMGZhOWY4ZTMzYSJ9

# 使ってみて所感

Social Network Graphは初めて触った時は使いやすいと思えましたが、使いこんでみるとエッジ関連の設定が全くできない、画像がない場合ノードが識別できない、など使いづらさも目立ち始めました。しかしそれを差し置いてもやはり画像を使えるのは大きいメリットだと思います。


有向グラフはForce-Directed Graphでしか選択肢がないようです。一方で、Network Navigator Chartのビジュアルの綺麗さが非常に良いため、機能をハイブリットしたものが欲しいと感じました。(そういう場合は有償のカスタムビジュアルを買ってね！ってことですかね…)

結局どれがいいかについては決め難いです。どれも一長一短でした。
どれを使えばいいかに関しては冒頭の方にも書いたのでそれを参考に。


それぞれが使いやすくなるよう、今後のアップデートに期待します(他力本願)。




# メモ1 各ネットワークグラフの機能表

○：変更可能。ユーザ側で細かい設定も可能
△：変更可能。ユーザ側で細かい設定は**不可**。システム側がいい感じに制御する。
×：変更**不可**


|項目 | Network Navigator Chart |Social Network Graph|Force-Directed Graph|
|----------|:----------:|:----------:|:----------:|
| ノードの色 |×|×|×| 
| ノードの枠色 |×|△|×|
| ノードの大きさ |○|○|×|
| ノードのラベル表示 |○|×|○|
| ノードのラベルの色 |○|×|○|
| ノードの画像 |×|○|×| 
| ノード間の距離|○|×|○|
| ノードホバー時に情報が出る |×|○|×|
| ノードクリック時にクロスフィルタリングがされる　|○|×|×|
| エッジの色 |○|×|△|
| エッジの太さ |△|×|△|
| エッジのラベル表示 |×|×|○|
| エッジの矢印 |×|×|○|
| ビジュアル内の移動 |○|×|×|
| ビジュアルの拡大・縮小 |○|×|×|
| 検索窓|○|×|×|




# メモ2 ビジュアルに必要な項目

見たい人は▶押してください。
<details><summary>Network Navigator Chart</summary><div>

| 項目(太字は必須) | 説明 | 
|----------|----------|
| **Source Node** | 始点となるノードの文字列 |
| **Target Node** | 終点となるノードの文字列 |
| Edge Weight | エッジの太さ |
| Edge Color Weight | エッジの色の彩度。高いほどA色に近づき、低いほどB色に近づく。A,Bは選択可能|
| Source Node Weight | Source Nodeの大きさ |
| Source Node Color  | 用途不明 |
| Source Node Label Color | Source Nodeの隣に出るラベル文字の色を区別するための文字列 |
| Target Node Weight | Target Nodeの大きさ |
| Target Node Color | 用途不明 |
| Target Node Label Color| Target Nodeの隣に出るラベルの文字の色を区別するための文字列  |
| Filter | 用途不明 |

</div></details>

<details><summary>Social Network Graph</summary><div>



| 項目(太字は必須) | 説明 | 
|----------|----------|
| **Source Name** | 始点となるノードの文字列 |
| **Target Name** | 終点となるノードの文字列 |
| Source Photo Url | Source Nodeに使う画像のURL
| Target Photo Url | Target Nodeに使う画像のURL
| Source Size | Source Nodeの大きさ
| Target Size | Target Nodeの大きさ
| Source Color | Source Nodeの枠色を区別するための文字列
| Target Color | Target Nodeの枠色を区別するための文字列
| Source Extra Info | Source Nodeにホバーした時のポップアップに出す文
| Target Extra Info | Target Nodeにホバーした時のポップアップに出す文


</div></details>

<details><summary>Force-Directed Graph</summary><div>
  
| 項目(太字は必須) | 説明 | 
|----------|----------|
| **ソース** | 始点となるノードの文字列 |
| **ターゲット** | 終点となるノードの文字列 |
| 重量 | エッジの太さ、または、エッジのラベル名 |
| リンクの種類 |エッジの色をを区別するための文字列|
| ソースの種類 | 用途不明 |
| ターゲットの種類 |用途不明 |
</div></details>


共通して言えることですが、基本的には、Source側に設定したものはTarget側にも設定したほうがいいです。でなければ意図しないビジュアルになります。

あとForce-Directed Graphについて、エッジが多くなるとノードが肥大化する仕様(?)がありますが、「ソースの種類」「ターゲットの種類」を空にして、設定で画像をONかつ画像関連の設定値を空にすると統一される裏技を見つけました。




## おわりに

Power BIの無償のネットワークグラフについて調べました。

以上。

## 参考


### 外部サイト

https://www.slideshare.net/cdatajapan/power-bi-100071632

https://www.sqlservercentral.com/blogs/power-bi-with-different-network-visualizations