すべてフィルターされているときにタイトルを表示させない方法

2017/02/23 17:35 Nanae 0 Comments

Nanaeです。

簡単な裏ワザです。フィルターをかけていて何も選択していないとき、シートにタイトルを表示させなくする方法です。

タイトル機能を使ってタイトルを表示すると、Vizがあろうとなかろうと常にタイトルを表示します。表示させるVizがないときはタイトルを出したくない場合、Vizの中にタイトルを組み込むことでタイトルを隠せます。

上がタイトル機能を使ってタイトルを表示したシート、下がタイトル化したものをVizに組み込んだシートです。


フィルターのチェックをすべて外します。上はチャートがないのにタイトルだけ残ってしまいました。下はタイトルもきちんと消えています。

下のシートの作成方法です。
タイトルをVizに組み込むには、計算フィールドでタイトルを表す文字列を作って、それを列に入れてヘッダーとして表示させます。


文字の大きさや配置などを書式設定から調節すれば完了です。

上の例でわざわざこのTipを使うことは少ないですが、たとえば次の場合に有効です。

気になる都道府県をクリックすると、その都道府県の時系列推移が出てくるようなダッシュボードを作りました。垂直方向のオブジェクトの中に2つのシートを入れ、何も選択していないときは時系列推移のチャートが表示されないフィルターアクションの設定にしています。

↓↓↓
↓↓↓静岡県をクリックしてみる
↓↓↓


都道府県の円をクリックしていないとき、下に時系列推移のチャートが隠れていますが、そのタイトルだけ見えていては不格好ですよね。


タイトルを非表示にしてしまうことはできますが、タイトルがあったほうがわかりやすいです。そんなときに使ってください!

Nanae


0 コメント:

Tableau + R 連携を使いこなそう! その3 - 時系列分析に挑戦

2017/02/20 0:59 Shingo 0 Comments


bashiiです、こんにちは。

さて、今回は「Tableau+R連携を使って時系列分析を行う際のポイント」について紹介したいと思います。  

さてその前に「時系列分析」って何? というご質問もあるかと思いますので、簡単に説明するところから入りたいと思います。

例えば、店舗の売上、Webのアクセス数、株価などのデータは時間軸に沿って数値が時々刻々と変化していきますよね。これらの時系列に沿った傾向を理解することで、これから先に起こることを(ある程度)予測することを時系列分析といっています。

Tableau+R連携の入出力については、
Tableau + R 連携を使いこなそう! その1 - 簡単な足し算に挑戦 で紹介していますが、
実はTableauの入力データ数と、SCRIPT_* でRから返される出力数は同じにするという前提があるんです。
  
もしこれらに違いがあると下のように、「SCRIPT関数によって返された予期しない数の結果。関数はnの値を返す予定でしたが、mの値が返されました」という  
メッセージが出てしまいます。


しかし、時系列分析では現在までのデータに加えて予測した値が追加されるので、入力と出力の数が変わってくるということになります。これをTableauで実現するためにはちょっとした工夫が必要になってきます。

今回のポイントをまとめます。
1.時系列分析では入力となる実績値のデータ数と、出力となる予測値の数が異なる
2.ダミーのデータを使ってTableauから入力するデータ数とRから出力されるデータ数を合わせる
3.Rからの最終的な出力は実測値に予測値をくっ付けて返す
です。

なんのこと?ってかんじですね。 では内容を説明していきましょう。


以下のような時系列のデータがあるとします。とある会社の業績データが1960 Q1 から四半期ごとに1980年Q4 まで 84 期 記録されています。
これをもとにこの先の業績を時系列分析によって予測したいと思います。


■ その1.
最初は簡単な例で説明します。
添付ワークブックの「時系列シンプル-その1」 ワークシートをご覧ください。

実データの最終ポイント 1980 Q4から先の8つのポイント(8四半期)
つまり1982 Q4 まで予測値を出してみたいと思います。
今回の実データは84個あります。これに8つの予測値を加えて最終的な出力結果は 84+8=92 個 となります。

ここで前述の通り、Tableauから入力するデータ数とRから出力されるデータ数は
一致する必要があることをもう一度思い出していただきたいのです。

そこで第一ステップとして、実データに以下のように値をNULLとしたダミーのレコードを8つ追加します。

 え! データソースを変更するの?? と思うかもしれませんが、安心してください!!
