R/sentiment.timeseries.R

Defines functions sentiment.timeseries

Documented in sentiment.timeseries

#' @title rSentiment Time Series
#' @description Blank Description.
#' @param s NRC Sentiment Data
#' @param n Name
#' @keywords package
#' @return NULL
#' @export
#' @examples sentiment.timeseries()

sentiment.timeseries <- function(d, dn, c, cn, e) {

if('dplyr' %in% rownames(installed.packages()) == TRUE) {
require(dplyr)} else {
install.packages("dplyr", repos = "http://cran.us.r-project.org")	
require(dplyr)}

if('ggplot2' %in% rownames(installed.packages()) == TRUE) {
require(ggplot2)} else {
install.packages("ggplot2", repos = "http://cran.us.r-project.org")	
require(ggplot2)}
     
round.time <- function(x, interval = 60) {
		
# Round Off to Lowest Value
rounded <- floor(as.numeric(x) / interval) * interval

# Center so Value is Interval Mid-Point
rounded <- rounded + round(interval * .5, 0)

# Return to POSIXct Date-Time Format
as.POSIXct(rounded, origin = "1970-01-01")

}     
      
date.breaks <- "12 hours"
   
if(missing(e)) {   
   
if(missing(c)) {

nk.sentiment <- d
nk.name <- dn

# Mutate Sentiment
nk.sentiment <- mutate(nk.sentiment, query = paste(nk.name))

# Generate Sentiment Time Series Charts
sentiment.time.series <- nk.sentiment %>%
    # select variables (columns) of interest
    dplyr::select(created_at, query, anger:positive) %>%
    # convert created_at variable to desired interval
    # here I chose 6 hour intervals (3 * 60 seconds * 60 mins = 3 hours)
    mutate(created_at = round.time(created_at, 3 * 60 * 60)) %>%
    # transform data to long form
    tidyr::gather(sentiment, score, -created_at, -query) %>%
    # group by time, query, and sentiment
    group_by(created_at, query, sentiment) %>%
    # get mean for each grouping
    summarize(score = mean(score, na.rm = TRUE), n = n()) %>% ungroup()

sentiment.time.series <- sentiment.time.series %>%
    ggplot(aes(x = created_at, y = score, color = query)) +
    geom_point() + geom_smooth(method = "loess") +
    facet_wrap(~ sentiment, scale = "free_y", nrow = 2) +
    theme_bw() + theme(text = element_text(family = "Georgia"),
		plot.title = element_text(face = "bold"), legend.position = "bottom",
		axis.text = element_text(size = 9), legend.title = element_blank()) +
    labs(x = NULL, y = NULL,
		title = "Twitter Sentiment over Time",
		subtitle = paste("Collected for Query", nk.name)) +
	scale_x_datetime(date_breaks = paste0(date.breaks), date_labels = "%m/%d") +
	theme(axis.text.x = element_text(angle = 25, vjust = 1.0, hjust = 1.0)) 
sentiment.time.series

return(sentiment.time.series)

} else {

nk.sentiment <- d
nk.name <- dn

cbo.sentiment <- c
cbo.name <- cn

# Mutate and Combine Sentiment
nk.sentiment <- mutate(nk.sentiment, query = paste(nk.name))
cbo.sentiment <- mutate(cbo.sentiment, query = paste(cbo.name))
combined.sentiment <- rbind(nk.sentiment, cbo.sentiment)

# Generate Sentiment Time Series Charts
sentiment.time.series <- combined.sentiment %>%
    # select variables (columns) of interest
    dplyr::select(created_at, query, anger:positive) %>%
    # convert created_at variable to desired interval
    # here I chose 6 hour intervals (3 * 60 seconds * 60 mins = 3 hours)
    mutate(created_at = round.time(created_at, 3 * 60 * 60)) %>%
    # transform data to long form
    tidyr::gather(sentiment, score, -created_at, -query) %>%
    # group by time, query, and sentiment
    group_by(created_at, query, sentiment) %>%
    # get mean for each grouping
    summarize(score = mean(score, na.rm = TRUE), n = n()) %>% ungroup()

sentiment.time.series <- sentiment.time.series %>%
    ggplot(aes(x = created_at, y = score, color = query)) +
    geom_point() + geom_smooth(method = "loess") +
    facet_wrap(~ sentiment, scale = "free_y", nrow = 2) +
    theme_bw() + theme(text = element_text(family = "Georgia"),
		plot.title = element_text(face = "bold"), legend.position = "bottom",
		axis.text = element_text(size = 9), legend.title = element_blank()) +
    labs(x = NULL, y = NULL,
		title = "Twitter Sentiment over Time",
		subtitle = paste("Collected for Querys", nk.name, "&", cbo.name)) +
	scale_x_datetime(date_breaks = paste0(date.breaks), date_labels = "%m/%d") +
	theme(axis.text.x = element_text(angle = 25, vjust = 1.0, hjust = 1.0)) 
sentiment.time.series

return(sentiment.time.series)

}
   
} else {  
   
if(missing(c)) {

nk.sentiment <- d
nk.name <- dn

sort.emotion <- e

# Mutate Sentiment
nk.sentiment <- mutate(nk.sentiment, query = paste(nk.name))

# Generate Sentiment Time Series Charts
sentiment.time.series <- nk.sentiment %>%
    # select variables (columns) of interest
    dplyr::select(created_at, query, paste0(sort.emotion)) %>%
    # convert created_at variable to desired interval
    # here I chose 6 hour intervals (3 * 60 seconds * 60 mins = 3 hours)
    mutate(created_at = round.time(created_at, 3 * 60 * 60)) %>%
    # transform data to long form
    tidyr::gather(sentiment, score, -created_at, -query) %>%
    # group by time, query, and sentiment
    group_by(created_at, query, sentiment) %>%
    # get mean for each grouping
    summarize(score = mean(score, na.rm = TRUE), n = n()) %>% ungroup()

sentiment.time.series <- sentiment.time.series %>%
    ggplot(aes(x = created_at, y = score, color = query)) +
    geom_point() + geom_smooth(method = "loess") +
    facet_wrap(~ sentiment, scale = "free_y", nrow = 2) +
    theme_bw() + theme(text = element_text(family = "Georgia"),
		plot.title = element_text(face = "bold"), legend.position = "bottom",
		axis.text = element_text(size = 9), legend.title = element_blank()) +
    labs(x = NULL, y = NULL,
		title = "Twitter Sentiment over Time",
		subtitle = paste("Collected for Query", nk.name)) +
	scale_x_datetime(date_breaks = paste0(date.breaks), date_labels = "%m/%d") +
	theme(axis.text.x = element_text(angle = 25, vjust = 1.0, hjust = 1.0)) 
sentiment.time.series

return(sentiment.time.series)

} else {

nk.sentiment <- d
nk.name <- dn

cbo.sentiment <- c
cbo.name <- cn

# Mutate and Combine Sentiment
nk.sentiment <- mutate(nk.sentiment, query = paste(nk.name))
cbo.sentiment <- mutate(cbo.sentiment, query = paste(cbo.name))
combined.sentiment <- rbind(nk.sentiment, cbo.sentiment)

# Generate Sentiment Time Series Charts
sentiment.time.series <- combined.sentiment %>%
    # select variables (columns) of interest
    dplyr::select(created_at, query, anger:positive) %>%
    # convert created_at variable to desired interval
    # here I chose 6 hour intervals (3 * 60 seconds * 60 mins = 3 hours)
    mutate(created_at = round.time(created_at, 3 * 60 * 60)) %>%
    # transform data to long form
    tidyr::gather(sentiment, score, -created_at, -query) %>%
    # group by time, query, and sentiment
    group_by(created_at, query, sentiment) %>%
    # get mean for each grouping
    summarize(score = mean(score, na.rm = TRUE), n = n()) %>% ungroup()

sentiment.time.series <- sentiment.time.series %>%
    ggplot(aes(x = created_at, y = score, color = query)) +
    geom_point() + geom_smooth(method = "loess") +
    facet_wrap(~ sentiment, scale = "free_y", nrow = 2) +
    theme_bw() + theme(text = element_text(family = "Georgia"),
		plot.title = element_text(face = "bold"), legend.position = "bottom",
		axis.text = element_text(size = 9), legend.title = element_blank()) +
    labs(x = NULL, y = NULL,
		title = "Twitter Sentiment over Time",
		subtitle = paste("Collected for Querys", nk.name, "&", cbo.name)) +
	scale_x_datetime(date_breaks = paste0(date.breaks), date_labels = "%m/%d") +
	theme(axis.text.x = element_text(angle = 25, vjust = 1.0, hjust = 1.0)) 
sentiment.time.series

return(sentiment.time.series)

}

}

}
sabalicodev/sabali documentation built on Jan. 13, 2020, 2:22 p.m.