#' @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)
}
}
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.