TwitterAPIを利用:twitteR
#TwitterAPI認証情報設定
consumerKey <- "************"
consumerSecret <- "*****************"
accessToken <- "*****************"
accessSecret <- "*********************"
##TwitterAPIにログイン
library("twitteR")
options(httr_oauth_cache = TRUE)
setup_twitter_oauth(consumerKey, consumerSecret, accessToken, accessSecret)
#「総裁選」を含む日本語ツイートを10000件取得。2021年9月4日から
tweets2 <- searchTwitter('総裁選', n = 10000, since = "2021-09-04" , lang="ja" , locale="ja")#日本語とロケールを指定(日本なら"ja")# 目的に応じて"popular","recent","mixed"を指定 #◼️
#データフレームに変換
tweetsdf2 <- twListToDF(tweets2)
#型を確認
class(tweets2)
[1] "list"
class(tweetsdf2)
[1] "data.frame"
#取得できたか確認
library(dplyr)
tweetsdf2 %>% head()
リツイートのみ使用:table
#リツイートされたもの(TRUE)、そうでないもの(FALSE)の数を確認
table(tweetsdf2$isRetweet)
FALSE TRUE
1252 8748
#今回リツイートのみ使ってみる
tweetsdf3 <- tweetsdf2 %>% filter(isRetweet %in% c("TRUE"))
head(tweetsdf3) #確認
nrow(tweetsdf3) #確認
[1] 8748
#データフレームのテキスト列だけ抽出
texts <- tweetsdf3$text
#後々使うのでテキスト処理のためのライブラリを呼び出す
library(stringr)
library(magrittr)
#複数の(リスト型)テキストを結合。テキストとテキストの間にはブランクを入れる
texts3 <- paste(texts, collapse = "")
形態素解析をかける:RMeCab
#一時ファイルを作り、xfileという名前で保存
xfile <- tempfile()
write(texts3, xfile)
##形態素解析のライブラリー
library(RMeCab)
#形態素解析。頻度を集計
frq_Tw2 <- RMeCabFreq(xfile)
#上位50を確認
frq_Tw2 %>% arrange(Freq) %>% tail(50)
Term Info1 Info2 Freq
8831 出る 動詞 自立 1792
8832 出馬 名詞 サ変接続 1802
8833 れる 動詞 接尾 1803
8834 / 名詞 サ変接続 1808
8835 って 助詞 格助詞 1815
8836 . 名詞 サ変接続 1863
8837 :// 名詞 サ変接続 1865
8838 早苗 名詞 固有名詞 1885
8839 t 名詞 一般 1890
8840 さん 名詞 接尾 1907
8841 安倍 名詞 固有名詞 1912
アルファベット、記号を外す:str_match
#見やすいように整形するために、「アルファベット」「記号」を削除
#termが英語を削除。noun列が作られ「<NA>」が表示。mutateは列を追加したり修正する
frq3_Tw2 <- frq_Tw2
frq4_Tw2 <- frq3_Tw2 %>% mutate(noun=str_match((Term), '[^a-zA-Z]+')) #◼️
frq4_Tw2 %>% arrange(Freq) %>% tail(50)
8851 いる 動詞 非自立 2625 いる
8852 RT 名詞 一般 2625 <NA>
8853 の 名詞 非自立 3207 の
8854 高市 名詞 固有名詞 3490 高市
8855 氏 名詞 接尾 3679 氏
8856 自民党 名詞 固有名詞 3906 自民党
8857 _ 名詞 サ変接続 4228 _
8858 と 助詞 格助詞 4765 と
8859 」 記号 括弧閉 5112 」
8860 … 記号 一般 5211 …
8861 RT 名詞 固有名詞 5272 <NA>
8862 「 記号 括弧開 5434 「
#削除。na.omitでNA含む行を削除。
frq5_Tw2 <- na.omit(frq4_Tw2) #◼️
frq5_Tw2 %>% arrange(Freq) %>% tail(50)
6716 いる 動詞 非自立 2625 いる
6717 の 名詞 非自立 3207 の
6718 高市 名詞 固有名詞 3490 高市
6719 氏 名詞 接尾 3679 氏
6720 自民党 名詞 固有名詞 3906 自民党
6721 _ 名詞 サ変接続 4228 _
6722 と 助詞 格助詞 4765 と
6723 」 記号 括弧閉 5112 」
6724 … 記号 一般 5211 …
6725 「 記号 括弧開 5434 「
#termが記号を識別。noun列が作られ「<NA>」が表示。「\\W」は記号
frq6_Tw2 <- frq5_Tw2 %>% mutate(noun=str_match((Term), '[^\\W]+'))
frq6_Tw2 %>% arrange(Freq) %>% tail(50)
Term Info1 Info2 Freq noun
6694 だから 接続詞 * 1699 だから
6695 派閥 名詞 一般 1744 派閥
6696 河野 名詞 固有名詞 1765 河野
6697 出る 動詞 自立 1792 出る
6698 出馬 名詞 サ変接続 1802 出馬
6699 れる 動詞 接尾 1803 れる
6700 / 名詞 サ変接続 1808 <NA>
6701 って 助詞 格助詞 1815 って
6702 . 名詞 サ変接続 1863 <NA>
6703 :// 名詞 サ変接続 1865 <NA>
6704 早苗 名詞 固有名詞 1885 早苗
6705 さん 名詞 接尾 1907 さん
6706 安倍 名詞 固有名詞 1912 安倍
#削除。na.omitでNA含む行を削除。
frq7_Tw2 <- na.omit(frq6_Tw2)
frq7_Tw2 %>% arrange(Freq) %>% tail(50)
6408 派閥 名詞 一般 1744 派閥
6409 河野 名詞 固有名詞 1765 河野
6410 出る 動詞 自立 1792 出る
6411 出馬 名詞 サ変接続 1802 出馬
6412 れる 動詞 接尾 1803 れる
6413 って 助詞 格助詞 1815 って
6414 早苗 名詞 固有名詞 1885 早苗
6415 さん 名詞 接尾 1907 さん
6416 安倍 名詞 固有名詞 1912 安倍
1文字のワードも外す:grep
#Termが1文字の行を削除。まず、1文字ワードの行番号を抽出
index <- grep('..', frq7_Tw2[,1])
head(index)
[1] 2 3 4 7 8 9
frq7_Tw2[index,] %>% arrange(Freq) %>% tail(50) #確認
Term Info1 Info2 Freq noun
5583 反省 名詞 サ変接続 888 反省
5584 政権 名詞 一般 892 政権
5585 から 助詞 接続助詞 901 から
5586 について 助詞 格助詞 921 について
5587 どう 副詞 助詞類接続 927 どう
5588 今回 名詞 副詞可能 940 今回
5589 戦争 名詞 サ変接続 965 戦争
5590 この 連体詞 * 975 この
5591 親分 名詞 一般 980 親分
5592 それ 名詞 代名詞 1032 それ
frq8_Tw2 <- frq7_Tw2[index,]
frq8_Tw2 %>% arrange(Freq) %>% tail(50)
Term Info1 Info2 Freq noun
5583 反省 名詞 サ変接続 888 反省
5584 政権 名詞 一般 892 政権
5585 から 助詞 接続助詞 901 から
5586 について 助詞 格助詞 921 について
5587 どう 副詞 助詞類接続 927 どう
5588 今回 名詞 副詞可能 940 今回
5589 戦争 名詞 サ変接続 965 戦争
5590 この 連体詞 * 975 この
5591 親分 名詞 一般 980 親分
5592 それ 名詞 代名詞 1032 それ
品詞を指定して抽出:filter
#「固有名詞」を抽出
frq9_Tw2 <- frq8_Tw2
frq10_Tw2 <- frq9_Tw2 %>% filter(Info2 %in% c("固有名詞"))
frq10_Tw2 %>% arrange(Freq) %>% tail(50)
374 文雄 名詞 固有名詞 491 文雄
375 次郎 名詞 固有名詞 583 次郎
376 三笠 名詞 固有名詞 616 三笠
377 石破 名詞 固有名詞 699 石破
378 自民 名詞 固有名詞 751 自民
379 衆院 名詞 固有名詞 760 衆院
380 太郎 名詞 固有名詞 791 太郎
381 麻生 名詞 固有名詞 1213 麻生
382 日本 名詞 固有名詞 1365 日本
383 岸田 名詞 固有名詞 1438 岸田
384 河野 名詞 固有名詞 1765 河野
385 早苗 名詞 固有名詞 1885 早苗
386 安倍 名詞 固有名詞 1912 安倍
387 高市 名詞 固有名詞 3490 高市
388 自民党 名詞 固有名詞 3906 自民党
#ノイズになるなど外したいワードがある場合。行を削除
frq10_Tw2 <- frq10_Tw2 %>% filter(Term != "外したいワード")
frq10_Tw2 %>% arrange(Freq) %>% tail(50)
ワードクラウド作成:wordcloud2
#wordcloud2で描画準備
frq11_Tw2 <- frq10_Tw2 #下記の作業でミスをした場合元のデータフレームに戻せるようにする
#Freqが100以上にする
frq12_Tw2 <- frq11_Tw2$Freq >= 100
tail(frq12_Tw2) #確認
[1] TRUE FALSE FALSE FALSE FALSE FALSE
frq13_Tw2 <- frq11_Tw2[frq12_Tw2,]
frq13_Tw2 %>% arrange(Freq) %>% tail(50)
Term Info1 Info2 Freq noun
1 キング 名詞 固有名詞 104 キング
2 民主党 名詞 固有名詞 105 民主党
3 衆議院 名詞 固有名詞 108 衆議院
4 山田 名詞 固有名詞 118 山田
5 ツイ 名詞 固有名詞 133 ツイ
6 森友 名詞 固有名詞 142 森友
7 中国 名詞 固有名詞 156 中国
8 小泉 名詞 固有名詞 182 小泉
9 枝野 名詞 固有名詞 182 枝野
10 竹中 名詞 固有名詞 182 竹中
#wordcloud2で描画。frq13_Tw2の1列目(Term)と4列目(Freq)を使う
library(wordcloud2)
#frq13_Tw2[,c(1,4)] %>% wordcloud2(size=2,minSize=1) #sise=2では全体が大きすぎるので下記利用
frq13_Tw2[,c(1,4)] %>% wordcloud2(size=1.3,minSize=1,gridSize=10) #gridSizeは文字間隔
ラベル付き棒グラフも作成:geom_text
#次に、ワードの出現回数順に棒グラフ作成
#そのための準備
#扱いやすいようにTerm(ワード)とFreq(出現回数)の2列のデータフレームに
frq14_Tw2 <- frq13_Tw2
frq15_Tw2 <- data.frame(frq14_Tw2$Term, frq14_Tw2$Freq)
frq15_Tw2 #確認
frq14_Tw2.Term frq14_Tw2.Freq
1 キング 104
2 ツイ 133
3 フジ 186
4 三笠 616
5 中国 156
6 太郎 791
7 安倍 1912
8 小泉 182
9 山田 118
10 岸田 1438
#Freq(frq14_Tw2.Freq)の降順に並び替え
frq16_Tw2 <- frq15_Tw2[order(frq15_Tw2$frq14_Tw2.Freq, decreasing=T), ] #◼️
frq16_Tw2 #確認
frq14_Tw2.Term frq14_Tw2.Freq
24 自民党 3906
28 高市 3490
8 安倍 1912
14 早苗 1885
19 河野 1765
11 岸田 1438
13 日本 1365
#列名が元のデータフレーム から変わっているので、わかりやすい名称に変更
#列名を変更
colnames(frq16_Tw2) <- c("Word","Freq")
head(frq16_Tw2)
Word Freq
24 自民党 3906
28 高市 3490
8 安倍 1912
14 早苗 1885
19 河野 1765
11 岸田 1438
#ggplot2で棒グラフを描く
#reorderは並び順指定
#stat="identity"はデータラベルつけるときに必要
#fill=ーFreqにすると値が大きいほど色が濃くなる
#coord_flip()を追加すると、x軸とy軸が入れ替わる
#geom_textとlabelで棒グラフにラベル(Freq)を追加。hjustはラベルの位置
library(ggplot2)
par(family = "HiraKakuProN-W3")
ggplot(frq16_Tw2, aes(x=reorder(Word, Freq), y=Freq))+
geom_bar(aes(y=Freq,fill=-Freq),stat="identity") +
xlab("")+
theme_gray (base_family = "HiraKakuPro-W3") +
geom_text(aes(x=reorder(Word,Freq),y=Freq,label = Freq), hjust=-0.1,colour = " blue", size = 2.5) +
coord_flip()
了