2017年8月29日火曜日

R言語:「stringr」パッケージでレビューデータの加工が簡単(その3)

ほんとに小ネタなのですが、原因気づくのに時間がかかったので備忘録がわりに。
過去、何回かに分けて宿泊レビューのテキストマイニングの前処理を色々やっておりました。

R言語:「stringr」パッケージでレビューデータの加工が簡単。
http://sapporomkt.blogspot.jp/2017/08/rstringr.html

R言語:「stringr」パッケージでレビューデータの加工が簡単(その2)
http://sapporomkt.blogspot.jp/2017/08/rstringr2.html


今回、テキストマイニングで集計したデータ(品詞の頻度など)と、性別や年代といった属性データを掛け合わせた分析するため、後者の分布状況などをヒストグラムなどで確認しようと思ったところ凡ミスしたのでご紹介です。

実施環境については、以下の通りです。

・MacBook Air(CPU:1.6GHz,Memory 8GB)
・macOS Sierra ver10.12.3
・RStudio ver 1.0.136


ソースコードのご紹介


わかったら何のこともない凡ミスだったのですが、ソースコードは以下です。
データの読み込みプロセスなどは以前のエントリーをご参照ください。

# 宿泊者の満足度(CS)が入っている「rank」でヒストグラムを・・・できません。
hist(hotel2.dat[,"rank"])
 hist.default(hotel2.dat[, "purpose1"]) でエラー:
   'x' は数値でなければなりません


# 各変数のクラスをザラーっと調べてみます。
# 「rank」がcharacter型になっていますね。numeric型じゃなきゃ、ダメだこりゃ。
sapply(hotel2.dat,class)
          rank           user          time1   com_sentence       purpose1
   "character"    "character"    "character"    "character"    "character"
      purpose2       purpose3          time2 reply_sentence          plan1
   "character"    "character"    "character"    "character"    "character"
         plan2      user_name            age            sex            flg
   "character"    "character"    "character"    "character"      "logical"

# rankをnumeric型に変換して元のデータセットに上書きします。
hotel2.dat$rank <- as.numeric(hotel2.dat$rank)

# 念のためチェックします。「rank」がnumeric型になっていますね。
sapply(hotel2.dat,class)
          rank           user          time1   com_sentence       purpose1
     "numeric"    "character"    "character"    "character"    "character"
      purpose2       purpose3          time2 reply_sentence          plan1
   "character"    "character"    "character"    "character"    "character"
         plan2      user_name            age            sex            flg
   "character"    "character"    "character"    "character"      "logical"

# 再度、ヒストグラムにトライです。colには他の色も適用可能です。colors() で色々出てきます。
hist(hotel2.dat[,"rank"], col ="aliceblue")


# せっかくなのでクロス集計もしてみます。
hotel2.crs <- xtabs(~purpose2+sex, data=hotel2.dat)
hotel2.crs

         sex
purpose2   女性 男性
              1    1
  その他      1    1
  一人        6   12
  家族       58   77
  仕事仲間    1    0
  友達        8    6
  恋人        4    7

# 有用性はアレですが、モザイクプロットでも。
# どうてもいいですが、表頭と表側が入れ替わるんですね。
mosaicplot(hotel2.crs)


以上です。

R関連エントリー


R言語:starwarsキャラの身長や年齢をdplyrで加工してggplot2する。http://sapporomkt.blogspot.jp/2017/08/rstarwarsdplyrggplot2.html

RESASの不動産取引データでheatmapを作ってみた。
http://sapporomkt.blogspot.jp/2017/05/resasheatmap.html 

RESASデータを「IBM Data Scientist Workbench」でゴニョゴニョしてみた。
http://sapporomkt.blogspot.jp/2017/05/resasibm-data-scientist-workbench.html

ggplot2でクロス集計的に複数グラフをプロットする方法
http://sapporomkt.blogspot.jp/2016/11/ggplot2.html

R開発環境が無料で簡単導入!「Data Scientist Workbench」を使ってみた。

http://sapporomkt.blogspot.jp/2016/10/rdata-scientist-workbench.html

