library(completejourney)
library(tidyverse)
library(lubridate)
library(ggtext)
library(dplyr)
library(ggtext)
library(ggplot2)
library(stringr)
campaign_tracs <- campaign_descriptions %>% 
  left_join(coupons) %>% 
  left_join(transactions)
typec<-campaign_tracs %>% 
  filter(transaction_timestamp >= "2017-03-13" & transaction_timestamp <= "2017-05-08") %>% 
  mutate(total_spend = sum(sales_value)) %>% 
  group_by(campaign_type)
#View(typec)

typeb<-campaign_tracs %>% 
  filter(transaction_timestamp >= "2017-03-03" & transaction_timestamp <= "2017-04-09") %>% 
  group_by(campaign_type)

typea<-campaign_tracs %>% 
  filter(transaction_timestamp >= "2017-08-08" & transaction_timestamp <= "2017-09-24") %>% 
  group_by(campaign_type)

ggplot() + 
  geom_line(data=typea, aes(x=transaction_timestamp, y=sales_value), color="#063970") + 
  geom_line(data=typeb, aes(x=transaction_timestamp, y=sales_value), color="#D16103") +
  geom_line(data=typec, aes(x=transaction_timestamp, y=sales_value), color='#7843a6')+
  theme(legend.text=element_text(size = 16))+
  theme(axis.title.y = element_text(size = 18))+
  theme(axis.title.x = element_text(size = 18))+
  theme(plot.title = element_text(size = 20))+
  labs(x = "Campaign months",
       y = "Total Sales Value",
       title = "Campaign Efffectiveness for Average Sales Won<br>in the Campaign Run Period")+ 
  theme(plot.title=element_text(hjust=0.5))+
  theme(plot.title.position = "plot",
        plot.title = element_markdown(),
        legend.position = "right")

library(ggplot2)
library(ggthemes)



# Aggregate redemption rates by week and campaign
aggregated_rates <- redemption_rates %>%
  group_by(campaign_id, week) %>%
  summarize(mean_redemption_rate = mean(redemption_rate))
`summarise()` has grouped output by 'campaign_id'. You can override using the `.groups` argument.
# Find the top 10 campaigns with the highest mean redemption rates
top_10_campaigns <- aggregated_rates %>%
  arrange(desc(mean_redemption_rate)) %>%
  head(10)


ggplot(top_10_campaigns, aes(x = week, y = mean_redemption_rate, color = campaign_id)) +
  geom_line(size = 1.5, aes(group = campaign_id)) +
  geom_point(size = 2, shape = 21, fill = "white", color = "black") +
  labs(
    x = "Week",
    y = "Mean Redemption Rate (%)",
    color = "Campaign"
  ) +
  theme_minimal() +
  theme(legend.position = "top") +
  theme_economist() +  
  scale_color_brewer(palette = "Set1") + 
  geom_text(
    aes(label = paste0(round(mean_redemption_rate, 2), "%")),
    hjust = -0.2, vjust = 0.5, size = 3, color = "black"
  ) +
  annotate(
    "text", x = max(top_10_campaigns$week), y = max(top_10_campaigns$mean_redemption_rate),
    label = "Top campaigns with highest redemption rates", hjust = 1.4, vjust = -0.3,
    size = 4, fontface = "bold", color = "black"
  ) +
  scale_x_continuous(breaks = seq(1, max(top_10_campaigns$week), by = 5))  

NA
NA
library(ggplot2)
library(ggthemes)

demo_transactions <- demographics %>%
  inner_join(transactions, by = "household_id") 

# scatter plot of household income vs. sales value 
ggplot(demo_transactions, aes(x = income, y = sales_value)) +
  geom_point(
    aes(color = quantity, size = quantity),
    alpha = 0.7,
    show.legend = TRUE
  ) +
  scale_color_gradient(low = "purple", high = "red") +
  scale_size_continuous(range = c(2, 7)) +
  labs(
    x = "Household Income",
    y = "Sales Value",
    title = "Sales based on household income & product quantity",
    size = "Quantity",
    color = "Quantity"
  ) +
  theme_economist() +  
  theme(
    legend.position = "bottom",
    text = element_text(size = 7)  
  ) +
  theme(plot.title = element_text(hjust = 0.5, size = 12)) 