ここではR連携の仕組みがわかりやすいように一時的に対応します。
(多くの場合、都度データソースにNULL値を追加するのは難しいと思いますが、この後の「その2」でデータソースを変更しない方法をご紹介します!)




実データの変動をグラフにすると以下のようになります。1980 Q4 までにデータが入っています。

パラメータから予測する期間を取得して予測値を出す計算式を作ります。
 



















計算式の中身が何をしているのかコメントを付けました。


これをグラフにすると以下のようになります。実績値にRによる予測値を付け加えたもの、下が実績値のみです。
分かりやすいように予測値に色を付けていますが1982年Q4までの予測値がオレンジで追加されていることが分かります。


ここで今一度計算式の中で何をしているのか Rの気持ちになって考えてみたいと思います。
Rstudioのコンソールから実際にコマンドを打ってみましょう。
簡単のため、実データとして、 1,2,3,4,5,6,7,8  が入っていてその先4 つの区間を予測するということをしてみましょう。
( もちろん、 9,10,11,12 が返ってくることが予測できますよね。。。)

> library(forecast);   
# forecastライブラリを 読み込みます。  

※ {forecast}パッケージは計量時系列分析にまつわる様々な関数を同梱していて、主にARIMAのモデルに代表される単変量時系列データを扱います。  

> .arg1 <- c (1,2,3,4,5,6,7,8,0,0,0,0)  
# Tableauからデータを入力することを想定して、.arg1 にベクトルとして1~8までの値を投入します。  
ここで、Tableauの入力データ数とRの出力データ数を合わせる必要があるので、末尾に4つのダミーデータを入れ  
合計のデータ数を 8+4=12 とします。  

> l<-length(.arg1); #入力データの数を代入  
> l  
[1] 12  

.arg1 の長さ(データの数)は12です。  

> .arg2 <- 4  

予測するポイントの数を 4 とします (Tableauからはパラメータとして入れられることを想定します)  

> u<-.arg1[1:(l-.arg2[1])];  
> u  
[1] 1 2 3 4 5 6 7 8  
.arg1 から実データのみを切り出します  

> n<-length(u);  
> n  
[1] 8  
実データのデータ数をとっておきます。  


> earnings_ts <- ts(u,deltat=1/4,start=c(1960,1));  
> earnings_ts  
     Qtr1 Qtr2 Qtr3 Qtr4  
1960    1    2    3    4  
1961    5    6    7    8  

ts()関数により、1~8のデータを 1960年1Q から始まり、四半期周期の時系列オブジェクト・データに割り当てます  
ただの数列に対して、それが時系列のデータですよということを定義してあげています。

> fcast <- forecast(earnings_ts, h=.arg2[1]);  
> fcast  
        Point Forecast Lo 80 Hi 80 Lo 95 Hi 95  
1962 Q1              9     9     9     9     9  
1962 Q2             10    10    10    10    10  
1962 Q3             11    11    11    11    11  
1962 Q4             12    12    12    12    12  

forecast()関数で実際に予測を行います。予測の期間は4点ですので、  
1962 Q1 から 1962 Q4 までの予測値が計算されます。  

forcast関数の意味についてはこちらを参照ください  
https://cran.r-project.org/web/packages/forecast/forecast.pdf  

> append(u,fcast$mean, after = n)  
[1]  1  2  3  4  5  6  7  8  9 10 11 12  

実データベクトル "u" の後に予測値 fcast$meanを連結します。  
実データ 1~8 の後に 9,10,11,12 がついているのがわかります。  
当たり前ですが、最初に予測した結果がきちんと付け加えられていますね。  
この結果がTableauに返ります。  
Tableauからの入力のデータ数とRからの出力数が同じですね。  

■ その2.  
実際にはデータソースにダミーレコードを追加することは難しい場合がありますので、  
次に、データソースにてを加えずに予測値を返すテクニックを紹介します。 少しテクニックが必要です。  
添付ワークブックの時系列シンプル-その2を参照ください。  

以下のようなデータソースがあります。 末尾にNULLは加えていません。

この場合に実データより先の8期間の予測値をRに計算してもらいましょう。  

1.最後のデータの日付ポイントを予測期間分先延ばしにします。  
計算式 ”Shifted Quarter" を作り、以下の計算式を入力します。  



