R連携でTwitterをセンチメント分析

Nanaeです。

Tableau×Rの連携で、文章の中身を分析するセンチメント分析を行います。データは、Web Data Connectorで抜いてきたTwitterデータを使います。

■やってみた分析
センチメント分析の中でも以下2つをやってみました。(※英語のテキストが対象です)
Emotion分析
テキストを6種類の感情+それ以外、の7つに分類する分析。6種類の感情とは、Anger, disgust, fear, joy, sadness, surprise。
Polarity分析
いわゆるネガポジ分析。テキストを、Positive, neutral, negativeの3つに分類する分析。

■Rで使うパッケージ
これらの分析を行うために必要なRのパッケージは3つあります。
1. tm
テキストマイニング用のパッケージで、テキストをみて、関連性をみつけたり、グルーピングしてまとめたり、分類したりする。
2. rstem
語幹が異なる同じ単語をマッチングさせる。例:swim, swims, swimming
3. sentiment
センチメント分析を行うパッケージで、これを動かすにはtmとrstemが必要。sentimentのパッケージそのものは現在削除されているらしく、install.packages("sentiment")は利用できない。代替手段としてGitHubから落とす方法を利用する。

■R:準備
これらのパッケージをRStudioからRにインストールして読み込ませます。
(Rで直接トライしてもうまくできず。。。RStudioから行いました。日本語化が原因!?)
以下、RStudioから行ってください。

TableauとRを連携させるとき、まずは必ずこれが必要。Rserveを読み込ませます。
library(Rserve); Rserve()

tmとrstemをインストールします。
install.packages("tm")
install.packages("Rstem")

sentimentを使うために、devtoolsというパッケージをインストールしてから、GitHubからsentimentをインストールして読み込ませます。
install.packages("devtools")
library(devtools) 
install_github("aloth/sentiment/sentiment")
library(sentiment)

これでR側の準備は完了。

★テストデータでTRY
■テストデータ
次に、今回使うデータです。最初はわかりやすいように、サンプルとして5レコードのデータを使ってみました。そのあとに同じことをTwitterデータで行います。


各レコードに対して、感情とネガポジを出していきます。

■Tableau:計算フィールドの作成
Tableauに移って、感情判定用の計算フィールド: get_emotionを作成します。計算フィールドの中身はこちら。
SCRIPT_STR('
library(sentiment)
get_emotion(.arg1,algorithm="bayes") '
,ATTR([Status Text]))


ネガポジ用の計算フィールド:get_polarityも作成します。
SCRIPT_STR('
library(sentiment)
get_polarity(.arg1,algorithm="bayes")'
,ATTR([Status Text]))


■Tableau:Vizの作成
各レコード=各テキストに対して、感情とネガポジを判定させます。
列に、元データにある"sentence"と、作成した計算フィールドの"get_emotion"と"get_polarity"を行に入れます。R連携した計算フィールドは表計算となるので、「次を使用して計算」は「セル」を指定しておきます。


判定されました!1行目"He is sad."を見てみると、これは"sad"を含んでおり、感情はsadness、ネガポジはnegativeとなっていて、きちんと判定されているようです!



★Twitterデータで実践!

■Twitterデータ
それでは次に本番、Twitterデータです。Twitterのデータを取るためにはWeb Data Connectorが必要です。コネクタは、ここのものを使わせてもらいました。
http://files.tableaujunkie.com/twittersearch/twitterwebconnect.html

検索は”@tableau"としました。


■Tableau:計算フィールドの作成とVizの作成
計算フィールドはサンプルデータのときと同じです。メジャー名を変えるだけです。サンプルデータのときと同様、作成した計算フィールドを使うときは、「次を使用して計算」から「セル」を指定するのを忘れないようにしてくださいね。

以上で、Twitterのデータを使ったセンチメント分析が実現します!

今回は、R連携、Web Data ConnectorというTableauの外とつなぐ機能を使いました。
いろいろ組み合わせると、どんどん可能性が広がっていきますね!

Nanae

リストから選んだ全く別のウェブサイトを表示

Nanaeです。こんにちは。

URLフィルターに関連するテクニックです。選択した項目ごとに全く別のWebサイトを表示させる方法です。

★URLアクション
通常、選択した項目によって表示させるWebサイトを変えたいとき、URLアクションを使おうと考えると思います。たとえばこんな感じ。上の地図でJapanをクリックするとWikipediaの中で"Japan"のWikipediaサイト、Chinaをクリックすると"China"のWikipediaサイトを表示させることができます。

そのとき、URLアクションの設定画面では、Wikipediaの検索ワード前までのURLを入れ、連動させたいフィールドをそのうしろに入れますよね。

★パラメータを使ったURL連動
ここまでは通常の使い方ですが、選択した項目によって、全く別のサイトを表示させたいこともあると思います。Wikipedia内など1つのサイト内でのページではなく、たとえば、"日本"を選択したときは日本が運営している日本観光サイト、"中国"を選択したときは中国が運営している中国観光サイトなど、全く別のWebサイトに飛びたいといったニーズです。これは、URLアクションではなくパラメーターを使うことで実現します。

(ここから先で作るダッシュボードの完成図)

☆パラメータを使って全く別のWebページを表示させる
まず、パラメーターを作成します。URLは、このパラメーター作成画面でリストとして入力します。右側の表示名は、シート内でパラメーターを選択するリストとして出てくる文字なので、わかりやすく国の名前を書いておきます。

これをダッシュボード内に配置するWebページのオブジェクトに入れ込みます。このURLの入力エリアには、パラメーターも入れられるのです!


これで、パラメータに連動した、全く別のWebサイトを表示させることができるようになります!


☆パラメータを使ってフィルターされたVizを作る
次に、パラメータで日本が選択されているとき、上のシートにある地図では日本だけに絞った表示をしたいと思います。

地図ではこんなデータを使いました。観光での人気 Top 100の都市における2015年の入国人数のデータで、東アジアだけをピックアップしています。

まず、国と都市名でマッピングを行います。
次に、パラメータで日本が選択されているときには、Japanの地図だけを表示させるような仕組みを作ります。日本が選択されているとき、内部でパラメータがもっている値は日本のサイトのURLですので、URLとJapanを対応させる必要があります。このやり方を2種類お伝えします。

①計算フィールドを使う方法
URLとデータにある国を一つづつ対応させます。処理内容はわかりやすいと思います。

こんな流れで、Japan↔URL↔日本を引き継いでいます。

最後に、パラメーターで日本が選択されているとき、地図の方はJapanのデータだけ見せるようにするために、上の計算フィールドとデータにある国のフィールドが一致しているかどうかの計算フィールドを作ります。

これを満たすとき、すなわち"真"のときだけ、地図を表示させるフィルターを設定します。

②プライマリグループを使う方法
URLと国の対応表を作成して、接続します。


国でリレーションを張ってブレンドしてから、行の中に、プライマリとして元のデータから国、セカンダリとしてURLと国の対応データからURLを入れ、プライマリグループを作成します。

元のデータに、URLというグループができました。


国をグループ化したものですが、新しくURLという列ができているような動きをします。


こちらは元のデータにURL列を持ってきているので、流れはもっとシンプルになります。

最後に、上のURL列とパラメータが一致しているかどうかの計算フィールドを作り、"真"でフィルターをかけます。


これで、パラメーターで国名を選択すると、その国のデータにフィルターがかかった地図と、選択した国のWebサイトが表示されるようになりましたー!!!
ぜひ使ってみてください★

Nanae

クラスター分析をやってみよう! ~アルコール消費量から都道府県をグルーピングする~

皆さまこんにちは、 bashiiです。

突然ですが、 V10の新機能、クラスタリング(クラスター分析)機能って、みなさん使われていますか?
とても便利な機能なのですが、まだ使ったことがない・・・いまいち使いどころがわからない・・・といった方もいらっしゃるのではないでしょうか?

ということで; 今回は Tableau Version 10からの新機能であるクラスタリング機能について、面白い利用方法を考察してみたいと思います。

最終的にはアルコール消費量のデータからクラスター分析を用いて県民性を覗いてみたいと思います。 
(↓イメージ図)



