## # A tibble: 2,477 × 2
##    word       value
##    <chr>      <dbl>
##  1 abandon       -2
##  2 abandoned     -2
##  3 abandons      -2
##  4 abducted      -2
##  5 abduction     -2
##  6 abductions    -2
##  7 abhor         -3
##  8 abhorred      -3
##  9 abhorrent     -3
## 10 abhors        -3
## # ℹ 2,467 more rows
## # A tibble: 6,786 × 2
##    word        sentiment
##    <chr>       <chr>    
##  1 2-faces     negative 
##  2 abnormal    negative 
##  3 abolish     negative 
##  4 abominable  negative 
##  5 abominably  negative 
##  6 abominate   negative 
##  7 abomination negative 
##  8 abort       negative 
##  9 aborted     negative 
## 10 aborts      negative 
## # ℹ 6,776 more rows
## # A tibble: 13,872 × 2
##    word        sentiment
##    <chr>       <chr>    
##  1 abacus      trust    
##  2 abandon     fear     
##  3 abandon     negative 
##  4 abandon     sadness  
##  5 abandoned   anger    
##  6 abandoned   fear     
##  7 abandoned   negative 
##  8 abandoned   sadness  
##  9 abandonment anger    
## 10 abandonment fear     
## # ℹ 13,862 more rows

Introduction

The graduate programs office regularly sends a survey to recent graduates to ascertain their level of satisfaction with their program experience. The purpose of this survey is gather information from recent graduates to enable program directors to make the program more effective and enjoyable for students.

Questions

  • What program did you complete?
  • How did the program affect your employment?
  • What is your level of satisfaction?
  • What additional comments do you have?
## New names:
## • `Did not take` -> `Did not take...11`
## • `Did not take` -> `Did not take...12`
## • `Yes` -> `Yes...15`
## • `Yes` -> `Yes...16`
## • `` -> `...17`
## • `I received neither` -> `I received neither...21`
## • `I received neither` -> `I received neither...22`
## • `Yes` -> `Yes...26`
## • `Extremely satisfied` -> `Extremely satisfied...28`
## • `Extremely satisfied` -> `Extremely satisfied...29`
## • `Extremely satisfied` -> `Extremely satisfied...30`
## • `Extremely satisfied` -> `Extremely satisfied...31`
## • `Extremely satisfied` -> `Extremely satisfied...32`
## • `` -> `...33`

What Program did you Complete?

all_programs <- CSB_grad_survey_comments_2_15_2023$"Online MBA (OMBA)"

program_list <- strsplit(all_programs, ", ", fixed = TRUE)

program_counts <- table(unlist(program_list))

program_counts_df <- as.data.frame(program_counts)
names(program_counts_df) <- c("Program", "Count")

library(ggplot2)
ggplot(program_counts_df, aes(x = Program, y = Count, fill = Program)) +
  geom_bar(stat = "identity") +
  labs(title = "Survey Results by Program", x = "Program", y = "Count") +
  theme(axis.text.x = element_text(angle = 0, hjust = -7)) +
  scale_fill_manual(values = c("Online MBA (OMBA)" = "skyblue", 
                                "Business Foundations Certificate (BFC)" = "orange", 
                                "M.S. Business Analytics (MSBA)" = "green", 
                                "Professional MBA (PMBA)" = "red", 
                                "Executive MBA (EMBA)" = "blue"))

How did the program affect your employment?

What is your level of satisfaction?

What additional comments do you have?

This section provides sentiment analysis of the student’s comments based on their experience in the program.

##Sentiment Analysis was conducted using the AFINN lexicon

## # A tibble: 6 × 2
##   word          value
##   <chr>         <dbl>
## 1 disappointed     -2
## 2 growth            2
## 3 friendly          2
## 4 easy              1
## 5 fantastic         4
## 6 opportunities     2

##Visualization of the Sentiment Analysis is presented as a Pie Chart

## 
## Attaching package: 'cowplot'
## The following object is masked from 'package:lubridate':
## 
##     stamp
## Warning: Graphs cannot be vertically aligned unless the axis parameter is set.
## Placing graphs unaligned.

##A better visual representation of the Sentiment Analysis is seen in this Word Cloud

