連載
» 2010年09月15日 00時00分 公開

実践! Rで学ぶ統計解析の基礎(5):インターリュード: TwitterとR (2/2)

[柏野雄太,バクフー株式会社]
前のページへ 1|2       

Twitterテキストマイニングの入門の入門

 次にTwitterをネタにしてRで解析したいと思うことは、日々大量に生み出されるtweetの統計解析・テキストマイニングでしょう。ただ、テキストマイニング自体は非常に大きな分野ですから、ここでは紙幅の関係上多くを書くことができません。とはいえ、テキストマイニングの入門の入門までなら可能だと思います。tweetに対して形態素解析を行い、その形態素の数を数えてみましょう。

 テキストマイニングをするためには、何より素材となるtweetを取得する必要があります。今回はTwiiter検索のAPIを利用します。具体的には、twitteRsearchTwitterを利用します。これから行う処理にどんな意味があるかは置いておいて、例えば「素敵」と「ステキ」が含まれているtweetの形態素数の比較をしてみましょう。まずは、tweetを検索して取得します。今回は100個程度の小さいサンプルを利用することにします。

> search1 <- searchTwitter("素敵", n = 100, session)
> search2 <- searchTwitter("ステキ", n = 100, session)
> tweet1 <- sapply(search1, text)
> tweet2 <- sapply(search2, text)
> head(tweet1)
[1] "PLAZAでミントを買って、H&Mでチャームブレスレットとウールハット買った;) お買い物大好き!! 今日素敵な物が沢山あったので、また改めてお買い物しに行きます"
[2] "@pic2a ぴっかさん仕事はやい>///////<素敵!そこに痺れる憧れルゥウウ!!!そして真田主従と、第二衣装の真田ですね!ハヤクカケヨ!"                              
[3] "@abcchatan素敵な風景ありがとう。フォローありがとうございます!フォロー返させていただきました・゚・(ノω;`)・゚・どうぞよろしくお願いします(`・ω・´)  "    
[4] "まだまだ会場は聞きたい雰囲気満々ですが時間切れ終了です。川口先生、古川知事素敵な時間をありがとうございました! #sagahayabusa"                            
[5] "@hanauruotoko ブログ見ました〜。素敵なご活動ですね♪勉強だけじゃなくこういう事って沢山子供時代に経験したりしたいですよね♪"                              
[6] "@nananyan00 昼公演では右側によくいましたね(*^□^*)ジャケットプレイ素敵でした♪"

 「素敵」について最初の結果を表示してみましたが、どうやらうまく取得できているようです。次に、このtweetを形態素解析します。ここではオープンソースの形態素解析エンジンであるMeCabを利用したいと思います。

 そして、RでこのMeCabを利用するためには、RMeCabパッケージを利用するのが一番手っ取り早いでしょう。

 ここで、RMeCabのインストール及びMeCabのインストール方法については、RMeCabの作者である石田基広さんの以下のページを参考にしてください。

 すでに述べたように、RMeCabはCRANからinstall.packages関数でインストールができません。上記のサイトにある情報を利用してバイナリファイルをダウンロードして、ローカルディスクからインストールする必要があります。その際に注意点があります。それは、Rのバージョン、MeCabのバージョンそしてRMeCabのバージョンはかなりキツク結び付いているようなのでバージョンの不整合に気を付けてください、ということです。筆者のR2.10.1、MeCab0.96の環境では、RMeCab0.9xは動作しませんでした。MeCabのバージョンを0.98に上げ、RMeCab0.87にしたら動作するようになりました。ただし、最新版のR2.11.x、MeCab0.98、RMeCab0.91の組み合わせは問題なく動作しました。念のため、旧バージョンのRMeCabをダウンロードできるページは、ここにあります。

 また、RMeCabの関数一覧についても石田さんのページを参照してください。

 以下、MeCabとRMeCabが正常にインストールされたとして話を進めます。twitteRsearchTwitterで取得したtweetを形態素解析をするためには、RMeCabRMeCabDFを利用します。この関数は、データフレームを引数としてテキストを取ったら、形態素解析をしてその結果をリストとして返します。まず、先ほど検索したtweetをデータフレームにし、それをRMeCabDFに入れるところまでを見てみます。

> tdf1 <- data.frame(tweet = tweet1)
> tdf2 <- data.frame(tweet = tweet2)                                                              
> library(RMeCab)
> RMeCabDF(tdf1, 1)
[[1]]
          名詞           助詞           名詞           助詞           動詞           助詞           記号 
       "PLAZA"           "で"       "ミント"           "を"         "買っ"           "て"           "、" 
          名詞           名詞           名詞           名詞           名詞           助詞           名詞 
           "H"            "&"          "amp"            ";"            "M"           "で"     "チャーム" 
          名詞           助詞           名詞           名詞           動詞         助動詞           名詞 
"ブレスレット"           "と"       "ウール"       "ハット"         "買っ"           "た"           ";)" 
        接頭詞           名詞           名詞           名詞           名詞           名詞         助動詞 
          "お"       "買い物"       "大好き"           "!!"         "今日"         "素敵"           "な" 
          名詞           助詞           副詞           動詞         助動詞           助詞           記号 
          "物"           "が"         "沢山"         "あっ"           "た"         "ので"           "、" 
        接続詞           副詞         接頭詞           名詞           動詞           助詞           動詞 
        "また"       "改めて"           "お"       "買い物"           "し"           "に"         "行き" 
        助動詞 
        "ます" 
...

 これを見ると形態素がリストとして返ってきます。その数を数えるには、データフレームの全要素にlength関数をsapply関数で適用すればよいだけです。最後に、そのsummaryを取れば、平均の形態素数や最大要素などを得ることができます。

> summary(sapply(RMeCabDF(tdf1, 1), length))
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   6.00   26.00   36.50   38.96   51.00   72.00 
> summary(sapply(RMeCabDF(tdf2, 1), length))
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   5.00   18.00   29.00   31.64   45.00   89.00 

 これを見ると、最大形態素数のtweetは「ステキ」にあるのですが、「ステキ」より「素敵」の方がメジアンも算術平均も大きくなっています。まあ、一瞬だけの検索で、しかもサンプル数が100程度なので、実際のところはなんとも言えませんが、「ステキ」より「素敵」のほうが丁寧(ていねい)な言葉づかいをしがちなので形態素数が大きくなる傾向があるかもしれない、という仮説を立てても問題はなさそうです。

 以上はTwitterから直接tweetを取得し、形態素解析をすることで、テキストマイニングの入り口までの紹介をしました。ただし、Twitterのテキストマイニングを本格的にやるとすると、今回のtwitteR経由で直接Twitter APIから取得する方法は、残念ながらあまり現実的な解にはなりません。解析を行うテキストがあまりに巨大すぎて、直接読み出すにはTwitter APIの制限がありますし、解析を行うマシンやRで取り扱いができる計算リソースに制限があります。あくまで入門の入門のための題材としてお考えください。

 最後に、Rを利用したテキストマイニングの入門書については日本語で既に良書が存在します。これ以上の入門的解析を行い方は、以下の2つの本を参考にしてください。


次回について

 次回はまた、オープンソースのRを利用して、オープンデータにアクセスし、オープンアイデアの活用したネタをお届けしようと思います。それでは、また2週間後に会いましょう。

Index

インターリュード: TwitterとR

Page1
今回は間奏的にIT寄りの話題を
TwitterとR
friendsとfollowersを可視化する

Page2
Twitterテキストマイニングの入門の入門
次回について


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。