Ibotta Charts in R

The below is an Automated R script to produce several charts based in the “Raw Data For Automation” csv file sent.

1. Initial Data Preperation

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")

2. Plot Top 20 Campaigns Overall

#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")

2. Plot Redemptions Through Time With Simple Linear Trend

#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)

3. Plot Redemptions By Day of Week

#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")

4. Plot Top 5 Campaigns Per Day Over Most Recent Week of Data

#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)