This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.

Try executing this chunk by clicking the Run button within the chunk or by placing your cursor inside it and pressing Cmd+Shift+Enter.

# Install necessary packages
# install.packages('tm')
# install.packages('RColorBrewer')
# install.packages('wordcloud')
# library('tm')
# library('RColorBrewer')
# library('wordcloud')
# Import data from a csv file to data frame 
trump <- read.csv("Trump.csv", comment.char="#")
tweets <- trump$MESSAGE_BODY
# Read data in a R data object
# BKdata <- readRDS("BKdata.rds")
# tweets <- BKdata$MESSAGE_BODY
# Function to clean tweets
clean.text = function(x)
{
  # tolower
  x = tolower(x)
  # remove rt
  x = gsub("rt", "", x)
  # remove at
  x = gsub("@\\w+", "", x)
  # remove punctuation
  x = gsub("[[:punct:]]", "", x)
  # remove numbers
  x = gsub("[[:digit:]]", "", x)
  # remove links http
  x = gsub("http\\w+", "", x)
  # remove tabs
  x = gsub("[ |\t]{2,}", "", x)
  # remove blank spaces at the beginning
  x = gsub("^ ", "", x)
  # remove blank spaces at the end
  x = gsub(" $", "", x)
  return(x)
}
# clean tweets
tweets = clean.text(tweets)
#********************************************
#         Word Cloud
#********************************************
corpus = Corpus(VectorSource(tweets))
# corpus = Corpus(VectorSource(cmail))
# create term-document matrix
tdm = TermDocumentMatrix(
  corpus,
  control = list(
    wordLengths=c(3,20),
    removePunctuation = TRUE,
    stopwords = c("the", "a", stopwords("english")),
    removeNumbers = TRUE, tolower = TRUE) )
# convert as matrix
tdm = as.matrix(tdm)
# get word counts in decreasing order
word_freqs = sort(rowSums(tdm), decreasing=TRUE) 
#check top 50 most mentioned words
head(word_freqs, 20)
          election              trump                gop               vote 
              3448               1121                572                454 
              tcot               will        republicans                new 
               272                244                224                210 
       donaldtrump electiontrumptrain          gopdebate          president 
               183                159                148                144 
              like                amp                get             donald 
               140                138                130                125 
          politics                one                win               take 
               124                124                122                111 
#remove the top words which don’t generate insights such as "the", "a", "and", etc.
word_freqs = word_freqs[-(1)]  #Here “1” is 1st word in the list we want to remove 
# create a data frame with words and their frequencies
dm = data.frame(word=names(word_freqs), freq=word_freqs)
#Plot corpus in a clored graph; need RColorBrewer package
wordcloud(head(dm$word, 50), head(dm$freq, 50), random.order=FALSE, colors=brewer.pal(8, "Dark2"))

Add a new chunk by clicking the Insert Chunk button on the toolbar or by pressing Cmd+Option+I. When you save the notebook, an HTML file containing the code and output will be saved alongside it (click the Preview button or press Cmd+Shift+K to preview the HTML file).

LS0tCnRpdGxlOiAiQ1M2OTU6IFdlZWsgMSAtIFIgTm90ZWJvb2siCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KClRoaXMgaXMgYW4gW1IgTWFya2Rvd25dKGh0dHA6Ly9ybWFya2Rvd24ucnN0dWRpby5jb20pIE5vdGVib29rLiBXaGVuIHlvdSBleGVjdXRlIGNvZGUgd2l0aGluIHRoZSBub3RlYm9vaywgdGhlIHJlc3VsdHMgYXBwZWFyIGJlbmVhdGggdGhlIGNvZGUuIAoKVHJ5IGV4ZWN1dGluZyB0aGlzIGNodW5rIGJ5IGNsaWNraW5nIHRoZSAqUnVuKiBidXR0b24gd2l0aGluIHRoZSBjaHVuayBvciBieSBwbGFjaW5nIHlvdXIgY3Vyc29yIGluc2lkZSBpdCBhbmQgcHJlc3NpbmcgKkNtZCtTaGlmdCtFbnRlciouIAoKYGBge3J9CiMgSW5zdGFsbCBuZWNlc3NhcnkgcGFja2FnZXMKIyBpbnN0YWxsLnBhY2thZ2VzKCd0bScpCiMgaW5zdGFsbC5wYWNrYWdlcygnUkNvbG9yQnJld2VyJykKIyBpbnN0YWxsLnBhY2thZ2VzKCd3b3JkY2xvdWQnKQoKIyBsaWJyYXJ5KCd0bScpCiMgbGlicmFyeSgnUkNvbG9yQnJld2VyJykKIyBsaWJyYXJ5KCd3b3JkY2xvdWQnKQoKIyBJbXBvcnQgZGF0YSBmcm9tIGEgY3N2IGZpbGUgdG8gZGF0YSBmcmFtZSAKdHJ1bXAgPC0gcmVhZC5jc3YoIlRydW1wLmNzdiIsIGNvbW1lbnQuY2hhcj0iIyIpCnR3ZWV0cyA8LSB0cnVtcCRNRVNTQUdFX0JPRFkKCiMgUmVhZCBkYXRhIGluIGEgUiBkYXRhIG9iamVjdAojIEJLZGF0YSA8LSByZWFkUkRTKCJCS2RhdGEucmRzIikKIyB0d2VldHMgPC0gQktkYXRhJE1FU1NBR0VfQk9EWQoKIyBGdW5jdGlvbiB0byBjbGVhbiB0d2VldHMKY2xlYW4udGV4dCA9IGZ1bmN0aW9uKHgpCnsKICAjIHRvbG93ZXIKICB4ID0gdG9sb3dlcih4KQogICMgcmVtb3ZlIHJ0CiAgeCA9IGdzdWIoInJ0IiwgIiIsIHgpCiAgIyByZW1vdmUgYXQKICB4ID0gZ3N1YigiQFxcdysiLCAiIiwgeCkKICAjIHJlbW92ZSBwdW5jdHVhdGlvbgogIHggPSBnc3ViKCJbWzpwdW5jdDpdXSIsICIiLCB4KQogICMgcmVtb3ZlIG51bWJlcnMKICB4ID0gZ3N1YigiW1s6ZGlnaXQ6XV0iLCAiIiwgeCkKICAjIHJlbW92ZSBsaW5rcyBodHRwCiAgeCA9IGdzdWIoImh0dHBcXHcrIiwgIiIsIHgpCiAgIyByZW1vdmUgdGFicwogIHggPSBnc3ViKCJbIHxcdF17Mix9IiwgIiIsIHgpCiAgIyByZW1vdmUgYmxhbmsgc3BhY2VzIGF0IHRoZSBiZWdpbm5pbmcKICB4ID0gZ3N1YigiXiAiLCAiIiwgeCkKICAjIHJlbW92ZSBibGFuayBzcGFjZXMgYXQgdGhlIGVuZAogIHggPSBnc3ViKCIgJCIsICIiLCB4KQogIHJldHVybih4KQp9CgojIGNsZWFuIHR3ZWV0cwp0d2VldHMgPSBjbGVhbi50ZXh0KHR3ZWV0cykKCgoKCiMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgojICAgICAgICAgV29yZCBDbG91ZAojKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKY29ycHVzID0gQ29ycHVzKFZlY3RvclNvdXJjZSh0d2VldHMpKQojIGNvcnB1cyA9IENvcnB1cyhWZWN0b3JTb3VyY2UoY21haWwpKQojIGNyZWF0ZSB0ZXJtLWRvY3VtZW50IG1hdHJpeAp0ZG0gPSBUZXJtRG9jdW1lbnRNYXRyaXgoCiAgY29ycHVzLAogIGNvbnRyb2wgPSBsaXN0KAogICAgd29yZExlbmd0aHM9YygzLDIwKSwKICAgIHJlbW92ZVB1bmN0dWF0aW9uID0gVFJVRSwKICAgIHN0b3B3b3JkcyA9IGMoInRoZSIsICJhIiwgc3RvcHdvcmRzKCJlbmdsaXNoIikpLAogICAgcmVtb3ZlTnVtYmVycyA9IFRSVUUsIHRvbG93ZXIgPSBUUlVFKSApCgojIGNvbnZlcnQgYXMgbWF0cml4CnRkbSA9IGFzLm1hdHJpeCh0ZG0pCgojIGdldCB3b3JkIGNvdW50cyBpbiBkZWNyZWFzaW5nIG9yZGVyCndvcmRfZnJlcXMgPSBzb3J0KHJvd1N1bXModGRtKSwgZGVjcmVhc2luZz1UUlVFKSAKCiNjaGVjayB0b3AgNTAgbW9zdCBtZW50aW9uZWQgd29yZHMKaGVhZCh3b3JkX2ZyZXFzLCAyMCkKCiNyZW1vdmUgdGhlIHRvcCB3b3JkcyB3aGljaCBkb27igJl0IGdlbmVyYXRlIGluc2lnaHRzIHN1Y2ggYXMgInRoZSIsICJhIiwgImFuZCIsIGV0Yy4Kd29yZF9mcmVxcyA9IHdvcmRfZnJlcXNbLSgxKV0gICNIZXJlIOKAnDHigJ0gaXMgMXN0IHdvcmQgaW4gdGhlIGxpc3Qgd2Ugd2FudCB0byByZW1vdmUgCgojIGNyZWF0ZSBhIGRhdGEgZnJhbWUgd2l0aCB3b3JkcyBhbmQgdGhlaXIgZnJlcXVlbmNpZXMKZG0gPSBkYXRhLmZyYW1lKHdvcmQ9bmFtZXMod29yZF9mcmVxcyksIGZyZXE9d29yZF9mcmVxcykKCiNQbG90IGNvcnB1cyBpbiBhIGNsb3JlZCBncmFwaDsgbmVlZCBSQ29sb3JCcmV3ZXIgcGFja2FnZQp3b3JkY2xvdWQoaGVhZChkbSR3b3JkLCA1MCksIGhlYWQoZG0kZnJlcSwgNTApLCByYW5kb20ub3JkZXI9RkFMU0UsIGNvbG9ycz1icmV3ZXIucGFsKDgsICJEYXJrMiIpKQoKYGBgCkFkZCBhIG5ldyBjaHVuayBieSBjbGlja2luZyB0aGUgKkluc2VydCBDaHVuayogYnV0dG9uIG9uIHRoZSB0b29sYmFyIG9yIGJ5IHByZXNzaW5nICpDbWQrT3B0aW9uK0kqLgpXaGVuIHlvdSBzYXZlIHRoZSBub3RlYm9vaywgYW4gSFRNTCBmaWxlIGNvbnRhaW5pbmcgdGhlIGNvZGUgYW5kIG91dHB1dCB3aWxsIGJlIHNhdmVkIGFsb25nc2lkZSBpdCAoY2xpY2sgdGhlICpQcmV2aWV3KiBidXR0b24gb3IgcHJlc3MgKkNtZCtTaGlmdCtLKiB0byBwcmV2aWV3IHRoZSBIVE1MIGZpbGUpLgo=