R言語でrtweetパッケージを使う
※Twitter(現X)の仕様変更により、以下のコードは実行できなくなっています。
.tgzからrtweetをインストール
「R言語」から「Twitter」のツイート情報を取得する際に、「twitteR」パッケージを使っています。
Twitter連携については、「twitteR」より「rtweet」の方が主流のようなので、使ってみました。
まず、「rtweet」をインストールします。
※使用環境は「macOS Ventura 13.1」です。
# rtweetインストール
install.packages("rtweet")
trying URL 'https://mirror.las.iastate.edu/CRAN/bin/macosx/big-sur-arm64/contrib/4.2/rtweet_1.0.2.tgz'
Content type 'application/x-gzip' length 869848 bytes (849 KB)
==================================================
downloaded 849 KB
The downloaded binary packages are in
/var/folders/44/3m206wpj4db2vyqz3bt_ltkm0000gn/T//Rtmp7kCV2w/downloaded_packages
# 「trying URL」メッセージが出てうまくいかないので tgz をダウンロードしてインストール
# ブラウザで 'https://mirror.las.iastate.edu/CRAN/bin/macosx/big-sur-arm64/contrib/4.2/rtweet_1.0.2.tgz'にアクセスしダンロード
setwd("~/Downloads")
install.packages("rtweet_1.0.2.tgz", repos = NULL, type = "source")
アカウントを指定してツイートを取得
「get_timeline」関数を利用してツイートを取得します。
「NHK紅白歌合戦」のアカウント「@nhk_kouhaku」から最新ツイート1000件取得してみます(取得時は2023年0時過ぎ)。
# 最新のツイート1000件取得
nhk_kohaku_tw <- get_timeline("nhk_kouhaku", n = 1000)
Error in `default_cached_auth()`:
! No default authentication found. Please call `auth_setup_default()`
Run `rlang::last_error()` to see where the error occurred.
# 上記メッセージが出た場合、まず認証設定。「auth_setup_default()」を実行
auth_setup_default()
ℹ The package `httpuv` is required.
✖ Would you like to install it?
1: Yes
2: No
# (略)
# (ブラウザ画面に切り替わりTwitter認証の許可を求められる)
The downloaded binary packages are in
# (略)
Waiting for authentication in browser...
Press Esc/Ctrl + C to abort
Authentication complete.
「twitteR」の場合、Twitterから取得した4つのキーが必要ですが、「rtweet」では自分のTwitterのアカウント経由で認証許可を取得します。
# リツイート数が多い順に並べ替える場合
nhk_kohaku_tw <- get_timeline("nhk_kouhaku", n = 1000)
nhk_kohaku_df <- nhk_kohaku_tw %>%
arrange(desc(retweet_count)) %>%
select(text, retweet_count)
# データ型を確認
class(nhk_kohaku_df)
[1] "tbl_df" "tbl" "data.frame"
head(nhk_kohaku_df)
# A tibble: 6 × 2
text retwe…¹
<chr> <int>
1 "【♥♥このツイートをRT&いいね♥♥】\n\n#なにわ男子 の紅白初出場のステージを\n… 171312
2 "「第73回NHK紅白歌合戦」\n\n出場歌手が決定✨\n\n紅組21組、白組21組。\n初出場… 123714
3 "「第73回NHK紅白歌合戦」\n\n🎊曲目が決定🎊\n\nhttps://t.co/lxGhe6BlYI\n\n#NH… 79152
4 "「第73回NHK紅白歌合戦」\n\n🎊曲順が決定🎊\n\n🔽詳しくはこちら\nhttps://t.co… 62573
5 "══════════\n ONE PIECE UTA LIVE \n RED×WHITE\n══════════\n\nウタ、… 55701
6 "/\nいよいよ今夜 7:20~\n「第73回NHK紅白歌合戦」📢\n\\n\n🎊みどころを… 49221
# … with abbreviated variable name ¹retweet_count
# 列名確認
colnames(nhk_kohaku_tw)
[1] "created_at" "id"
[3] "id_str" "full_text"
[5] "truncated" "display_text_range"
#・・・
[41] "withheld_copyright" "withheld_in_countries"
[43] "possibly_sensitive_appealable"
投稿時間を指定してツイート取得
「NHK紅白歌合戦」の放送が始まった時間(2022年12月31日19時20分)以降のツイートに絞り込みます。
# 2022年12月31日19時20分以降の投稿を選ぶ
# 列項目は、 text, retweet_count, created_at の3つにする
# データ型を確認
class(nhk_kohaku_tw$created_at)
[1] "POSIXct" "POSIXt"
nhk_kohaku_df2 <- nhk_kohaku_tw %>%
arrange(desc(retweet_count)) %>%
select(text, retweet_count, created_at) %>%
filter(created_at >= "2022-12-31 19:20:00")
nhk_kohaku_df2
# A tibble: 123 × 3
text retwe…¹ created_at
<chr> <int> <dttm>
1 "【♥♥このツイートをRT&いいね♥♥】\n\n#なにわ男子 の紅白… 171312 2022-12-31 19:34:26
2 "══════════\n ONE PIECE UTA LIVE \n RED×WHITE\… 55701 2022-12-31 21:04:12
RMeCabとNEologdを使う
いい機会なので、上記で作成したデータフレーム「nhk_kohaku_df2」に形態素解析をかけたツイートを収録する練習もしました。
形態素解析に「RMeCab」、辞書に「NEologd」を使いました。
# text列を形態素解析。その解析値を、データフレームのetxt2列に収録する
# 辞書はNEologdを使用
# リツイート数順
# 指定した変数(text、retweet_count、created_at)でデータをグループ化
nhk_kohaku_df <- nhk_kohaku_df2 %>%
nest_by(text, retweet_count, created_at) %>%
mutate(
text2 = list(
RMeCabC(text, dic = "//usr/local/lib/mecab/dic/ipadic/mecab-user-dict-seed.20200910.csv.dic")
)
) %>% arrange(desc(retweet_count))
「text2」列に「RMeCabC」関数で処理されたテキストが「list型」のデータとして収録されています。
nhk_kohaku_df
# A tibble: 123 × 5
# Rowwise: text, retweet_count, created_at
text retwe…¹ created_at data text2
<chr> <int> <dttm> <list<> <list>
1 "【♥♥このツイートをRT&いいね♥♥】\n\n#なにわ… 171312 2022-12-31 19:34:26 [1 × 0] <list>
2 "══════════\n ONE PIECE UTA LIVE \n … 55701 2022-12-31 21:04:12 [1 × 0] <list>
3 "🎵 Good Luck!\n────────\n⬜️ SixTONES\n\n⚡NH… 10755 2022-12-31 22:14:55 [1 × 0] <list>
「pluck」を使い内容を確認します。
nhk_kohaku_df %>%
pluck("text2", 2) %>% unlist()
名詞 名詞 名詞 名詞 名詞 記号 名詞
"══════════" "ONE PIECE" "UTA" "LIVE" "RED" "×" "WHITE"
#(略)
関数を使い名詞を取り出しやすく
特定の行の「text2」列の内容は、ツイートに形態素解析にかけたものです。
単語の並びからどういうツイートなのかわかりやすくするために、「名詞」のみ抽出します。
加えて、確認するたびに上記のパイプ処理を実行するのは多少面倒なので、関数を使って扱いやすくしました。
# 形態素解析した結果を取り出しやすくするための関数)
# 名刺だけを抽出
kohaku_func <- function(x) {
tw_result <- nhk_kohaku_df %>%
pluck("text2", x) %>%
unlist()
tw_result2 <- tw_result[names(tw_result) %in% "名詞"]
return(tw_result2)
}
kohaku_func(2)
名詞 名詞 名詞 名詞 名詞 名詞 名詞
"══════════" "ONE PIECE" "UTA" "LIVE" "RED" "WHITE" "══════════"
名詞 名詞 名詞 名詞 名詞 名詞 名詞
"ウタ" "最高" "ライブ" "!!!!!" "#" "NHK" "紅白"
名詞 名詞 名詞 名詞 名詞 名詞 名詞
"#" "みんな" "シェア" "新時代" "NHKプラス" "https" "://"
名詞 名詞 名詞 名詞 名詞 名詞 名詞
"t" "." "co" "/" "MuJbhamYPD" "https" "://"
名詞 名詞 名詞 名詞 名詞 名詞 名詞
"t" "." "co" "/" "M" "5w" "CufwEgo"
データフレームオブジェクトの保存
リスト型データを収録したデータフレームを保存します。
「write_csv」関数などを使ってCSV形式に保存する場合、数字と文字列データは保存できますが、データフレーム型のデータは保存できません。
このため、「RDS」形式で保存します。
# RDSの出力
nhk_kohaku_df %>%
write_rds("nhk_kohaku_df.rds")
# RDSの入力
nhk_kohaku_rdf <- read_rds("nhk_kohaku_df.rds")
# 確認
nhk_kohaku_rdf
# A tibble: 123 × 5
# Rowwise: text, retweet_count, created_at
text retwe…¹ created_at data text2
<chr> <int> <dttm> <list<> <list>
1 "【♥♥このツイートをRT&いいね♥♥】\n\n#なにわ… 171312 2022-12-31 19:34:26 [1 × 0] <list>
2 "══════════\n ONE PIECE UTA LIVE \n … 55701 2022-12-31 21:04:12 [1 × 0] <list>
3 "🎵 Good Luck!\n────────\n⬜️ SixTONES\n\n⚡NH… 10755 2022-12-31 22:14:55 [1 × 0] <list>
nhk_kohaku_rdf %>%
pluck("text2", 2) %>% unlist()
名詞 名詞 名詞 名詞 名詞 記号 名詞
"══════════" "ONE PIECE" "UTA" "LIVE" "RED" "×" "WHITE"
#(略)
参考サイト