43
43

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

はじめに

ビッグデータの時代が到来し、人気急上昇中の職業であるデータサイエンティスト。
近年最も「美しい職業」なんて言われていますね。
ある記事によると、

データサイエンティストとは高度な数学的素養を持ち、プログラミングに長けていて、
好奇心旺盛で企業の経営にも興味を持ち、膨大なビッグデータからビジネスに必要な知見を
引き出すスーパースターである

なんて書かれています。美しすぎますね。
今日はそんなデータサイエンティストの気分を味わっちゃいましょう。
BIツールのTableauとR言語で時系列分析のARIMAモデルを簡単に実現してみよう!というお話。

セルフ型BIとは?

BIというとOLAP分析を行い定型レポートを作成するという印象が強いかもしれません。
ですが近年、分析軸を固定せず自由に分析して何か発見したいというニーズが高まり、
それを可能にするBIが登場しました。それがセルフ型BIと呼ばれる者たち。
代表的なセルフ型BIを二つ、簡単に紹介します。

qlik-sense-logo.png

アシスト社が提供する「QlickSense」。セルフBIと言えばQlick製品が頭に浮かびます。
QlickSenseはデータをメモリ上に取り込み、インメモリで分析を行うため高速に
分析結果を描写することが可能という特徴があります。
データソースから分析に必要なデータを選択してインポートするため
基本的には中間にDWHを構えなくてもよいというコンセプトになっています。
一見これでえーやん。と思いますが、実際に使ってみたところ
BIサーバー側のスペックに完全依存するので、億を超えるデータを処理するには
相当メモリを積んだサーバーを用意してあげなければいけません。
いわゆるビッグデータと呼ばれる量のデータを扱うには成金戦法を用いるしかありません。

tab

Tableau社が提供する「Tableau」。現在セルフ型BIの中では頭一つ抜けている印象があります。
Qlickと同じくセルフ型BIですが、データ処理の仕方は違います。
Tableauは二種類の分析方法があり、
Qlickと同じように必要なデータを取り込みインメモリ上に展開して分析を行う方法と、
ライブ接続により分析を実行する度にリアルタイムでデータソースにアクセスしデータを取得して処理する方法があります。
二つ目のライブ接続のおかげでHadoopやSpark、GreenplumDBといったMPP分散DBの性能を
生かして億を超えるような大量データも高速に処理できるようになります。
勿論、ライブ接続を導入するには骨が折れそうですが。

準備

今回はver8以降からRの連携がサポートされたTableauを使います。
Tableauの公式サイトからTableau Desktop 9.2(現状最新)の評価版をインストールしましょう。
トライアル版ダウンロードを選択すれば簡単にインストールできます。
試用期間があるのでデータサイエンティスティックな気持ちで居られるのはたった2週間。
http://www.tableau.com/ja-jp/products/desktop

次にRを下記サイトからインストールしましょう。
今回インストールしたのは64bit版のver.3.2.3です。
RはOSSなので試用期間に怯える必要ありません。
https://cran.ism.ac.jp/

両方ともインストールが完了したら準備OKです。

TableauとRを連携させる

1 連携に必要なパッケージを入れる

Rを開き、Tableauとの連携に必要なパッケージを入手します。
Rコンソールで下記のコマンドを叩けばOK。

install.packages(Rserve);
library(Rserve);
Rserve();

ついでに時系列分析を行うためのパッケージも入れておきましょう。

install.packages("forecast");

2  TableauからRをキックできるようにする

Tableauを開き、メニューから「ヘルプ」「設定とパフォーマンス」「R接続の管理」を選択。

Tableau_R.png

接続先に「localhost」を入力し、テスト接続を選択して上手くいけば接続できましたーって出ます。
Rサーバーを利用する場合は環境に合わせて設定してください。

tableau_r_conf.png

上手く接続できない場合はRserveがちゃんと起動しているか
タスクマネージャーで確認して下さい。Rserveのプロセスが立ち上がっていないと接続に失敗します。

時系列分析ARIMAモデルを用いて来店数を予測する

さぁここから実際に分析を始めていきましょう。
今回は時間も無いのでExcelでサクッと作ったテストデータに接続します。
時間があればSparkとかにも繋いでみたいところですね。
ちなみに中身はシンプルに「年」「月」「アクセス数」のデータを入れておきました。

1 Tableauでグラフを作成する

左のメニューに接続とあるのでExcelを選択してテストデータの入ったファイルを選びます。
Tableauが自動で分析に使うデータを選択してくれます。
tableau_conect.png

ワークシートに移動し、ドラッグ&ドロップでグラフ作成が出来るので棒グラフを作ってみましょう。
列に「年」「月」を、行に「来店客数」をドラッグ&ドロップ。
これで棒グラフ出来ちゃいました。
tableau_glaph.png

2 時系列分析のARIMAモデルを使って予測する

2016年の1月~4月のデータはまだ入っていないのでグラフで表示されていません。
この4カ月間のアクセス数をARIMAモデルを用いて予測しちゃいましょう。

メニューの「分析」から「計算フィールドの作成」を選択します。
ここでRをキックしてARIMAモデルでごりごり計算してもらうためのスクリプトを作成します。
今回は整数の結果をRからもらうのでSCRIPT_REALを使って記述していきます。

SCRIPT_REAL(
    "
    library(forecast);
    access<-.arg1;
    arima<-auto.arima(access);
    arima_data<-forecast(arima,h=4);
    arima_num<-as.numeric(arima_data$mean);
    month_num<-.arg1[1:24];
    c(month_num,arima_num);
    ",SUM([アクセス数])
    )

これでTableauからRをキックしてARIMAモデルを用いて分析が出来ます。
行に作成した「ARIMAモデル」を追加してみましょう。
tableau_arima.png

すると、2016年1月~4月までの予測が出来ました。
見やすいように2016年だけ色を付けてみても良いかもしれませんね。
BIはグラフの結果を綺麗に見せるのにとても優れています。

結果

TableauとRを連携させることで簡単に時系列分析が出来ましたね。
ここまで大体4時間程度で出来たのでお手軽にデータサイエンティスティックな気分を味わえました。
勿論、スクリプトを作りこむことで今回よりもより精度の高い予測も可能になります。

BIとRを連携させるメリット

たらたらと書きましたが結局BIとRを連携させると何が嬉しいの?を簡単にまとめてみました。

◆ Rのパッケージを使うことで分析の幅が無限大
◆ あらかじめ計算フィールドを用意しておけば誰でもドラッグ&ドロップで高度分析ができる
◆ BIはhadoopやGreenplumなど豊富なデータソースと簡単に接続可能
◆ BIなら帳票出力やメール配信、ジョブスケジューリングなどもお手軽
◆ ライブ接続でリアルタイムな分析を行える

などBIとRを連携させると嬉しいことが沢山あるんです。

まとめ

冒頭にも書きましたが、ビッグデータの時代が到来したことでBIの需要も高まりつつあります。
ですが現実は、「やろうぜ分析!」みたいな流れなのにBIに関する情報は少ないし、
Rと連携させてる事例もあんまりネットに転がっていません。
BIはどんどん進化しているので是非この機会に一度触ってみると新しい発見があるかもしれませんね。

43
43
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
43
43

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?