(Bluemix)知ってた?dashDBってTwitter分析にもツカエルのさ(+ちょっとだけコンサドーレ調べ)
http://sapporomkt.blogspot.jp/2016/07/bluemixdashdbtwitter.html

RMeCabで形容詞の形態素解析をやってみた。
http://sapporomkt.blogspot.jp/2016/07/rmecab.html

【R言語】今年は、leafletでマップをグリグリしたい。
http://sapporomkt.blogspot.jp/2016/01/rleaflet.html

(R言語)当ブログアクセス者の興味関心事をコレポン(コレスポンデンス)した。
http://sapporomkt.blogspot.jp/2015/12/r.htm

2017年8月24日木曜日

新宿アカシアが羽田空港第2ターミナルにもあった!〜ロールキャベツの名店

先日、羽田空港第2ターミナルに行ったのですが、そこで新宿にあるロールキャベツの名店「アカシア」を発見しましたっ!


場所は、第2ターミナルマーケットプレイスの4階でエスカレーターを上がった右手すぐのところにあります。若干、目立ちにくいですが、この日もほぼ満席でした。


メニューは店内にもありますが、本店とお値段はほぼ変わらずでした。
空港の食事は高いものが多いのでありがたいですね。


自分は、もちろん、ロールキャベツ!
味やボリュームも本店と変わらずお値打ちです!


嫁さんはポークカツ。初めて食べたのですが、くどくなくて美味しかったです。


出発・到着前後でお時間のある方には、是非ともオススメしたいお店です。

R言語:「stringr」パッケージでレビューデータの加工が簡単。

レビューデータのテキストマイニングがしたくて、データ加工プロセスのお勉強なうです。
「stringr」パッケージが使いやすいと評判だったので、今更ながら書いてみました。

実施環境については、以下の通りです。

・MacBook Air(CPU:1.6GHz,Memory 8GB)
・macOS Sierra ver10.12.3
・RStudio ver 1.0.136


思ってたよりも簡単だったソースコードのご紹介


実施前は難しいかなと思っていましたが、やってみたら意外と簡単でした。

# パッケージの読み込み。
# 「xlsx」形式の読み込みは他にもパッケージがありますが、Javaの導入など面倒が増えるので、このパッケージがオススメです。ただし、「xls」形式は読めません。
library(openxlsx)
library(dplyr)

# データの読み込み
setwd("~/blog/hotel_170819_TM")
hotel.dat <- read.xlsx("170819_hotel.xlsx")

# カラム名を表示します。不要なカラムもたくさん含まれています。
colnames(hotel.dat)
 [1] "url"            "rank"           "com_title"    
 [4] "com_title_link" "user"           "time1"        
 [7] "com_sentence"   "flg1"           "flg1_link"    
[10] "flg2"           "flg2_link"      "flg3"         
[13] "flg3_link"      "purpose1"       "purpose2"     
[16] "purpose3"       "time2"          "reply_sentence"
[19] "plan1"          "plan2_link"     "plan2"

# 分析データをattachします。「hotel.dat$hoge」と入力せずに、hogeで狙ったカラムにアクセスできます。
attach(hotel.dat)

# 分析に必要なカラムだけ抜き出します。見た目はわかりづらいですが、「dplyr」パッケージのおかげです。
hotel2.dat <- select(hotel.dat,rank,user,time1,com_sentence,purpose1,purpose2,purpose3,time2,reply_sentence,plan1,plan2)

# データ内容を確認してみます。
View(hotel2.dat)

今回用いたデータセットでは、user列に、「ユーザー名・年代・性別」データが同一カラムに入っていました。年代・性別は分析に有用なので別カラムに切り出したいです。

小田一弥さん [30代/男性]

user_nameagesex
小田一弥さん30代男性

「おっと、正規表現だな・・・」と思われたあなた、大丈夫です。
自分も不慣れですが、今回はとっても簡単です。

# パッケージを読み込みます。最初は「for」で繰り返し処理を書こうと思ったのですが、こちらの方がずっとシンプルで早いそうです。
library(stringr)

# userの名前と年代・性別を分離
hotel2.dat$user_name <- str_extract(hotel2.dat$user,"^.*さん")
hotel2.dat$age <- str_extract(hotel2.dat$user,"\\d{2}代")
hotel2.dat$sex <- str_extract(hotel2.dat$user,".性")

 View関数で見ると下記のようになります。


# パッケージを読み込みます。
library(rpivotTable)
# グラフ化します
rpivotTable(hotel2.dat)


以上です。

R関連エントリー


R言語:starwarsキャラの身長や年齢をdplyrで加工してggplot2する。http://sapporomkt.blogspot.jp/2017/08/rstarwarsdplyrggplot2.html

RESASの不動産取引データでheatmapを作ってみた。
http://sapporomkt.blogspot.jp/2017/05/resasheatmap.html 

RESASデータを「IBM Data Scientist Workbench」でゴニョゴニョしてみた。
http://sapporomkt.blogspot.jp/2017/05/resasibm-data-scientist-workbench.html

ggplot2でクロス集計的に複数グラフをプロットする方法
http://sapporomkt.blogspot.jp/2016/11/ggplot2.html

R開発環境が無料で簡単導入!「Data Scientist Workbench」を使ってみた。

http://sapporomkt.blogspot.jp/2016/10/rdata-scientist-workbench.html

(Bluemix)知ってた?dashDBってTwitter分析にもツカエルのさ(+ちょっとだけコンサドーレ調べ)
http://sapporomkt.blogspot.jp/2016/07/bluemixdashdbtwitter.html

RMeCabで形容詞の形態素解析をやってみた。
http://sapporomkt.blogspot.jp/2016/07/rmecab.html

【R言語】今年は、leafletでマップをグリグリしたい。
http://sapporomkt.blogspot.jp/2016/01/rleaflet.html

(R言語)当ブログアクセス者の興味関心事をコレポン(コレスポンデンス)した。
http://sapporomkt.blogspot.jp/2015/12/r.htm

2017年8月20日日曜日

R言語:グラフィカルなクロス集計が簡単!〜「rpivotTable」パッケージ

以前、当ブログで紹介したことがあるのですが、Rでグラフィカルなクロス集計が可能な「rpivotTable」パッケージがいつの間にか進化していたので改めて触れてみます。

例えばこんなのがGUIで出来ちゃいます

実施環境については、以下の通りです。

・MacBook Air(CPU:1.6GHz,Memory 8GB)
・macOS Sierra ver10.12.3
・RStudio ver 1.0.136


パッケージ呼び出し後は、全部GUIで出来ちゃいます


分析対象データの読み込みが終わっていれば、下記3行のコードだけでグラフ作成画面が表示されます。
CRANからインストール出来るのでとてもラクですね。

install.packages("rpivotTable")
library(rpivotTable)
rpivotTable(hotel.dat)

下記は、某旅行サイトに記載されたユーザーレビューからRate:満足度ランキング(5が最高)、sex:レビュー記載者の性別、age:年代を抽出したデータです。
これの変数名がついたボタンはドラッグ&ドロップが可能で、3重クロスも難なく出来ちゃいます。

ちなみに、以前は日本語が表示出来なかったのですが、現バージョンでは問題なさそうですね。

<Table>

<Table Barchart>

 <Heatmap>

<Horizontal Bar Chart>

<Horizontal Stacked Bar Chart>

<Bar Chart>

<Line Chart>

<Area Chart>

グラフタイプは他にも数種類ありますので、ご興味ありましたらお試しください。

自分は、このデータをもとにテキストマイニングを行い、形態素解析後に集計されたTerm(ワード)と上記3つの属性を混ぜ混ぜして色んなことをやろうと思っています。
Rにはクロス集計用のパッケージがいくつかあるので、そちらを使ってもいいのですが、データの概観をとりあえず確認するときは「rpivotTable」パッケージが便利だと思います。

以上です。


R関連エントリー


R言語:starwarsキャラの身長や年齢をdplyrで加工してggplot2する。http://sapporomkt.blogspot.jp/2017/08/rstarwarsdplyrggplot2.html

RESASの不動産取引データでheatmapを作ってみた。
http://sapporomkt.blogspot.jp/2017/05/resasheatmap.html 

RESASデータを「IBM Data Scientist Workbench」でゴニョゴニョしてみた。
http://sapporomkt.blogspot.jp/2017/05/resasibm-data-scientist-workbench.html

ggplot2でクロス集計的に複数グラフをプロットする方法
http://sapporomkt.blogspot.jp/2016/11/ggplot2.html

R開発環境が無料で簡単導入!「Data Scientist Workbench」を使ってみた。

http://sapporomkt.blogspot.jp/2016/10/rdata-scientist-workbench.html

(Bluemix)知ってた?dashDBってTwitter分析にもツカエルのさ(+ちょっとだけコンサドーレ調べ)
http://sapporomkt.blogspot.jp/2016/07/bluemixdashdbtwitter.html

RMeCabで形容詞の形態素解析をやってみた。
http://sapporomkt.blogspot.jp/2016/07/rmecab.html

【R言語】今年は、leafletでマップをグリグリしたい。
http://sapporomkt.blogspot.jp/2016/01/rleaflet.html

(R言語)当ブログアクセス者の興味関心事をコレポン(コレスポンデンス)した。
http://sapporomkt.blogspot.jp/2015/12/r.htm

2017年8月13日日曜日

コスパ最高!「フレンチ前菜食堂 ボン・グゥ 神楽坂」

2017年8月12日(土)、夏休みの東京観光を兼ねて、家族で神楽坂をブラブラしてきました。
途中で立ち寄った「フレンチ前菜食堂 ボン・グゥ 神楽坂」がコスパ最高だったのでご紹介します。

この日は、土曜日のお昼12時。ランチ時間帯にも重なり座れないかもと不安だったのですが、ラッキーにもテーブルが1つだけ空いていました。

こちらの2階。ちょっと気づきにくいかも。

このドアから2階に上がります。

「フレンチ」ということで子連れ(6歳の男の子)で心配だったのですが、店員さんも優しくて安心できました。お店の雰囲気全体もオシャレながら落ち着いた感じ。



この時はテーブルが1つだけ空いていましたが、10分後、階段まで待ち列が並んでいたので本当にラッキーでした。


メニューです。フレンチながらどれもリーズナブルで華族連れでも来れますね。
お得なお子様セットもありますし(この日はピザ)、ドリンクもリーズナブル。




前菜はランチメニューによって異なりますが、どちらもボリュームがあって美味しかったです。この他に冷製スープも付いてました。



メインディッシュ。上が「海老とトマトのアメリケーヌごはん」。ライスが無料で大盛りできるのも嬉しいですね。味はソースもしっかりと海老の風味が活きていて美味しかったです。

下は「タルトフランベ」。「ベーコンと淡路玉葱の黒胡椒風味」にしましたが、パリパリとした食感がする珍しいピザでした。個人的にはチーズが効きすぎたピザはあまり好きではないのですが、非熟成チーズを使っていることもあり食べやすくてまたオーダーしたくなる味でした。



嫁さんも息子も大満足で「また来たい!」と言ってくれたので大満足です。
おそらく並ぶことになると思いますが、絶対オススメのお店です。

お店情報
・店名:フレンチ前菜食堂 ボン・グゥ 神楽坂
・住所:〒162-0805 東京都新宿区矢来町107 細谷ビル
・電話:03-3268-0071
・URL:http://www.bon-gout.co/kagurazaka/

2017年8月6日日曜日

R言語:starwarsキャラの身長や年齢をdplyrで加工してggplot2する。

「dplyr」パッケージのヘルプを調べていたら「starwars」キャラクターの属性データセットなるものが組み込まれていたのでggplot2によるグラフ化までやってみました。

最終的には、こんなグラフを作ります。


実施環境については、以下の通りです。
・MacBook Air(CPU:1.6GHz,Memory 8GB)
・macOS Sierra ver10.12.3
・RStudio ver 1.0.136
・分析データ:こちらから各自調達してください


