The below is an Automated R script to produce several charts based in the “Raw Data For Automation” csv file sent.
library("ggplot2")
library("dplyr")
#read in data and rename columns for ease of typing
df <- read.csv("Raw_Data_For_Automation.csv")
df[,1] <- as.factor(df[,1])
names(df) <- c("campaign", "date", "redeemed")
#add Weekday Column
df$date <- as.Date(df$date)
df$day <- format(as.Date(df$date), "%A")
#group, summaraise, and split data into top 20 campaigns
dfg <- df %>% group_by(campaign) %>% summarise(redeemed = sum(redeemed, na.rm = T)) %>% arrange(desc(redeemed)) %>% slice(1:20)
#reorder dataset for logical plotting
dfg$campaign <- factor(dfg$campaign, levels = dfg$campaign[order(dfg$redeemed)])
#create Top 20 campaign plot
ggplot(dfg, aes(x = campaign, y= redeemed))+ geom_bar(stat = "identity") + coord_flip() + labs(title = "Top 20 Campaigns by Offers Redeemed")
#plot data through time
dfg <- df %>% group_by(date) %>% summarise(redeemed = sum(redeemed, na.rm = T))
ggplot(dfg, aes(x = date, y = redeemed)) + geom_point() + geom_line() + labs(title = "Offers Redeemed Through Time") +
geom_smooth(method = "lm", se = FALSE)
#plot by weekday
df$day <- factor(df$day, levels = c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"))
ggplot(df, aes(x = day, y= redeemed))+ geom_bar(stat = "identity") + labs(title = "Top 20 Campaigns by Offers Redeemed")
#subset data into last week and top 5 campaigns per day
dfg <- subset(df, date > max(df$date) - 8)
dfg <- dfg %>% group_by(date, campaign) %>% summarise(redeemed = sum(redeemed, na.rm = T)) %>%
arrange(desc(redeemed)) %>% slice(1:5)
#plot above
ggplot(dfg, aes(x = date, y= redeemed, fill = campaign, label = campaign))+
geom_bar(width=0.5, stat = "identity", position = position_dodge(width = 0.8)) +
labs(title = "Top 5 Campaigns Per Day in Last Week") +
geom_label(position = position_dodge(0.8), label.padding = unit(0.15, "lines"), alpha = 0.9)