Skip to content

Instantly share code, notes, and snippets.

@raynamharris
Last active November 6, 2019 20:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save raynamharris/289c08c8a428f201345cce44e1f5a8fb to your computer and use it in GitHub Desktop.
Save raynamharris/289c08c8a428f201345cce44e1f5a8fb to your computer and use it in GitHub Desktop.
code for an `rtweet` analysis of tweets from SACNAS 2019
library(rtweet)
library(tidyverse)
library(magick)
library(cowplot)
statuses <- search_tweets('2019sacnas AND thinkbigdiversity OR TTLFilms', n=2000)
statusesslim <- statuses %>%
filter(is_retweet == "FALSE") %>%
select(screen_name, retweet_count, favorite_count, text) %>%
arrange(desc(favorite_count))
head(statusesslim)
nrow(statusesslim)
statusesslim %>%
select(retweet_count,favorite_count) %>%
colSums()
original <- statusesslim %>%
group_by(screen_name) %>%
summarize(n_tweets = n(),
n_fav = sum(favorite_count),
n_rt = sum(retweet_count),
mean_fav = round(mean(favorite_count), digits = 1),
mean_rt = round(mean(retweet_count), digits = 1)) %>%
filter(n_tweets >= 3) %>%
arrange(desc(n_fav))
head(original)
mytheme <- function(){
theme_minimal(base_size = 8) +
theme(panel.grid = element_blank())
}
img1 <- image_read("http://www.gradpost.ucsb.edu/images/default-source/default-album/sacnas.jpg?sfvrsn=1")
img2 <- image_read("https://pbs.twimg.com/media/EHbxW7vU0AAnWhZ?format=jpg&name=small")
img <- image_read("https://pbs.twimg.com/media/EIPMxsyWwBMdsHQ?format=jpg&name=4096x4096")
rast <- grid::rasterGrob(img, interpolate = T)
tweetsovertime <- ts_plot(statuses, "8 hour") +
#theme(mytheme) +
ggplot2::labs(y = "Number of tweets and retweets per 8 hours",
x = "Data collected from Twitter's REST API via rtweet",
title = "Total Twitter statuses with #2019SACNAS and #ThinkBigDiversity") +
theme_minimal(base_size = 8) +
theme(panel.grid = element_blank())
ggdraw(tweetsovertime) +
draw_image(img1, scale = 0.3, x = -0.25, y = 0.25) +
draw_image(img2, scale = 0.25, x = 0.3, y = 0.25)
original %>% top_n(15, n_tweets) %>%
ggplot() +
geom_bar(aes(x = reorder(screen_name, n_tweets), y = n_tweets),
stat = "identity", fill = "#505050") +
geom_text(aes(label = n_tweets, y = n_tweets, x = screen_name),
hjust=1, size = 2, color = "#E1E9E8") +
labs(x = NULL, y = "Tweets per user",
title = "Who tweeted #2019SACNAS and #ThinkBigDiversity the most?",
caption = "Photo credit: @alexcr_1") +
coord_flip() +
mytheme() +
annotation_custom(rast, ymin = 32.5, ymax = 80, xmin = -7)
a <- original %>% top_n(15, n_fav) %>%
ggplot() +
geom_bar(aes(x = reorder(screen_name, n_fav), y = n_fav),
stat = "identity", fill = "#002855") +
geom_text(aes(label = n_fav, y = n_fav, x = screen_name),
hjust=1, size = 2.5, color = "white") +
labs(x = NULL, y = "Total favorites", title = "Who recieved the most favorites?") +
coord_flip() +
mytheme()
b <- original %>% top_n(15, n_rt) %>%
ggplot() +
geom_bar(aes(x = reorder(screen_name, n_rt), y = n_rt),
stat = "identity", fill = "#DAAA00") +
geom_text(aes(label = n_rt, y = n_rt, x = screen_name),
hjust=1, size = 2.5, color = "black") +
labs(x = NULL, y = "Total retweets", title = "The most retweets?") +
coord_flip() +
mytheme()
plot_grid(a,b)
c <- original %>% top_n(15, mean_fav) %>%
ggplot() +
geom_bar(aes(x = reorder(screen_name, mean_fav), y = mean_fav),
stat = "identity", fill = "#002855") +
geom_text(aes(label = mean_fav, y = mean_fav, x = screen_name),
hjust=1, size = 2.5, color = "white") +
labs(x = NULL, y = "Average favorites per tweet",
subtitle = "Who averages the most favorites per tweet?") +
coord_flip() +
mytheme()
d <- original %>% top_n(15, mean_rt) %>%
ggplot() +
geom_bar(aes(x = reorder(screen_name, mean_rt), y = mean_rt),
stat = "identity", fill = "#DAAA00") +
geom_text(aes(label = mean_rt, y = mean_rt, x = screen_name),
hjust=1, size = 2.5, color = "black") +
labs(x = NULL, y = "Average retweets per tweet", subtitle = "The most retweets per tweet?") +
coord_flip() +
mytheme()
plot_grid(c,d)
foksatUCDavis <- c("alexcr_1", "Renetta_Tull", "RogersLabUCD",
"AnaMolinaGil3","MarkALopezPhD", "BeccaCalisi",
"LajoyceMboning", "Elva_Diaz11", "ctitusbrown",
"UCDavisSACNAS", "raynamharris", "TTLFilms", "vdiazochoa" ,
"BowyerJacques", "MCalderonDeLaBS", "sociovirology",
"jennguerra5", "LynneArcangel", "MidoriHr", "IzaiahOrnelas",
"Graham_Coop", "UCDavisBiotech", "UCDavisGlobal", "UCDavisCOE",
"UCDavisGrad", "UCDMicrobiome", "vs_farrar", "yggdrasil13751",
"MedinaYarazeth", "phylogenomics", "ucdavisbiology")
retweets_total <- statuses %>%
filter(is_retweet == "TRUE" | is_quote == "TRUE") %>%
select(screen_name, retweet_screen_name, retweet_count, text)
retweets_nonucd <- statuses %>%
filter(is_retweet == "TRUE" | is_quote == "TRUE") %>%
filter(!screen_name %in% foksatUCDavis) %>%
select(screen_name, retweet_screen_name, retweet_count, text)
nrow(retweets_nonucd) / nrow(retweets_total) * 100
e <- retweets_nonucd %>%
group_by(screen_name) %>%
summarize(n_rt = n()) %>%
arrange(desc(n_rt)) %>%
head(10) %>%
ggplot() +
geom_bar(aes(x = reorder(screen_name, n_rt), y = n_rt),
stat = "identity", fill = "#00acee") +
geom_text(aes(label = n_rt, y = n_rt, x = screen_name),
hjust=1, size = 2.5, color = "white") +
labs(x = "Non-UC Davis Retweeters", y = "No. retweets",
title = "Which non-UC Davis tweeters amplified our message?") +
coord_flip() +
mytheme()
f <- retweets_nonucd %>%
group_by(retweet_count,retweet_screen_name, text) %>%
summarize(n_rt = n()) %>%
arrange(desc(n_rt)) %>%
mutate(who.what = paste(retweet_screen_name, text, sep = " - "),
textslim = substr(who.what, start=1, stop=80),
percent = round((n_rt / retweet_count *100),2)) %>%
head(10) %>%
ggplot() +
geom_bar(aes(x = reorder(textslim, percent), y = percent),
stat = "identity", fill = "#00acee") +
geom_text(aes(label = percent, y = percent, x = textslim),
hjust=1, size = 2.5, color = "white") +
labs(x = "Original Tweeter and text", y = "% retweets by non-UC Davis Tweeters",
title = "Which tweets were shared most broadly?") +
coord_flip() +
mytheme()
plot_grid(e,f, nrow = 2)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment