RMeCabを使って、タダで留学できると話題のトビタテ留学JAPANの学生が投稿している留学ブログサイトのデータをインポートしてテキスト分析してみた トップ２０編

タダで留学できると話題の[トビタテ留学JAPAN](http://hidetaka.hateblo.jp/entry/2015/06/26/%E2%97%8B%E2%97%8B%E3%81%A7%E3%82%82%E2%97%8B%E2%97%8B%E3%81%AB%E3%81%AA%E3%82%8C%E3%82%8B%E6%99%82%E4%BB%A3%EF%BC%81_%E3%82%B7%E3%83%AA%E3%82%B3%E3%83%B3%E3%83%90%E3%83%AC%E3%83%BC%E3%81%A8%E3%83%88)という留学奨学金プログラムはご存知でしょうか？　

ぼくは、そんなトビタテ留学JAPANの学生が留学体験記を投稿している[トビタテジャーナル](http://tobitate-student.com/)というサイトの運営・開発をしています。サイトのデータベースから投稿されたテキストを分析してみると、留学生はどんな単語をよく使っているのかという質問に答えたり、分類ごとにクラスタリングしていくことができそうです。自分でブログやメディアなどを運営している人はそういうことが気になって分析してみたいと思ったことは1度や2度ではないのではないでしょうか？

ただでさえテキスト・データを加工したり、分析するのは手間がかかる作業ですが、特に日本語になると、英語などの言語と違い、単語と単語の間にスペースがないので、トークナイズ（単語ごとに分ける）するのがさらに難しいです。ただ、知ってる人も多いかと思いますが、オープンソースで、MeCabという、Google 日本語入力開発者の一人である工藤拓さんによって開発されたライブラリを使うと日本語をトークナイズするのが簡単にできます。さらに都合のいいことに、RでMeCabが使えるように、石田基広さんが作られたRMeCabというのがあるので、それを使うと簡単にRで、つまりはExploratoryの中でテキスト・データをトークナイズしていくことができます。

今日は、そのMeCabのインストール、さらにそれをExploratoryの中で使うためのセットアップ、そして軽く日本語データに対するテキスト分析の方を順を追って説明していきたいと思います。

##Mecabと辞書をインストール

以下にMacでのインストールを説明しますが、Windowsの方は、[こちら](http://rmecab.jp/wiki/index.php?RMeCab)を参照してください。

環境

- MacOX 10.11.6(ElCapitan)
- Homebrewがインストールされていること。Homebrewを持ってない方は、[こちら](http://brew.sh/index_ja.html)からHomebrewをダウンロードしてください。

MacでMecabを使うためには、Mecab本体と辞書の２つをインストールする必要があります。

brew install mecabで、Mecab本体をインストールします。

```
brew install mecab
```
次に、brew install mecab-ipadicで、Mecabで利用する辞書をインストールします。

```
brew install mecab-ipadic
```
次のように表示されれば、インストールは成功しています。

![brew-install-mecab.png](https://qiita-image-store.s3.amazonaws.com/0/91522/3e0cb155-fa28-52a8-598b-d0437fd86d6c.png)




##RMeCabをインストールする

次に、RからMeCabが使えるようRMeCabをインストールしましょう。こちらもMacでの例を説明しますが、Windowsの方は[こちら](http://handsrecs2nd.seesaa.net/article/140090025.html)を参照してください。


ターミナルから次のコマンドを打ち込んで下さい。

```
R -e "install.packages(\"RMeCab\", repos = \"http://rmecab.jp/R\")"
```

次のように表示されれば、インストールは成功しています。

![install.packagesRMeCab.png](https://qiita-image-store.s3.amazonaws.com/0/91522/0651280a-6f43-4966-e440-a8237139aecd.png)



##RMeCabにある機能を、Exploratoryで使いやすくするように、関数を定義する

RMeCabのトークナイズの関数をExploratoryの仕組みの中で使いやすくするように、こちらに関数を定義しましたので、下記のコードを[こちら](https://gist.githubusercontent.com/double-y/1861e9517a73167586471ec088ac0951/raw/01d5d92a6020a535d6e13f8e252ae447c42f1eed/mecab_tokenize)からダウンロードしてください。


```
mecab_tokenize <- function(tbl, text_col, .drop=TRUE){
 loadNamespace("RMeCab")
 loadNamespace("tidyr")
 text_cname <- as.character(substitute(text_col))
 text <- tbl[[text_cname]]
 tokenize <- function(text){
   tokens <- unlist(RMeCab::RMeCabC(text))
   data.frame(.token = tokens, .pos = names(tokens))
 }
 if(.drop){
   tbl[[text_cname]] <- lapply(text, tokenize)
   token_col <- text_cname
 } else {
   tbl$.token <- lapply(text, tokenize)
   token_col <- ".token"
 }
 tidyr::unnest_(tbl, token_col)
}

```

次に、矢印の部分を押して、R packages/Scriptsを選んで下さい。

![add-rscript-packages.png](https://qiita-image-store.s3.amazonaws.com/0/91522/64ec13ed-744b-2b15-0981-061be71c57da.png)



矢印のAddボタンを選んで下さい。

![add-rscript.png](https://qiita-image-store.s3.amazonaws.com/0/91522/a3f2ed3e-ae9b-88ac-b97b-e34f82da745a.png)



さっき関数を定義したファイルを選んで下さい。

![mecab-desktop.png](https://qiita-image-store.s3.amazonaws.com/0/91522/8e9fd4c2-7c90-3220-4c91-a22a31d8105a.png)


しっかり保存されていますね。

![mecab-exp.png](https://qiita-image-store.s3.amazonaws.com/0/91522/7256e87d-84b5-4061-a061-734b45575529.png)


##Wordpressの投稿データをCSVエクスポートする

管理者画面から、投稿データをCSVエクスポートします。

![csv-export.png](https://qiita-image-store.s3.amazonaws.com/0/91522/b1270710-cb08-21b8-8d9f-453fead0198d.png)


このCSVをExploratoryにインポートします。

![csv-export-exploratory.png](https://qiita-image-store.s3.amazonaws.com/0/91522/9695dafe-98c6-51b4-c1c1-63fc71e412b5.png)


これで、テキスト分析をしていくための土台が整いました。

WordpressでCSVエクスポートができない方は、[こちら](https://wordpress.org/plugins/wp-csv-exporter/)からWP CSV Exporterというプラグインをダウンロードしてください。

##テキスト分析をする

###トークナイズする

![token-rmeacb.png](https://qiita-image-store.s3.amazonaws.com/0/91522/323ab5a0-77b8-4cfb-6eb7-3fb63492f5ac.png)


上記のタイトルの文章を先ほど定義した関数を使って、トークンナイズしましょう。

`mecab_tokenize(text_col=post_title)`

![mecab_tokenize.png](https://qiita-image-store.s3.amazonaws.com/0/91522/b8882643-27c2-9b59-9041-3e171b2b40fe.png)


これで、先ほどまで文章だったpost_title列が単語毎に分かれましたね。

###stopwordを取り除く

次に、今のままだと、矢印のように、日本語には、意味のない不要な単語が多く含まれています。これらの単語をstopwordsと呼んでいます。

![stopwords-rmecab.png](https://qiita-image-store.s3.amazonaws.com/0/91522/684f3711-19fd-19a8-457f-4209bafabeea.png)


意味のあるテキスト分析をするためには、これらの単語を取り除く必要があります。そのために、[こちら](http://svn.sourceforge.jp/svnroot/slothlib/CSharp/Version1/SlothLib/NLP/Filter/StopWord/word/Japanese.txt)に日本語の不要な単語リストがまとまったファイルがあります。ダウンロードして拡張子をcsvに変えてExploratoryにインポートしてください。その際は、「あそこ」がカラム名にならないように、First Row as HeaderをNoに変えてください。

![stopwords-rmecablist.png](https://qiita-image-store.s3.amazonaws.com/0/91522/82826860-6c3a-d4be-78b6-c1f4dd17a77f.png)


一度こちらのデータをJapaneseという名のデータ・フレームにしてインポートしましたら、次に、anti_joinという関数を使って、このJapaneseデータ・フレームに入っていないデータだけを残すというオペレーションを行います。

`anti_join(Japanese, by=c( ".token" ="X1"))`

![japaneselist.png](https://qiita-image-store.s3.amazonaws.com/0/91522/2a5996e4-082c-f4b9-3c31-90487280b6fe.png)


不要な単語が取り除かれたのが確認できました。

###さらに不要なデータを取り除く

次に、データを見ていくと記号がいくつか入っていることに気が付きます。よく考えてみると、助詞や助動詞や副詞や接頭詞なども不要であることに気が付きます。なので、名詞と動詞だけに絞ってフィルタリングしていきましょう。

![mark-stop.png](https://qiita-image-store.s3.amazonaws.com/0/91522/388810db-ad68-0ec0-e679-7af8c502f5b6.png)


`filter(.pos %in% c("動詞","名詞"))`

![delte-sign.png](https://qiita-image-store.s3.amazonaws.com/0/91522/3360597f-0cf3-38f7-4725-2a8015c939a3.png)


次に、字数が1文字以下のテキストデータも意味がないので取り除きましょう。

`filter(str_length(.token)>1)`

![dstr_length.png](https://qiita-image-store.s3.amazonaws.com/0/91522/63962049-29f9-36a1-9c98-fedad09d644f.png)


これで不要な単語はほとんど取り除くことができました。


###トップ２０を計算する

次に、最もよく頻出している意味のある単語トップ２０を計算して出したいと思います。それぞれの単語の個数を数えるために、まず、.token列をグルーピングします。

`group_by(.token)`

![group_bymecab.png](https://qiita-image-store.s3.amazonaws.com/0/91522/2e368d3a-54f6-baa5-a863-ed8ff7221391.png)


次に、.token列をsummarizeしてそれぞれの単語の個数を数えましょう。

`summarize(.token_n = n())`

![summarize_mecab.png](https://qiita-image-store.s3.amazonaws.com/0/91522/4fbe0448-47eb-478d-7d4c-56401600f79a.png)


次に、top_n関数を使ってランキングを計算します。

.token_n列のヘッダーをクリックして、Top Nを選んで下さい。

![topn-rmecab.png](https://qiita-image-store.s3.amazonaws.com/0/91522/7615c3e5-20b3-0033-58e9-fb9a6b5c92f7.png)


すると、コマンドが自動生成されます。Runボタンを押してください。

![topn-rmecab2.png](https://qiita-image-store.s3.amazonaws.com/0/91522/9fb24ecb-f685-28c2-d4ba-d635a60b15e1.png)


これで、最もよく頻出している意味のある単語トップ２０を計算することができました。

##ビジュアライズする

次に、データを直観的に理解するためにVizタブに行って、X軸に.tokenをY軸に.token_nをあてはめてビジュアライズしてみましょう。

![topn-viz.png](https://qiita-image-store.s3.amazonaws.com/0/91522/d0e20534-f828-e45a-bf4f-ad952525715f.png)



次回は、クラスタリングなどまでしてみたいと思います。

##興味を持っていただいた方、実際に触ってみたい方へ

Exploratoryは[こちら](https://exploratory.io/
)からβ版の登録ができます。こちらがinviteを完了すると、ダウンロードできるようになります。


ExploratoryのTwitterアカウントは、[こちら](https://twitter.com/ExploratoryData
)です。

Exploratoryの日本ユーザー向けの[Facebookグループ](https://www.facebook.com/groups/1087437647994959/members/
)を作ったのでよろしかったらどうぞ

分析してほしいデータがある方や、データ分析のご依頼はhidetaka.koh@gmail.comまでどうぞ