前回の振り返り

さいん・こさいん・たんじぇんと?

以前、「Tableauでレーダーチャートをつくってみた」というタイトルでレーダーチャートにチャレンジしました。そのときは背景画像と座標データを使うことで見事にレーダーチャートをつくることができました。

ただ、このとき、
・座標データをひとつひとつメモするのが大変
・データの更新があった場合、座標データを新たに取得しなければならない
という問題点がありました。

そこで今回は座標ではなく計算式を使ってレーダーチャートをつくってみようと思います!

※2021年2月追記
下記では多角形を使用したレーダーチャートのつくり方も紹介しています。
コピペで完成!Tableauでレーダーチャートをつくってみた(多角形編)

データの準備

今回参考にさせていただいたサイトが、「レーダーチャート(マニア向け)」と「Tableauでレーダーチャートをつくる」です。

まずはデータの準備から。前回はこれに一番時間を費やしましたね……。準備したのがこんな感じのデータ。
data


前回はさらに座標データのカラムを持っていましたが今回は実数のみです。ポイントは最後に始点と終点を重ねるために同じ数値を2回持っておくことと、レーダーチャートの外枠となるMax値をデータに入れていることです。

このデータを使って座標データを取得するのですが、考え方がこちら。
keisan

πなんて久々に見ましたね……。僕の数学知識(数Ⅱ・数B)で理解できる範囲で考えてみたのですが、「座標データを計算式で求める」というのは、まとめるとこんな感じでしょうか。

・座標データはコサインとサインで置き換えられる(X座標がcosΘ、Y座標がsinΘ)
・座標データを用いるには角度(=Θ)の値を求める必要がある
・持つKPIの数がZ個だとすると、正Z角形における各座標の角度(=Θ)が求まる。

例えばKPIが5つの場合はこんな感じで角度が求まります。


図1
正五角形の中心の角度は1つあたり2π/5。座標で考えた場合、KPI1とKPI2以外は角度を̠マイナスで表現するというのが注意ですね。

図_KPI1
まず、KPI1は角度が90°=π/2。これはすぐに求まります。

図_KPI2
KPI2は、π/2から正五角形の中心角である2π/5を引くと求まります。

図_KPI3

KPI3はマイナスの角度になります。計算としてはπ/2から(2π/5)×2を引くと求まります。π/2からスタートして2π/5を時計周りに引いていくイメージですね。

角度についてはこんな感じの考え方で理解していきました。さらっと書いていますがこの考え方を理解するまでに結構時間がかかりました……。数学の復習という意味では良いトレーニングになるかもしれません。


計算式の準備

次にいよいよTableauでの作業です。レーダーチャートをつくるためには以下の計算式を準備する必要があります。

①#index
INDEX()
//行の順番を返す関数ですね。どんな使い方をするのでしょうか?

②#KPI_Counts
{FIXED :COUNTD([KPI Name])}-1
//KPI Nameのユニークな数をカウントします。1を引いているのは終点を除くためでしょうか?

③#Radians
PI()/2 - 2*PI()/avg([#KPI_Counts])*([#index]-1)
//各座標の角度を求める式です。PI()はπのことです。#KPI_Countsは正Z角形の中心角を計算するために使うみたいですね。#indexは座標に応じてπ/2から中心角を引く回数を指示するためにあるようです。考えた人すごいなぁ……。

④#X座標
sum([KPI Value])*COS([#Radians])
//KPIの値にコサインをかけてX座標を出します。

⑤#Y座標
sum([KPI Value])*SIN([#Radians])
//KPIの値にサインをかけてY座標を出します。

⑥#KPI Value for Lable
IF ATTR([Pokemon]) = "Max"  THEN null ELSEIF LAST() != 0 THEN sum([KPI Value]) END
//KPIの値を表示するためのラベルです。外枠であるMaxの場合はnullにします。

ちなみに後半の「ELSEIF LAST() != 0 THEN sum([KPI Value])」というところですが、ここを「ELSE sum([KPI Value])」にしてしまうとKPIの終点の値も表示されてしまいます。KPI Nameごとの一番最後の行(つまり終点)を表示させないための工夫ですね。「LAST()!=0」というのは「最後の行でなければ」という意味です。「!」がつくと否定の意味になるんですね。

LAST()LAST()!



レーダーチャートの完成

計算式の準備が済んだら、後はいつものようにドラッグ&ドロップ。完成品がこちら!

キャプチャ

レーダーチャートになってる…!!

データを増やしても、こんな感じですぐに反映されました。
キャプチャ2

注意点としては、以下の2点くらいでしょうか。
・表計算を使っているものは、表計算の編集から「特定のディメンション」→「KPI Name」を選択。
・X座標とY座標の軸の大きさをそろえる

計算式さえできれていれば、データの更新があってもすぐにレーダーチャートとして反映されます。座標を新たに取らなくて良いのは便利ですね。

まとめ

「目視で座標データを取得する」方法と「計算式で座標データを取得する」方法でレーダーチャートをつくりましたが、比較するとこんな感じでしょうか。
hikaku

状況に応じて使い分けたいですね。

次回はMakeOverMondayチャレンジです!

Tableau Public:https://public.tableau.com/profile/ryo.hiromoto#!/vizhome/pokemon2_15546215596530/Pokemon