Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Redditで遊ぼう #TokyoR 106
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
bob3bob3
June 10, 2023
Technology
790
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Redditで遊ぼう #TokyoR 106
Redditの Web API をRから操作していろいろなデータを抽出して遊ぶ。
bob3bob3
June 10, 2023
More Decks by bob3bob3
See All by bob3bob3
RとLLMで自然言語処理
bob3bob3
3
910
RでPSM分析
bob3bob3
1
450
Rでコンジョイント分析 2024年版
bob3bob3
0
2.4k
『改訂新版前処理大全』の話と Apache Parquet の話 #TokyoR
bob3bob3
0
1.5k
R言語の環境構築と基礎 Tokyo.R 112
bob3bob3
0
650
『データ可視化学入門』をPythonからRに翻訳した話(増強版)
bob3bob3
0
590
『データ可視化学入門』を PythonからRに翻訳した話
bob3bob3
1
670
qeMLパッケージの紹介
bob3bob3
0
2.7k
「国と音楽」 ~spotifyrを用いて~ #muana
bob3bob3
2
660
Other Decks in Technology
See All in Technology
Bucharest Tech Week 2026 - Guardians of the Cloud-Native Galaxy
edeandrea
PRO
0
120
iAEONの段階的リアーキテクト戦略 / iAEON's_Gradual_Re-architecture_Strategy
aeonpeople
0
230
SONiCの統計情報を取得したい
sonic
0
230
秘密度ラベル初心者が第1歩でつまづかないための「設計・運用」ポイント
seafay
PRO
0
220
AIはどのように 組織のアジリティを変えるのか?
junki
4
1k
サイバーエージェントにおけるAI推進戦略と変革への取り組み
shotatsuge
0
130
IaC コードを資産へ:AWS CDK 社内ライブラリと横断展開 / aws-summit-japan-2026
gotok365
5
1.1k
OTel × Datadog で 「AI活用」を計測し、改善に繋げる
shihochan
1
430
自分が詳しくない領域でAIを使う #プロヒス2026
konifar
13
5.3k
Agile and AI Redmine Japan 2026
hiranabe
3
290
アジャイルな経理と Claude Code と経営の未来
kawaguti
PRO
3
160
新しいUbuntu/GNOMEが使いたいからXからWaylandへ移行頑張ってるの巻 2026-06-20
nobutomurata
0
150
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
Paper Plane
katiecoart
PRO
1
51k
New Earth Scene 8
popppiees
3
2.3k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
480
Documentation Writing (for coders)
carmenintech
77
5.4k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Designing Experiences People Love
moore
143
24k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
290
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
71
40k
The Language of Interfaces
destraynor
162
27k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
Transcript
Redditで遊ぼう Tokyo.R #106 2023/06/10 @bob3bob3
Redditとは Wikipediaによると…… • Reddit(レディット)はアメリカ合衆国の掲示 板型ソーシャルニュースサイト。 • 主に英語圏のユーザーを対象とする。 • ニュース記事、画像のリンクやテキストを投 稿し、コメントをつけることが可能。
• 2021年1月時点の月間利用者数は 4億3000 万人。欧米ではTwitterユーザー数並び利用 時間を超える。
ブッコ抜く! RedditExtractoRパッケージを使うとRedditの公式APIからいろいろなデータが取得でき ます。 自然言語処理やネットワーク分析の勉強など、いろいろ遊べるリアルなデータが手に入 る。 Twitterのデータが取れなくなってガッカリしている方々もぜひ。 主な関数は以下。 • find_subreddits(): キーワードでsubreddit(板)を検索する。
• find_thread_urls(): 特定のsubredditからthread(スレ)のURLを抽出する。 • get_thread_content(): threadの詳細情報を抽出する。 • get_user_content(): ユーザーの詳細情報を抽出する。
Rのスレを抽出する find_thread_urls() library(conflicted) library(tidyverse) library(RedditExtractoR) thread_URLs <- find_thread_urls( sort_by = "top",
subreddit = "rstats", period = "month" ) |> drop_na() |> as_tibble() RのsubredditのURLは https://www.reddit.com/r/rstats/ 。 • find_thread_urls()を使って指定した板 (subreddit)から各スレのURLを抽出します。 • URLの赤文字の部分でsubredditを指定す る。 • ソート方法はhot、new、top、rising。 • periodは期間の指定でhour、day、week、 month、year、all。 • キーワードの設定もできます。 • なぜか空行が1行入るので最後にdrop_na() する。 • 最後は個人的な好みで tibbleにしてます。 • 取得の上限は1,000件です。
Rのスレを抽出する find_thread_urls()
各スレの詳細情報を取得する get_thread_contets() 先ほど取得したスレッドのリストの URLの情報を 使って、各スレの詳細情報を取得する。 1件あたり2秒ぐらいかかるので 100件ぐらいだと3 分ちょっとかかる。 取得した情報にはスレそのものの詳細情報と、ス レについたコメントの情報が含まれるのでそれぞ
れを取り出しておく。 thread_contents <- thread_URLs |> pull(url) |> get_thread_content() # 各スレの詳細情報 threads_info <- thread_contents |> pluck("threads") # 各スレについたコメントの情報 comments_info <- thread_contents |> pluck("comments")
スレッドの詳細情報
スレのコメント
スコアの高いスレ #scoreの高いスレ threads_top10 <- threads_info |> slice_max(score, n=10) |> select(author,
title, score, url) "マイクロソフトはCRAN Time Machineの保守を終了し ました"
スコアの高いコメント #scoreの高いコメント comments_top10 <- comments_info |> slice_max(score, n=10) |> select(author,
score, comment, url) "人々がつまづくのを見るので、これについての重要な注 意:!!はtidyverseの関数呼び出しで*だけ*動作します。そ れは*全体的なR言語の機能ではありません *。"
ネットワークにしてみる 「誰が立てたスレッドに誰がコメントしたか?」という 視点でネットワークにしてみる。 • URLをキーにスレの情報とコメントの情報を join。 • 削除されたアカウントは取り除く • スレを立てた場合とコメントした場合でノード
を分けたいので、スレを立てた場合はアカウ ント名の後に「_poster」を付ける。 edges_raw <- threads_info |> select(url, author) |> left_join( comments_info |> select(url, author), by = "url", suffix = c(".thread", ".comment"), ) |> select(!url) |> drop_na() |> dplyr::filter( author.thread != "[deleted]" | author.comment != "[deleted]" ) |> mutate( author.thread = paste0( author.thread, "_poster" ))
ノードのリストを作る ノードのリストを作る • せっかくなので各ノードの次数も igraphで計 算しておく。 # ノードごとの次数を計算 library(igraph) dgr
<- edges_raw |> graph_from_data_frame() |> degree() # ノードのリストを作る nodes <- edges_raw |> select(author.thread) |> distinct() |> mutate(type = "poster") |> rename(id = author.thread) |> bind_rows( bi_graph |> select(author.comment) |> distinct() |> mutate(type = "commenter") |> rename(id = author.comment) ) |> left_join( tibble( id = dgr |> names(), dgr = dgr ), by = "id")
エッジのリストを作る スレ主とコメント主でグループ化し件数をカウント。 後でCytoscapeに読み込ませたいので、列名をス レ主はtarget、コメント主はsourceに変更。 # あとでCytoscapeに読ませる関係で # 列名をsourceとtargetに変更 edges <-
edges_raw |> summarise( freq = n(), .by = c(author.thread, author.comment) ) |> rename( source = author.comment, target = author.thread )
Cytoscapeで描画 ネットワーク図の描画は Cytoscapeが圧倒的に優 れている。 • Rcy3パッケージでRからCytoscapeを操作で きる。Rcy3はCRANではなくBioconductorか らインストールする。 • 事前にCytoscapeをインストールし、
Cytoscape内でCyRESTをインストールして おく。 • また、createNetworkFromDataFrames()を 実行する前にCytoscapeを立ち上げておく。 # install.packages("BiocManager") # BiocManager::install("RCy3") library(RCy3) createNetworkFromDataFrames( nodes, edges, title="rstats network", collection="Reddit Network" )
Cytoscapeで描画 見栄えはCytoscapeでいじってます。 赤がスレ主。
Enjoy!