読者です 読者をやめる 読者になる 読者になる

Rを通じて統計学を学ぶ備忘録ブログ

SPSSからRに移行したい私のような人向けのR解説ブログ兼学習用備忘録。

テキストマイニングはじめました〜その11〜

テキストマイニング R

今回はTwitterとRを連携させて、テキストマイニングを実行していきます。Twitterはリアルタイムで「言葉」が集まってくるメディアなので、テキストマイニングを行えば、「今がわかる!!!!!」かもしれないですね。例えば、NHKの夜のニュース番組でも「つぶやきビックデータ」として、Twiterが解析され、話題になっている言葉を紹介していましたね。では、今回の目標は以下のとおりです。

TwitterとRを連携させて、Twitterテキストマイニングをする。

もはや誰も気にしていないと思いますが、今回のフォントは「Pico」です。このフォントはTwitterのアプリとかでよく使われているフォントです。大文字がないので、そこはWP DOMINOフォントを使ったり、違うフォントを使っています。

f:id:teruaki-sugiura:20160626102849p:plain

RでTwitterを使うためには、RとTwitterを連携させる必要があります。まず、TwitterAPIを取得する必要があります。そもそもAPIってなんやねん?という方は以下を参照ください。

APIとは、アプリケーションプログラムインターフェイスの略語で、プログラミングの際に使用できる命令や規約、関数等の集合の事を指す。 ソフトウェア開発の際、いちから全てを作るより、APIを利用すればもともとあるプログラムを呼び出して、その機能を組み込んだソフトウェアを開発することができる。(Source|ITトレンド)

TwitterAPIの取得は以下の記事に詳しく書いてありますので、そちらを参照ください。

Rでウェブ解析:Twitterデータの取得もおまかせ「twitteR」パッケージの紹介

RでTwitterのデータを分析するための準備(2015年6月現在のやり方) - StatsBeginner: 初学者の統計学習ノート

このTwitterAPIが取得できればパッケージ「twitteR」も利用できるようになります。また、関連パッケージとして、「bit64」「rjson」「DBI」「httr」「base64enc」も必要になりますので、併せてインストールしておく必要があります。

f:id:teruaki-sugiura:20160626104355p:plain

f:id:teruaki-sugiura:20160626104907p:plain

まずは基本的は関数「userTimeline」から見ていきます。この関数は、関数の名前通りですが、ユーザーのタイムラインからツイートを収集する関数です。使い方はこんな感じ。

f:id:teruaki-sugiura:20160626124328p:plain

userTimeline(user = "×××", n = 100, maxID = NULL, sinceID = NULL, includeRts = FALSE,excludeReplies = TRUE)

f:id:teruaki-sugiura:20160626124317p:plain

user:@なしのユーザー名
n:抽出するツイート数
maxID:tweetIDの範囲(Maximum ID to search for)
sinceID:tweetIDの範囲(Minimum (not inclusive) ID to search for)
includeRts:RTを含む場合はTRUE
excludeReplies:Replyを含む場合はFALSE

今回タイムラインを収集するのは、さきほども紹介した「統計たんRアイドル」です。「統計たんRアイドル」は統計学に関する情報をつぶやいてくれるアカウントで、大変勉強になります。私は「統計たんRあいどる」の1フォロワーであって、中身の人ではありません。では実際に動かしてみます。

user.tweets <- userTimeline(user = "stattan", n = 100, maxID = NULL, sinceID = NULL, includeRts = FALSE, excludeReplies = TRUE)
length(user.tweets)

f:id:teruaki-sugiura:20160626110111p:plain

さて、取得した中身はどんな感じなのでしょうか。userTimeline関数で取得したタイムラインのテキストデータはリスト形式で保存されます。リツイートやリプライを含めることもできます。

f:id:teruaki-sugiura:20160626110404p:plain

これをデータフレーム化することで、その他の諸々の情報を入手することができるので、やってみましょう。ツイートデータをデータフレーム化してくれる関数は「twListToDF」です。名の通り、TweetList To DataFrameです。

user.tweets.df <- twListToDF(user.tweets)
str(user.tweets.df, vev.len = 1)

f:id:teruaki-sugiura:20160626111005p:plain

かなり色々なデータが含まれていることがわかります。時間とか、リツイートの数とか、お気に入り(いいね)の数なども見ることができるようです。このデータフレームをエクセルなどに書き出す場合は、こんな感じ。

writeWorksheetToFile(paste("TwitterData.xlsx", sep = ""), data = user.tweets.df, sheet = "twitter.data") 

f:id:teruaki-sugiura:20160626111558p:plain

この関数は、関数の名前通りですが、タイムラインから特定のツイートを収集する関数です。 

f:id:teruaki-sugiura:20160626124253p:plain