「starwars」データセットを「dplyr」でいじってみよう。


■そもそも「dplyr」ってなに?
「R界の神様」「羽鳥」こと、「Hadley Wickham」さんが作ったR環境におけるデータ加工(manipulation)パッケージです。

■実際の手順
「starwars」データセットの読み込み準備が出来た前提で記載します。

# イストール済みの下記パッケージをロードします。
library(dplyr)
library(ggplot2)

# 一応、データセットの中身を確認します。
View(starwars)

スターウォーズシリーズに登場した各キャラクターの属性情報が表示されます。
本当にどこまで合っているかは不明ですが(笑)、身長(height)や種族(species)などのカラムが遊べそうですね。


# 「filter」で「Human」に該当するレコードを抜き出して、dplyrのパイプで渡して「name」と「height」列だけ抜き出して、「arrange」で「height」を降順でソートします。
# 最後の「filter(complete.cases(.))」は「欠損値」レコードの除去です。ローグ1のキャラデータの身長データは欠損してたので。
human_height <- starwars %>%
filter(species == "Human") %>%
select(name,height) %>%
arrange(desc(height)) %>%
filter(complete.cases(.))

# 一旦、データ内容を確認します。
View(human_height)

欠損値を含むレコードを除いた各キャラクターの身長データが降順で表示されます。


最後に、ggplot2でグラフ化します。

# 「reorder」関数は降順ソートをかける役割なので、上記でソート済みなら不要です。
# coord_flip()はX軸とY軸を入れ替えます。これ便利っす。
p <- ggplot(human_height, aes(x=reorder(name,height), y=height)) +
geom_bar(stat = "identity", fill="grey") +
theme_bw(base_size = 10, base_family = "HiraKakuProN-W3") +
coord_flip()

p + geom_text(aes(label = height), size = 3, hjust = 0.5, vjust = 3, position = "stack")

これだけの処理で「スターウォーズに登場する人間キャラクターの身長順位」がフォースと共にあなたの手にっ!
「ダースベーダー」って2メートル以上あるんですね。


ちなみに、先ほどのコードの「Human」を「Droid」に差し替えると、一瞬で「ドロイドの身長グラフ」が出力可能です。
こういう部分がRの便利なところですねぇ。


 「birth_year」データも面白そうだったので、先ほどのコードを流用してみました。

birth_year.list <- starwars %>%
select(name,birth_year) %>%
arrange(desc(birth_year)) %>%
filter(complete.cases(.))

p <- ggplot(birth_year.list, aes(x=reorder(name,birth_year), y=birth_year)) +
geom_bar(stat = "identity", fill="grey") +
theme_bw(base_size = 10, base_family = "HiraKakuProN-W3") +
coord_flip()

p + geom_text(aes(label = birth_year), size = 3, hjust = 0.5, vjust = 3, position = "stack")

ヨーダ、896歳(笑)


以上です。

R関連エントリー


RESASの不動産取引データでheatmapを作ってみた。
http://sapporomkt.blogspot.jp/2017/05/resasheatmap.html 

RESASデータを「IBM Data Scientist Workbench」でゴニョゴニョしてみた。
http://sapporomkt.blogspot.jp/2017/05/resasibm-data-scientist-workbench.html

ggplot2でクロス集計的に複数グラフをプロットする方法
http://sapporomkt.blogspot.jp/2016/11/ggplot2.html

R開発環境が無料で簡単導入!「Data Scientist Workbench」を使ってみた。

http://sapporomkt.blogspot.jp/2016/10/rdata-scientist-workbench.html

(Bluemix)知ってた?dashDBってTwitter分析にもツカエルのさ(+ちょっとだけコンサドーレ調べ)
http://sapporomkt.blogspot.jp/2016/07/bluemixdashdbtwitter.html

RMeCabで形容詞の形態素解析をやってみた。
http://sapporomkt.blogspot.jp/2016/07/rmecab.html

【R言語】今年は、leafletでマップをグリグリしたい。
http://sapporomkt.blogspot.jp/2016/01/rleaflet.html

(R言語)当ブログアクセス者の興味関心事をコレポン(コレスポンデンス)した。
http://sapporomkt.blogspot.jp/2015/12/r.htm

2017年8月5日土曜日

R言語:Rでヘルプを調べる

こちらも地味ですが、R言語でヘルプを調べる際に、あまりしっかり覚えていなかったので備忘録として残しておきます。



■ヘルプの表示

?dplyr
help(dplyr)

上記コマンドのどちらかを入力すると、パッケージ名に該当する(青字部分:今回は「dplyr」パッケージ)ヘルプが表示されます。
自分はいつも後者だけでやってました・・・。














■ヘルプの表示

help(package = "dplyr")

上記コマンドを入力すると、パッケージ名に該当する情報が表示されます。


「DESCRIPTION file.」や「User guides, package vignettes and other documentation.」は1度目を通しておくといいでしょうね。


RSiteSearch("dplyr")

上記コマンドを入力すると、下記メッセージがコンソールに表示された直後にブラウザが起動します。


dplyrパッケージのインストールから利用方法も記載されたページが表示されました。
英語ですが、かなりわかりやすく記載されています。

http://dplyr.tidyverse.org/

以上です。

R関連エントリー


RESASの不動産取引データでheatmapを作ってみた。
http://sapporomkt.blogspot.jp/2017/05/resasheatmap.html 

RESASデータを「IBM Data Scientist Workbench」でゴニョゴニョしてみた。
http://sapporomkt.blogspot.jp/2017/05/resasibm-data-scientist-workbench.html

ggplot2でクロス集計的に複数グラフをプロットする方法
http://sapporomkt.blogspot.jp/2016/11/ggplot2.html

R開発環境が無料で簡単導入!「Data Scientist Workbench」を使ってみた。

http://sapporomkt.blogspot.jp/2016/10/rdata-scientist-workbench.html

(Bluemix)知ってた?dashDBってTwitter分析にもツカエルのさ(+ちょっとだけコンサドーレ調べ)
http://sapporomkt.blogspot.jp/2016/07/bluemixdashdbtwitter.html

RMeCabで形容詞の形態素解析をやってみた。
http://sapporomkt.blogspot.jp/2016/07/rmecab.html

【R言語】今年は、leafletでマップをグリグリしたい。
http://sapporomkt.blogspot.jp/2016/01/rleaflet.html

(R言語)当ブログアクセス者の興味関心事をコレポン(コレスポンデンス)した。
http://sapporomkt.blogspot.jp/2015/12/r.htm

R言語:インストール済み/ロード済みパッケージの表示

普段から「覚えよう、覚えよう」と思って都度忘れているので、備忘録代わりに残しておきます。



■インストール済みパッケージの表示

installed.packages()
 
上記コマンドを実行すると、現在、R環境にインストール済みのパッケージ一覧がズラーっと表示されます。我ながらこんなにインストしたのかとビックリしました。








■ロード済みパッケージの表示

(.packages())
   
上記コマンドを実行すると、現在、R環境にロード済みのパッケージ一覧が表示されます。
ちなみに、新たにパッケージをロードする場合は「library()」でしたね。







以上です。

R関連エントリー


「Rの検索関数」まとめ
http://sapporomkt.blogspot.jp/2017/07/r.html

RESASの不動産取引データでheatmapを作ってみた。
http://sapporomkt.blogspot.jp/2017/05/resasheatmap.html 

RESASデータを「IBM Data Scientist Workbench」でゴニョゴニョしてみた。
http://sapporomkt.blogspot.jp/2017/05/resasibm-data-scientist-workbench.html

ggplot2でクロス集計的に複数グラフをプロットする方法
http://sapporomkt.blogspot.jp/2016/11/ggplot2.html

R開発環境が無料で簡単導入!「Data Scientist Workbench」を使ってみた。

http://sapporomkt.blogspot.jp/2016/10/rdata-scientist-workbench.html