IF [Quarter] = {FIXED:MAX([Quarter])}  
THEN  
DATEADD('quarter',[Num Forecast Intervals],[Quarter])  
ELSE  
[Quarter]  
END  

1980 Q4 のデータ 8 四半期延ばされて、1982 Q4 のデータとなります。  
この最後のデータのみ予測期間分延ばされたデータをRに渡すというところがポイントとなります。  
なぜこのようなことをしているかというと  
TableauがRに渡す実測値の入力データとRが出力する実測値+予測値のデータ数が同じになるようにしなければならないためです。


2.実測値+Rによる予測値を返す計算フィールド ”ForcastEarnings”を作成し以下を入力します。



3.列に”Shifted Quarter"、行に”Earnings" と”Forecasted Earnings" をドラッグします
4.”Shifted Quarter"を右クリックし、”Show Missing Values"を選択します ←ここがポイント



Show Missing Valuesをチェックすることで、シフトされた末尾のデータとその前のデータの間のポイントがNULLとしてRに渡され  
結果として入力と出力のデータ数が同じになります。  

ここで、実測値を84個、予測値を8個と想定して先ほど作成した計算式の中のRスクリプトを解説します。  


# 入力データの最後の一つ(84番目)のデータはシフトされて、予測データも含めた最後のデータ(92番目)にシフトされています。84番目から91番目はNULLで埋められいます。  
  l<-length(.arg1);  
# 入力データの数をlに代入します、末尾を予測データ分シフトしていますから、ここでは、84+8=92 となります。  

  u<-.arg1[1:(l-.arg2[1])];  
#  u に実データ数分 (92 - 8 =84 )の数列をベクトルとして格納します。  
(最後の一つはシフトされているので、NULLとなっている)  
  n<-length(u);  
# 実データの数は84 です。  

  u[n]=.arg1[l];  
# 実データの最後84番目のデータを92番目のデータ(シフトされたデータ)で置き換えます。  
# これでシフトされていたデータが元の場所に戻り、実データのベクトルが完成します。  

  earning_ts <- ts(u,deltat=1/4,start=c(1960,1));  
# 完成した実データベクトルu を1960 Q1 から始まる 四半期ごとの時系列データとして取り扱います。  

  fcast <- forecast(earning_ts, h=.arg2[1]);  
# 実測値データをもとにパラメータで入力された予測期間(8) の値を予測します  

  append(u,fcast$mean, after = n)"  
# 実測値データベクトル u  に予測結果 fcast$mean を追加しTableauに返します。  
ここでデータの数は実測値84 + 予測値8 =92 となります。  

ちょっと、トリッキーなところはありますね。(確かに)  
ただこのテクニックは、ほかの予測分析においても、入力データとRの出力データが異なる場合に使えるテクニックになりますので  
応用はできそうです。  

最後になりますが、Tableauには既に予測の機能が搭載されていて予測データを表示することができます。(「分析」→「予測」から実行)    
ただし、Rと連携することで時系列データから季節変動要素を分離したり、ARIMAモデル以外にも先進的な時系列予測モデルを利用した予測ができたりと、  
応用範囲はどこまでも広がると思われます。  

その際にも今回ご紹介したTableau+R連携で時系列分析を行う際の入出力のテクニックは押さえておきたいですね。  


Tableauからデータサイエンスを始めましょう!

ということで、またお会いしましょう。

bashii


参考文献  
Using R forecasting packages from Tableau  
https://boraberan.wordpress.com/2014/01/19/using-r-forecasting-packages-from-tableau/  

完成したワークブックはTableau Community にありますのでご参照ください。
https://community.tableau.com/docs/DOC-10111


0 コメント:

Tableau + R 連携を使いこなそう! その2 - K-meansクラスタリングに挑戦

2017/02/16 23:16 Shingo 0 Comments



RとTableau連携を使いこなしたい! の2回目です。

前回は簡単な足し算をRに実行させてみましたが、今回はもう少しリアルなケースとしてk-meansクラスタリングを取り上げ、Tableau+R連携の中で何をしているのか考察してみましょう。

まずはRを使ってk-meansの意味するところを理解します。

Rに含まれているirisサンプルデータ(アイリスの花弁の標本データ)を使ってk-meansクラスタリングを行ってみましょう。 アイリスの花弁とガク片の長さ、幅が分かればk-meansクラスタリングを使ってその花の種類ガ大体わかる・・・というのが主旨です。

3種類のアイリス(setosa/versicolor/verginica) の花の花弁とガク片の長さ、幅の4種類のデータ標本を取ったもので、Fisherの研究で使われた有名なデータセット iris を利用しましょう。









Rのコンソールで 
>iris
と打てば iris のサンプルデータを見ることができます。 


> plot(iris)


と打てば散布図が表示されます。
k-meansクラスタリング(K平均法)の詳細については、他の文献を参照いただきますが、
ザックリと書くと標本の属性値から標本を意味のあるグループに機械的に分類するという仕組みです。
この場合は、アイリスの花弁とガク片の長さ、幅 から標本を属性の似ているグループに分類します。

以下のコマンドをRコンソールから実行してみます。
※ K-meansを利用できるように事前に"plyr"パッケージをインストールください。
install.packages("plyr")

# iris の1列目から4列目のデータをベクトルとして格納
.arg1 <- iris[,1]
.arg2 <- iris[,2]
.arg3 <- iris[,3]
.arg4 <- iris[,4]

#データフレーム(※)にまとめる
 d<-data.frame(.arg1,.arg2,.arg3,.arg4)

{※ 数値ベクトル、文字ベクトルを集めた2次元行列 data.frame(ベクトル1, ベクトル2・・・で作成する。)

cluster <- kmeans(d,3) #k-meansの実行。クラスタ数は3に指定。<- d="" font="" k-means="" kmeans="">
cluster #k-means の結果表示

result <- km$cluster #クラスタリング結果の抽出
result #クラスタリング結果の表示


これで150の標本が3つのクラスターに分類され、それぞれに1,2,3というクラスター番号が割り振られているのがわかるかと思います。

---------------------------------------------------------
次に、これと同じことをTableauからデータを与えてRに実行させてみたいと思います。
まずはデータの準備から。

> d<-iris
> write.table(d,file="c:/iris")

でirisのデータがCSVに落とせますので、これをTableauから読み込みます。
列の名前は図のように指定します。

次にSCRIPT_INTを使ってRスクリプトを含む計算式"Cluster" を作ります。

---- 計算式の中身 ----

SCRIPT_INT(
'
set.seed(42);
d<-data.frame(.arg1,.arg2,.arg3,.arg4)
result <- kmeans(d, 3);
result$cluster;
', 
SUM([Petal.Length]), SUM([Petal.Width]),SUM([Sepal.Length]),SUM([Sepal.Width]))


---- ---- ---- ---- ---- 

Tableauからデータを入れるところ以外は先ほどRコンソールから実行したコマンドとほとんど一緒なので、今度は、中で何をしているか気持ちは分かるような気がしませんか??

そしてこの関数の結果が整数型のベクトルとなることも理解できると思います。
クロス表にすると、各標本データに対して計算されたクラスター番号が割り振られているのが分かります。
ここまでくれば、あとはTableauの世界で自由にビジュアライゼーションを行えます。
花の花弁とガク片の長さ、幅の4種類のデータ標本を散布図にしてクラスターを色にドラッグして見ましょう。標本が3種類のクラスターに分類されていることが分かります。
※ K-meansを利用できるように事前に"plyr"パッケージをインストールください。

install.packages("plyr")


実際の花の種類(Setosa,Versicolor,Virginica)の分類と比べて見ます。
ほとんど変わりませんね。k-meansのクラスタモデルが実際のアイリスの花の種類をうまく分類できていることが分かります。


応用編として、パラメータの数を自由に指定できるようにすれば、より細かに標本を分類することができますし、もしかしたら、同じ品種の中でも新たなクラスターを発見することができるかもしれませんね。Tableauであればマウスを当てればすぐに何番の標本がどのクラスターに属するか一発でわかるので便利ですよね!

------------------------------------------------------------------------------------------------

今回はTableauR連携の仕組みを理解するためにk-meansを取り上げてみましたが、
実はTableau 10 ではk-meansクラスタの機能をTableau自体が既に取り込んでいるんですね。

ただ、k-means以外のモデリング技法(階層型クラスタリング、EMアルゴリズム、はたまた今話題の機械学習などなど・・・)Rが提供する先進的なアルゴリズムを利用するには、これからもR連携が必要になります。

Tableauだったら、可視化のプログラミングを考えることなく、データからもっと簡単に自由な発見を得ることができるのがスゴイところだと思います。

Tableau+Rの連携でデータサイエンティストとデータアーティストのコラボレーションが進んだらオモシロイことが起きそうですね。

以上、ご参考になれば幸いです。

※ ワークブックのダウンロードはこちらからどうぞ。(文末にワークブックの添付があります)
Tableau Community Japan: 
Tableau + R 連携で知っておきたいこと
https://community.tableau.com/docs/DOC-10017

※ 尚、Tableau+R連携におけるRのコードスクリプティングについては、サポートの範囲外となりますので、ご了承ください。





0 コメント:

Tableau + R 連携を使いこなそう! その1 - 簡単な足し算に挑戦

23:16 Shingo 0 Comments









皆さんこんにちは bashii と申します。





今回、初めてこちらのブログに投稿させていただきます。
よろしくお願いします。

データサイエンスが注目される昨今、RとTableau連携を使いこなしたい! と考えてる方もたくさんいらっしゃると思います。

TableauRを連携させる意味や、Rをセットアップして実際にTableauから利用するところまでインストラクションについてはこちらのブログで紹介されているので、是非最初にこちらをご覧になってください。

TableauでRをつかってみよう!(準備編)

TableauでRをつかってみよう!(実践編)

Tableau Rを連携をやってみて、Rserve(Rサーバー)との接続はできた! サンプルも動いた!というところまでは簡単にできるかと思います。さて、次のステップとして実際にRのコーディングを含む計算フィールドを作成することになりますが、その際に知っておくべきポイントがいくつかありますので、今回はそのあたりをご紹介していきたいと思います。
実際にRの気持ちになって考えられるよう、Rコンソールからコマンドを打ちながら理解していきましょう。 

まず、Tableau Rを連携の基本的な仕組みについて図に表してみました。
TableauとRは以下のように連携して処理を行います。

1.TableauからRサーバーに入力データを送る
2.事前に書かれたRスクリプトにしたがってRサーバーに計算をさせる
3.TableauRサーバーから計算された結果を受け取って新しいメジャー(またはディメンジョン)とする
まずは、簡単なサンプルでTableauRのデータ入出力の仕組みを解説してみます。
Rに「足し算をさせるだけ」のサンプルです。

下のようなデータを読み込みます。


TableauからRのスクリプトを実行するには、SCRIPT_INT関数 (Rからの出力が整数型の場合)や、SCRIPT_REAL関数(Rからの出力結果が実数型の場合) を使って計算フィールドを作成します。 
さて、VALUE1とVALUE2を足すための計算フィールドを作ってみましょう。

整数の足し算なので SCRIPT_INT() 関数を使って "R_ADD_VALUE"という計算フィールドを以下のように作成します。

-------  計算式"R_ADD_VALUE"の中身 -------
















VALUE1 と VALUE2 を受け取り、それぞれ.arg1 と.arg2 に代入し、足し算した結果を返します。


結果は下の図の右端ようになります。
Tableauからの入力はRに対してベクトル(ザックリ言うと、データをいくつかまとめて並べたもの)として渡されます。

同じことを今度はRの気持ちになって、Rのコンソールからも実行してみましょう。

Rでベクトルを作成するには c(10,20,30,40,50) のように書きます。

実際にRコンソールから以下を実行してみましょう。



ここで、ポイントとして、SCRIPT_* の引数に列を指定するときは、何らかの集計を掛けるということです。この理由としてはSCRIPT_* が内部で表計算を用いていることに起因するのですが、とりあえず SUM() か ATTR()を付けてあげないといけません。入力がユニークな行であればSUM()でもATTR()でも実は結果は同じになります。

ここで、ID列を取り去ってみると、NAMESUM合計された値がRに渡されていることがわかります。
これは、ドリルダウン・アップをしたときに分析の切り口に応じてRに渡される入力値も動的に変わるので有用です。

以上、ご参考になれば幸いです。

※ ワークブックのダウンロードはこちらからどうぞ。(文末にワークブックの添付があります)
Tableau Community Japan: 
Tableau + R 連携で知っておきたいこと
https://community.tableau.com/docs/DOC-10017

※ 尚、Tableau+R連携におけるRのコードスクリプティングについては、サポートの範囲外となりますので、ご了承ください!!






0 コメント: