This is an R Markdown Notebook.

Assignment:

  1. Get Trump’s tweets (realDonaldTrump) using get_timeline(). (You won’t need to use search_tweets() for this assignment.)
  2. Find which hashtags he uses most and make a table.
  3. Make a table of the number of tweets each day, and find the overall average number of tweets per day.
  4. Create a plotly graphic of the number of tweets per day.
  5. Create a table and a plotly histogram of the hour of the day that Trump tweets.
  6. Create a table and a plotly histogram of the week days that Trump tweets.
  7. Create a plotly heatmap of the weekday and time of day that Trump tweets.
  8. Annotate the analysis and publish to rpubs.com.
library(tidyverse)
library(DT)
library(plotly)               # This package does interactive graphs
library(rtweet)               # This package accesses Twitter data
library(lubridate)  
token <- create_token(
  app = "APratt Rtweet project",
  consumer_key = "Qg4MasRdxRvyJ9rL4wYMzY1RG",
  consumer_secret = "1QBoTBPpLAUer8c6jhYHgNd8W4GCN8UTcXJFrGBenB70GOYmXO",
  access_token = "18624251-pUH8Yw2qkNU1UJlYe7ZDVGy7x8O06f3L0jYKpSa1N",
  access_secret = "A6yQ64IrhYwKbF6vUKmyjVYSbawPVHtnsW9d9NTQUnQHR")

get_token()        # this shows the token. make sure key is the same as consumer_key above
<Token>
<oauth_endpoint>
 request:   https://api.twitter.com/oauth/request_token
 authorize: https://api.twitter.com/oauth/authenticate
 access:    https://api.twitter.com/oauth/access_token
<oauth_app> APratt Rtweet project
  key:    Qg4MasRdxRvyJ9rL4wYMzY1RG
  secret: <hidden>
<credentials> oauth_token, oauth_token_secret
---
trump_tweets <- get_timeline("realDonaldTrump", n = 10000)

First, let’s get some tweets.

trump_tweets %>% 
  select(hashtags) %>% 
  unnest() %>% 
  mutate(hashtags = tolower(hashtags)) %>% 
  count(hashtags, sort = TRUE) %>% 
  datatable()

Let’s learn some hashtags–“kag” means Keep America Great, “democratshateamerica” means…you know what? Let’s stop there.

trump_tweets %>% 
  group_by(day = date(created_at)) %>% 
  summarize(tweets_per_day = n())

Donald Trump tweets a lot. Grab some covfefe and let’s dive in.

trump_tweets %>% 
  group_by(day = date(created_at)) %>% 
  summarize(tweets_per_day = n()) %>% 
  summarize(mean(tweets_per_day))

Data pulled today (2/25/2020) puts the mean number of tweets today at 28/29 My teenage nephew tweets about three times a week. Twitter is all but dead as a social media platform.

trump_tweets %>% 
  mutate(day = date(created_at)) %>% 
  plot_ly(x = ~day, marker = list(color = viridis::viridis_pal(option = "B", direction = -1)(25))) %>% 
  add_histogram() %>% 
  layout(title = "How Many Times Does the President Tweet Every Day?",
         xaxis = list(title = "Day"),
         yaxis = list(title = "Number of Tweets"))

Look, I made them orange.

trump_tweets %>%
  mutate(time = with_tz(created_at, "America/New_York")) %>% 
  mutate(time = hour(time)) %>% 
  count(time) %>% 
  datatable(options = list(pagelength = 24), rownames = F)

Does…does he have HootSuite? Or does an intern tweet the things he mumbles in his sleep?

trump_tweets %>% 
  mutate(time = with_tz(created_at, "America/New_York")) %>% 
  mutate(time = hour(time)) %>% 
  plot_ly(x = ~time, marker = list(color = viridis::viridis_pal(option = "B", direction = -1)(50))) %>% 
  add_histogram() %>% 
  layout(title = "Time of Day the President Tweets for No Reason",
  xaxis = list(title = "Time of Day (0 = Midnight)"),
  yaxis = list(title = "Tweets"))

Mid-morning spike? And late afternoon and around 11 pm. Does he do other things? Do you think he has a throw away account and trolls people all day? Why am I so invested in this.

trump_tweets %>% 
  mutate(Day = wday(created_at, label = T)) %>% 
  count(Day) %>% 
  datatable(rownames = F)

Here’s a table showing the number of tweets per day of the week. Apparently, Sunday truly is the day of rest. Monday and Wednesday are very busy.

trump_tweets %>% 
  mutate(day = wday(created_at, label = T)) %>% 
  plot_ly(x = ~day, marker = list(color = viridis::viridis_pal(option = "B", direction = -1)(25))) %>% 
  add_histogram() %>% 
  layout(title = "Donald Trump Tweets by Day", 
         xaxis = list(title = "Day of the week"),
         yaxis = list(title = "Number of Tweets"))

This is a much prettier showcase of Wednesday’s rants.

trump_tweets %>% 
  mutate(day = wday(created_at, label = T)) %>% 
  mutate(hour = hour(with_tz(created_at, "America/New_York"))) %>%
  plot_ly(x = ~day, y = ~hour, colors = colorRamp(c("orange", "blue")), type = "heatmap") %>% 
  add_histogram2d(nbinsx = 7, nbinsy = 24) %>% 
  layout(title = "The President's Tweets by Hour and Day",
         xaxis = list(title = "Day of the week"),
         yaxis = list(title = "Time of day (0 = midnight)"))

Mid-day Wednesday is when he fires off the most tweets (relative to the other times and days). Middle of Saturday night is also very popular.

LS0tCnRpdGxlOiAiQVByYXR0IFJ0d2VldCIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKVGhpcyBpcyBhbiBbUiBNYXJrZG93bl0oaHR0cDovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbSkgTm90ZWJvb2suIAoKQXNzaWdubWVudDoKCjEuIEdldCBUcnVtcCdzIHR3ZWV0cyAocmVhbERvbmFsZFRydW1wKSB1c2luZyBnZXRfdGltZWxpbmUoKS4gKFlvdSB3b24ndCBuZWVkIHRvIHVzZSBzZWFyY2hfdHdlZXRzKCkgZm9yIHRoaXMgYXNzaWdubWVudC4pICAgCjIuIEZpbmQgd2hpY2ggaGFzaHRhZ3MgaGUgdXNlcyBtb3N0IGFuZCBtYWtlIGEgdGFibGUuICAKMy4gTWFrZSBhIHRhYmxlIG9mIHRoZSBudW1iZXIgb2YgdHdlZXRzIGVhY2ggZGF5LCBhbmQgZmluZCB0aGUgb3ZlcmFsbCBhdmVyYWdlIG51bWJlciBvZiB0d2VldHMgcGVyIGRheS4gIAo0LiBDcmVhdGUgYSBwbG90bHkgZ3JhcGhpYyBvZiB0aGUgbnVtYmVyIG9mIHR3ZWV0cyBwZXIgZGF5LiAgCjUuIENyZWF0ZSBhIHRhYmxlIGFuZCBhIHBsb3RseSBoaXN0b2dyYW0gb2YgdGhlIGhvdXIgb2YgdGhlIGRheSB0aGF0IFRydW1wIHR3ZWV0cy4gIAo2LiBDcmVhdGUgYSB0YWJsZSBhbmQgYSBwbG90bHkgaGlzdG9ncmFtIG9mIHRoZSB3ZWVrIGRheXMgdGhhdCBUcnVtcCB0d2VldHMuICAKNy4gQ3JlYXRlIGEgcGxvdGx5IGhlYXRtYXAgb2YgdGhlIHdlZWtkYXkgYW5kIHRpbWUgb2YgZGF5IHRoYXQgVHJ1bXAgdHdlZXRzLiAgCjguIEFubm90YXRlIHRoZSBhbmFseXNpcyBhbmQgcHVibGlzaCB0byBycHVicy5jb20uICAKCgpgYGB7cn0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoRFQpCmxpYnJhcnkocGxvdGx5KSAgICAgICAgICAgICAgICMgVGhpcyBwYWNrYWdlIGRvZXMgaW50ZXJhY3RpdmUgZ3JhcGhzCmxpYnJhcnkocnR3ZWV0KSAgICAgICAgICAgICAgICMgVGhpcyBwYWNrYWdlIGFjY2Vzc2VzIFR3aXR0ZXIgZGF0YQpsaWJyYXJ5KGx1YnJpZGF0ZSkgIApgYGAKCgpgYGB7cn0KdG9rZW4gPC0gY3JlYXRlX3Rva2VuKAogIGFwcCA9ICJBUHJhdHQgUnR3ZWV0IHByb2plY3QiLAogIGNvbnN1bWVyX2tleSA9ICJRZzRNYXNSZHhSdnlKOXJMNHdZTXpZMVJHIiwKICBjb25zdW1lcl9zZWNyZXQgPSAiMVFCb1RCUHBMQVVlcjhjNmpoWUhnTmQ4VzRHQ044VVRjWEpGckdCZW5CNzBHT1ltWE8iLAogIGFjY2Vzc190b2tlbiA9ICIxODYyNDI1MS1wVUg4WXcycWtOVTFVSmxZZTdaRFZHeTd4OE8wNmYzTDBqWUtwU2ExTiIsCiAgYWNjZXNzX3NlY3JldCA9ICJBNnlRNjRJcmhZd0tiRjZ2VUtteWpWWVNiYXdQVkh0bnNXOWQ5TlRRVW5RSFIiKQoKZ2V0X3Rva2VuKCkgICAgICAgICMgdGhpcyBzaG93cyB0aGUgdG9rZW4uIG1ha2Ugc3VyZSBrZXkgaXMgdGhlIHNhbWUgYXMgY29uc3VtZXJfa2V5IGFib3ZlCmBgYAoKYGBge3J9CnRydW1wX3R3ZWV0cyA8LSBnZXRfdGltZWxpbmUoInJlYWxEb25hbGRUcnVtcCIsIG4gPSAxMDAwMCkKYGBgCkZpcnN0LCBsZXQncyBnZXQgc29tZSB0d2VldHMuIAoKYGBge3J9CnRydW1wX3R3ZWV0cyAlPiUgCiAgc2VsZWN0KGhhc2h0YWdzKSAlPiUgCiAgdW5uZXN0KCkgJT4lIAogIG11dGF0ZShoYXNodGFncyA9IHRvbG93ZXIoaGFzaHRhZ3MpKSAlPiUgCiAgY291bnQoaGFzaHRhZ3MsIHNvcnQgPSBUUlVFKSAlPiUgCiAgZGF0YXRhYmxlKCkKYGBgCkxldCdzIGxlYXJuIHNvbWUgaGFzaHRhZ3MtLSJrYWciIG1lYW5zIEtlZXAgQW1lcmljYSBHcmVhdCwgImRlbW9jcmF0c2hhdGVhbWVyaWNhIiBtZWFucy4uLnlvdSBrbm93IHdoYXQ/IExldCdzIHN0b3AgdGhlcmUuCgpgYGB7cn0KdHJ1bXBfdHdlZXRzICU+JSAKICBncm91cF9ieShkYXkgPSBkYXRlKGNyZWF0ZWRfYXQpKSAlPiUgCiAgc3VtbWFyaXplKHR3ZWV0c19wZXJfZGF5ID0gbigpKQpgYGAKRG9uYWxkIFRydW1wIHR3ZWV0cyBhIGxvdC4gR3JhYiBzb21lIGNvdmZlZmUgYW5kIGxldCdzIGRpdmUgaW4uIAoKYGBge3J9CnRydW1wX3R3ZWV0cyAlPiUgCiAgZ3JvdXBfYnkoZGF5ID0gZGF0ZShjcmVhdGVkX2F0KSkgJT4lIAogIHN1bW1hcml6ZSh0d2VldHNfcGVyX2RheSA9IG4oKSkgJT4lIAogIHN1bW1hcml6ZShtZWFuKHR3ZWV0c19wZXJfZGF5KSkKYGBgCkRhdGEgcHVsbGVkIHRvZGF5ICgyLzI1LzIwMjApIHB1dHMgdGhlIG1lYW4gbnVtYmVyIG9mIHR3ZWV0cyB0b2RheSBhdCAyOC8yOSBNeSB0ZWVuYWdlIG5lcGhldyB0d2VldHMgYWJvdXQgdGhyZWUgdGltZXMgYSB3ZWVrLiBUd2l0dGVyIGlzIGFsbCBidXQgZGVhZCBhcyBhIHNvY2lhbCBtZWRpYSBwbGF0Zm9ybS4gCgpgYGB7cn0KdHJ1bXBfdHdlZXRzICU+JSAKICBtdXRhdGUoZGF5ID0gZGF0ZShjcmVhdGVkX2F0KSkgJT4lIAogIHBsb3RfbHkoeCA9IH5kYXksIG1hcmtlciA9IGxpc3QoY29sb3IgPSB2aXJpZGlzOjp2aXJpZGlzX3BhbChvcHRpb24gPSAiQiIsIGRpcmVjdGlvbiA9IC0xKSgyNSkpKSAlPiUgCiAgYWRkX2hpc3RvZ3JhbSgpICU+JSAKICBsYXlvdXQodGl0bGUgPSAiSG93IE1hbnkgVGltZXMgRG9lcyB0aGUgUHJlc2lkZW50IFR3ZWV0IEV2ZXJ5IERheT8iLAogICAgICAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiRGF5IiksCiAgICAgICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJOdW1iZXIgb2YgVHdlZXRzIikpCmBgYApMb29rLCBJIG1hZGUgdGhlbSBvcmFuZ2UuCgpgYGB7cn0KdHJ1bXBfdHdlZXRzICU+JQogIG11dGF0ZSh0aW1lID0gd2l0aF90eihjcmVhdGVkX2F0LCAiQW1lcmljYS9OZXdfWW9yayIpKSAlPiUgCiAgbXV0YXRlKHRpbWUgPSBob3VyKHRpbWUpKSAlPiUgCiAgY291bnQodGltZSkgJT4lIAogIGRhdGF0YWJsZShvcHRpb25zID0gbGlzdChwYWdlbGVuZ3RoID0gMjQpLCByb3duYW1lcyA9IEYpCmBgYApEb2VzLi4uZG9lcyBoZSBoYXZlIEhvb3RTdWl0ZT8gT3IgZG9lcyBhbiBpbnRlcm4gdHdlZXQgdGhlIHRoaW5ncyBoZSBtdW1ibGVzIGluIGhpcyBzbGVlcD8KCmBgYHtyfQp0cnVtcF90d2VldHMgJT4lIAogIG11dGF0ZSh0aW1lID0gd2l0aF90eihjcmVhdGVkX2F0LCAiQW1lcmljYS9OZXdfWW9yayIpKSAlPiUgCiAgbXV0YXRlKHRpbWUgPSBob3VyKHRpbWUpKSAlPiUgCiAgcGxvdF9seSh4ID0gfnRpbWUsIG1hcmtlciA9IGxpc3QoY29sb3IgPSB2aXJpZGlzOjp2aXJpZGlzX3BhbChvcHRpb24gPSAiQiIsIGRpcmVjdGlvbiA9IC0xKSg1MCkpKSAlPiUgCiAgYWRkX2hpc3RvZ3JhbSgpICU+JSAKICBsYXlvdXQodGl0bGUgPSAiVGltZSBvZiBEYXkgdGhlIFByZXNpZGVudCBUd2VldHMgZm9yIE5vIFJlYXNvbiIsCiAgeGF4aXMgPSBsaXN0KHRpdGxlID0gIlRpbWUgb2YgRGF5ICgwID0gTWlkbmlnaHQpIiksCiAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIlR3ZWV0cyIpKQpgYGAKTWlkLW1vcm5pbmcgc3Bpa2U/IEFuZCBsYXRlIGFmdGVybm9vbiBhbmQgYXJvdW5kIDExIHBtLiBEb2VzIGhlIGRvIG90aGVyIHRoaW5ncz8gRG8geW91IHRoaW5rIGhlIGhhcyBhIHRocm93IGF3YXkgYWNjb3VudCBhbmQgdHJvbGxzIHBlb3BsZSBhbGwgZGF5PyBXaHkgYW0gSSBzbyBpbnZlc3RlZCBpbiB0aGlzLgoKYGBge3J9CnRydW1wX3R3ZWV0cyAlPiUgCiAgbXV0YXRlKERheSA9IHdkYXkoY3JlYXRlZF9hdCwgbGFiZWwgPSBUKSkgJT4lIAogIGNvdW50KERheSkgJT4lIAogIGRhdGF0YWJsZShyb3duYW1lcyA9IEYpCmBgYApIZXJlJ3MgYSB0YWJsZSBzaG93aW5nIHRoZSBudW1iZXIgb2YgdHdlZXRzIHBlciBkYXkgb2YgdGhlIHdlZWsuIEFwcGFyZW50bHksIFN1bmRheSB0cnVseSBpcyB0aGUgZGF5IG9mIHJlc3QuIE1vbmRheSBhbmQgV2VkbmVzZGF5IGFyZSB2ZXJ5IGJ1c3kuIAoKYGBge3J9CnRydW1wX3R3ZWV0cyAlPiUgCiAgbXV0YXRlKGRheSA9IHdkYXkoY3JlYXRlZF9hdCwgbGFiZWwgPSBUKSkgJT4lIAogIHBsb3RfbHkoeCA9IH5kYXksIG1hcmtlciA9IGxpc3QoY29sb3IgPSB2aXJpZGlzOjp2aXJpZGlzX3BhbChvcHRpb24gPSAiQiIsIGRpcmVjdGlvbiA9IC0xKSgyNSkpKSAlPiUgCiAgYWRkX2hpc3RvZ3JhbSgpICU+JSAKICBsYXlvdXQodGl0bGUgPSAiRG9uYWxkIFRydW1wIFR3ZWV0cyBieSBEYXkiLCAKICAgICAgICAgeGF4aXMgPSBsaXN0KHRpdGxlID0gIkRheSBvZiB0aGUgd2VlayIpLAogICAgICAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiTnVtYmVyIG9mIFR3ZWV0cyIpKQpgYGAKVGhpcyBpcyBhIG11Y2ggcHJldHRpZXIgc2hvd2Nhc2Ugb2YgV2VkbmVzZGF5J3MgcmFudHMuCgpgYGB7cn0KdHJ1bXBfdHdlZXRzICU+JSAKICBtdXRhdGUoZGF5ID0gd2RheShjcmVhdGVkX2F0LCBsYWJlbCA9IFQpKSAlPiUgCiAgbXV0YXRlKGhvdXIgPSBob3VyKHdpdGhfdHooY3JlYXRlZF9hdCwgIkFtZXJpY2EvTmV3X1lvcmsiKSkpICU+JQogIHBsb3RfbHkoeCA9IH5kYXksIHkgPSB+aG91ciwgY29sb3JzID0gY29sb3JSYW1wKGMoIm9yYW5nZSIsICJibHVlIikpLCB0eXBlID0gImhlYXRtYXAiKSAlPiUgCiAgYWRkX2hpc3RvZ3JhbTJkKG5iaW5zeCA9IDcsIG5iaW5zeSA9IDI0KSAlPiUgCiAgbGF5b3V0KHRpdGxlID0gIlRoZSBQcmVzaWRlbnQncyBUd2VldHMgYnkgSG91ciBhbmQgRGF5IiwKICAgICAgICAgeGF4aXMgPSBsaXN0KHRpdGxlID0gIkRheSBvZiB0aGUgd2VlayIpLAogICAgICAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiVGltZSBvZiBkYXkgKDAgPSBtaWRuaWdodCkiKSkKYGBgCgpNaWQtZGF5IFdlZG5lc2RheSBpcyB3aGVuIGhlIGZpcmVzIG9mZiB0aGUgbW9zdCB0d2VldHMgKHJlbGF0aXZlIHRvIHRoZSBvdGhlciB0aW1lcyBhbmQgZGF5cykuIE1pZGRsZSBvZiBTYXR1cmRheSBuaWdodCBpcyBhbHNvIHZlcnkgcG9wdWxhci4g