library(tidyverse)
── Attaching core tidyverse packages ────────────────
✔ dplyr 1.1.4 ✔ readr 2.1.5
✔ forcats 1.0.0 ✔ stringr 1.5.1
✔ ggplot2 3.5.1 ✔ tibble 3.2.1
✔ lubridate 1.9.4 ✔ tidyr 1.3.1
✔ purrr 1.0.2 ── Conflicts ─────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the ]8;;http://conflicted.r-lib.org/conflicted package]8;; to force all conflicts to become errors
library(completejourney)
Welcome to the completejourney package! Learn
more about these data sets at
http://bit.ly/completejourney.
avg_product_sales <- transactions %>%
inner_join(demographics, by = "household_id") %>%
group_by(product_id, age) %>%
summarize(total_product_sales = sum(sales_value, na.rm = TRUE)) %>%
group_by(age) %>%
summarize(avg_sales_value = mean(total_product_sales, na.rm = TRUE))
`summarise()` has grouped output by 'product_id'. You can override using the `.groups` argument.
ggplot(data = avg_product_sales, aes(x = avg_sales_value, y = age)) +
geom_point(color = "darkseagreen4") +
labs(
title = "Average Product Sales by Age",
x = "Average Product Sales",
y = "Age")

NA
# Plot 2: Top 10 Categories Sold
top_ten_categories <- transactions %>%
inner_join(products, by = "product_id") %>%
group_by(product_category) %>%
summarize(total_sales = sum(sales_value, na.rm = TRUE)) %>%
arrange(desc(total_sales)) %>%
slice_head(n = 10)
ggplot(data = top_ten_categories, aes(x = reorder(product_category, total_sales), y = total_sales)) +
geom_bar(stat = "identity", color = "coral1") +
coord_flip() +
scale_y_continuous(labels = scales::comma) +
labs(
title = "Top 10 Product Categories Sold",
x = "Product Category",
y = "Total Sales"
)

# Plot 3: Total Number of Snacks per Household Size
snacks_household <- transactions %>%
inner_join(products, by = "product_id") %>%
inner_join(demographics, by = "household_id") %>%
filter(!is.na(product_category) == "BAG SNACKS") %>%
group_by(household_size) %>%
summarize(total_snacks_sales = sum(sales_value, na.rm = TRUE))
ggplot(snacks_household, aes(x = household_size, y = total_snacks_sales)) +
geom_col(color = "darkviolet") +
labs(
title = "Total Number of Snacks per Household Size",
x = "Household Size",
y = "Total Snack Sales"
)

LS0tCnRpdGxlOiAiTWVlc2hhIFRhbm5hIC0gTW9kdWxlIDUgTGFiIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpgYGB7cn0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoY29tcGxldGVqb3VybmV5KQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KGZvcmNhdHMpCmBgYAoKYGBge3J9CnRyYW5zYWN0aW9ucyA8LSBnZXRfdHJhbnNhY3Rpb25zKCkKcHJvbW90aW9ucyA8LSBnZXRfcHJvbW90aW9ucygpCmBgYAoKYGBge3J9CiMgUGxvdCAxOiBBdmVyYWdlIFByb2R1Y3QgU2FsZXMgYnkgQWdlIEdyb3VwCmF2Z19wcm9kdWN0X3NhbGVzIDwtIHRyYW5zYWN0aW9ucyAlPiUKICBpbm5lcl9qb2luKGRlbW9ncmFwaGljcywgYnkgPSAiaG91c2Vob2xkX2lkIikgJT4lCiAgZ3JvdXBfYnkocHJvZHVjdF9pZCwgYWdlKSAlPiUKICBzdW1tYXJpemUodG90YWxfcHJvZHVjdF9zYWxlcyA9IHN1bShzYWxlc192YWx1ZSwgbmEucm0gPSBUUlVFKSkgJT4lCiAgZ3JvdXBfYnkoYWdlKSAlPiUKICBzdW1tYXJpemUoYXZnX3NhbGVzX3ZhbHVlID0gbWVhbih0b3RhbF9wcm9kdWN0X3NhbGVzLCBuYS5ybSA9IFRSVUUpKQogIGdncGxvdChkYXRhID0gYXZnX3Byb2R1Y3Rfc2FsZXMsIGFlcyh4ID0gYXZnX3NhbGVzX3ZhbHVlLCB5ID0gYWdlKSkgKyAKICAgIGdlb21fcG9pbnQoY29sb3IgPSAiZGFya3NlYWdyZWVuNCIpICsKICAgIGxhYnMoCiAgICAgIHRpdGxlID0gIkF2ZXJhZ2UgUHJvZHVjdCBTYWxlcyBieSBBZ2UiLAogICAgICB4ID0gIkF2ZXJhZ2UgUHJvZHVjdCBTYWxlcyIsCiAgICAgIHkgPSAiQWdlIikKICAgICAgCmBgYAoKYGBge3J9CiMgUGxvdCAyOiBUb3AgMTAgQ2F0ZWdvcmllcyBTb2xkCnRvcF90ZW5fY2F0ZWdvcmllcyA8LSB0cmFuc2FjdGlvbnMgJT4lCiAgaW5uZXJfam9pbihwcm9kdWN0cywgYnkgPSAicHJvZHVjdF9pZCIpICU+JQogIGdyb3VwX2J5KHByb2R1Y3RfY2F0ZWdvcnkpICU+JQogIHN1bW1hcml6ZSh0b3RhbF9zYWxlcyA9IHN1bShzYWxlc192YWx1ZSwgbmEucm0gPSBUUlVFKSkgJT4lCiAgYXJyYW5nZShkZXNjKHRvdGFsX3NhbGVzKSkgJT4lCiAgc2xpY2VfaGVhZChuID0gMTApCgpnZ3Bsb3QoZGF0YSA9IHRvcF90ZW5fY2F0ZWdvcmllcywgYWVzKHggPSByZW9yZGVyKHByb2R1Y3RfY2F0ZWdvcnksIHRvdGFsX3NhbGVzKSwgeSA9IHRvdGFsX3NhbGVzKSkgKyAKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgY29sb3IgPSAiY29yYWwxIikgKwogIGNvb3JkX2ZsaXAoKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6Y29tbWEpICsKICBsYWJzKAogICAgdGl0bGUgPSAiVG9wIDEwIFByb2R1Y3QgQ2F0ZWdvcmllcyBTb2xkIiwKICAgIHggPSAiUHJvZHVjdCBDYXRlZ29yeSIsCiAgICB5ID0gIlRvdGFsIFNhbGVzIgogICkKYGBgCgpgYGB7cn0KIyBQbG90IDM6IFRvdGFsIE51bWJlciBvZiBTbmFja3MgcGVyIEhvdXNlaG9sZCBTaXplCnNuYWNrc19ob3VzZWhvbGQgPC0gdHJhbnNhY3Rpb25zICU+JQogIGlubmVyX2pvaW4ocHJvZHVjdHMsIGJ5ID0gInByb2R1Y3RfaWQiKSAlPiUKICBpbm5lcl9qb2luKGRlbW9ncmFwaGljcywgYnkgPSAiaG91c2Vob2xkX2lkIikgJT4lCiAgZmlsdGVyKCFpcy5uYShwcm9kdWN0X2NhdGVnb3J5KSA9PSAiQkFHIFNOQUNLUyIpICU+JQogIGdyb3VwX2J5KGhvdXNlaG9sZF9zaXplKSAlPiUKICBzdW1tYXJpemUodG90YWxfc25hY2tzX3NhbGVzID0gc3VtKHNhbGVzX3ZhbHVlLCBuYS5ybSA9IFRSVUUpKSAKICBnZ3Bsb3Qoc25hY2tzX2hvdXNlaG9sZCwgYWVzKHggPSBob3VzZWhvbGRfc2l6ZSwgeSA9IHRvdGFsX3NuYWNrc19zYWxlcykpICsKICAgIGdlb21fY29sKGNvbG9yID0gImRhcmt2aW9sZXQiKSArCiAgICBsYWJzKAogICAgICB0aXRsZSA9ICJUb3RhbCBOdW1iZXIgb2YgU25hY2tzIHBlciBIb3VzZWhvbGQgU2l6ZSIsCiAgICAgIHggPSAiSG91c2Vob2xkIFNpemUiLAogICAgICB5ID0gIlRvdGFsIFNuYWNrIFNhbGVzIgogICAgKQpgYGAK