Kaitlin Kavlie PSYC-541 Lab #4: Rtweet Analysis
The well-known person I chose to analyze on Twitter was Elon Musk, whose Twitter handle is ‘@elonmusk’.
I used the first code below to create a data set of the top tweets about Elon Musk.
elonmusk <- search_tweets("elon_musk", n = 1000, include_rts = F)
Downloading [=======>---------------------------------] 20%
Downloading [===========>-----------------------------] 30%
Downloading [===============>-------------------------] 40%
Downloading [===================>---------------------] 50%
Downloading [========================>----------------] 60%
Downloading [============================>------------] 70%
Downloading [================================>--------] 80%
Downloading [====================================>----] 90%
Downloading [=========================================] 100%
Then, I used the code below to create a table of the top tweets about Elon.
elonmusk %>%
select(text, retweet_count) %>%
top_n(25) %>% # get the top 25 most popular tweets
arrange(-retweet_count) %>% # sort in descending order of popularity
datatable()
Selecting by retweet_count
The table created above allows you to see the top 28 tweets about Elon Musk, in descending order by number of retweets. The most retweeted was a tweet referring to Elon Musk’s business Tesla.
Using the get_timeline code below, I created a data set of Elon Musk’s tweets.
elon_tweets <- get_timeline("elonmusk", n = 5000)
Then I used the glimpse function to preview the dataset.
glimpse(elon_tweets)
Rows: 21
Columns: 90
$ user_id <chr> "44196397", "44196397", "44196397", "44196397", "44196397", "44196397", "44196397", "44196397", "44196397", "4419639~
$ status_id <chr> "1495835133332631563", "1495824937269055495", "1495824820956762113", "1495812910018445315", "1495812568585277441", "~
$ created_at <dttm> 2022-02-21 18:57:41, 2022-02-21 18:17:10, 2022-02-21 18:16:43, 2022-02-21 17:29:23, 2022-02-21 17:28:01, 2022-02-21~
$ screen_name <chr> "elonmusk", "elonmusk", "elonmusk", "elonmusk", "elonmusk", "elonmusk", "elonmusk", "elonmusk", "elonmusk", "elonmus~
$ text <chr> "@BRO_SPI_Airport @SpacePadreIsle @SpaceX Sounds good, we will send one over", "@martiandoge @SteveofRivia @almenese~
$ source <chr> "Twitter for iPhone", "Twitter for iPhone", "Twitter for iPhone", "Twitter for iPhone", "Twitter for iPhone", "Twitt~
$ display_text_width <dbl> 34, 19, 1, 59, 87, 127, 84, 69, 51, 44, 116, 2, 1, 17, 139, 1, 24, 164, 4, 36, 164
$ reply_to_status_id <chr> "1495816234948046851", "1495814039339175936", "1495820443344904193", "1495812568585277441", "1495787975774552074", "~
$ reply_to_user_id <chr> "1311662284469604352", "1357405356100489216", "30699048", "44196397", "1083699592699543552", "1389400996426702848", ~
$ reply_to_screen_name <chr> "BRO_SPI_Airport", "martiandoge", "BillyM2k", "elonmusk", "SpacePadreIsle", "SteveofRivia", "cgpgrey", "d4t4wr4ngl3r~
$ is_quote <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALS~
$ is_retweet <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,~
$ favorite_count <int> 954, 684, 2182, 2440, 5110, 3374, 956, 4704, 1974, 0, 0, 6666, 16071, 5807, 4817, 18923, 22217, 88877, 2346, 13156, ~
$ retweet_count <int> 88, 50, 132, 153, 313, 318, 81, 215, 167, 3171, 1726, 213, 649, 351, 585, 742, 2838, 11722, 200, 640, 183
$ quote_count <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ reply_count <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ hashtags <list> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ symbols <list> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ urls_url <list> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, <"spacex.com/launches", "twitter.com/i/broadcasts/1…">, NA, NA, NA, NA, NA, ~
$ urls_t.co <list> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, <"https://t.co/bJFjLCzWdK", "https://t.co/HIeJL2TVUY">, NA, NA, NA, NA, NA, ~
$ urls_expanded_url <list> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, <"http://spacex.com/launches", "https://twitter.com/i/broadcasts/1yoJMWDYwek~
$ media_url <list> NA, NA, NA, NA, NA, NA, NA, NA, NA, "http://pbs.twimg.com/amplify_video_thumb/1495771593695391744/img/PqyZ3IxH9ct6PK~
$ media_t.co <list> NA, NA, NA, NA, NA, NA, NA, NA, NA, "https://t.co/XIDjbJtDPz", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ media_expanded_url <list> NA, NA, NA, NA, NA, NA, NA, NA, NA, "https://twitter.com/SpaceX/status/1495771647680212996/video/1", NA, NA, NA, NA~
$ media_type <list> NA, NA, NA, NA, NA, NA, NA, NA, NA, "photo", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ ext_media_url <list> NA, NA, NA, NA, NA, NA, NA, NA, NA, "http://pbs.twimg.com/amplify_video_thumb/1495771593695391744/img/PqyZ3IxH9ct6P~
$ ext_media_t.co <list> NA, NA, NA, NA, NA, NA, NA, NA, NA, "https://t.co/XIDjbJtDPz", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ ext_media_expanded_url <list> NA, NA, NA, NA, NA, NA, NA, NA, NA, "https://twitter.com/SpaceX/status/1495771647680212996/video/1", NA, NA, NA, NA~
$ ext_media_type <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ mentions_user_id <list> <"1311662284469604352", "1083699592699543552", "34743251">, <"1357405356100489216", "1389400996426702848", "5648639~
$ mentions_screen_name <list> <"BRO_SPI_Airport", "SpacePadreIsle", "SpaceX">, <"martiandoge", "SteveofRivia", "almeneses1", "SawyerMerritt">, <"~
$ lang <chr> "en", "en", "und", "en", "en", "en", "en", "en", "en", "en", "en", "und", "und", "en", "en", "und", "fr", "en", "en~
$ quoted_status_id <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ quoted_text <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ quoted_created_at <dttm> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ quoted_source <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ quoted_favorite_count <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ quoted_retweet_count <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ quoted_user_id <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ quoted_screen_name <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ quoted_name <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ quoted_followers_count <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ quoted_friends_count <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ quoted_statuses_count <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ quoted_location <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ quoted_description <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ quoted_verified <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ retweet_status_id <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, "1495771647680212996", "1495767751222181888", NA, NA, NA, NA, NA, NA, NA, NA, N~
$ retweet_text <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, "Liftoff! https://t.co/XIDjbJtDPz", "Watch Falcon 9 launch 46 Starlink satellit~
$ retweet_created_at <dttm> NA, NA, NA, NA, NA, NA, NA, NA, NA, 2022-02-21 14:45:25, 2022-02-21 14:29:56, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ retweet_source <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, "Twitter Media Studio - LiveCut", "Twitter Media Studio", NA, NA, NA, NA, NA, N~
$ retweet_favorite_count <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, 25136, 10718, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ retweet_retweet_count <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, 3171, 1726, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ retweet_user_id <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, "34743251", "34743251", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ retweet_screen_name <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, "SpaceX", "SpaceX", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ retweet_name <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, "SpaceX", "SpaceX", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ retweet_followers_count <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, 20246925, 20246925, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ retweet_friends_count <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, 100, 100, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ retweet_statuses_count <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, 5721, 5721, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ retweet_location <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, "Hawthorne, CA", "Hawthorne, CA", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ retweet_description <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, "SpaceX designs, manufactures and launches the world’s most advanced rockets an~
$ retweet_verified <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, TRUE, TRUE, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ place_url <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ place_name <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ place_full_name <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ place_type <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ country <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ country_code <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ geo_coords <list> <NA, NA>, <NA, NA>, <NA, NA>, <NA, NA>, <NA, NA>, <NA, NA>, <NA, NA>, <NA, NA>, <NA, NA>, <NA, NA>, <NA, NA>, <NA, ~
$ coords_coords <list> <NA, NA>, <NA, NA>, <NA, NA>, <NA, NA>, <NA, NA>, <NA, NA>, <NA, NA>, <NA, NA>, <NA, NA>, <NA, NA>, <NA, NA>, <NA, ~
$ bbox_coords <list> <NA, NA, NA, NA, NA, NA, NA, NA>, <NA, NA, NA, NA, NA, NA, NA, NA>, <NA, NA, NA, NA, NA, NA, NA, NA>, <NA, NA, NA, N~
$ status_url <chr> "https://twitter.com/elonmusk/status/1495835133332631563", "https://twitter.com/elonmusk/status/1495824937269055495~
$ name <chr> "Elon Musk", "Elon Musk", "Elon Musk", "Elon Musk", "Elon Musk", "Elon Musk", "Elon Musk", "Elon Musk", "Elon Musk"~
$ location <chr> "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""
$ description <chr> "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""
$ url <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ protected <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALS~
$ followers_count <int> 74490914, 74490914, 74490914, 74490914, 74490914, 74490914, 74490914, 74490914, 74490914, 74490914, 74490914, 744909~
$ friends_count <int> 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109
$ listed_count <int> 86579, 86579, 86579, 86579, 86579, 86579, 86579, 86579, 86579, 86579, 86579, 86579, 86579, 86579, 86579, 86579, 8657~
$ statuses_count <int> 16932, 16932, 16932, 16932, 16932, 16932, 16932, 16932, 16932, 16932, 16932, 16932, 16932, 16932, 16932, 16932, 169~
$ favourites_count <int> 12177, 12177, 12177, 12177, 12177, 12177, 12177, 12177, 12177, 12177, 12177, 12177, 12177, 12177, 12177, 12177, 1217~
$ account_created_at <dttm> 2009-06-02 20:12:29, 2009-06-02 20:12:29, 2009-06-02 20:12:29, 2009-06-02 20:12:29, 2009-06-02 20:12:29, 2009-06-02 ~
$ verified <lgl> TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TR~
$ profile_url <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ profile_expanded_url <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ account_lang <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ profile_banner_url <chr> "https://pbs.twimg.com/profile_banners/44196397/1576183471", "https://pbs.twimg.com/profile_banners/44196397/1576183~
$ profile_background_url <chr> "http://abs.twimg.com/images/themes/theme1/bg.png", "http://abs.twimg.com/images/themes/theme1/bg.png", "http://abs.~
$ profile_image_url <chr> "http://pbs.twimg.com/profile_images/1489375145684873217/3VYnFrzx_normal.jpg", "http://pbs.twimg.com/profile_images/~
Lastly, I used the code below to create a data table of Elon’s most used hashtags.
elon_tweets %>%
select(hashtags) %>% # Focus on the hashtags
unnest(cols = c(hashtags)) %>% # Separate multiple hashtags
mutate(hashtags = tolower(hashtags)) %>% # make all hashtags lowercase
count(hashtags, sort=TRUE) %>%
datatable()
The table above shows Elon Musk’s most used hastag, as I found that he only has one.
Using the below I created a table of dates and corresponding number of times Elon tweeted that particular date.
elon_tweets %>%
group_by(day = date(created_at)) %>% # extract the date, group by it
summarize(tweets_per_day = n()) # count the number of tweets each day
Then I used the code shown below to find the average number of times Elon tweets a day.
elon_tweets %>%
group_by(day = date(created_at)) %>%
summarize(tweets_per_day = n()) %>%
summarize(mean(tweets_per_day))
On average, Elon tweets 8 times a day.
elon_tweets %>%
mutate(day = date(created_at)) %>%
plot_ly(x = ~day) %>%
add_histogram() %>%
layout(title = "Number of tweets from @elonmusk")
NA
The plotly histogram above shows that Elon tweeted the most between January 26th to 28th , and tweeted the least January 8th through 10th.
I incorporated the time zone factor using the tz code below.
tz(elon_tweets$created_at)
[1] "UTC"
Then the code below was used to set the time zone to Los Angeles and create a table listing his number of tweets for each hour of the day.
elon_tweets %>%
mutate(time = with_tz(created_at, "America/Los_Angeles")) %>%
mutate(time = hour(time)) %>%
count(time) %>%
datatable(options = (list(pageLength = 24)), rownames = F)
NA
Then I used this code to create a plotly histogram of number of tweets coordinated to each hour of the day.
elon_tweets %>%
mutate(time = with_tz(created_at, "America/Los_Angeles")) %>% # convert to Los Angeles time zone
mutate(time = hour(time)) %>% # extract the hour
plot_ly(x = ~time) %>% # create plotly graph
add_histogram() %>%
layout(title = "When Does @elonmusk Tweet?",
xaxis = list(title = "Time of Day (0 = midnight)"),
yaxis = list(title = "Number of Tweets"))
NA
The plotly histogram and the table displaying the number of tweets coordinated with the time of day shows Elon tweets least frequently at 5 AM and most frequently around 12 to 1 PM and 2 to 3 PM.
Using this code I created a table for the weekdays and number of tweets made on each of the days.
elon_tweets %>%
mutate(Day = wday(created_at,
label = T)) %>%
count(Day) %>%
datatable(rownames = F)
NA
Then I created a plotly histogram of the number of tweets for each day of the week by using the code shown below.
elon_tweets %>%
mutate(Day = wday(created_at,
label = T)) %>%
plot_ly(x = ~Day) %>%
add_histogram() %>%
layout(title = "When Does @elonmusk Tweet?",
xaxis = list(title = "Days of the Week"),
yaxis = list(title = "Number of Tweets"))
NA
The data table and plotly histogram displayed above show that Elon tweets fairly consistently throughout the week. He tweets the most on Thursdays with 77 tweets for that weekday, and he tweets the least on Saturdays with 44 tweets that day.
elon_tweets %>%
mutate(day = wday(created_at, label = T)) %>%
mutate(hour = hour(with_tz(created_at, "America/Los_Angeles"))) %>%
plot_ly(x = ~day, y = ~hour) %>%
add_histogram2d(nbinsx = 7, nbinsy = 24) %>%
layout(title = "When Does @elonmusk Tweet?",
xaxis = list(title = "Days of the Week"),
yaxis = list(title = "Hour of the day (0 = midnight)"))
NA
The plotly heatmap displayed above shows that the day and time Elon Musk has most frequently tweets at are Mondays at 3 PM. His second and third most popular day and times to tweet are Thursdays at 10 AM and 1 PM.