技術メモ(仮)

IT系の話や研究,他のことなど話して行けたらいいな~って感じです.ただいまJavaを学習中

twitterデータを分析してみた その3(tf-idf法編)

概要

前回,Twitterデータ分析のため日付ごとのツイートのWordCountを計算した.fuji-151a.hatenablog.com

しかし,各日付の上位10件の単語が同じであり特徴がでない結果に終わった.
そこで特徴を出すために今回tf-idf法を用いる.その時にちゃんと特徴が出るか見てみる.
モチベーションなどはその1を参照してください.

ゴール

今回は全量ツイートの1%(stream api)を利用し1日のツイートでどのような特徴が出てくるか各曜日で比較する.
特徴を算出するためtf-idf法を利用している.
tf-idf法については過去記事を参照してください.

コード

とりあえず利用したコードを以下のURLに載せる.
https://github.com/fuji-151a/twitter_analysis/blob/master/src/main/scala/fuji_151a/twitter/analysis/TfIdfMain.scala
ちょっとScalaで書いてみたかった.
でも信じられないぐらいvarを使っちゃってる.ごめんなさい.
あとMainに全部ぶっこんでしまったのでそのうちRefactoringを行う(時間あるときに...)
コーディングついては現在勉強中.

結果

解析結果をとりあえず載せてみる.
下記で載せているのは各日付ごとのtf-idf値を降順にし上位20件を表示したものである.
f:id:fuji_151a:20150726214808p:plain
画像で載せているのはテキストで載せたら汚くなったからである.

考察