◆ クラスタリングとは何か
クラスタリングとは簡単にいうと、物事をその特徴に応じて、いい感じのグループに分けるということです。これをクラスター分析と言い、機械学習の一つとして位置づけられます。

ビジネスの分野でもマーケティングの戦略立案や製品ポジショニングの分析などに利用されています。
例えば製品の中で季節ごとの売れ筋商品のグループを作り、製品グループごとのキャンペーンを行ったり、顧客の中からお得意様グループを見つけ出し、そのグループに対して特別なキャンペーンを行ったり・・・といった具合に、何かの施策をするときに特定のグループ分割を把握することでメリットが得られるシーンがあります。
このようなグルーピングを機械学習の力で行い、新たな気づきを得ることがクラスター分析の醍醐味と言えるでしょう。
クラスター分析の手法(データをグループに分割するアルゴリズム)としては、K-meansアルゴリズムが有名で、Tableau でもこの方法を採用しています。

(クラスター分析の厳密な定義については、いろいろなリンクがありますのでWebで検索ください。この記事では概要を感覚的に理解することを趣旨とさせていただきますのでご了承ください。)

◆ K-meansの仕組み
Tableauでも利用されているK-means法について簡単な説明をいたします。

1.まずクラスタの中心点を対象データからランダムにk個決める(例では2個)
2.各データを最も近くにある中心点のクラスタに割り当てる
3.クラスタ内のデータの平均値を新たなクラスタの中心点にする
4.各データを最も近くにある中心点のクラスタに割り当てる
5.クラスタ内のデータの平均値を新たなクラスタの中心点にする
6.各データを最も近くにある中心点のクラスタに割り当てる
7.クラスタ内のデータの平均値を新たなクラスタの中心点にする

8.各データを最も近くにある中心点のクラスタに割り当てる(上記手順を繰り返す)

9.繰り返しの結果、クラスタの中心点が変化しなくなったら終了

◆ Tableau での使い方
Tableau でK-meansのクラスタリングを実施する方法はいたって簡単です。

3種類のアイリス(アヤメ科の一種)の花弁の長さ、幅、花ガクの長さ、幅の4つの情報を標本として取得したデータセットがあります。(このデータはRやPythonに入っているとっても有名なデータセットです。)

このデータセットを散布図として表示します。
これをK-meansアルゴリズムを使ってクラスターに分類してみます。


操作はいたって簡単です。
アナリティクスタブを開く → 「クラスター」 を散布図にドラッグ
以上です。

花弁の長さ、幅、花ガクの長さ、幅の4つの情報をもとに、自動的に最適なクラスタ数を調整して分類した結果、クラスター1~クラスター3の3つのグループに標本を分類することに成功しました。

データセットには実際のアイリスの種別(Setosa,Versicolor,Virginica)の品種情報があるので、これに従って分類してみると以下のようになります。
・・・ほとんど変わらないですね。 

このケースでは、K-meansによって分類したグループが実際のアイリスの品種分類と変わらないことが分かります。つまり、K-meansによって分類がある程度言い当てられていることが感覚的に見て取れます。
Tableau でのクラスタリング機能の詳細については、以下のリンクを参照ください。
Understanding Clustering in Tableau 10 - writen by Bora Beran
https://boraberan.wordpress.com/?s=K-means

◆ アルコール消費量のデータから県民性がわかるか?
それではもう少し、現実的な例を取り上げてみましょう。
今ここで、ワイン、酒、焼酎、ビール、ウィスキーの一人当たりの消費量を得ることができたとします。

このデータから何が見えてくるでしょう。クラスター分析の前に、
まずデータの中身をざっくり見てみましょう。

アルコール消費量全体のランキングをとってみます。

1位 東京
2位 新潟
3位 大阪
4位 高知
5位 秋田

という結果でした。 大都市は飲食店も多くやはりアルコール消費量が多いようです。
次にワイン、酒、焼酎、ビール、ウィスキーの一人当たりの消費量を行と列に配置し散布図を作ってみます。さて、ここから何か情報が得られますか? 何か気づきましたか?

