r Sys.Date()```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE, warning = FALSE, message = FALSE)
library(tidyverse) library(janitor) library(scales) library(knitr) library(forcats) library(patchwork) survey_raw <- read.csv(“MKTG 4000 - Group 2 Survey_April 15, 2026_16.21.csv”, stringsAsFactors = FALSE)
survey <- survey_raw[-c(1, 2), ] %>% clean_names() %>% rename( academic_status = q1, textbook_format = q2, user_friendly_platform = q3, purchase_platform = q4, other_platform = q5, expected_spend = q6, more_expensive_platform = q7 ) %>% mutate( academic_status = recode(academic_status, “Sophmore” = “Sophomore”), across(everything(), ~str_trim(.)) ) %>% select( academic_status, textbook_format, user_friendly_platform, purchase_platform, other_platform, expected_spend, more_expensive_platform ) theme_set( theme_minimal(base_size = 14) + theme( plot.title = element_text(face = “bold”, size = 18, hjust = 0.5), plot.subtitle = element_text(size = 11, hjust = 0.5), axis.title = element_text(face = “bold”), axis.text.x = element_text(angle = 15, hjust = 1), panel.grid.minor = element_blank(), legend.position = “none” ) ) cat(“Total responses analyzed:”, nrow(survey)) format_plot <- survey %>% count(textbook_format) %>% mutate( percent = n / sum(n), textbook_format = fct_reorder(textbook_format, n) ) %>% ggplot(aes(x = textbook_format, y = n, fill = textbook_format)) + geom_col(width = 0.7, show.legend = FALSE) + geom_text(aes(label = paste0(n, ” (“, percent(percent, accuracy = 1),”)“)), vjust = -0.5, size = 4.5, fontface =”bold”) + labs( title = “Preferred Textbook Format”, subtitle = “Most students prefer electronic textbooks”, x = “Format”, y = “Number of Responses” ) + ylim(0, max(count(survey, textbook_format)$n) + 4)
format_plot friendly_plot <- survey %>% count(user_friendly_platform) %>% mutate( percent = n / sum(n), user_friendly_platform = fct_reorder(user_friendly_platform, n) ) %>% ggplot(aes(x = user_friendly_platform, y = n, fill = user_friendly_platform)) + geom_col(width = 0.65, show.legend = FALSE) + geom_text(aes(label = paste0(n, ” (“, percent(percent, accuracy = 1),”)“)), vjust = -0.5, size = 4.5, fontface =”bold”) + labs( title = “Which Platform Feels More User-Friendly?”, subtitle = “Pearson leads slightly over McGraw Hill”, x = “Platform”, y = “Number of Responses” ) + ylim(0, max(count(survey, user_friendly_platform)$n) + 4)
friendly_plot purchase_plot <- survey %>% count(purchase_platform) %>% mutate( percent = n / sum(n), purchase_platform = fct_reorder(purchase_platform, n) ) %>% ggplot(aes(x = purchase_platform, y = n, fill = purchase_platform)) + geom_col(width = 0.7, show.legend = FALSE) + geom_text(aes(label = paste0(n, ” (“, percent(percent, accuracy = 1),”)“)), hjust = -0.1, size = 4.2, fontface =”bold”) + coord_flip() + labs( title = “Where Students Prefer to Buy Textbooks”, subtitle = “Preferences are split, with many students reporting no strong preference”, x = ““, y =”Number of Responses” ) + xlim(NULL, max(count(survey, purchase_platform)$n) + 3)
purchase_plot spend_plot <- survey %>% mutate( expected_spend = factor( expected_spend, levels = c(“less than $50”, “$50-$75”, “$75-$100”, “$100 or more”) ) ) %>% count(expected_spend) %>% mutate(percent = n / sum(n)) %>% ggplot(aes(x = expected_spend, y = n, fill = expected_spend)) + geom_col(width = 0.7, show.legend = FALSE) + geom_text(aes(label = paste0(n, ” (“, percent(percent, accuracy = 1),”)“)), vjust = -0.5, size = 4.2, fontface =”bold”) + labs( title = “Expected Spending Per Textbook”, subtitle = “Most respondents expect to spend under \(50", x = "Expected Spending Range", y = "Number of Responses" ) + ylim(0, max(count(survey, expected_spend)\)n) + 4)
spend_plot expensive_plot <- survey %>% count(more_expensive_platform) %>% mutate( percent = n / sum(n), more_expensive_platform = fct_reorder(more_expensive_platform, n) ) %>% ggplot(aes(x = more_expensive_platform, y = n, fill = more_expensive_platform)) + geom_col(width = 0.7, show.legend = FALSE) + geom_text(aes(label = paste0(n, ” (“, percent(percent, accuracy = 1),”)“)), hjust = -0.1, size = 4.1, fontface =”bold”) + coord_flip() + labs( title = “Which Platform Seems More Expensive?”, subtitle = “Most respondents think the platforms cost about the same”, x = ““, y =”Number of Responses” ) + xlim(NULL, max(count(survey, more_expensive_platform)$n) + 4)
expensive_plot (format_plot + friendly_plot) / (spend_plot + expensive_plot) survey %>% tabyl(academic_status) %>% adorn_pct_formatting() survey %>% tabyl(textbook_format) %>% adorn_pct_formatting() survey %>% tabyl(user_friendly_platform) %>% adorn_pct_formatting() survey %>% tabyl(purchase_platform) %>% adorn_pct_formatting() survey %>% tabyl(expected_spend) %>% adorn_pct_formatting() survey %>% tabyl(more_expensive_platform) %>% adorn_pct_formatting() tab_status_format <- table(survey\(academic_status, survey\)textbook_format) tab_status_format prop.table(tab_status_format, 1)
tab_friendly_purchase <- table(survey\(user_friendly_platform, survey\)purchase_platform) tab_friendly_purchase prop.table(tab_friendly_purchase, 1) chisq.test(tab_status_format) chisq.test(tab_friendly_purchase) survey %>% filter(other_platform != “” & !is.na(other_platform)) %>% count(other_platform, sort = TRUE) %>% kable()