お肉の検査員の統計解析日記

非エンジニアのお肉の検査員が日々の業務で発見した統計解析(主にRを使った)について情報発信します

お肉の検査員でも分かるTwitter分析

 どうも、お肉の検査員です(3回目)。
 さて、今回はツイッター解析をRで手軽に実装する方法について書いていきたいと思います。
 本当はggplot2の図に数字を入れる方法について書こうと思っていましたが、先週出張にいったとき沖縄県の観光に携わっている人に出会いまして、その時沖縄の観光名所について話を聞きました。すごく魅力的な場所が多くあるので観光地として人気があるのがうなずけました。いつか行ってみたい。
その方は、沖縄県のイメージ調査として観光客の人たちにアンケートを取っているみたいですが、なかなかの金額になるみたいですので、実際問題として、おいそれとイメージ調査することは出来なそうな気がします。そこで、気軽に無料でイメージ調査(?)できるTwitterの情報を使って沖縄県のイメージをつかんでみたいと思いました。また同時に僕が住んでいる滋賀県とブログのタイトルの由来になっている牛についても、世間の人たちがどのようなイメージを持っているのかを解析?したので、その解析コードについて忘れる前に書いてみたいと思います。

 なお、やってみた系の記事になっていますので、詳しくテキストマイニングを知りたい方は、後述する書籍を必ずご覧ください。また、Twitterの情報をとったのは、全て2月8日の18:30頃のものです。

 今回の内容は3本だてになっていまして、必要なところから見てください。

目次

1. Twitterの解析のために必要な環境整備

 Rを使ったTwitter解析の定番として、今まではtwitterRでしたが、更新がとまっているとのことですので、今回はrtweetパッケージを使って解析したいと思います。
 今回の解析をするにあたり、医療職からデータサイエンティストへさんのHPの内容を大いに参考にさせていただきました。
www.medi-08-data-06.work
また、RによるやさしいテキストマイニングおよびRではじめるソーシャルメディア分析: Twitterからニュースサイトまでなどの書籍もとても分かりやすく参考人させていただきました。ありがとうございます。

 やることを順番に書いていきます。適宜各人に必要な項目を取捨選択してくださいね。なお、RとRstudioはすでにネット環境にアクセスできるパソコンに入っていることと、ツイッターのアカウントをすでに持っていることを前提として話を始めます。
 もし、RやRstudioが入っていない方は、以前書きましたこちらの記事を参考にインストールしてください。

  • Rmecabをパソコンにインストールする。
  • Rstudioを立ち上げて、必要なパッケージをインストールする。
  • 検索したい言語を検索して解析する。

 以上です。

 では、早速Rmecabをインストールする方法を紹介します。と言っても、こちらのHPをご覧いただくと直ぐにインストールできます。
sites.google.com
 なんのために、Rmecabを入れるかと言いますと、統計解析環境であるRから、日本語形態素解析Mecabを使うためです。ツイッターは文字なので、普段よくやる数値の解析とは少しやり方がことなります。日本語の場合は、名詞、動詞、副詞、形容詞などあり、それぞれが英語と異なり単語間に空白がないので、一つの文章の中にどのような単語があるかそのままでは機械ではわかりません。
 そこで、一つの文章を単語ごとに切り離す必要があります。イメージは、『すもももももももものうち』という言葉で、このままでは『すもも』や『もも』がどこにあるのか分かりません。
 そこで、Mecabを使い文章を単語に分けて『すもも』や『もも』があるかどうかを確認できます。

〜
#install.packages("RMeCab", repos = "http://rmecab.jp/R") #RMeCabパッケージを持っていない方は初回のみインストールしてください。

library(RMeCab)

すもも = RMeCab::RMeCabC("すもももももももものうち")
unlist(すもも)
〜

 すると、以下のように表示されたら成功です。

〜
> unlist(すもも)
    名詞     助詞     名詞     助詞     名詞     助詞     名詞 