## function (words, freq, scale = c(4, 0.5), min.freq = 3, max.words = Inf, 
##     random.order = TRUE, random.color = FALSE, rot.per = 0.1, 
##     colors = "black", ordered.colors = FALSE, use.r.layout = FALSE, 
##     fixed.asp = TRUE, ...) 
## {
##     if (!fixed.asp && rot.per > 0) 
##         stop("Variable aspect ratio not supported for rotated words. Set rot.per=0.")
##     tails <- "g|j|p|q|y"
##     last <- 1
##     nc <- length(colors)
##     if (missing(freq)) {
##         requireNamespace("tm")
##         requireNamespace("slam")
##         if (is.character(words) || is.factor(words)) {
##             corpus <- tm::Corpus(tm::VectorSource(words))
##             corpus <- tm::tm_map(corpus, tm::removePunctuation)
##             corpus <- tm::tm_map(corpus, function(x) tm::removeWords(x, 
##                 tm::stopwords()))
##         }
##         else corpus <- words
##         tdm <- tm::TermDocumentMatrix(corpus)
##         freq <- slam::row_sums(tdm)
##         words <- names(freq)
##     }
##     if (ordered.colors) {
##         if (length(colors) != 1 && length(colors) != length(words)) {
##             stop(paste("Length of colors does not match length of words", 
##                 "vector"))
##         }
##     }
##     if (min.freq > max(freq)) 
##         min.freq <- 0
##     overlap <- function(x1, y1, sw1, sh1) {
##         if (!use.r.layout) 
##             return(is_overlap(x1, y1, sw1, sh1, boxes))
##         s <- 0
##         if (length(boxes) == 0) 
##             return(FALSE)
##         for (i in c(last, 1:length(boxes))) {
##             bnds <- boxes[[i]]
##             x2 <- bnds[1]
##             y2 <- bnds[2]
##             sw2 <- bnds[3]
##             sh2 <- bnds[4]
##             if (x1 < x2) 
##                 overlap <- x1 + sw1 > x2 - s
##             else overlap <- x2 + sw2 > x1 - s
##             if (y1 < y2) 
##                 overlap <- overlap && (y1 + sh1 > y2 - s)
##             else overlap <- overlap && (y2 + sh2 > y1 - s)
##             if (overlap) {
##                 last <<- i
##                 return(TRUE)
##             }
##         }
##         FALSE
##     }
##     ord <- rank(-freq, ties.method = "random")
##     words <- words[ord <= max.words]
##     freq <- freq[ord <= max.words]
##     if (ordered.colors) {
##         colors <- colors[ord <= max.words]
##     }
##     if (random.order) 
##         ord <- sample.int(length(words))
##     else ord <- order(freq, decreasing = TRUE)
##     words <- words[ord]
##     freq <- freq[ord]
##     words <- words[freq >= min.freq]
##     freq <- freq[freq >= min.freq]
##     if (ordered.colors) {
##         colors <- colors[ord][freq >= min.freq]
##     }
##     thetaStep <- 0.1
##     rStep <- 0.05
##     plot.new()
##     op <- par("mar")
##     par(mar = c(0, 0, 0, 0))
##     if (fixed.asp) 
##         plot.window(c(0, 1), c(0, 1), asp = 1)
##     else plot.window(c(0, 1), c(0, 1))
##     normedFreq <- freq/max(freq)
##     size <- (scale[1] - scale[2]) * normedFreq + scale[2]
##     boxes <- list()
##     for (i in 1:length(words)) {
##         rotWord <- runif(1) < rot.per
##         r <- 0
##         theta <- runif(1, 0, 2 * pi)
##         x1 <- 0.5
##         y1 <- 0.5
##         wid <- strwidth(words[i], cex = size[i], ...)
##         ht <- strheight(words[i], cex = size[i], ...)
##         if (grepl(tails, words[i])) 
##             ht <- ht + ht * 0.2
##         if (rotWord) {
##             tmp <- ht
##             ht <- wid
##             wid <- tmp
##         }
##         isOverlaped <- TRUE
##         while (isOverlaped) {
##             if (!overlap(x1 - 0.5 * wid, y1 - 0.5 * ht, wid, 
##                 ht) && x1 - 0.5 * wid > 0 && y1 - 0.5 * ht > 
##                 0 && x1 + 0.5 * wid < 1 && y1 + 0.5 * ht < 1) {
##                 if (!random.color) {
##                   if (ordered.colors) {
##                     cc <- colors[i]
##                   }
##                   else {
##                     cc <- ceiling(nc * normedFreq[i])
##                     cc <- colors[cc]
##                   }
##                 }
##                 else {
##                   cc <- colors[sample(1:nc, 1)]
##                 }
##                 text(x1, y1, words[i], cex = size[i], offset = 0, 
##                   srt = rotWord * 90, col = cc, ...)
##                 boxes[[length(boxes) + 1]] <- c(x1 - 0.5 * wid, 
##                   y1 - 0.5 * ht, wid, ht)
##                 isOverlaped <- FALSE
##             }
##             else {
##                 if (r > sqrt(0.5)) {
##                   warning(paste(words[i], "could not be fit on page. It will not be plotted."))
##                   isOverlaped <- FALSE
##                 }
##                 theta <- theta + thetaStep
##                 r <- r + rStep * thetaStep/(2 * pi)
##                 x1 <- 0.5 + r * cos(theta)
##                 y1 <- 0.5 + r * sin(theta)
##             }
##         }
##     }
##     par(mar = op)
##     invisible()
## }
## <bytecode: 0x556ed5016f30>
## <environment: namespace:wordcloud>

##Analysis What we see through the analysis of the Student responses to a survey of recent MBA graduates is that overall, students are very happy with the program as it stands. Additionally, their experiences indicated that overall, students are Very Satisfied with their experiences as measured on a Liekert Scale in the survey. Despite the fact that the majority of students received neither a raise nor a promotion, they still overwhelmingly describe their experience as “amazing” and “fantastic”