(Bluemix)知ってた?dashDBってTwitter分析にもツカエルのさ(+ちょっとだけコンサドーレ調べ)
http://sapporomkt.blogspot.jp/2016/07/bluemixdashdbtwitter.html

RMeCabで形容詞の形態素解析をやってみた。
http://sapporomkt.blogspot.jp/2016/07/rmecab.html

【R言語】今年は、leafletでマップをグリグリしたい。
http://sapporomkt.blogspot.jp/2016/01/rleaflet.html

(R言語)当ブログアクセス者の興味関心事をコレポン(コレスポンデンス)した。
http://sapporomkt.blogspot.jp/2015/12/r.htm

2017年8月4日金曜日

Watson AnalyticsとMeCabで「老人と海」を軽く可視化してみた。

趣味とお仕事のお勉強を兼ねて、形態素解析エンジンの「MeCab」を触っているのですが、「集計結果の可視化にWatsonAnalytics使えば楽かも?」と思って試したらその通りだったので軽くご紹介します。

最終的には、こんな可視化をします。


実施環境については、以下の通りです。
・MacBook Air(CPU:1.6GHz,Memory 8GB)
・macOS Sierra ver10.12.3
・RStudio ver 1.0.136
・分析データ:「青空文庫」よりヘミングウェイの「老人と海」の全文を取得

※本エントリーは、私、小田一弥が一個人として勉強を兼ねて記載したものです。私の勤務先である日本アイ・ビー・エム株式会社の見解・見識ではない、個人としての記載内容としてご覧ください。

まずは、MeCabで形態素解析。


まずは、形態素解析エンジンである「MeCab」を使って、頻度表を出力します。
環境構築がお済みではない方は下記をご参照ください。

RおよびRStudioのインストール方法(Mac/Windows)
http://qiita.com/daifuku_mochi2/items/ad0b398e6affd0688c97

RとLinuxと...
http://rmecab.jp/wiki/index.php?RMeCab



「形態素解析って難しそう・・・」と感じるかもしれませんが、以下のソースコードをRStudioコンソールにコピペするだけで出来ちゃいますのでご安心を。


# 読み込みファイルがあるディレクトリを指定します
# コード入力よりもRStudioメニューの「Session→Set Working Directory」の方が楽です。
setwd("~/blog/170722_roujin_MeCab/roujin")

# RMeCabパッケージを呼び出しておきます
library(RMeCab)

# 形態素解析を行い、タームと品詞別の頻度表を得ます。たったこれだけ!
roujin_count <- RMeCabFreq("roujintoumi.txt")

# RMeCabFreqで集計した結果を確認します。
View(roujin_count)


RStudio上に下記のようなビューワー形式で表示されます。
左から「Term(形態素)」「品詞分類1」「品詞分類2」「頻度数」となります。


一応、データ構造も確認してみますが、RStudio上でこのデータを可視化するには、ggplot2などを使ってゴニョゴニョするわけですが・・・うーん、ちょっと面倒臭いので楽したいですね。

今回は他のツールで可視化するために、一旦、RStudioから「roujin_count」データを出力します。

# str関数でデータ構造を確認します。
str(roujin_count)
'data.frame':    3214 obs. of  4 variables:
 $ Term : chr  "あの" "いかん" "いかんせん" "いくら" ...
 $ Info1: chr  "フィラー" "副詞" "副詞" "副詞" ...
 $ Info2: chr  "*" "一般" "一般" "一般" ...
 $ Freq : int  1 2 1 1 1 1 2 4 6 1 ...

# write.csv関数を使って集計データをCSV形式で出力します。
# 「quote=FALSE」は、データに引用符の「"」を付けないオプションです。
# 「row.names=FALSE」は、行番号を付けないオプションです。
# 「fileEncoding="CP932" 」は、「Shift-JIS」で出力するオプションとなります。

 write.csv(roujin_count,"roujin_count.csv",quote=FALSE,row.names=FALSE,fileEncoding = "CP932")



