Data

# Load and read data
data_file <- "C:/Users/889737/Downloads/campaign_performance.csv"
data <- read.csv(data_file)

# Assign data types and clean data
data <- data %>%
  mutate(
    campaign_name = as.character(campaign_name),
    channel       = as.character(channel),
    impressions   = str_remove_all(impressions, ","),
    impressions   = as.integer(impressions),
    ctr           = str_remove_all(ctr, "%"),
    ctr           = as.numeric(ctr) / 100
  )

# Calculate nr. of clicks per campaign
data$clicks <- with(data, ctr * impressions)

The dataset contains 50 campaigns across 5 channels.

CTR per Channel

# Group data by channel and calculate CTR per channel
data_grouped <- data %>%
  group_by(channel) %>%
  summarise(
    total_impressions = sum(impressions),
    total_clicks      = sum(clicks),
    ctr_percent       = total_clicks / total_impressions
  ) %>%
  arrange(desc(ctr_percent))
data_grouped %>%
  mutate(
    total_impressions = format(total_impressions, big.mark = ","),
    total_clicks      = format(round(total_clicks), big.mark = ","),
    ctr_percent       = scales::percent(ctr_percent, accuracy = 0.01)
  ) %>%
  kable(
    col.names = c("Channel", "Impressions", "Clicks", "CTR"),
    align = c("l", "r", "r", "r"),
    caption = "Totals and CTR per channel"
  )
Totals and CTR per channel
Channel Impressions Clicks CTR
Paid Search 13,291,625 588,646 4.43%
Retargeting 5,399,745 69,276 1.28%
Paid Social 37,768,487 196,693 0.52%
Video 44,060,212 150,686 0.34%
Display 102,891,287 116,676 0.11%
ggplot(data_grouped, aes(x = reorder(channel, -ctr_percent), y = ctr_percent)) +
  # Column chart
  geom_col(fill = "steelblue") +
  # Horizontal line at 4%
  geom_hline(yintercept = 0.04, color = "red", linetype = "dashed", linewidth = 1) +
  # Show y-axis as percentages
  scale_y_continuous(labels = scales::percent) +
  # Labels
  labs(
    title = "CTR per Channel",
    x = "Channel",
    y = "CTR (%)"
  ) +
  theme_clean()
CTR per channel. The dashed red line marks the 4% target.

CTR per channel. The dashed red line marks the 4% target.

Channels above the 4% target: Paid Search