library(completejourney)
Welcome to the completejourney package! Learn more about these data sets at http://bit.ly/completejourney.
library(dplyr)

Attaching package: ‘dplyr’

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal, union
library(ggplot2)
library(forcats)
library(lubridate)

Attaching package: ‘lubridate’

The following objects are masked from ‘package:base’:

    date, intersect, setdiff, union
library(stringr)

Visualization 1

transactions <- get_transactions()
top_products <-transactions %>%
  inner_join(products, by = 'product_id') %>%
  inner_join(demographics, by= 'household_id') %>%
  group_by(income,product_category) %>%
  summarize(total_quantity = sum(quantity, na.rm = TRUE)) %>%
  arrange(income, desc(total_quantity) <=5) %>%
  group_by(income) %>%
  slice_head(n = 5)
`summarise()` has grouped output by 'income'. You can override using the `.groups` argument.
ggplot(top_products, aes(x = reorder(product_category, total_quantity), y = total_quantity, fill = income)) +
  geom_col() +
  coord_flip()+
  facet_wrap(~ income, scales = "free") +
  labs(
    title = "Top 5 Most Purchased Products by Income Level",
    subtitle = "Income levels drive different purchasing preferences",
    x = "Product Category",
    y = "Total Quantity Purchased",
  ) +
  theme_minimal() +
  theme(
    axis.text.y = element_text(size = 5),  
    strip.text = element_text(size = 8, face = "bold"),  
    plot.title = element_text(size = 7, face = "bold"), 
    plot.subtitle = element_text(size = 6),
    axis.text.x  = element_text(size = 5),
    legend.position = "bottom",
    legend.text = element_text(size = 6)
  ) 

NA

Visualization 2

transactions <- get_transactions()
products %>%
  filter(product_category == "DEODORANTS", 
         str_detect(product_type, "AEROSOL DEODORANTS"))  %>%
  inner_join(transactions) %>%
  mutate(month = month(transaction_timestamp)) %>%
  group_by(month) %>%
  summarize(sales_per_month= sum(sales_value)) %>%
  ggplot(aes(month,sales_per_month))+
  geom_line(stat='identity', 
            color = "lavender", 
            size = 2) +
  geom_point(size = 3) +
  ggtitle("2017 Aerosol Deodorants Sales Per Month",
          subtitle = "The average sales per month is $85 and peaked in Oct with $109 monthly sales ")+   
  scale_y_continuous("Total Aerosol Deodorants Sales", 
                     label = scales::dollar) +
  scale_x_continuous("Month",
                     limits = c(1,12),
                     breaks = c(1,2,3,4,5,6,7,8,9,10,11,12),
                     labels = c("Jan","Feb","March","April","May","June","July",
                                "Aug","Sept","Oct","Nov","Dec"))+ 
  theme_classic()
Joining with `by = join_by(product_id)`Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
Please use `linewidth` instead.

Visualization 3