可視化は「Watson Analytics」にお任せ。


 ここからは、IBMが提供するクラウド上でビックデータ分析が可能な「Watson Analytics」を用います。

 なお、この時点では何となくはあるのですが、具体的に「こんな可視化をしよう」といったイメージ無しで作業を進めています。 事前にしっかりとしたアウトプットイメージを持ちながら作業を進めることは重要ですが、「とりあえずデータの概観を見たい」といった局面もあると思います。「Watson Analytics」には、データの特性を自動的に解析し、「もしかして、こんな風に見たいと思ってない?」といったオプションを先に提示してくれる機能が実装されています。

以下にその機能の一部と操作手順をご紹介します。
「Watson Analytics」の利用登録がお済みではない方は、下記URLからご登録ください(無料です)

IBM Watson Analytics
https://www.ibm.com/watson-analytics


1.まずは集計データのアップロード
「Watson Analytics」にログインしましたら、画面中央の「Add」ボタンから「Or add your data」→「Drop file or browse」を選択してください。


macOSだとFinder、Windowsだとexplorerが立ち上がりますので、読み込ませたい集計ファイル(この場合、「roujin_count」)を選択してください。


たったこれだけで「Watson Analytics」上に集計ファイルがアップロードされます。


2.可視化の実施
アップロードされた「DATA SET CSV」パネルをクリックすると、「Watson Analytics」が下記のようなオプションを自動提示します。

とりあえず、品詞分類1レベルで大まかなボリューム感を見たいので、一番右を選択します。


品詞別のボリューム感がわかるグラフが瞬時に表示されました。
同じ作家の異なる作品をこのグラフで出力して円の大きさを比較しても面白そうですね。


他の形式でも確認して見たいので、画面右側の「>」マークを押してください。
今後は「Watson Analytics」からオススメされた一番左のグラフを選択してみましょう。


先ほどと同じ「品詞分類1」のグラフが表示されました。X軸は「品詞分類1名称」、Y軸は「品詞分類1別の頻度」となります。
降順でソートしたいので、X軸ラベル「info」を右クリック→「Sort→Descending by value」を選択してください。


簡単に降順ソートができました。
せっかくなので、Term(形態素)別の頻度も見たいので、画面左下の「applied filter」 を選択してください。


「Add a filter」から「Freq」を選ぶと下限値と上限値を入力する欄が表示されるので、バーを動かすか値を直接入力してください。



 「Info1」の 部分をクリックし、「Term」を選択すると下記のように頻度数30以上の全Termが表示されます。


これでは分かりづらいので、もう一度「Add filter」を選択し、「Info1」で「名詞」をフィルターの追加条件として設定すると下記のような名詞頻度数のグラフが表示されます。
※Term数が多すぎたので、頻度の下限値を50に修正しています。


原作を読まれた方は「あー、なるほどね」な結果になったのではないでしょうか。
今回のご紹介は以上です。

このように「Watson Analytics」を用いると、通常の集計ファイルで必要な各変数の形式設定などせずに直ぐに可視化作業に移ることが可能です。
データサイズの大きいファイルでなければ、無料で使えますので、ご興味ありましたら是非お試しください。

Watson関連エントリー


Watson Explorerでディズニーの人気作品をテキストマイニング
http://sapporomkt.blogspot.jp/2017/04/watson-explorer.html

 Watson Explorer Content Analytics(WCA)の紹介動画を紹介したいんです。
http://sapporomkt.blogspot.jp/2017/03/watson-explorer-content-analyticswca.html

分析の常識が変わる?「Watson Analytics」すげー!!
http://sapporomkt.blogspot.jp/2016/01/watson-analytics.html 

「データ・ビジュアライゼーション」でも便利な「Watson Analytics」。
http://sapporomkt.blogspot.jp/2016/01/watson-analytics_13.html

 いま話題のIBM「Bluemix(ワトソンくん)」が「老人と海」をサマったら。
http://sapporomkt.blogspot.jp/2015/11/ibmbluemix.html

「Watson」先生に、AdSenseビンボーの理由を聞いてみた・・・
http://sapporomkt.blogspot.jp/2016/01/watsonadsense.html