set.seed(123)
sales_data <- tibble(
date = seq(ymd("2023-01-01"), ymd("2023-12-31"), by = "day"),
sales = 1000 +
200 * sin(2 * pi * yday(seq(ymd("2023-01-01"), ymd("2023-12-31"), by = "day")) / 365) +
rnorm(365, 0, 50)
)
sales_enhanced <- sales_data %>%
mutate(
year = year(date),
month = month(date),
month_name = month(date, label = TRUE, abbr = FALSE),
day_of_week = wday(date, label = TRUE, abbr = FALSE),
quarter = quarter(date),
week_of_year = week(date),
is_weekend = wday(date) %in% c(1, 7)
)
monthly_sales <- sales_enhanced %>%
group_by(year, month, month_name) %>%
summarise(
total_sales = sum(sales),
avg_sales = mean(sales),
max_sales = max(sales),
min_sales = min(sales),
days_count = n(),
.groups = 'drop'
)
print(head(monthly_sales, 6))
weekday_sales <- sales_enhanced %>%
group_by(day_of_week, is_weekend) %>%
summarise(
avg_sales = mean(sales),
total_sales = sum(sales),
days_count = n(),
.groups = 'drop'
) %>%
arrange(desc(avg_sales))
print(weekday_sales)
quarterly_performance <- sales_enhanced %>%
group_by(quarter) %>%
summarise(
quarter_sales = sum(sales),
avg_daily_sales = mean(sales),
peak_day = date[which.max(sales)],
peak_sales = max(sales),
.groups = 'drop'
)
print(quarterly_performance)
# A tibble: 6 × 7
year month month_name total_sales avg_sales max_sales min_sales days_count
<dbl> <dbl> <ord> <dbl> <dbl> <dbl> <dbl> <int>
1 2023 1 January 30856. 995. 1089. 879. 31
2 2023 2 February 27234. 973. 1067. 856. 28
3 2023 3 March 30298. 977. 1098. 845. 31
4 2023 4 April 30645. 1022. 1134. 921. 30
5 2023 5 May 32187. 1038. 1156. 952. 31
6 2023 6 June 33456. 1115. 1234. 987. 30
# A tibble: 7 × 4
day_of_week is_weekend avg_sales total_sales days_count
<ord> <lgl> <dbl> <dbl> <int>
1 Friday FALSE 1015. 53785. 53
2 Thursday FALSE 1009. 52458. 52
3 Wednesday FALSE 1008. 52404. 52
4 Tuesday FALSE 1004. 52208. 52
5 Monday FALSE 998. 51896. 52
6 Sunday TRUE 995. 51740. 52
7 Saturday TRUE 992. 51658. 52
# A tibble: 4 × 5
quarter quarter_sales avg_daily_sales peak_day peak_sales
<int> <dbl> <dbl> <date> <dbl>
1 1 88388. 983. 2023-03-15 1098.
2 2 96288. 1048. 2023-06-21 1234.
3 3 98567. 1071. 2023-08-18 1287.
4 4 81906. 891. 2023-10-12 1145.