うーん,想像以上にゴミが多い.idfでゴミは結構消えると思ったけど(前回のtとかhttp://などはちゃんと消えている)意外と消えていない.
たぶんRTによって様々なアカウント名が含まれていたり,ツイート中のURLが毎度バラバラでidfがかからなかったようである.
これを見る限り特徴がわかりにくい.
とりあえずアルファベットをすべて削除して再度見てみる.

アルファベット削除後の結果

f:id:fuji_151a:20150728001234p:plain
だいぶマシな感じになった.

考察

それぞれの単語を含むツイートを見てどんな内容か調べた(これが一番時間がかかった).
そうすると大きく分けて5つジャンルに分けることができた(これは主観です)

それぞれについて説明する.

ハッシュタグ

祭り系のツイートのこと.特定のハッシュタグを使用してつぶやくことで同じ趣味の人達とその話題で盛り上がることをTwitterフェスというらしい.
今回であれば17日の「テニプリテニミュフォロー」これの正式なハッシュタグは「#日曜日突然のテニプリテニミュフォロー祭」らしい.
これはテニスの王子様が好きな人が日曜日にこのハッシュタグをつけて自分で書いった絵をアップしたり,自分の好きなキャラをつぶやいたりする祭りのようである.”日曜日突然の"と書いてあるのでもしかしたらこのハッシュタグは1週間スパンでtf-idfを行うと出てきてしまうのかもしれない...
他にも同日の「メアサ」や20日の「オキアユリョウタロウ」もそれに当たる.

これがなぜ特徴語として出たかというと
ハッシュタグによる祭りは不定期でかつタグ名も基本被ることはすくないためidfが低くなり,祭りであるために多くの人がつぶやくのでtfが高くなったの原因であると思われる.

スパム

言葉通りスパムである.今回の分類した属性の4割はスパムでした.
例えば17日の「ネイルアーティスト」.これを含むツイート本文をみると

ネイルアーティストになるために仕事やめて 専門学校で勉強中! 最初は、貯金をくずして節約してたけど http://t.co/W67Pzm9QPc 副業はじめて、1日数時間で 月30万円。ほんと助かる😍 これで勉強に集中できる

こんな感じ.
他にも「脳腫瘍」や「ラジコンカー」とかもスパムでした.

これが特徴語として出たのはスパムとにかくよくつぶやかれてるのでtfが高い.そして考えてのことなのか毎日はつぶやかないようでありidfもそこまで働かずこれらのワードが抽出されたものと思われる.
ただ今回スパムを見ていて特徴がなんとなく分かった気がします(勘だけど)

間違い探し

間違い探し系.文章で説明するよりツイート見るほうが早い.例えば23日の「竽竽」であればツイート本文は以下のような内容.

《漢字の間違い探し 分かったらRT》竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽
竽竿竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽
竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽竽

どれか一つだけ違う漢字が混ざっていてそれを当てる系のツイート.
他にも21日の「埸埸」や22日の「騒騒」も同じ類である.

これが特徴語としてでてしまったのは同じ文字をたくさん並べるので単純にtfが高い.そして毎度違う問題に変更しているようだからidfも低い(全量中の1%のデータなので一概に言えませんが).これら2つが主原因.
余談だが,これ系のツイートは分かったらRTって書いてあるのにあんまりRTされていないかった...

トレンド

この日に流行ったできごと系.この分析で一番欲しかった単語である.
今回であれば20日の「斉藤佑圭」,22日の「双海亜美」「震度5弱」などなど.
斉藤佑圭」(斉藤佑圭さん)は5/20に同じく特徴語で出ている「草尾」(草尾毅さん)と結婚したというニュースが話題になった.
また,22日の「双海亜美」はアニメのキャラクターのようでその日がちょうど誕生日だったらしい.日本はすごいな.
同日の「震度5弱」は奄美大島近海での地震のことである.あれもびっくりした.
あとは最近流行りの刀剣乱舞で日本刀の話題が多かった(水戸徳川家など).ほとんどの曜日にトレンド系として出てきた.

一時的にバーストするものなのでtfが高くidfが低い.なので特徴語として抽出された.
これらのことから一時的にバーストするトレンドを抽出するにはtf-idf方は適切であることがわかった.たぶん長期的なトレンドには弱い.
トレンド系の特徴語は全体の3割.正直ハッシュタグ系と混ぜっちゃてもいい気がする...

その他

上記のどれにも属さないもの.
今回であれば18日の「ア゙」や20日の「☯」,21日「ユサ」などです.
「ア゙」は”ア゙ア゙ア゙ア゙ア゙ア゙”のようにとりあえずなんか叫んで同じ文字を書きまくるパターン.これは「ユサ」や「ヺヺ」にも言える.
あとは「☯」のようになぜか記号をたくさん書いてるツイートなどになります.
ツイッター独自のどうでもいいつぶやきがこれに該当している気がする.

レア度だけみれば最高値なので抽出された.特徴かと言われるとNoな気がする.
スパムと同じでこういうのはフィルターしたいと考える今日このごろ.
しかしこれは今回の特徴語全体の約1割.ちょっとしたノイズ.

まとめ

今回,2015/5/17 ~ 23までのツイートにtf-idfをかけて各日付の特徴語上位20件を算出した.
算出した特徴語は主に5つのジャンルに分類できた.それぞれ

である.
各特徴語の割合は下図参照.
f:id:fuji_151a:20150729004116p:plain

今回tf-idfを使用してわかったことを箇条書きする.

  • 一時的なトレンドにはtf-idfは有効(地震とか,誕生日など)
  • 長期的に続くトレンドには不向き
  • トレンド系は特徴語の3割ぐらい取れる
  • 特徴語の4割がスパム系
  • 漢字の間違い探しがよく抽出される
  • 曜日ごとの特徴が出るわけではない
  • 大量に非公式RTされているが自分のつぶやきを入れないものはスパムの可能性が高い
  • 大量に非公式RTされていてツイート内のshort urlが毎度違うものはスパムの可能性が高い
  • 定期的に「〇〇にハマっている」などつぶやくツイートはスパムの可能性が高い(〇〇は日付ごとに変わる)

こんな感じである.後半のスパムについては主観なので当てにしないでください.

今後の課題

今回,少しは特徴(一時的なトレンド)を出すことができた.
だけど自分が出したかったものについてはまだ少し遠い.
例えば5/17日あった大阪の住民投票などを私は特徴語として抽出したかった.だけどこれは長期的な話題となっているためtf-idfでは抽出できなかった.
もしかしたらidfではフィルターが強すぎるのかもしれない.
今後はこのような大衆向け的なトレンドを出せればいいなと思う.

あとはスパムと間違い探し系とその他は今回の作業ではノイズとなるのでできればフィルターしていきたい.
特にスパムをフィルターできたら4割分なにか別の特徴語で埋まるはずなので先にスパム退治をやってもいいかもしれない.

以上でtf-idf編は終わりです.
なにか指摘やアドバイス,感想とかいただけると幸いです.