Tableauでネットワーク図を作成する
参考資料:
はじめに
人と人とのつながりを表現するにはネットワーク図が分かりやすいです。誰が誰と繋がっていて、さらにそこからどう展開しているか、眺めていると時を忘れそうになります。一方で、Tableauのデフォルトの視覚表現にこれは備わっていませんので、参考資料を見ながら試行錯誤することになります。思い立って作ってみたので、備忘録として本稿を残します。
ネットワーク図とは?
このnoteのヘッダーの画像を見て頂くと一目瞭然だと思いますが、ある点から点へ線がつながっており、線が関係性を示しています。関係が多ければ多いほど線が多くなります。その密度から影響度が視覚的に分かる図となっています。
加えて、データ的な観点で見てみましょう。
ネットワーク図には「点」があります。その点がいくつあるのか、そしてその点は平面空間の位置がどこにあるのか。つまりデータとしては座標情報のあるレコードが必要です。
次に線があります。これはどこからどこへという方向を示しています。つまりデータとしてはFrom Toの情報が必要になります。
今回は例として、DATASaberの師匠であるPortrayer of the DATA Universeから、105人のお弟子さんにつながり、その弟子の一人である DATA Artistから、さらに7人のお弟子さんへ繋がる形のネットワーク図を描きます。
完成イメージ
それでは始めていきましょう。
データの準備
JSONファイルの作成
今回使うJSONファイルはこちらです。改変して使ってみて下さい。このJSONファイルの基本構造は、大きく、nodesとlinksというテーブルに分かれます。
nodes = 点を表す
nodeにはidフィールドがあります。登場人物分すべて、師匠弟子の関係なしに、ダブりなしに書き込まれます。groupはおまけのフィールドです。世代などの表現に使うものでした。無くても大丈夫です。
"nodes": [
{"id":"Portrayer of the DATA Universe", "group":1},
{"id":"DATA artience", "group":3},
{"id":"Jugaad Juggler", "group":3},
{"id":"Visualization DATA Analyst", "group":3},
links = 線で関係を示す
linksのセクションでは、線のつながりを表現できます。例えば下記の表記は、source、つまりFrom がPortrayer of the DATA Universe、そしてterget、つまりtoが"DATA Artist"です。ちなみにvalueはおまけのフィールドです。もともとは線の太さに使うものでした。
{"source":"Portrayer of the DATA Universe", "target":"DATA Artist", "value": 1},
JSONデータを作成したら次へ進みます。
Network Chart Generator で座標情報を付与してJSONからCSVへ変換
Network Chart Generatorでは、先のJSONファイルに基づいて点を平面上の座標に自動的に配置してくれます。そして、親子関係を線で結んでくれます。それらの情報をデータにしてくれてアウトプットできます。出力オプションもTableau Desktop , Tableau puiblic, CSVと複数選択肢が設られています。至れり尽くせり!では進めていきましょう。
下記のサイトを開いて下さい。
トップページが開くので、Brows toolsを選択→AdvViz→NETWORKと進んで下さい。
SELECT FILEをクリックして先ほど作成したJSONファイルを読み込んで下さい。
すぐにネットワーク図が作成されます。各種パラメータで微調整して、イメージと一致させて下さい。
CSVのボタンをクリックして下さい。Network.zipという圧縮ファイルがダウンロードされます。
Zipを解凍するとDATAというフォルダの中にlinks.csv , nodes.csv という2ファイルが保存されています。
Tableau Desktop(Public)でデータの準備
Tableauでlinks.csv , nodes.csvを読み込みます。Tableauを開き、初期画面でテキストファイルを選択して、先ほどの2ファイルを選択します。2つはID同士をリレーションで繋いで下さい。
フィールドの作成
変換した時に座標情報が付加され、X,Yのフィールドに割当たっています。それらを0-1の範囲に収めるための式を、下記のようにX,Y両方とも作成します。
X Normalized
[X]/ {MAX([X])}
Y Normalized
[Y]/ {MAX([Y])}
次に上記で作った、X Normalized, Y Normalizedの値を、下記のフィールドによってTableau上の座標にします。作成したフィールドは🌐アイコンになります。
Nodes Point
if [Index] >= 0 then
MAKEPOINT(-[Y Normalized],[X Normalized])
END
ビューの作成
X Normalizedを列シェルフに、Y Normalizedを行シェルフにドラッグ&ドロップします。
IDを詳細に入れます。
変換後、IDに-1,ー2などの、数値レコードが入っていることがあるようです。不要なのでフィルタして除外して下さい。
Typeにも不要なレコードがあるようです。フィルタし、source, tergetのみ選択して下さい。
Index(linkes.csv)を詳細に入れて下さい。
マークカードを線にして下さい。
Typeをパスに入れて下さい。
サイズで線の太さを調整して下さい。
列シェルフのX NormalizedをキーボードのCTRLキー、MacはCommandキーを押しながらつかんで、同じ列シェルフの右側にドラッグして下さい。
列シェルフの右側のX Normalizedのピルを右クリックして二重軸にして、さらに軸の同期もして下さい。
3枚目のマークカードを線から形状に変更して下さい。
その他微調整をしてビューを整えて下さい。
いかがでしょうか?どうしても手順的になってしまい、この手順でネットワーク図がなぜ出来上がるのか、私もそれほど明確に説明できません。一方で、この方法を用いれば様々なバリエーションのネットワーク図ができることが分かります。ぜひ応用してみて下さい。