"すもも"     "も"   "もも"     "も"   "もも"     "の"   "うち" 
〜


 このように文章を単語ごとに区切るとともに名詞や助詞なども表示してくれます。本当にすごいツールです。
 Mecabの環境が整いましたら、必要なRのパッケージを導入していきます。
 必要なパッケージは以下のとおりです。
 自分のパソコンに必要なものだけ取捨選択してインストールしてください。
 もし必要なパッケージがあれば、必要なパッケージ名の前にある#を消してから、その行を実行するとパッケージがインストールされます。

〜
#install.packages("RMeCab", repos = "http://rmecab.jp/R")
#install.packages("rtweet")
#install.packages("devtools")
#install.packages("pipeR")
#install.packages("wordcloud")
#install.packages("tm")
#install.packages("tidyverse")
〜

以下、Twitterの文章をMecabを使って単語ごとに区切り、必要な情報(調べたい単語 例:沖縄とか新型コロナウイルスとか)を取り出し可視化するとともに、共起語についても調べていきたいと思います。最後に参考として、wordcloudパッケージを使った可視化の方法を記載します。

2.wordcloudパッケージを使った文章の可視化

 文章を可視化する?、って思いますよね。単純に出てくる言葉が大きいほど可視化した時の文字を大きくして表示しているみたいです。
 やりかたはwordcloudパッケージを使うととても簡単に可視化できます。また、ツイート文章はrtweetパッケージを使うととても簡単に取得できます。ツイート情報を取得するには、twitterと連携する必要があります。詳しくは、yutannihilationさんのHPをご覧ください。とても分かりやすく書いてくれています。ありがとうございます。
notchained.hatenablog.com


 今回おこなった作業手順
1. 知りたいワードが含まれるツイート文章を3000件取り出す(seach_tweets関数)。今回は“沖縄”という言葉にします(2020/02/04 15:20時点)。
2. 不要な言葉(@や数字、改行など解析に不要な言葉)を削除する作業をします(str_remove_all関数)。
3. 一時的なファイルを作成します。詳しくはわからないですが、この作業が必要とのことです。詳しい方おられたら理由教えてほしいです!
4. 必要な詞を取得します。基本的には、助詞(『は』、や、『が』など)は不要と思うので、今回は名詞のみを取り出します。
5. wordcloudパッケージで可視化する。

この流れで書いたコードを下に貼り付けます。一度実行してもらうと良く分かると思います。
今回は、沖縄という言葉と、私が住んでいる『滋賀』、ブログのタイトルの由来になっている『牛』の3つの言葉について調べてみます。3つの言葉を調べるのですが、やることは同じなので、『沖縄』での解析を例示します。search_tweets関数の引数の”沖縄”の部分を”滋賀”や”牛”としてもらうとそれぞれの結果が出てきます。

library(rtweet)
library(devtools)
library(pipeR)
library(wordcloud)
library(RMeCab)
library(tidyverse)
library(igraph)
library(tm)
library(digest)


#キーワードで検索(第一引数:検索したいキーワード、第二引数:取得件数、第三引数:リツイートを取得するか、第四引数:どの国のツイートを取得するか
keyword <- search_tweets("沖縄",n=3000,include_rts = FALSE,langs = "ja") #ここの『沖縄』を自分の知りたい言葉に置き換えてください。

# only text
texts <- keyword %>% 
  select(created_at,text) %>%
  mutate(text=str_remove_all(text,"https?://.*[a-zA-Z0-9]"),#URL
         text=str_remove_all(text,"\n"),#改行
         text=str_remove_all(text,"[:punct:]"),#句読点
         text=str_remove_all(text,"\\^"),#顔文字の目
         text=str_remove_all(text,"~"),#ニョロニョロ
         text=str_remove_all(text,"[0-9]"),#単独の数字 
         text=str_remove_all(text,"@[a-zA-Z0-9]*"),#返信のタグ
         text=str_remove_all(text,"[a-zA-Z0-9]*")#英数字
  )

# 取得したツイートを一つのファイルにして保存
texts2 = paste(texts, collapse ="")

# 一時的なファイルを作る
xfile = tempfile()

#先ほどのファイルに結合したツイートを書きだす
write(texts2, xfile)

###### ワードクラウドで可視化 #############
### 名詞のみを取り出す
cloud = docDF(xfile, type = 1, pos = "名詞") #動詞もとりだすならpos = c("名詞", "動詞"))とする
cloud = cloud %>% filter(!POS2 %in% c("サ変接続","非自立", "数")) #"サ変接続","非自立", "数"を除く