NA
NA
LS0tDQp0aXRsZTogIkRhdGEgV3JhbmdsaW5nIExhYiBBc3NpZ25tZW50IDUiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQoNCmBgYHtyfQ0KbGlicmFyeShjb21wbGV0ZWpvdXJuZXkpDQoNCmBgYA0KDQoNCmBgYHtyfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGx1YnJpZGF0ZSkNCmxpYnJhcnkoZ2d0ZXh0KQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoZ2d0ZXh0KQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShzdHJpbmdyKQ0KYGBgDQoNCg0KYGBge3J9DQpjYW1wYWlnbl90cmFjcyA8LSBjYW1wYWlnbl9kZXNjcmlwdGlvbnMgJT4lIA0KICBsZWZ0X2pvaW4oY291cG9ucykgJT4lIA0KICBsZWZ0X2pvaW4odHJhbnNhY3Rpb25zKQ0KYGBgDQoNCg0KYGBge3J9DQp0eXBlYzwtY2FtcGFpZ25fdHJhY3MgJT4lIA0KICBmaWx0ZXIodHJhbnNhY3Rpb25fdGltZXN0YW1wID49ICIyMDE3LTAzLTEzIiAmIHRyYW5zYWN0aW9uX3RpbWVzdGFtcCA8PSAiMjAxNy0wNS0wOCIpICU+JSANCiAgbXV0YXRlKHRvdGFsX3NwZW5kID0gc3VtKHNhbGVzX3ZhbHVlKSkgJT4lIA0KICBncm91cF9ieShjYW1wYWlnbl90eXBlKQ0KI1ZpZXcodHlwZWMpDQoNCnR5cGViPC1jYW1wYWlnbl90cmFjcyAlPiUgDQogIGZpbHRlcih0cmFuc2FjdGlvbl90aW1lc3RhbXAgPj0gIjIwMTctMDMtMDMiICYgdHJhbnNhY3Rpb25fdGltZXN0YW1wIDw9ICIyMDE3LTA0LTA5IikgJT4lIA0KICBncm91cF9ieShjYW1wYWlnbl90eXBlKQ0KDQp0eXBlYTwtY2FtcGFpZ25fdHJhY3MgJT4lIA0KICBmaWx0ZXIodHJhbnNhY3Rpb25fdGltZXN0YW1wID49ICIyMDE3LTA4LTA4IiAmIHRyYW5zYWN0aW9uX3RpbWVzdGFtcCA8PSAiMjAxNy0wOS0yNCIpICU+JSANCiAgZ3JvdXBfYnkoY2FtcGFpZ25fdHlwZSkNCg0KZ2dwbG90KCkgKyANCiAgZ2VvbV9saW5lKGRhdGE9dHlwZWEsIGFlcyh4PXRyYW5zYWN0aW9uX3RpbWVzdGFtcCwgeT1zYWxlc192YWx1ZSksIGNvbG9yPSIjMDYzOTcwIikgKyANCiAgZ2VvbV9saW5lKGRhdGE9dHlwZWIsIGFlcyh4PXRyYW5zYWN0aW9uX3RpbWVzdGFtcCwgeT1zYWxlc192YWx1ZSksIGNvbG9yPSIjRDE2MTAzIikgKw0KICBnZW9tX2xpbmUoZGF0YT10eXBlYywgYWVzKHg9dHJhbnNhY3Rpb25fdGltZXN0YW1wLCB5PXNhbGVzX3ZhbHVlKSwgY29sb3I9JyM3ODQzYTYnKSsNCiAgdGhlbWUobGVnZW5kLnRleHQ9ZWxlbWVudF90ZXh0KHNpemUgPSAxNikpKw0KICB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE4KSkrDQogIHRoZW1lKGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTgpKSsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMjApKSsNCiAgbGFicyh4ID0gIkNhbXBhaWduIG1vbnRocyIsDQogICAgICAgeSA9ICJUb3RhbCBTYWxlcyBWYWx1ZSIsDQogICAgICAgdGl0bGUgPSAiQ2FtcGFpZ24gRWZmZmVjdGl2ZW5lc3MgZm9yIEF2ZXJhZ2UgU2FsZXMgV29uPGJyPmluIHRoZSBDYW1wYWlnbiBSdW4gUGVyaW9kIikrIA0KICB0aGVtZShwbG90LnRpdGxlPWVsZW1lbnRfdGV4dChoanVzdD0wLjUpKSsNCiAgdGhlbWUocGxvdC50aXRsZS5wb3NpdGlvbiA9ICJwbG90IiwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfbWFya2Rvd24oKSwNCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gInJpZ2h0IikNCmBgYA0KDQoNCg0KYGBge3J9DQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGdndGhlbWVzKQ0KDQoNCg0KIyBBZ2dyZWdhdGUgcmVkZW1wdGlvbiByYXRlcyBieSB3ZWVrIGFuZCBjYW1wYWlnbg0KYWdncmVnYXRlZF9yYXRlcyA8LSByZWRlbXB0aW9uX3JhdGVzICU+JQ0KICBncm91cF9ieShjYW1wYWlnbl9pZCwgd2VlaykgJT4lDQogIHN1bW1hcml6ZShtZWFuX3JlZGVtcHRpb25fcmF0ZSA9IG1lYW4ocmVkZW1wdGlvbl9yYXRlKSkNCg0KIyBGaW5kIHRoZSB0b3AgMTAgY2FtcGFpZ25zIHdpdGggdGhlIGhpZ2hlc3QgbWVhbiByZWRlbXB0aW9uIHJhdGVzDQp0b3BfMTBfY2FtcGFpZ25zIDwtIGFnZ3JlZ2F0ZWRfcmF0ZXMgJT4lDQogIGFycmFuZ2UoZGVzYyhtZWFuX3JlZGVtcHRpb25fcmF0ZSkpICU+JQ0KICBoZWFkKDEwKQ0KDQoNCmdncGxvdCh0b3BfMTBfY2FtcGFpZ25zLCBhZXMoeCA9IHdlZWssIHkgPSBtZWFuX3JlZGVtcHRpb25fcmF0ZSwgY29sb3IgPSBjYW1wYWlnbl9pZCkpICsNCiAgZ2VvbV9saW5lKHNpemUgPSAxLjUsIGFlcyhncm91cCA9IGNhbXBhaWduX2lkKSkgKw0KICBnZW9tX3BvaW50KHNpemUgPSAyLCBzaGFwZSA9IDIxLCBmaWxsID0gIndoaXRlIiwgY29sb3IgPSAiYmxhY2siKSArDQogIGxhYnMoDQogICAgeCA9ICJXZWVrIiwNCiAgICB5ID0gIk1lYW4gUmVkZW1wdGlvbiBSYXRlICglKSIsDQogICAgY29sb3IgPSAiQ2FtcGFpZ24iDQogICkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAidG9wIikgKw0KICB0aGVtZV9lY29ub21pc3QoKSArICANCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiU2V0MSIpICsgDQogIGdlb21fdGV4dCgNCiAgICBhZXMobGFiZWwgPSBwYXN0ZTAocm91bmQobWVhbl9yZWRlbXB0aW9uX3JhdGUsIDIpLCAiJSIpKSwNCiAgICBoanVzdCA9IC0wLjIsIHZqdXN0ID0gMC41LCBzaXplID0gMywgY29sb3IgPSAiYmxhY2siDQogICkgKw0KICBhbm5vdGF0ZSgNCiAgICAidGV4dCIsIHggPSBtYXgodG9wXzEwX2NhbXBhaWducyR3ZWVrKSwgeSA9IG1heCh0b3BfMTBfY2FtcGFpZ25zJG1lYW5fcmVkZW1wdGlvbl9yYXRlKSwNCiAgICBsYWJlbCA9ICJUb3AgY2FtcGFpZ25zIHdpdGggaGlnaGVzdCByZWRlbXB0aW9uIHJhdGVzIiwgaGp1c3QgPSAxLjQsIHZqdXN0ID0gLTAuMywNCiAgICBzaXplID0gNCwgZm9udGZhY2UgPSAiYm9sZCIsIGNvbG9yID0gImJsYWNrIg0KICApICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgxLCBtYXgodG9wXzEwX2NhbXBhaWducyR3ZWVrKSwgYnkgPSA1KSkgIA0KDQoNCmBgYA0KYGBge3J9DQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGdndGhlbWVzKQ0KDQpkZW1vX3RyYW5zYWN0aW9ucyA8LSBkZW1vZ3JhcGhpY3MgJT4lDQogIGlubmVyX2pvaW4odHJhbnNhY3Rpb25zLCBieSA9ICJob3VzZWhvbGRfaWQiKSANCg0KIyBzY2F0dGVyIHBsb3Qgb2YgaG91c2Vob2xkIGluY29tZSB2cy4gc2FsZXMgdmFsdWUgDQpnZ3Bsb3QoZGVtb190cmFuc2FjdGlvbnMsIGFlcyh4ID0gaW5jb21lLCB5ID0gc2FsZXNfdmFsdWUpKSArDQogIGdlb21fcG9pbnQoDQogICAgYWVzKGNvbG9yID0gcXVhbnRpdHksIHNpemUgPSBxdWFudGl0eSksDQogICAgYWxwaGEgPSAwLjcsDQogICAgc2hvdy5sZWdlbmQgPSBUUlVFDQogICkgKw0KICBzY2FsZV9jb2xvcl9ncmFkaWVudChsb3cgPSAicHVycGxlIiwgaGlnaCA9ICJyZWQiKSArDQogIHNjYWxlX3NpemVfY29udGludW91cyhyYW5nZSA9IGMoMiwgNykpICsNCiAgbGFicygNCiAgICB4ID0gIkhvdXNlaG9sZCBJbmNvbWUiLA0KICAgIHkgPSAiU2FsZXMgVmFsdWUiLA0KICAgIHRpdGxlID0gIlNhbGVzIGJhc2VkIG9uIGhvdXNlaG9sZCBpbmNvbWUgJiBwcm9kdWN0IHF1YW50aXR5IiwNCiAgICBzaXplID0gIlF1YW50aXR5IiwNCiAgICBjb2xvciA9ICJRdWFudGl0eSINCiAgKSArDQogIHRoZW1lX2Vjb25vbWlzdCgpICsgIA0KICB0aGVtZSgNCiAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwNCiAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA3KSAgDQogICkgKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBzaXplID0gMTIpKSANCg0KDQpgYGANCg0KDQo=