Python
Twitter
mecab
自然言語処理
PythonDay 22

PythonとMecabとCaboChaでtweet分析

More than 3 years have passed since last update.


はじめに

この記事はPython Advent Calendar 2014 - Qiita 22日目の記事です。

先週、会社でやっているAdvent CalendarでBigQuery × Perfume × tweet分析というブログを書きました。

そこでは、12/12(金)〜12/18(木)の1周間で収集したPerfumeに関するTweetをBigQueryにどんとあげて分析するということをやりました。

今回はその発展として、MecabとCaboChaを使った自然言語処理でtweet分析をやっていこうと思いますm(_ _)m


参考にしたもの

せっかくだから俺は衆院選挙のツイートを調べるぜ - Qiita

https://github.com/mima3/stream_twitter

参考というより、やっていることはほとんどmima_itaさんの受け売りです…


環境

・Mac OSX 10.9.5

・Python 2.7.8


Twiiterデータ収集

今回はmentionというサービスを利用しました。

mentionでは管理画面で設定したキーワードで、SNSからお手軽にデータを引っ張ってきてくれます。

ここで取得したデータを管理画面からcsvエクスポートして、準備OK。

今回指定した条件は以下のような感じです。

検索キーワード:Perfume || prfm || perfume_um

(prfmとperfume_umはPerfumeに関する投稿で用いるハッシュタグです)

除外キーワード:RT

対象SNS:Twitter 言語:日本語

期間:12/12(金)〜12/18(木)


MecabとCabochaのインストール

Mecab:http://salinger.github.io/blog/2013/01/17/1/

Cabocha:http://qiita.com/ShingoOikawa/items/ef4ac2929ec19599a3cf

こちらの記事に従っていけば、問題ありませんでした(`・ω・´)ゞ


収集、解析に使用したコード

https://github.com/mima3/stream_twitter

ただ、こちらではStreaming APIを利用してTwitterデータを収集しそれをDBに格納しています。

今回はそれとは違って、mentionで収集してcsvで吐き出したものをDBに格納する必要があります。

なので、以下の様なソースでどかっとSQLiteに格納してください。


create_database.py

#!/usr/bin/python

# -*- coding: utf-8 -*-
import sqlite3
import csv

if __name__ == '__main__':
con = sqlite3.connect("twitter_stream.sqlite")

c = con.cursor()
# Create table
c.execute('''CREATE TABLE "twitte" ("id" INTEGER NOT NULL PRIMARY KEY, "createAt" DATETIME NOT NULL, "idStr" VARCHAR(255) NOT NULL, "contents" VARCHAR(255) NOT NULL);
'''
)
c.execute('''CREATE INDEX "twitte_createAt" ON "twitte" ("createAt");''')
c.execute('''CREATE INDEX "twitte_idStr" ON "twitte" ("idStr")''')

# Insert data
i = 0
data = []
reader = csv.reader(open("./perfume_tweet.csv"))
for row in reader:
id = i+1
createAt = row[4]
idStr = unicode(row[0],'utf-8')
contents = unicode(row[1],'utf-8')
t = (id,createAt,idStr,contents)
data.append(t)
i += 1
con.executemany(u"insert into twitte values(?,?,?,?)",data)

# Save (commit) the changes
con.commit()

# We can also close the cursor if we are done with it
con.close()


これで無事に、カレントディレクトリにtwitter_stream.sqliteが作成できました。


時間別ヒストグラム

ここでは12/17(水)をピックアップしてみます。1日のうちでの時間別のtweet数を集計していきます。

 python twitter_db_hist.py "2014/12/16 15:00" "2014/12/17 15:00" 3600

※Twitterから取得できる時刻がUTCのため、日本時間だと9時間ずれています。

figure_1.png

これを見ると、以下のようなことが分析できます。

・05:00~06:00の時間帯が一番少ない。02:00~06:00で軒並み低いので、みんなこの時間は寝ているんでしょう。

・23:00~24:00の時間帯が一番多い。18:00~24:00は総じてtweet数が多いが、1日の終わりの23:00~24:00が最も高くなっている。Perfumeに関するtweetを行ってから寝ている人が多い?

ということが、雑ですがなんとなくわかりますね。


頻出単語抽出

次は、Mecabを用いた形態素解析を行います。

ここでは、収集した一週間分のtweetをふるいにかけていきます。

python twitter_db_mecab.py "2014/12/11 15:00" "2014/12/17 15:00" > mecab.txt

以下、top100のリストです。

word
count

Perfume
10935

prfm
2739

perfume
2136

フォロー
1553


1478

ちる
1462

のる
1448

定期
1410


1347

好き
1256

動画
1218

ちゃん
1204

パフューム
1056


996

YouTube
945

相互
889


850

まとめ
837

sougofollow
775

ライブ
737

um
726

てる
568

タメ
555

www
552

速報
552

男性
551

大本
544

彩乃
544


543

結婚
540

エン
537

激怒
535

一般
534


493

入札
480


433

ない
431


420


419

ヤフオク
413


408

キミ
401

現在
398

価格
377


374

日時
374


364

みる
356

Cling
350


345

クロ
342

終了
341


341

パフュクラ
335


332

聴く
331

of
330

もの
324

お願い
318

yauc
308

DVD
308

限定
307


300

チケット
295

大好き
285


282

love
276

初回
271

ゆか
270

ナチュラル
263


263

:-,
262


261

サカナクション
254

くださる
250

!:
250

もも
247

希望
240

nowplaying
240

Music
239

FC
237


230

仮面
229

チャウダー
228


219


217

くる
217


217

林檎
214

Player
213

れる
210

セカオワ
209

かし
207

mp
206


205

踊る
201

爆音
201

そう
201

椎名
200


200

上位の単語はBotによるtweetに含まれているものなので、有意なデータではないです。

感覚値として、tweet総数500以下から分析するにあたって意味のある単語が現れているようです。

今回のデータ集計期間は、12/20(土)に開催されたPefume出演の『仮面チャウダー ~YAJIO CRAZY~ チャウ大ユニバーシティインターナショナルコラーゲンハイスクール』というイベントを目前に控えていたので、それに関するtweetが多くありました。

イベント名関連:「仮面」「チャウダー」

チケット情報関連:「入札」「ヤフオク」「価格」「yauc」「チケット」「枚」

(yaucって馴染みなかったんですけど、ヤフオクのハッシュタグらしいです)

あとは、ざっと以下の様な分析ができました。

Perfumeの曲名関連:「Cling」(Cling Cling)「ナチュラル」「恋」(ナチュラルに恋して)

歌手関連:「嵐」「もも」「クロ」「サカナクション」「セカオワ」「林檎」「椎名」

Perfume Music Player関連:「聴く」「Music」「Player」「mp」

※Perfume Music Playerとは、Perfumeのスマートフォン向けオフィシャルアプリです。

このアプリからは現在聞いている曲を以下のようにtweetできます。

「Perfume Music Playerで252,533人目にCling Clingを聴いています。 #prfm_mp http://perfume-app.com/


係り受け解析

次に、文節の係り受けの関係をCaboChaを用いて集計してみます。

ここでも一週間分のtweetを解析しています。

python twitter_db_cabocha.py "2014/12/11 15:00" "2014/12/17 15:00" > cabocha.txt

同じようにtop100を見ていきましょう。

phrase1
phrase2
count

Perfume
のる
582

ライブ中
大激怒wwwhttp://t
535

のる
大激怒wwwhttp://t
535

●●で
大激怒wwwhttp://t
535

~ちゃん
ライブ中
535

大本彩乃一般男性
結婚
532


大本彩乃一般男性
532

PerfumeMusicPlayer
聴く
138

RT#パフュクラさん
繋がる
137

ない
http://t
131

くう
http://t
127

斎藤さん
http://t
127


斎藤さん
127

繋がる
#パフュクラhttp://t

125

___VAMPS
___ワンオク
97

クロ
___ラルク
97

___glee
___UVERworld
97

___UVERworld
___VAMPS
97

___もも
クロ
97

___Bz
___ワンオク
97

___ラルク
___Bz
97

椎名林檎GLAY
___glee
93

『[作業用BGM]perfumemix』
http://t
91

スキ
ける
90

#Perfume#Perfume好き
繋がる
89

【拡散希望】●爆音イベントスケジュール●詳細___http
://t
89

ニノ
むちゃぶり
87

『ひみつの
嵐ちゃん
86

ただただ
ける
86

ラジオ
ける
86

もの
かりる
86

『電撃婚~perfumeoflove~___第1話』
http://t
84

~ちゃん
ける
83

ステ
___20131115』http://t

77

___MUSIC
STATION
77

STATION
ステ
77

FC2動画:
ける
75

___Perfume
___ワンオク
74

ナチュラル
恋しい
68

ハマオカモト
(OKAMOTO'S)
63

好き
もの
62

一曲
投票する
60

今年
一曲
60

ワード
『Perfume』
58


ー#prfm#perfume_um
56


~ちゃん
55

ウラ話Talk
http://t
50

12/20(土)大阪城ホール
チケット
50

2008-4-5GAMEリリース
ウラ話Talk
50

【3姫の
ウラ話Talk
50

愉快
ウラ話Talk
50

『PerfumeTalk
2008-4-5GAMEリリース
50

PerfumeMusicPlayer
聞く
48

かしゆか
お知らせする
47

~ちゃん
お知らせする
47

Perfume
~ちゃん
47

好き

45

のる
お知らせする
45

ナチュラル
愛す
45


つなぐ
43

セカオワ
ももクロ
43

よろしく
お願いする
43

もの
ある
43

好き

41

Perfume
かしゆか
40

メンバー
描く
38


チェックhttp://t

36

すぐ
チェックhttp://t

36

Perfume(パフューム)
チケット
36

合う

36

co/
1IoZn9U583
35

ももクロ
Perfume
35


なる
34

Perfume
GLAY
33

co/
7CRGN21Brf)
33


フォローお願い
33


時代
33

___http
://t
32

(#Perfume
くう
32

ゲス
極み乙女
32

H
___GLAY\720
31

のる
#prfm
31

/
三代目JSoulBrothers
31

かりる
___GLAY\720
31

三代目JSoulBrothers
___GLAY\720
31

(ワッツイン)
2015年
31

二人
いる
31

2015年
01月号[雑誌]http://t

31

___TEAM
H
31

気軽
フォローする
30


スポーツ
29

12/20(土)大阪城ホール詳細
こちら
29

キミ
メール
28

Perfume
メンバー
28

ワード
『Perfumeコスプレ』
28

描く
☆究極作品☆(>
28

【定価以下】★譲★仮面チャウダーYAJIOCRAZYチャウ大ユニバーシティインターナショナルコラーゲンハイスクール
12/20(土)大阪城ホール
28

合う

28

もの
かる
27

好き
アーティスト
27

ここでも総数500以上の係り受けは、うるさいBotなのでスルーしましょう。

ちなみに、そのBotは以下の2つのtweetとなってます。

Perfume のっち あ~ちゃん ライブ中に●●で大激怒www http://t.co/4Q0fmhel2l <エンタメ速報>

Perfume 「のっち」こと大本彩乃 一般男性と結婚か? http://t.co/k6cFhLZwnZ

係り受けの表はなんとなく眺めていてもよくわからないので、メンバー3人の名前でgrepしてみました。

係り受けのPhraseのうちで、「あ〜ちゃん」「かしゆか」「のっち」が含まれているものを以下に表しています。

(※文節がきれいに区切れているもののみ抽出)

phrase1
phrase2
count

かしゆか

2

かしゆか

2

かしゆか
揺れる
2

かしゆか
可愛い
1

かしゆか
かわいい
1

かしゆか

1

かしゆか
スカート
1

神々しい
かしゆか
1

かしゆか
左手
1

かしゆか

1

のっち
キレイ
2

あ〜ちゃん
天使
2

あ〜ちゃん
ワンピース・つけ襟
1

あ〜ちゃんの
お団子
1

あ〜ちゃんの
笑顔
1

このように、係り受け解析ではかしゆかに関するものが多かったです!

この係り受けを眺めると、3人の特徴がそれぞれ現れていて素晴らしいですね…


最後に

以上、mima_itaさんの力を多いに借りながら、Perfumeに関するtweetの解析を行ってきました。

振り返ってみると、今回行った条件では解析に不必要なbottweetを大量に収集してしまっていたことが残念です…

データ分析やPythonのスキルはまだまだなので、来週発売のこの本を買って勉強しようと思います(`・ω・´)ゞ

Python言語によるプログラミングイントロダクション: 世界標準MIT教科書