とはいえ、、はい。今日はクリスマスです。 光栄です。ということでやってみました。Twitterを用いたRによるクリスマス分析です。
まずはTwitterからテキストを集めます。こちらはpython-twitterを利用してPythonで取得しました。
#!/usr/bin/python
# -*- coding: utf8 -*-
import twitter, urllib2, sys
consumer_key = "**********"
consumer_secret = "**********"
access_token_key = "**********"
access_token_secret = "**********"
api = twitter.Api(consumer_key, consumer_secret, access_token_key, access_token_secret)
query = u'クリスマス'
query = urllib2.quote(query.encode("utf-8"))
results = api.GetSearch(query, page=1, show_user="false", result_type='recent', per_page=100)
for res in results:
mod = res.text.encode('utf-8')
print mod
これをcronで回してツイートを 1000件取得しました。ちなみに上記の例はシェルから実行してファイルに書き出しているので、そのまま、ファイルに書き出したい場合は変更してください。上記のコードはSearchAPIを利用していますが、身のまわりのクリスマス実態を把握する場合はタイムライン等から引っ張るとおもしろいかも知れません。
次に取得したテキストから不要な文字を抜き取ります。一度このまま行こうかと思いましたが、顔文字だらけになりました。笑
vimを利用して顔文字を消去し(:%s/(.\{-})//g)、適当に以下のコードを実行しました。
#!/bin/bash sed -ie 's/http:\/\/[^ ]* //g' merge.txt sed -ie 's/http:\/\/[^ ]*$//' merge.txt sed -ie 's/([^)]*)//' merge.txt sed -ie 's/!//g' merge.txt sed -ie 's/-//g' merge.txt sed -ie 's/\.//g' merge.txt
この辺りはかなり適当なので、近々しっかりとまとめようかと思ったり。。。クリスマスってことで多めに見てください笑 あっ、ちなみに顔文字だけvimで消去したのもsedで動かずググるのがめんどかっただけなので、ご教授頂ければと思います。
ここからRMeCabを利用してテキストマイニングを行います。取得したファイルをsource.txtとし、カレントディレクトリに保存してあるとします。
まず、重要語を選出します。
data <- RMeCabFreq('source.txt')
head(data)
Term Info1 Info2 Freq
1 あ フィラー * 14
2 あの フィラー * 1
3 あー フィラー * 8
4 え フィラー * 11
5 えー フィラー * 1
6 えーと フィラー * 1
dataは単なるリストなので、頻度の高いものだけを選ぶことが出来ます。
> data1 = data[data$Freq > 20,] > head(data1, n=10) Term Info1 Info2 Freq 151 う 助動詞 * 52 153 ござる 助動詞 * 23 156 た 助動詞 * 407 157 たい 助動詞 * 43 159 だ 助動詞 * 425 162 です 助動詞 * 152 163 ない 助動詞 * 142 169 ます 助動詞 * 172 170 や 助動詞 * 29 178 と 助詞 並立助詞 44
助詞を眺めても仕方がないので名詞・動詞に限定します。
data2 = data[data$Freq > 40 & (data$Info1 == "動詞" | data$Info1 == "名詞"),]
とりあえず出力
data2[order(data2$Freq),] Term Info1 Info2 Freq 710 いる 動詞 非自立 41 717 くる 動詞 非自立 41 747 # 名詞 サ変接続 45 302 いる 動詞 自立 46 3340 笑 名詞 固有名詞 49 3554 日 名詞 接尾 51 3806 の 名詞 非自立 62 381 なる 動詞 自立 64 3484 さん 名詞 接尾 66 3816 ん 名詞 非自立 74 2292 ー 名詞 一般 104 2961 今日 名詞 副詞可能 108 934 プレゼント 名詞 サ変接続 111 837 _ 名詞 サ変接続 117 725 てる 動詞 非自立 126 3052 RT 名詞 固有名詞 146 802 : 名詞 サ変接続 182 352 する 動詞 自立 214 821 @ 名詞 サ変接続 307 1993 クリスマス 名詞 一般 785
少しはマシになってきました!
N-gram解析を行ってみます。
RMeCabパッケージではNgram関数を呼び出すことで簡単にNgram解析が可能です。
bi-gramで頻度が10を越えるものの取得は下記のように行います。
data1 <- data-blogger-escaped-data1="" data-blogger-escaped-ngram="" data-blogger-escaped-req="" data-blogger-escaped-source.txt="" data-blogger-escaped-type="1)">10,]以下の結果は氷山の一角です。
4024 [リア-充] 21 4616 [値段-女] 6 4875 [商品-ブス] 6 5091 [安め-商品] 6 6602 [関係-ない] 6ちなみにこの抽出に悪意はありません。 共起語を抽出するとこんな感じです。
data <- collocate("source.txt", node = "クリスマス", span = 3)
data[order(data$Total),]
略
1159 過ごす 1 11 12 25
1188 食べる 2 4 6 25
269 あ 5 1 6 26
1124 言う 2 2 4 26
512 へ 8 0 8 27
763 何 1 8 9 27
495 ので 3 8 11 28
666 バイト 0 5 5 28
750 今年 10 1 11 28
992 来る 0 4 4 28
1085 終わる 0 10 10 28
553 やる 0 6 6 29
1142 買う 1 5 6 29
1228 ~ 7 6 13 29
626 サンタ 5 0 5 30
926 思う 1 0 1 30
1224 w 2 0 2 30
270 ああ 3 2 5 31
357 こと 3 5 8 32
399 そう 4 0 4 32
538 みんな 11 1 12 32
569 れる 1 1 2 32
616 ケーキ 2 14 16 33
725 一 2 6 8 33
248 ♪ 9 6 15 36
1077 笑 16 3 19 36
1117 行く 1 4 5 36
略
1248 [[MORPHEMS]] 662 585 1247 3881
1249 [[TOKENS]] 3140 2355 5495 19313
最後にネットワーク分析行います。メモリが足らなかったので、ツイートの数は500程度に減らしてしまいました。 コードはこんな感じです。頻度は3以上のものに限定しました。
file <- NgramDF("source.txt", type=1, pos="名詞", N=3)
net <- graph.data.frame(file)
plot=(net, vertex.label=V(net)$name)
以上です。
なんとなく幸せそうな感じが伝わりとてもよかったです。笑 今後はこれを発展させ、イベントやブランド・商品に対してどの単語がどれほど影響しているのかなどを測定していきたいと思います。
また、この場を借りて。。。といっても自分のブログですが、今年お世話になった方皆さん、本当にありがとうございました!多くのことを学び、とても幸せでした。 来年も頑張るのでよろしくお願いします。
Happy Christmas!!