データ可視化のアイデア帳

データ可視化にまつわるあれこれ

Tableau でネットワーク図を書いてみる

Tableau あるある
A 「Tableau でネットワーク図書けますか」
B 「(頑張れば、あるいは、技術的には) 可能です 」
A 「(察し)」

Tableau Desktop はあくまで既にあるデータを可視化するためのツールです。ネットワークの要素を描画することはできても、「いい感じに」「バランスよく」ネットワークを書いてくれるわけではないので上記のようなやり取りになってしまいます。固定的な配置のネットワークならいざ知らず、ネットワークの要素がどのような近さなのか、どういった関係性かわからない場合では正直 Tableau だけでは解決できない問題になります。それでもネットワーク図書きたいんです、必要なんです、という場合には Tableau 以外のツールの力を借りる必要があります。

この記事では、レ・ミゼラブルの登場人物*1のデータを利用して、Tableau でネットワーク図を書く方法をまとめます。
f:id:zkn360:20200811154817p:plain
本記事は下記を参考にしました。直接元記事参照される方はどうぞ。
https://ladataviz.com/2019/12/15/build-a-network-graph-in-tableau-in-three-steps/


Tableau でネットワーク図を書く流れ

1.データ準備

データ準備が一番大変かもしれません。形式は JSON ファイルで用意します。この際必ず必要なフィールドが node と links になります。これらのフィールドの要件は下記になります。

  • node には id が必要。これがネットワーク図で言うところの「〇」の部分に相当します。
  • links には source と target が必要。どの id 同士につながりがあるのか、ネットワーク図で言うところの線の部分に相当します。

下記はサンプルです。

{ 
 "nodes": [
    { "id": A },
    { "id": B }
  ],
  "links": [
    { "source": A, "target": B }
  ]
}

こればっかりは Tableau ではどうしようもないので、サンプル データを見繕うなり、R や Python 利用してどうにか作ってください。
ネットワーク図の作成を試してみたいだけであれば、レ・ミゼラブルのデータは下記から取得できます。*2

レ・ミゼラブルの人物相関図とデータ D3.js v4 Force Directed Graph with Labels - bl.ocks.org

2.ネットワーク ジェネレーターにデータを投入する

ネットワーク ジェネレーターに用意した JSON ファイルを投入すると生成される nodes.csv と links.csv を取得します。

ネットワーク ジェネレーター Network data generator for Tableau / Tristan Guillevin / Observable

data = FileAttachment("mary@1.json").json()
という行の後ろにあるクリップのマークをクリックすると [Replace] というボタンが出てきます。クリックするとファイルのアップロード メニューが出てきますので用意した JSON ファイルを投入します。

f:id:zkn360:20200811162009p:plain

データを投入すると、ただちに CSV が生成されますので、ダウンロード ボタンから CSV を取得します。*3忘れずに 2 種類とも取得してください。
ついでにこの時点でネットワーク ジェネレーター側でもネットワーク図描画してくれるので、形をチェックしたり、ネットワーク同士の距離を調整したりもできます。*4

3.Tableau で Viz を作成する

データができたので、Viz を作成します。基本は Spider チャートと散布図を二重軸で重ねたものを作成すれば OK です。…って面倒ですよね? 参考元のブログではなんと Tableau のサンプルまで用意してくださってます。

ネットワーク図 テンプレート https://public.tableau.com/profile/guillevin#!/vizhome/Template-NetworkGraph/SimpleNetworkGraph

テンプレートのワークブックをダウンロードしたら、先ほど作成、ダウンロードしたデータに差し替えます。差し替える方法は何でもいい*5と思いますが、最終的に nodes.csv と links.csv を id で結合したものがデータソースになります。
f:id:zkn360:20200811163858p:plain

データを差し替えた時点でネットワーク図自体は出来上がっていますが、さらに Tableau で見た目を調整します。例えばレ・ミゼラブルのデータには人物のクラスター (group) のデータがあるので色付けしてみたり、登場人物名 (id) をラベルにしてみたり、value (おそらく登場した回数?) でネットワークの線の太さを変えてみたり。こういった調整ができるのが Tableau のいい所です。

実際に作成したネットワーク図はこちらからどうぞ。https://public.tableau.com/profile/naoko.ozaki#!/vizhome/LesMiserablescharacternetworkgragh/Characterco-occurenceinLesMisrables


データ準備さえどうにかなれば、意外と簡単にネットワーク図書けちゃいました。とはいえ、オリジナルの記事を書いていただいた Tristan Guillevin さんに感謝です。ぜひ皆さんも試してみてください。*6

*1:レ・ミゼラブル1巻半ばで挫折したので、人物相関が正しいかは皆様の判断にお任せします

*2:私はコピペして拡張子 .json で保存しました。ダサい方法ですみません。。

*3:なぜかダウンロードしたら CSV として認識されなかったので拡張子を編集して CSV ファイルにしました。

*4:円の大きさも調整できるけど、それこそ Tableau でやればいいので、特に気にならないなら全部デフォルト設定で良いと思います。

*5:ファイルの接続の編集でも、データソースの置換でもお好きな方法でどうぞ。

*6:Tableau Public にパブリッシュする際は、ぜひ Tristan Guillevin さんにメンションを!