transactions <- get_transactions()
transactions %>%
  group_by(household_id) %>%
  summarise(
    total_sales = sum(sales_value, na.rm = TRUE),
    total_items = sum(quantity, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  
  ggplot(aes(x = total_items, y = total_sales)) +
  geom_point(alpha = 0.5, color = "blue") +  
  geom_smooth(method = "lm", color = "red", se = FALSE) + 
  labs(
    title = "Relationship Between Total Sales and Number of Items Purchased",
    subtitle = "There is a linear relationship between total sales and quantity purchased",
    x = "Total Items Purchased",
    y = "Total Sales ($)"
  ) +
  scale_x_continuous("Total Items Purchased",
                     limits = c(1,1500),
  ) +
  scale_y_continuous("Total Sales",
                     label = scales::dollar,
                     limits = c(1,3500)
                     ) +
  theme_minimal()

LS0tDQp0aXRsZTogIk1vZHVsZSA1IExhYiAiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7cn0NCmxpYnJhcnkoY29tcGxldGVqb3VybmV5KQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZm9yY2F0cykNCmxpYnJhcnkobHVicmlkYXRlKQ0KbGlicmFyeShzdHJpbmdyKQ0KDQoNCmBgYA0KIyMgVmlzdWFsaXphdGlvbiAxDQpgYGB7cn0NCnRyYW5zYWN0aW9ucyA8LSBnZXRfdHJhbnNhY3Rpb25zKCkNCnRvcF9wcm9kdWN0cyA8LXRyYW5zYWN0aW9ucyAlPiUNCiAgaW5uZXJfam9pbihwcm9kdWN0cywgYnkgPSAncHJvZHVjdF9pZCcpICU+JQ0KICBpbm5lcl9qb2luKGRlbW9ncmFwaGljcywgYnk9ICdob3VzZWhvbGRfaWQnKSAlPiUNCiAgZ3JvdXBfYnkoaW5jb21lLHByb2R1Y3RfY2F0ZWdvcnkpICU+JQ0KICBzdW1tYXJpemUodG90YWxfcXVhbnRpdHkgPSBzdW0ocXVhbnRpdHksIG5hLnJtID0gVFJVRSkpICU+JQ0KICBhcnJhbmdlKGluY29tZSwgZGVzYyh0b3RhbF9xdWFudGl0eSkgPD01KSAlPiUNCiAgZ3JvdXBfYnkoaW5jb21lKSAlPiUNCiAgc2xpY2VfaGVhZChuID0gNSkNCg0KZ2dwbG90KHRvcF9wcm9kdWN0cywgYWVzKHggPSByZW9yZGVyKHByb2R1Y3RfY2F0ZWdvcnksIHRvdGFsX3F1YW50aXR5KSwgeSA9IHRvdGFsX3F1YW50aXR5LCBmaWxsID0gaW5jb21lKSkgKw0KICBnZW9tX2NvbCgpICsNCiAgY29vcmRfZmxpcCgpKw0KICBmYWNldF93cmFwKH4gaW5jb21lLCBzY2FsZXMgPSAiZnJlZSIpICsNCiAgbGFicygNCiAgICB0aXRsZSA9ICJUb3AgNSBNb3N0IFB1cmNoYXNlZCBQcm9kdWN0cyBieSBJbmNvbWUgTGV2ZWwiLA0KICAgIHN1YnRpdGxlID0gIkluY29tZSBsZXZlbHMgZHJpdmUgZGlmZmVyZW50IHB1cmNoYXNpbmcgcHJlZmVyZW5jZXMiLA0KICAgIHggPSAiUHJvZHVjdCBDYXRlZ29yeSIsDQogICAgeSA9ICJUb3RhbCBRdWFudGl0eSBQdXJjaGFzZWQiLA0KICApICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoDQogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDUpLCAgDQogICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gOCwgZmFjZSA9ICJib2xkIiksICANCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSA3LCBmYWNlID0gImJvbGQiKSwgDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gNiksDQogICAgYXhpcy50ZXh0LnggID0gZWxlbWVudF90ZXh0KHNpemUgPSA1KSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwNCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNikNCiAgKSANCiAgDQpgYGANCg0KDQojIyBWaXN1YWxpemF0aW9uIDINCmBgYHtyfQ0KdHJhbnNhY3Rpb25zIDwtIGdldF90cmFuc2FjdGlvbnMoKQ0KcHJvZHVjdHMgJT4lDQogIGZpbHRlcihwcm9kdWN0X2NhdGVnb3J5ID09ICJERU9ET1JBTlRTIiwgDQogICAgICAgICBzdHJfZGV0ZWN0KHByb2R1Y3RfdHlwZSwgIkFFUk9TT0wgREVPRE9SQU5UUyIpKSAgJT4lDQogIGlubmVyX2pvaW4odHJhbnNhY3Rpb25zKSAlPiUNCiAgbXV0YXRlKG1vbnRoID0gbW9udGgodHJhbnNhY3Rpb25fdGltZXN0YW1wKSkgJT4lDQogIGdyb3VwX2J5KG1vbnRoKSAlPiUNCiAgc3VtbWFyaXplKHNhbGVzX3Blcl9tb250aD0gc3VtKHNhbGVzX3ZhbHVlKSkgJT4lDQogIGdncGxvdChhZXMobW9udGgsc2FsZXNfcGVyX21vbnRoKSkrDQogIGdlb21fbGluZShzdGF0PSdpZGVudGl0eScsIA0KICAgICAgICAgICAgY29sb3IgPSAibGF2ZW5kZXIiLCANCiAgICAgICAgICAgIHNpemUgPSAyKSArDQogIGdlb21fcG9pbnQoc2l6ZSA9IDMpICsNCiAgZ2d0aXRsZSgiMjAxNyBBZXJvc29sIERlb2RvcmFudHMgU2FsZXMgUGVyIE1vbnRoIiwNCiAgICAgICAgICBzdWJ0aXRsZSA9ICJUaGUgYXZlcmFnZSBzYWxlcyBwZXIgbW9udGggaXMgJDg1IGFuZCBwZWFrZWQgaW4gT2N0IHdpdGggJDEwOSBtb250aGx5IHNhbGVzICIpKyAgIA0KICBzY2FsZV95X2NvbnRpbnVvdXMoIlRvdGFsIEFlcm9zb2wgRGVvZG9yYW50cyBTYWxlcyIsIA0KICAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSBzY2FsZXM6OmRvbGxhcikgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMoIk1vbnRoIiwNCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoMSwxMiksDQogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBjKDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyKSwNCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkphbiIsIkZlYiIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBdWciLCJTZXB0IiwiT2N0IiwiTm92IiwiRGVjIikpKyANCiAgdGhlbWVfY2xhc3NpYygpDQpgYGANCg0KDQoNCiMjIFZpc3VhbGl6YXRpb24gMw0KYGBge3J9DQp0cmFuc2FjdGlvbnMgPC0gZ2V0X3RyYW5zYWN0aW9ucygpDQp0cmFuc2FjdGlvbnMgJT4lDQogIGdyb3VwX2J5KGhvdXNlaG9sZF9pZCkgJT4lDQogIHN1bW1hcmlzZSgNCiAgICB0b3RhbF9zYWxlcyA9IHN1bShzYWxlc192YWx1ZSwgbmEucm0gPSBUUlVFKSwNCiAgICB0b3RhbF9pdGVtcyA9IHN1bShxdWFudGl0eSwgbmEucm0gPSBUUlVFKSwNCiAgICAuZ3JvdXBzID0gImRyb3AiDQogICkgJT4lDQogIA0KICBnZ3Bsb3QoYWVzKHggPSB0b3RhbF9pdGVtcywgeSA9IHRvdGFsX3NhbGVzKSkgKw0KICBnZW9tX3BvaW50KGFscGhhID0gMC41LCBjb2xvciA9ICJibHVlIikgKyAgDQogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gInJlZCIsIHNlID0gRkFMU0UpICsgDQogIGxhYnMoDQogICAgdGl0bGUgPSAiUmVsYXRpb25zaGlwIEJldHdlZW4gVG90YWwgU2FsZXMgYW5kIE51bWJlciBvZiBJdGVtcyBQdXJjaGFzZWQiLA0KICAgIHN1YnRpdGxlID0gIlRoZXJlIGlzIGEgbGluZWFyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRvdGFsIHNhbGVzIGFuZCBxdWFudGl0eSBwdXJjaGFzZWQiLA0KICAgIHggPSAiVG90YWwgSXRlbXMgUHVyY2hhc2VkIiwNCiAgICB5ID0gIlRvdGFsIFNhbGVzICgkKSINCiAgKSArDQogIHNjYWxlX3hfY29udGludW91cygiVG90YWwgSXRlbXMgUHVyY2hhc2VkIiwNCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoMSwxNTAwKSwNCiAgKSArDQogIHNjYWxlX3lfY29udGludW91cygiVG90YWwgU2FsZXMiLA0KICAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSBzY2FsZXM6OmRvbGxhciwNCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoMSwzNTAwKQ0KICAgICAgICAgICAgICAgICAgICAgKSArDQogIHRoZW1lX21pbmltYWwoKQ0KYGBg