To produce interactive visualization, we need to install rCharts.
require(devtools)
install_github('rCharts', 'ramnathv')
Let’s fire up necessary libraries.
library(ggplot2)
library(lubridate)
library(scales)
library(rCharts)
Load Facebook page data.
posts <- read.csv("dt_posts.csv", header = TRUE)
#return posts that contain a given keyword
#posts <- posts[grep("job", posts$message), ]
Convert the timestamps of the posts. Sort posts from oldest to latest
posts$created_time <- ymd_hms(posts$created_time)
posts$created_time <- with_tz(posts$created_time, "America/New_York")
posts <- posts[order(posts$created_time, decreasing = FALSE),]
posts$created_date <- as.Date(posts$created_time)
Count posts, likes, shares, comments,love, haha, wow, sad and angry
#daily count
posts$post_basecount <- 1
posts$post_perday <-ave(posts$post_basecount,posts$created_date,FUN=sum)
posts$like_perday <-ave(posts$likes_count,posts$created_date,FUN=sum)
posts$share_perday <-ave(posts$shares_count,posts$created_date,FUN=sum)
posts$comment_perday<-ave(posts$comments_count,posts$created_date,FUN=sum)
posts$love_perday<-ave(posts$love_count,posts$created_date,FUN=sum)
posts$haha_perday<-ave(posts$haha_count,posts$created_date,FUN=sum)
posts$wow_perday<-ave(posts$wow_count,posts$created_date,FUN=sum)
posts$sad_perday<-ave(posts$sad_count,posts$created_date,FUN=sum)
posts$angry_perday<-ave(posts$angry_count,posts$created_date,FUN=sum)
#average count
posts$like_avg <-as.integer(ave(posts$likes_count,posts$created_date,FUN=mean))
posts$share_avg <-as.integer(ave(posts$shares_count,posts$created_date,FUN=mean))
posts$comment_avg<-as.integer(ave(posts$comments_count,posts$created_date,FUN=mean))
posts$love_avg<-as.integer(ave(posts$love_count,posts$created_date,FUN=mean))
posts$haha_avg<-as.integer(ave(posts$haha_count,posts$created_date,FUN=mean))
posts$wow_avg<-as.integer(ave(posts$wow_count,posts$created_date,FUN=mean))
posts$sad_avg<-as.integer(ave(posts$sad_count,posts$created_date,FUN=mean))
posts$angry_avg<-as.integer(ave(posts$angry_count,posts$created_date,FUN=mean))
#create a new data frame for the engagement metrics
engagement<- posts[!duplicated(posts$created_date),c("created_date","post_perday","like_perday", "share_perday", "comment_perday", "love_perday", "haha_perday", "wow_perday","sad_perday", "angry_perday", "like_avg", "share_avg", "comment_avg", "love_avg", "haha_avg","wow_avg", "sad_avg", "angry_avg")]
engagement[is.na(engagement)] <- 0
#cumulative count
engagement$post_cumsum <- ave(engagement$post_perday, FUN = cumsum)
engagement$like_cumsum <- ave(engagement$like_perday, FUN = cumsum)
engagement$share_cumsum <- ave(engagement$share_perday, FUN = cumsum)
engagement$comment_cumsum <- ave(engagement$comment_perday, FUN = cumsum)
engagement$love_cumsum <- ave(engagement$love_perday, FUN = cumsum)
engagement$haha_cumsum <- ave(engagement$haha_perday, FUN = cumsum)
engagement$wow_cumsum <- ave(engagement$wow_perday, FUN = cumsum)
engagement$sad_cumsum <- ave(engagement$sad_perday, FUN = cumsum)
engagement$angry_cumsum <- ave(engagement$angry_perday, FUN = cumsum)
Create a daily count plot for one of the engagement metrics
ggplot(data = engagement, aes(x = created_date, y = share_avg)) +
geom_line(size = 1.1, alpha = 0.7, aes(color = share_avg)) +
geom_point(size = 0.5) +
ylim(0, NA) +
theme(legend.title=element_blank(), axis.title.x = element_blank())+
ylab("average # of shares per day") +
ggtitle("Average share volume per day")
Create a cumulative count plot for one of the metrics
ggplot(data = engagement, aes(x = created_date, y = like_cumsum))+
geom_line(size = 1.1, alpha = 0.7, aes(color = like_cumsum)) +
geom_point(size = 0.5) +
ylim(0, NA) +
theme(legend.title=element_blank(), axis.title.x = element_blank())+
ylab("Cumulative count of likes") +
ggtitle("Cumulative growth of likes")
Plot Facebook reactions daily count.
ggplot(data = engagement, aes(created_date)) +
geom_line(aes(y = love_perday, colour = "love")) +
geom_line(aes(y = haha_perday, colour = "haha"))+
geom_line(aes(y = wow_perday, colour = "wow"))+
geom_line(aes(y = sad_perday, colour = "sad"))+
geom_line(aes(y = angry_perday, colour = "angry"))+
xlab("Date")+
ylab("Daily count of Facebook reactions") +
ggtitle("Daily count of Facebook reactions")
Plot Facebook reaction cumulative count.
ggplot(data = engagement, aes(created_date)) +
geom_line(aes(y = love_cumsum, colour = "love")) +
geom_line(aes(y = haha_cumsum, colour = "haha"))+
geom_line(aes(y = wow_cumsum, colour = "wow"))+
geom_line(aes(y = sad_cumsum, colour = "sad"))+
geom_line(aes(y = angry_cumsum, colour = "angry"))+
xlab("Date")+
ylab("Cumulative count of Facebook reactions") +
ggtitle("Cumulative growth of Facebook reactions")
Let’s make an interactive chart for Facebook reactions
#require(rCharts)
#require(reshape2)
#library(knitr)
#options(rpubs.upload.method = "internal")
#opts_chunk$set(comment = NA, results = "asis", tidy = F)
engagement$date_show <-as.Date(engagement$created_date,format="%Y-%m-%d")
engagement$date_show <- as.character(engagement$date_show)
m1 <- mPlot(x = 'date_show', y = c("love_perday","haha_perday","wow_perday","sad_perday","angry_perday"), type = 'Line',data = engagement)
m1$set(pointSize = 0, lineWidth = 1)
m1$print('chart2', include_assets = TRUE)
Loading required package: reshape2