#列名をFREQにする
cloud = cloud %>% select(everything(), FREQ = starts_with("file"))

#さっき作った一時的ファイルを消す 
#unlink(xfile)

## 表で表示
cloud %>% arrange(FREQ) %>% tail(40) #多い言葉40個を見てみる。

### ワードクラウドで見える化する
png("R020208沖縄wordcloud.png")
wordcloud (cloud$TERM, cloud$FREQ, min.freq = 10,colors = brewer.pal(6,"Set3"))
dev.off()

 すると、このような図がでてきます。UとかFとかあり分かりにくいですね。。。アルファベットを除外する方法が現状分からないので、調べて修正していきたいと思います。分かり次第、図を差し替えます。

f:id:purerazz:20200208184251p:plain
2月8日の沖縄と関連する名詞の可視化

3. 調べたい文字と同時に良く記載されている言葉(共起語)の可視化

 最後に、共起語について解析する方法を紹介させていただきます。と言ってもRmecabのcollocateパッケージを使うと本当に簡単に出力することが出来ます。
 共起語とは、【Aについて話をするとき、一緒に出てきやすいキーワード】のことを言います。例えば、牛肉の共起語として『おいしい』、『まずい』、『高い』、『精肉店』などが出てきやすいはずです。このように、キーワードが分かると他の人がどのようなことに興味を持っているか分かりますよね。では、実際にやってみましょう!!!
  では、早速コードを紹介します。なお、上のwordcloudのコードの続きで以下のコードを実行してください。

#### 共起語の解析 ###########
### 共起語
res_collocate <- collocate(xfile,node="データ",span=5) #前後5文字まで使う

collScores(res_collocate,node="データ",span=5) %>% head()


#### 可視化
ngram <- NgramDF(xfile,
                 type = 1,#単語の共起語
                 N=2,#2単語を繋げる
                 pos=c("名詞","形容詞"))#デフォルトでこれになる


par(mar=c(0.5,0.5,0.5,0.5))#余白を狭くする

ngram %>% 
  filter(Freq>=20) %>% #20回以上出現する共起語
  graph.data.frame(directed = F) %>% #おまじない
  plot(vertex.size=3, #ノードの大きさ
       vertex.label=V(.)$name, ##ノードのラベル
       vertex.label.font=1, #ラベルのフォント
       vertex.label.cex=1,#ラベルの大きさ
       vertex.frame.color="red", #ノードのいろ
       family="HiraKakuPro-W3",#日本語を表示させる
       vertex.label.dist=0)#ノードとラベルとの距離

 すると、このような図がでてきます。

f:id:purerazz:20200208185126p:plain
2月8日沖縄の共起語

 沖縄という言葉とともに、旅行やキャンプ(野球のですかね?)という言葉が並んでいますね。観光地として認識されているのが分かりますね。(数字やアルファベットが残ってますね。。。なぜでしょうか???)

 一方、私の住んでいる滋賀で同様(沖縄と同じ条件で)の解析をすると、、、

f:id:purerazz:20200208185444p:plain
2月8日の滋賀県の共起語

 近くの県の京都や大阪という言葉が並んでいますが、観光などの言葉は無さそうですね。。。知名度はまだまだというところでしょうか。

 『牛』で調べてみると、、、

 

f:id:purerazz:20200208185930p:plain
R020208牛の共起語
 
 このように、神戸や飛騨、松阪というブランド牛の名前が並んでいますね(あれ?近江牛の名前がない。。。)。このように簡単なブランドの知名度調査もできそうですね。

 今回紹介したように、Rとパッケージ群を使うことで本当に簡単に解析することが出来ます。ただ、解析した内容をどのように考察するのか?、どのような知見が得られそうか?、については人がしっかり考える必要があります。機械が出来る部分は簡単に実行してもらい、考える時間を増やすためにも、RやMecabなどの統計ソフトを使えると大変便利だと個人的にも思います。

 次回は、ggplot2かRを使ったマップの作製について書きたいと思います。

 どうぞ宜しくお願い致します。