Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Redditで遊ぼう #TokyoR 106
Search
bob3bob3
June 10, 2023
Technology
800
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
1.1k
RでPSM分析
bob3bob3
1
490
Rでコンジョイント分析 2024年版
bob3bob3
0
2.7k
『改訂新版前処理大全』の話と Apache Parquet の話 #TokyoR
bob3bob3
0
1.5k
R言語の環境構築と基礎 Tokyo.R 112
bob3bob3
0
670
『データ可視化学入門』をPythonからRに翻訳した話(増強版)
bob3bob3
0
620
『データ可視化学入門』を PythonからRに翻訳した話
bob3bob3
1
680
qeMLパッケージの紹介
bob3bob3
0
3k
「国と音楽」 ~spotifyrを用いて~ #muana
bob3bob3
2
680
Other Decks in Technology
See All in Technology
TinyGo 開発サイクルを高速化する:Go で作るエミュレータ入門
zozotech
PRO
1
730
顧客に向き合う開発組織へ。リアーキテクチャとフィーチャーチーム化で挑む組織改革
safie
0
1.8k
AIエージェントの自己改善をどう設計するか / How to Design Self-Improvement for AI Agents
22mi
23
15k
AIネイティブプロダクトで顧客価値を最大化するプロダクトエンジニアとFDEの協働
righttouch
PRO
0
300
日経電子版を支えていく Kasane Design System/fec_fukuoka
nikkei_engineer_recruiting
0
1.5k
事業課題から技術的負債に向き合う
sansantech
PRO
2
1.7k
積み重なった技術負債への挑戦 〜初手としての全社ゴト化〜
techtekt
PRO
0
1.1k
Deployment の 先にある AI Agent 基盤 - kagent vNext、Agent Substrate、Hermes から読み解く Agent Runtime の現在地 / k8s-matsuri-2-ai-agent-platform-amsy810
masayaaoyama
3
550
Amazon Quick on DesktopがIAM Identity Centerで動かない理由
yukiogawa
0
190
空間オーディオで過去の 自分(ゴースト)と競うランニング 〜HealthKitのルートを足音に変える実装〜
nao_randd
0
210
beyond jj: config & tools ecosystem
indirect
0
380
山手線を徒歩で一周してわかった、 位置情報アプリは「足」が最強のデバッガー
hinakko
0
150
Featured
See All Featured
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
540
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
900
How to Think Like a Performance Engineer
csswizardry
28
2.8k
Prompt Engineering for Job Search
mfonobong
0
450
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
720
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Heart Work Chapter 1 - Part 1
lfama
PRO
10
36k
Deep Space Network (abreviated)
tonyrice
0
310
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1k
Git: the NoSQL Database
bkeepers
PRO
432
67k
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!