library(tidyverse)
library(DT)
library(plotly) # This package does interactive graphs
library(rtweet) # This package accesses Twitter data
library(lubridate)
token <- create_token(
app ="",
consumer_key = "",
consumer_secret = "",
access_token = "",
access_secret = "")
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> Ryker_rtweet_tokens
key: WMXR9CqlvLYdLT8qdastKAq2u
secret: <hidden>
<credentials> oauth_token, oauth_token_secret
---
realDonaldTrump <- get_timeline("Trump", n = 10000)
realDonaldTrump %>%
select(hashtags) %>% # Focus on the hashtags
unnest() %>% # Separate multiple hashtags
mutate(hashtags = tolower(hashtags)) %>% # make all hashtags lowercase
count(hashtags, sort=TRUE) %>% # count how often they appear
datatable() # create an interactive table
This is a table that shows in decending order Trumps most popular hashtags.
realDonaldTrump %>%
group_by(day = date(created_at)) %>% # extract the date, group by it
summarize(tweets_per_day = n()) # count the number of tweets each day
This is a table showing the number of tweets by day from Donald Trump.
realDonaldTrump %>%
group_by(day = date(created_at)) %>% # extract the date, group by it
summarize(tweets_per_day = n()) %>%
summarize(mean(tweets_per_day))# count the number of tweets each day
This is the mean number of tweets per day by Donald Trump.
realDonaldTrump %>%
mutate(day = date(created_at)) %>%
plot_ly(x = ~day) %>%
add_histogram() %>%
layout(title = "Number of tweets from realDonaldTrump")
This is a graph showing the number of tweets per day from Doanald Trump using a (plotly) function in Rstudio.
tz(realDonaldTrump$created_at)
[1] "UTC"
realDonaldTrump %>%
mutate(time = with_tz(created_at, "America/New_York")) %>%
mutate(time = hour(time)) %>%
count(time) %>%
datatable(options = (list(pageLength = 24)), rownames = F)
This table show the peak tweeting hours for Donald Trump.
realDonaldTrump %>%
mutate(time = with_tz(created_at, "America/New_York")) %>% # convert to Eastern time zone
mutate(time = hour(time)) %>% # extract the hour
plot_ly(x = ~time) %>% # create plotly graph
add_histogram() %>%
layout(title = "When Does realDonaldTrump Tweet?",
xaxis = list(title = "Time of Day (0 = midnight)"),
yaxis = list(title = "Number of Tweets"))# make histogram
This is a histogram showing the peak tweeting hours for Donald Trump.
realDonaldTrump %>%
mutate(Day = wday(created_at, # find the weekday that the tweet was created
label = T)) %>% # use labels (Sun, Mon, etc) rather than numbers
count(Day) %>% # count the number of tweets each day
datatable(rownames = F)
This is a table that shows by weekdays, tweets from Donald Trump.
realDonaldTrump %>%
mutate(Day = wday(created_at, # find the weekday that the tweet was created
label = T)) %>% # use labels (Sun, Mon, etc) rather than numbers
plot_ly(x = ~Day) %>%
add_histogram() %>%
layout(title = "realDonaldTrump Tweet By Week?",
xaxis = list(title = "By Day"),
yaxis = list(title = "Number of Tweets"))# make histogram
This is a histogram showing Donald Trumps tweets by the days of the week.
realDonaldTrump %>%
mutate(day = wday(created_at, label = T)) %>%
mutate(hour = hour(with_tz(created_at, "America/New_York"))) %>%
plot_ly(x = ~day, y = ~hour) %>%
add_histogram2d(nbinsx = 7, nbinsy = 24) %>%
layout(title = "When Does realDonaldTrump Tweet?",
xaxis = list(title = "Day of the week"),
yaxis = list(title = "Time of day ( 0 = midnight"))
This is a heat map that acts as a 2D graph. It shows both by week and time of the day that Donald Trump tweets.
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCmVkaXRvcl9vcHRpb25zOiAKICBjaHVua19vdXRwdXRfdHlwZTogaW5saW5lCi0tLQoKYGBge3J9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KERUKQpsaWJyYXJ5KHBsb3RseSkgICAgICAgICAgICAgICAjIFRoaXMgcGFja2FnZSBkb2VzIGludGVyYWN0aXZlIGdyYXBocwpsaWJyYXJ5KHJ0d2VldCkgICAgICAgICAgICAgICAjIFRoaXMgcGFja2FnZSBhY2Nlc3NlcyBUd2l0dGVyIGRhdGEKbGlicmFyeShsdWJyaWRhdGUpICAKYGBgCgpgYGB7cn0KdG9rZW4gPC0gY3JlYXRlX3Rva2VuKAphcHAgPSIiLApjb25zdW1lcl9rZXkgPSAiIiwKY29uc3VtZXJfc2VjcmV0ID0gIiIsCmFjY2Vzc190b2tlbiA9ICIiLAphY2Nlc3Nfc2VjcmV0ID0gIiIpCgpnZXRfdG9rZW4oKSAgICAgICAgIyB0aGlzIHNob3dzIHRoZSB0b2tlbi4gbWFrZSBzdXJlIGtleSBpcyB0aGUgc2FtZSBhcyBjb25zdW1lcl9rZXkgYWJvdmUKYGBgCgpgYGB7cn0KcmVhbERvbmFsZFRydW1wIDwtIGdldF90aW1lbGluZSgiVHJ1bXAiLCBuID0gMTAwMDApCmBgYAoKCmBgYHtyIGVjaG89VFJVRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CnJlYWxEb25hbGRUcnVtcCAlPiUgCiAgc2VsZWN0KGhhc2h0YWdzKSAlPiUgICAgICAgICAgICAgICAgICAgIyBGb2N1cyBvbiB0aGUgaGFzaHRhZ3MKICB1bm5lc3QoKSAlPiUgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFNlcGFyYXRlIG11bHRpcGxlIGhhc2h0YWdzCiAgbXV0YXRlKGhhc2h0YWdzID0gdG9sb3dlcihoYXNodGFncykpICU+JSAgICAgICMgbWFrZSBhbGwgaGFzaHRhZ3MgbG93ZXJjYXNlCiAgY291bnQoaGFzaHRhZ3MsIHNvcnQ9VFJVRSkgJT4lICAgICAgICAgICAgICAgICMgY291bnQgaG93IG9mdGVuIHRoZXkgYXBwZWFyCiAgZGF0YXRhYmxlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY3JlYXRlIGFuIGludGVyYWN0aXZlIHRhYmxlCmBgYApUaGlzIGlzIGEgdGFibGUgdGhhdCBzaG93cyBpbiBkZWNlbmRpbmcgb3JkZXIgVHJ1bXBzIG1vc3QgcG9wdWxhciBoYXNodGFncy4KCmBgYHtyIGVjaG89VFJVRX0KcmVhbERvbmFsZFRydW1wICU+JSAKICBncm91cF9ieShkYXkgPSBkYXRlKGNyZWF0ZWRfYXQpKSAlPiUgICAgIyBleHRyYWN0IHRoZSBkYXRlLCBncm91cCBieSBpdAogIHN1bW1hcml6ZSh0d2VldHNfcGVyX2RheSA9IG4oKSkgICAgICAgICAjIGNvdW50IHRoZSBudW1iZXIgb2YgdHdlZXRzIGVhY2ggZGF5CmBgYApUaGlzIGlzIGEgdGFibGUgc2hvd2luZyB0aGUgbnVtYmVyIG9mIHR3ZWV0cyBieSBkYXkgZnJvbSBEb25hbGQgVHJ1bXAuCgpgYGB7ciBlY2hvPVRSVUV9CnJlYWxEb25hbGRUcnVtcCAlPiUgCiAgZ3JvdXBfYnkoZGF5ID0gZGF0ZShjcmVhdGVkX2F0KSkgJT4lICAgICMgZXh0cmFjdCB0aGUgZGF0ZSwgZ3JvdXAgYnkgaXQKICBzdW1tYXJpemUodHdlZXRzX3Blcl9kYXkgPSBuKCkpICAlPiUKICBzdW1tYXJpemUobWVhbih0d2VldHNfcGVyX2RheSkpIyBjb3VudCB0aGUgbnVtYmVyIG9mIHR3ZWV0cyBlYWNoIGRheQpgYGAKVGhpcyBpcyB0aGUgbWVhbiBudW1iZXIgb2YgdHdlZXRzIHBlciBkYXkgYnkgRG9uYWxkIFRydW1wLgoKYGBge3IgZWNobz1UUlVFfQpyZWFsRG9uYWxkVHJ1bXAgJT4lCiAgbXV0YXRlKGRheSA9IGRhdGUoY3JlYXRlZF9hdCkpICU+JSAKICBwbG90X2x5KHggPSB+ZGF5KSAlPiUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgYWRkX2hpc3RvZ3JhbSgpICU+JSAKICBsYXlvdXQodGl0bGUgPSAiTnVtYmVyIG9mIHR3ZWV0cyBmcm9tIHJlYWxEb25hbGRUcnVtcCIpCmBgYApUaGlzIGlzIGEgZ3JhcGggc2hvd2luZyB0aGUgbnVtYmVyIG9mIHR3ZWV0cyBwZXIgZGF5IGZyb20gRG9hbmFsZCBUcnVtcCB1c2luZyBhIChwbG90bHkpIGZ1bmN0aW9uIGluIFJzdHVkaW8uCgpgYGB7cn0KdHoocmVhbERvbmFsZFRydW1wJGNyZWF0ZWRfYXQpCgpgYGAKYGBge3J9CnJlYWxEb25hbGRUcnVtcCAlPiUgCiAgbXV0YXRlKHRpbWUgPSB3aXRoX3R6KGNyZWF0ZWRfYXQsICJBbWVyaWNhL05ld19Zb3JrIikpICU+JSAKICBtdXRhdGUodGltZSA9IGhvdXIodGltZSkpICU+JSAKICBjb3VudCh0aW1lKSAlPiUgCiAgZGF0YXRhYmxlKG9wdGlvbnMgPSAobGlzdChwYWdlTGVuZ3RoID0gMjQpKSwgcm93bmFtZXMgPSBGKQpgYGAKVGhpcyB0YWJsZSBzaG93IHRoZSBwZWFrIHR3ZWV0aW5nIGhvdXJzIGZvciBEb25hbGQgVHJ1bXAuCgpgYGB7cn0KcmVhbERvbmFsZFRydW1wICU+JSAKICBtdXRhdGUodGltZSA9IHdpdGhfdHooY3JlYXRlZF9hdCwgIkFtZXJpY2EvTmV3X1lvcmsiKSkgJT4lICAgICMgY29udmVydCB0byBFYXN0ZXJuIHRpbWUgem9uZQogIG11dGF0ZSh0aW1lID0gaG91cih0aW1lKSkgJT4lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBleHRyYWN0IHRoZSBob3VyCiAgcGxvdF9seSh4ID0gfnRpbWUpICU+JSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNyZWF0ZSBwbG90bHkgZ3JhcGgKICBhZGRfaGlzdG9ncmFtKCkgICAgJT4lCiAgbGF5b3V0KHRpdGxlID0gIldoZW4gRG9lcyByZWFsRG9uYWxkVHJ1bXAgVHdlZXQ/IiwgCiAgICAgICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJUaW1lIG9mIERheSAoMCA9IG1pZG5pZ2h0KSIpLAogICAgICAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiTnVtYmVyIG9mIFR3ZWV0cyIpKSMgbWFrZSBoaXN0b2dyYW0KYGBgClRoaXMgaXMgYSBoaXN0b2dyYW0gc2hvd2luZyB0aGUgcGVhayB0d2VldGluZyBob3VycyBmb3IgRG9uYWxkIFRydW1wLgpgYGB7cn0KcmVhbERvbmFsZFRydW1wICU+JSAKICBtdXRhdGUoRGF5ID0gd2RheShjcmVhdGVkX2F0LCAgICAgICAgICAgIyBmaW5kIHRoZSB3ZWVrZGF5IHRoYXQgdGhlIHR3ZWV0IHdhcyBjcmVhdGVkCiAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSBUKSkgJT4lICAgICAgICMgdXNlIGxhYmVscyAoU3VuLCBNb24sIGV0YykgcmF0aGVyIHRoYW4gbnVtYmVycwogIGNvdW50KERheSkgJT4lICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvdW50IHRoZSBudW1iZXIgb2YgdHdlZXRzIGVhY2ggZGF5CiAgZGF0YXRhYmxlKHJvd25hbWVzID0gRikKYGBgClRoaXMgaXMgYSB0YWJsZSB0aGF0IHNob3dzIGJ5IHdlZWtkYXlzLCB0d2VldHMgZnJvbSBEb25hbGQgVHJ1bXAuCgpgYGB7cn0KcmVhbERvbmFsZFRydW1wICU+JSAKICBtdXRhdGUoRGF5ID0gd2RheShjcmVhdGVkX2F0LCAgICAgICAgICAgIyBmaW5kIHRoZSB3ZWVrZGF5IHRoYXQgdGhlIHR3ZWV0IHdhcyBjcmVhdGVkCiAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSBUKSkgJT4lICAgICAgICMgdXNlIGxhYmVscyAoU3VuLCBNb24sIGV0YykgcmF0aGVyIHRoYW4gbnVtYmVycwogIHBsb3RfbHkoeCA9IH5EYXkpICU+JQogICAgICAgICAgICBhZGRfaGlzdG9ncmFtKCkgJT4lCiAgbGF5b3V0KHRpdGxlID0gInJlYWxEb25hbGRUcnVtcCBUd2VldCBCeSBXZWVrPyIsIAogICAgICAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiQnkgRGF5IiksCiAgICAgICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJOdW1iZXIgb2YgVHdlZXRzIikpIyBtYWtlIGhpc3RvZ3JhbQpgYGAKVGhpcyBpcyBhIGhpc3RvZ3JhbSBzaG93aW5nIERvbmFsZCBUcnVtcHMgdHdlZXRzIGJ5IHRoZSBkYXlzIG9mIHRoZSB3ZWVrLgoKCmBgYHtyfQpyZWFsRG9uYWxkVHJ1bXAgJT4lIAogIG11dGF0ZShkYXkgPSB3ZGF5KGNyZWF0ZWRfYXQsIGxhYmVsID0gVCkpICU+JSAKICBtdXRhdGUoaG91ciA9IGhvdXIod2l0aF90eihjcmVhdGVkX2F0LCAiQW1lcmljYS9OZXdfWW9yayIpKSkgJT4lIAogIHBsb3RfbHkoeCA9IH5kYXksIHkgPSB+aG91cikgJT4lIAogIGFkZF9oaXN0b2dyYW0yZChuYmluc3ggPSA3LCBuYmluc3kgPSAyNCkgJT4lCiAgbGF5b3V0KHRpdGxlID0gIldoZW4gRG9lcyByZWFsRG9uYWxkVHJ1bXAgVHdlZXQ/IiwgCiAgICAgICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJEYXkgb2YgdGhlIHdlZWsiKSwKICAgICAgICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIlRpbWUgb2YgZGF5ICggMCA9IG1pZG5pZ2h0IikpCmBgYApUaGlzIGlzIGEgaGVhdCBtYXAgdGhhdCBhY3RzIGFzIGEgMkQgZ3JhcGguIEl0IHNob3dzIGJvdGggYnkgd2VlayBhbmQgdGltZSBvZiB0aGUgZGF5IHRoYXQgRG9uYWxkIFRydW1wIHR3ZWV0cy4KCgoKCgoKCgoKCgo=