【準備編】推しのTwitterをテキストマイニングしてみた

外出自粛期間に推しTwitterテキストマイニングしてみましたので、【結果編】と【準備編】にわけて、紹介します。こちらは【準備編】です。

目次

ゴールをどうするか?

推しTwitterテキストマイニングすると言っても、ゴールをざっくりでも決めないと前に進みにくかったので、ネットサーフィンしながら以下と決めてみました。

①推しのTwitterを可視化する

②推しの特徴を見つける

③楽しめるレベルで適当にやる

参考にしたHP

テキストマイニングについては完全な素人だったので、以下のサイトを参考にしながらすすめました。特に、明治大学大学院植田麦ゼミさん、Np-Urさんのまとめが参考になりました!ありがとうございました:D

togetter.com

www.randpy.tokyo

手順とコード①~Twitterアカウント作成からTwitterApps登録まで~

Twitterアカウント作成

RRStudioをインストール

R:cran.ism.ac.jp

RStudio:rstudio.com/products/rstud…

RStudioをたちあげて、コンソールから関連パッケージをインストール

install.packages("rtweet")

と入力するとインストールできます。

※インストールしないといけない関連パッケージは分析手法によりますので、必要に応じて、後々追加でインストールすることもできます。

Twitter APIの登録申請

結構面倒なので、以下を参考にして頑張ってください。

qiita.com/kngsym2018/ite…

torikun.com/entry/twitter-…

ちなみに、登録時にAPIを使う理由とかを記入しないといけないのですが、私は以下のような適当な英語 で適当なことを書いたら、すぐに審査OKのメールが返信されてきました。読み返すとかなり適当すぎて恥ずかしいですね。。。

I want to use twitter AIP for Study for Social research. I'm specialty about Japanese idol culture. First I'll analyze idol Tweet itself. Second I'll analyze idol's relationship each other. Finally I'll analyze idols and Fans relationship.

Twitter Apps登録

以下のHPを参考にして、Twitter Appsを登録してください。なお、Appの名称は半角英数が無難です。日本語、スペース、制御文字は入れない方がいいかと思います。

apibank.jp/contents/howto…

⑥APPから各種情報API Key、API Secret Key、access_token、access_secretを取得

以下を参考にして、各種情報を取得して、メモ帳とかにコピペしておいてください。後で使います。

qiita.com/daifuku_mochi2…

messyer813.com/entry/2018/07/…

手順とコード②~テスト抽出~

抽出してみよう

RStudioのコンソールから以下のコマンドを叩いてみましょう。

library(rtweet)

APPNAME = "XXXXXX"

CONSUMERKEY = "XXXXXX"

CONSUMERSECRET = "XXXXXX"

twitter_token = create_token(

  app = APPNAME,

  consumer_key = CONSUMERKEY,

  consumer_secret = CONSUMERSECRET)

tweet_npur = get_timeline("tws_ririka", n = 10, token = twitter_token)

tweet_npur$text

上手くいくと、こんな感じでわーすた小玉梨々華さんのツイートが10件抽出されます!今回はわーすたの松田美里さんとの微笑ましいやり取りが3, 4行目に抽出されてますね:D

f:id:tws_kujirano:20200625172119p:plain

上手くいかない人は、以下のHPの追記部分が参考になります。

https://www.randpy.tokyo/entry/twitter_api_r

②RMeCabをインストール

以下を参考にしてRMeCabをインストールしてみましょう。ちなみに、自分の場合は、(B) Hombrewでインストールが上手くいかなかったので、(A)のターミナルからのインストールを実施しました。

https://sites.google.com/site/rmecab/home/install

ここまで出来れば準備はおしまいです!!(ヤッター!!長かった!!頑張りましたね!!)

手順とコード③~タイムライン抽出&WordCloudで可視化~

あとは抽出して可視化するだけですが、その前にライブラリのインストールと、有効化をしておきましょう。

①ライブラリのインストール、有効化

install.packages("tm",depenndencies=TRUE)
install.packages("dplyr", dependencies = TURE)
install.packages("purrr", dependencies = TURE)
install.packages("stringr", dependencies = TURE)
install.packages("wordcloud", dependencies = TURE)

library(rtweet)
library(tm)
library(RMeCab)
library(dplyr)
library(purrr)
library(stringr)
library(wordcloud)
library(ggplot2)

 ※rtweetだけは事前にインストールするコードを「手順とコード①の③」で実施しているのでここでは除外してます。また、コマンドが上手く通らないときは、mi(テキストエディタ)等に一度貼り付けてからコピペすると上手くいくときがあります。それでもだめなら手打ちすると通るときがあります。

②タイムライン抽出

以下のコードを実行してみてください。なお、タイムライン取得のところで、n=5000としていますが、これだと過去5000件のつぶやきを抽出してしまうので、はじめは100くらいで実行した方が時間がかからなくて良いかと思います。

# 文字化け防止

par(family = "HiraKakuProN-W3")

# @tws_ririkaのタイムライン取得

tws_ririka_timeline = get_timeline("tws_ririka", n = 5000, token = twitter_token)

# テキスト情報を取得

tws_ririka_timeline_texts = tws_ririka_timeline$text

# 日本語のみ抽出

tws_ririka_timeline_texts_onlyJa = str_replace_all(tws_ririka_timeline_texts, "\\p{ASCII}", "")

tws_ririka_timeline_texts_onlyJa_shiftJis = tws_ririka_timeline_texts_onlyJa %>% iconv(from = "UTF-8", to = "CP932") %>% na.omit()

# 200件のツイートを1つのテキストとしてまとめる

tws_ririka_timeline_all = ""

for (i in 1:length(

(tws_ririka_timeline_texts_onlyJa_shiftJis))){

  tws_ririka_timeline_all = paste(tws_ririka_timeline_all, tws_ririka_timeline_texts_onlyJa_shiftJis[i], seq = "")}

# あとで使えるように保存

write.table(tws_ririka_timeline_all, "tws_ririka_timeline_texts.txt")

 ※「tws_ririka_timeline_texts.txt」ファイルをmi(テキストエディタ)でひらいてUTF-8CRLFで保存すると、この後の手順で エラーが出なくなりました。

③WordCloudで可視化

# 先ほど保存したテキストファイルから形態素解析実行

docDF_mehara = docDF("tws_ririka_timeline_texts.txt", type = 1)

# 名詞情報かつ非自立でないものを抽出

docDF_mehara2 = docDF_mehara %>% filter(POS1 %in% c(“名詞"),POS2 != "非自立")

# Word CLoud実行

wordcloud(docDF_mehara2$TERM

,freq=docDF_mehara2[,4],min.freq=10,scale=c(6,1),family ="HiraKakuProN-W3",colors=brewer.pal(8,"Dark2"))

成功すると以下のような図が表示されます!やったね!!WordCloudでは、頻出ワードが大きく表示されます。結果編に書きましたが、小玉梨々華さんはわーすたというアイドルグループ所属なので、伸ばし棒の「ー」が頻出してますね。

f:id:tws_kujirano:20200626112556p:plain

手順とコード④~ggplotで品詞ごとにグラフ化~

WordCloudでは名詞のみ可視化したので、それ以外の品詞も頻度順にグラフ化してみたいと思います。今回は感嘆詞を抽出します。

# 解析対象となるデータの読み込み

res <- RMeCabFreq("tws_ririka_timeline_texts.txt")

# 感動詞だけを取り出してデータフレームres_nounへ

res_noun <- res[res[,2]=="感動詞",]

# 2回以上登場する名詞の数。res[,4]で"Freq"列を参照

nrow(res_noun <- res[res[,2]=="感動詞" & res[,4] > 1,])

# res_nounをFreqで降順ソート

res_noun[rev(order(res_noun$Freq)),]

# 1列目と4列目を抜き出してデータフレームを作成する

res_noun2 <- data.frame(word=as.character(res_noun[,1]),

                        freq=res_noun[,4])

# 上位25位に絞り込む

res_noun2 <- subset(res_noun2, rank(-freq)<25)

# ggplotでグラフを描画する

ggplot(res_noun2, aes(x=reorder(word,freq), y=freq)) +

  geom_bar(stat = "identity", fill="grey") +

  theme_bw(base_size = 10, base_family = "HiraKakuProN-W3") +

  coord_flip() 

成功すると以下のようなグラフが表示されます。結果を見ると、小玉梨々華さんは「ありがとう」って沢山言ってくれる人なんだと分かります。

f:id:tws_kujirano:20200626113517p:plain

ここでは感動詞を抽出してみましたが、名詞動詞形容詞などを抽出することもできます。また、以下のコマンドを実行すると、どの様な品詞が抽出されたテキストファイルに含まれているのかが分かります。

unique(res$Info1)

 こんな感じで、含まれる品詞が分かります。

f:id:tws_kujirano:20200626113950p:plain

手順とコード④~バイグラム、トライグラムの結果も見てみる~

結果編には記載しなかったのですが、バイグラムトライグラムによる分析も実施してみてます。まずはバイグラムから。

# データフレームtextgramへ格納

textgram <- Ngram("tws_ririka_timeline_texts.txt", N = 2, type = 1, pos = c("名詞", "動詞"))

# Freq降順(多い順)でソート、データフレームtextgram_orderへ格納

textgram_order <- textgram[rev(order(textgram$Freq)),]

# 先頭30個を表示

head(textgram_order,30)

結果、以下です。これを見ると「アイス-食べる」がここでも出てきてて、さすが小玉さんって感じですね。

f:id:tws_kujirano:20200626114703p:plain

続いて、トライグラムを実施。

# データフレームtextgramへ格納

textgram <- Ngram("tws_ririka_timeline_texts.txt", N = 3, type = 1, pos = c("名詞", "動詞"))

# Freq降順(多い順)でソート、データフレームtextgram_orderへ格納

textgram_order <- textgram[rev(order(textgram$Freq)),]

# 先頭30個を表示

head(textgram_order,30)

以下、結果です。「食べる-焼肉-食べる」と「焼肉-食べる-焼肉」がさすが小玉さんって感じですね!

f:id:tws_kujirano:20200626114916p:plain

ちなみに、わーすたには「大志を抱け!カルビアンビシャス! 」という焼肉曲がありますので、紹介させてください。この曲を聴くと焼肉たべたくなります!!

youtu.be

最後に〜実施環境とわーすたの紹介〜

  • 実施環境

iMac (27-inch, Late 2012)10.15.5・・・ちょっと古い、そろそろ買い替えたいです
macOS Catalina 10.15.5
R 4.0.1・・・pythonの方が流行りだと思いますが、過去にRっぽいものをつかってたのでこちらにしました
RStudio 1.3.959

MeCab 0.996

  • わーすたの紹介

今回、テキストマイニングの対象とさせて頂いた小玉梨々華さんの所属するわーすたの紹介をさせてください。以下、公式HPからの引用です。

アーティスト名:「わーすた」(ざ・わーるど・すたんだーど)
英語表記:「The World Standard」
2015年に結成のデジタルネイティブ世代アイドル。
グループ名は「The World Standard」の略でメンバーは英語、スペイン語、中国語などの語学を勉強している。
現在まで、11か国の国でライブ出演するなど世界に照準を合わせ活動している。

wa-suta.world

わーすたavex所属のアイドルで、特徴としては、海外でのお仕事だったり、海外のファンが多いってことが挙げられます。また、ライブスマホでの動画・写真撮影OKで、ファンによるライブ動画がたくさんアップロードされているのも特徴です。私もわーすたのファンになるまでは、アイドルを応援したことがなかったのですが、ライブ動画を沢山見ているうちに、ライブに行きたくなって、実際ライブに行ったら外国人の友だちができたりして、今ではオタクとして楽しい日々をすごしています。

最後に、推しの小玉梨々華さんの紹介を少しさせてください。

f:id:tws_kujirano:20200626144027j:plain

【名前】
小玉梨々華(こだまりりか)
【カラー】
パステルブルー
【誕生日】
2000年10月1日
【血液型】
A
【出身】
北海道
【身長】
161cm
【趣味】
アイスを食べる
【特技】
おえかき
【好きなアーティスト】
back number

2020年6月末日現在の写真とプロフィールですが、写真の衣装に「ありがとう」って書いてありまして、これが今回の感動詞の分析結果の最頻出ワードと一致していたので、嬉しかったですね!小玉さんには隠された特技がありまして、画伯と呼ばれているのですが、とっても素敵な絵をお描きになられるので、ぜひ検索してみてください!

【結果編】推しのTwitterをテキストマイニングしてみた

外出自粛期間に推しTwitterテキストマイニングしてみましたので、【結果編】と【準備編】にわけて、紹介します。こちらは【結果編】です。

目次

Word Cloudで可視化してみた

RからTwitter APIを叩き、わーすた小玉梨々華さんのツイートをWord Cloudを使って可視化してみました。※Word Cloudでは頻出する単語ほど大きな文字で表示されます。

f:id:NURUME:20200624153122p:plain

小玉梨々華さんは「わーすた」というグループに所属していることもあり、伸ばし棒の「ー」がめちゃめちゃ突出して頻出してますね。

ファンとしては「アイス」「焼肉」「チョコ」などの食べ物系のワードが小玉さんっぽくて微笑ましい感じですね(笑)

※詳細は準備編に記載しますが、今回のWord Cloud可視化では「名詞」かつ「非独立でないもの」のみ取り出して可視化してます。また、抽出対象は2020年6月23日時点のすべてのツイート(3011件)としました。

品詞ごとにグラフ化してみた

品詞ごとに上位25位をグラフ化してみました。

  • 名詞をグラフ化

f:id:NURUME:20200624154431p:plain

伸ばし棒の「ー」以外だと「今日」「みんな」「ライブ」が上位でした。

ちなみに下から5番目の「しっぷ」というのは、いわゆる「湿布」の事ではなくて、わーすたのファンのことを「わーしっぷ」と呼ぶのですが、形態素解析時にMeCabがぶっちぎったせいで分離してますね。

  • 動詞をグラフ化

f:id:NURUME:20200624155553p:plain

4位の「食べる」に注目です!以上。

f:id:NURUME:20200624155849p:plain

ありがとう」が1位なのが嬉しいですね。この言葉はツイッターの中だけじゃなくて、ライブ、握手会、ブログ、番組などでもよく耳にする言葉で、ファンとしては「こちらこそありがとう」という感じなのですが、きちんと言葉にして伝えてくれるのはやっぱり嬉しいですね。

ちなみに、わーすたには「スーパーありがとう」という名曲がありますので、ついでに宣伝しておきます(笑) 

www.youtube.com

実施環境、所要時間

素人が適当にネットを見ながらテキストマイニングしてみたのですが、なかなか楽しい経験ができました。

もし、これからテキストマイニングをはじめてみたいという方がいらっしゃったら、まずは自分の興味のあるものを分析してみるのがいいかと思います。私のようにTwitterを分析してみてもいいですし、文学に興味があるなら著作権切れのテキストを分析してみるのもいいと思います。

参考程度に、今回の実施環境、所要時間、私のスペック等をメモ程度に記載しておきます。

  • 実施環境

iMac (27-inch, Late 2012)10.15.5・・・ちょっと古い、そろそろ買い替えたいです
macOS Catalina 10.15.5
R 4.0.1・・・pythonの方が流行りだと思いますが、過去にRっぽいものをつかってたのでこちらにしました
RStudio 1.3.959

MeCab 0.996

  • 所要時間

全部で3〜4日くらいかかりました。

テキストマイニングの手法をネットで調べるのに半日くらい。R、Rstudioのインストール、TwitterAPIの申請が半日くらい。RMeCabのインストール、ライブラリのインストール(ここでつまづいて結構時間がかかりました)、初回抽出までが1日くらい。抽出と分析の繰り返しで1〜2日くらいです。

  • 私のスペック

SE経験ありですが、コードはあまり書いたことは無いです。Linuxはちょっとだけ触ったことはある程度ですが、Rに類似したソフトの経験はありました(離散選択分析系のソフトウェア)。それほどプログラミング経験があるわけじゃなかったですが、なんとか形にはなりました。ただ、テキストマイニング系は正しく量産しながら効率的に分析するには、NGワード集の作成等のチューニングが一番の肝かつ時間がかかるところだと聞いてます。大変そうですよね。

自分でコードを書くのが難しい、だるいよーって人は以下のサービス「whotwi」でもTwitterを分析できますので、まずは試してみるといいかもです。自分の好きなアイドルさんやタレントさんのTwitterを分析してみると意外な発見があって面白いですよ!

ja.whotwi.com

最後に(わーすたの紹介)

  • わーすたの紹介

今回、テキストマイニングの対象とさせて頂いた小玉梨々華さんの所属するわーすたの紹介をさせてください。以下、公式HPからの引用です。

アーティスト名:「わーすた」(ざ・わーるど・すたんだーど)
英語表記:「The World Standard」
2015年に結成のデジタルネイティブ世代アイドル。
グループ名は「The World Standard」の略でメンバーは英語、スペイン語、中国語などの語学を勉強している。
現在まで、11か国の国でライブ出演するなど世界に照準を合わせ活動している。

wa-suta.world

わーすたavex所属のアイドルで、特徴としては、海外でのお仕事だったり、海外のファンが多いってことが挙げられます。また、ライブがスマホでの動画・写真撮影OKで、ファンによるライブ動画がたくさんアップロードされているのも特徴です。私もわーすたのファンになるまでは、アイドルを応援したことがなかったのですが、ライブ動画を沢山見ているうちに、ライブに行きたくなって、実際ライブに行ったら外国人の友だちができたりして、今ではオタクとして楽しい日々をすごしています。

最後に、推しの小玉梨々華さんの紹介を少しさせてください。

f:id:tws_kujirano:20200626144027j:plain

【名前】
小玉梨々華(こだまりりか)
【カラー】
パステルブルー
【誕生日】
2000年10月1日
【血液型】
A
【出身】
北海道
【身長】
161cm
【趣味】
アイスを食べる
【特技】
おえかき
【好きなアーティスト】
back number

2020年6月末日現在の写真とプロフィールですが、写真の衣装に「ありがとう」って書いてありまして、これが今回の感動詞の分析結果の最頻出ワードと一致していたので、嬉しかったですね!小玉さんには隠された特技がありまして、画伯と呼ばれているのですが、とっても素敵な絵をお描きになられるので、ぜひ検索してみてください!