searchTwitter("統計学", n = 100, lang = NULL, since = NULL, until = NULL, locale = NULL, geocode = NULL, sinceID = NULL, maxID = NULL, resultType = "mixed", retryOnRateLimit = 120)
length(search.tweets)

f:id:teruaki-sugiura:20160626124304p:plain

"word":検索したい言葉
n:抽出するツイート数
lang:検索した言語。日本語ならja、英語ならen。
since:YYYY-MM-DDフォーマットに従って取得開始日を指定。
until:YYYY-MM-DDフォーマットに従って取得終了日を指定。
loclae:ロケールを指定する。日本の場合、ja。 geocode:"latitude,longitude,radius(km or mi)"の順に指定する。 maxID:tweetIDの範囲(Maximum ID to search for)
sinceID:tweetIDの範囲(Minimum (not inclusive) ID to search for) resultType:mixed=人気でリアルタイムの結果 , recent=最も最近のものだけ、popular=最も人気のものだけ
retryOnRateLimit = 100

f:id:teruaki-sugiura:20160626112412p:plain

気になる中身はこんな感じです。こちらもuserTimelineと同じで、リスト形式で返ってきます。また、データフレーム化することで、さきほどと同様に多くの情報を参照できるようになります。

f:id:teruaki-sugiura:20160626112546p:plain

f:id:teruaki-sugiura:20160626125052p:plain

ここではTwitterのツイートデータを使って、ワードクラウドを作成します。ツイートデータからワードクラウドを作ることで、トレンドの言葉と一緒にツイートされているデータが「視覚的」に把握できるようになります。また、特定の言葉を分析の対象とすることもできます。

基本的な流れは、「Twitterからツイートを収集」→「不要語句の削除」→「文書行列の作成」→「ワードクラウドを作成」だと、個人的には考えています。間違ってたらごめんなさい。おそらくこのような流れで進めていくものかと・・・テキストマイニングは勉強したてなので、その分野の作法に反しているかもしれませんが・・・しかし、個人的には、こういう頭の中のイメージを持つことは大事だと思うんです。

テキストマイニング

イメージ素材はDesigned by Freepikより。

「プログラムコードをコピペしたらええねん!とりあえず、パソコンに数字つっこんで計算させたらええねん!!」というスタンスよりも、データがどのように計算され、処理されているかの流れや、その過程の数式、幾何学的なイメージを理解していくほうが、かなり大変だけれど、後々大きな下積みになると思いますし、やはりこういう頭の中のイメージを持つことは大事だと思うんです。個人的には。

突如、かなり脱線してしまいましたが、話を戻して、ワードクラウドの出来上がりはこんな感じ。。。。。選挙シーズンなので、「選挙」という言葉を中心に10000ツイートかつ最低出現数20に設定した時のワードクラウドです・・・。なんのこっちゃ、さっぱりですね。大多数のデータから有益な情報を取り出して、解釈しやすくすることが統計学の役割の一つのはず・・・

f:id:teruaki-sugiura:20160626131414p:plain

対象の言葉と関連のある言葉の関係性を視覚的に表現するためにワードクラウドを使うべきだと思いますので、これではせっかくの長所が生かせていませんね・・・ツイートデータの取得数を減らして、最低出現数を高くするなどを調整してワードクラウドを作成していくのがよいかもしれないですね。では、実際にやっていきましょう。

user.tweets <- searchTwitter("統計", n = 1000)
texts <- sapply(user.tweets, statusText)
不要なゴミを削除(中略) term.matrix <- docMatrixDF(texts, pos = "名詞") WordFreq <- 20 term.matrix <- as.data.frame(apply(term.matrix , 1, sum)) term.matrix <- subset(term.matrix, term.matrix[, 1] >= WordFreq) colnames(term.matrix) <- "count" Col <- c("#8FA2C9", "#F0C7C6") par(family = "HiraKakuProN-W3") wordcloud(row.names(term.matrix), term.matrix[, 1], scale = c(6, 1), random.order = FALSE, rot.per = .15, colors = Col)

f:id:teruaki-sugiura:20160626132030p:plain

統計という言葉を中心に「円」「バブル期」「為替」「ヨーロッパ」「授業」「大学」「教授」という言葉が一緒につぶやかれていることがわかります。つまり、イギリスがEUを離脱することによって、為替の「統計」に関するツイートが増加していることがわかりますし、その中で「バブル期」や「円」の比較をしているツイートがおそらく多いのでしょう。一方、大学の授業の「統計」に関して、ツイートしていることがわかります。

期間を絞って、EU離脱前までのツイートデータを収集すれば、大学の授業の「統計」に関するツイートのみになるかと思われますし、「EU離脱」というリアルタイムな状況、まさに「今」を、定量的に捉えることができました。

しかし、言葉の結びつきを私はもっと知りたいんだ!!というのであれば、共起ネットワーク分析などがおすすめです。

 

今回はこれでおしまい。

広告を非表示にする