よく見てみると、アルコール種別ごとに消費量が突出している県があるようです。
例えば
日本酒は 新潟、秋田
ワインは 山梨、東京、長野、北海道
焼酎については断トツ宮崎、鹿児島。続いて熊本、大分といったとこでしょうか。
もうなんだか県民性が出てきましね。


次に傾向線に着目してみましょう。傾向として以下がみられるようです。
① 傾向線が右下がりであることから焼酎の消費量が増えると、日本酒の消費量は減る傾向にある
② 同様に日本酒の消費量が増えると焼酎の消費量は減る傾向がある
③ 傾向線が右上がりであることからビールの消費量が増えるとウィスキーの消費量が増える傾向にある


それではこの辺で本題のクラスター分析に入っていきたいと思います。
これらの傾向をもとにアルコール消費の嗜好別に都道府県をグループ化してみましょう。アルコール消費量に似たような傾向がある都道府県を同じグループにまとめまるということをします。

わかりやすいように、列と行の組み合わせを下のように減らしてみます。

ここにアナリティクスペインから「クラスター」をドラッグします。
クラスター数を4あたりに設定します。(クラスター数は面白い結果が出るところを試行錯誤する必要があるのですが、今回は4つから初めてみましましょう。)

「クラスター」をドラッグして、クラスター数を指定するだけで、クラスターによる色分けができましたね!
なんとなく、色分けされたクラスターごとにアルコール消費量の特徴が見えてきましたか?

Tableauのクラスター分析のとっても便利なところは、作成されたクラスターをグループとして、新しいディメンジョンに利用できるということなんです。(これは実はとても便利な機能です!)
video


色に作られた「クラスター」をディメンジョンエリアにドラッグしてみてください。
クラスターに所属する都道府県をグループにまとめたディメンジョンが追加されます。
これを「アルコール消費量クラスター」と名前を付けます。
新たにできたディメンジョンごとに、アルコールごとの消費量の比率を見てみます。
すると、クラスター1はビールの消費量が多いビール派。
クラスター2はワイン派。 クラスター3は焼酎派といった傾向が見えてきます。
このように、出来上がったクラスターを人間の主観で意味を検討しネーミングすることもクラスター分析の作業の一つです。

さて、作成されたクラスターを地図にマッピングしてみましょう!


圧倒的に、九州中南部、大分、熊本、宮崎、鹿児島は焼酎派! なんですね。ここは揺るぎがありません。
山梨と北海道はワイン派クラスター。日本海側にビール派が多いということも浮き上がってきましたように思います。

クラスターの数を5つにするとまた秋田、新潟の日本酒クラスターが出現しました。

このようにクラスターの数を変えたり、入力の変数を変えて意味のあるクラスターを試行錯誤して探っていくと、面白い発見に出会えるかもしれません。

アルコール消費量傾向によって都道府県をグループ化できれば、焼酎クラスター
である宮崎、鹿児島、大分、熊本で焼酎キャンペーンを実施したり、逆に消費量の少ない日本酒のキャンペーンをやってみるというのも新鮮かもしれません。

皆さんもお手持ちのデータをTableauのクラスタリング機能を使って分析してみてください。新たな発見が得られるかもしれません!!

ワークブックはこちらからダウンロードいただけます。
https://public.tableau.com/shared/Y38T47BC2?:display_count=yes

Tableauからデータサイエンスを始めましょう!!
では、またお会いしましょう・・・


参考文献:

DATA GO.JP
http://www.data.go.jp/

[DoSS@d - DATA] 都道府県別アルコール類の消費量
http://mo161.soci.ous.ac.jp/@d/DoDStat/sake/sake_dataJ.xml

Understanding Clustering in Tableau 10 - writen by Bora Beran
https://boraberan.wordpress.com/?s=K-means

クラスタリングの定番アルゴリズム「K-means法」をビジュアライズしてみた
http://tech.nitoyon.com/ja/blog/2009/04/09/kmeans-visualise/





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

Nanaeです。

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

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

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


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

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


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

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

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

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


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


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

Nanae