Winter 2025 Computing Workshop Survey Responses

Number of responses

Code
library(tidyverse)
library(bslib)
library(shiny)
library(bsicons)
source("scripts/helper_functions.R")

# list of workshop IDs to filter results
workshops <- c("2025-02-03-ucsb-computing")

results <- read_csv("data-joined/all_workshops.csv") %>% 
  filter(workshop %in% workshops)
  
# Fix comma separator
results <- results %>% 
  mutate(findout_select.pre = str_replace_all(
  findout_select.pre, 
  "Twitter, Facebook, etc.", 
  "Twitter; Facebook; etc."))

pre_survey <- results %>%
  select(ends_with(".pre"))

post_survey <- results %>%
  select(ends_with(".post"))

n_pre <- sum(apply(post_survey, 1, function(row) all(is.na(row))))
n_post <- sum(apply(pre_survey, 1, function(row) all(is.na(row))))
n_total <- nrow(results)
n_both <- nrow(results) - n_pre - n_post

layout_columns(
  value_box(
    title = "Total responses", value = n_total, ,
    theme = NULL, showcase = bs_icon("people-fill"), showcase_layout = "left center",
    full_screen = FALSE, fill = TRUE, height = NULL
  ),
  value_box(
    title = "Both pre- and post-", value = n_both, , theme = NULL,
    showcase = bs_icon("arrows-expand-vertical"), showcase_layout = "left center",
    full_screen = FALSE, fill = TRUE, height = NULL
  ),
  value_box(
    title = "Only pre-workshop", value = n_pre, ,
    theme = NULL, showcase = bs_icon("arrow-left-short"), showcase_layout = "left center",
    full_screen = FALSE, fill = TRUE, height = NULL
  ),
  value_box(
    title = "Only post-workshop", value = n_post, , theme = NULL,
    showcase = bs_icon("arrow-right-short"), showcase_layout = "left center",
    full_screen = FALSE, fill = TRUE, height = NULL
  )
)

Total responses

29

Both pre- and post-

7

Only pre-workshop

17

Only post-workshop

5

Departments

Code
depts <- results %>% select(dept_select.pre) %>% 
  separate_rows(dept_select.pre, sep=",") %>%
  mutate(dept_select.pre = str_trim(dept_select.pre)) %>%
  count(dept_select.pre, name = "count") %>% 
  mutate(percent = (count / (n_total - n_post)) * 100,
         text = sprintf("%.0f (%.0f%%)", count, percent))

ggplot(depts, aes(y=reorder(dept_select.pre, count), x=count)) +
    geom_col() +
    geom_label(aes(label = text, hjust = -0.1),
               size = 3) +
    labs(x = "# respondents", y = element_blank()) +  
    theme_minimal() +
    theme(
      panel.grid.minor = element_blank(),
      panel.grid.major.y = element_blank()
      ) +
    expand_limits(x = c(0,max(depts$count)*1.1))

“Other” Departments

Code
other_depts <- results %>% 
  count(dept_other.pre, name = "count") %>% 
  drop_na() %>% 
  mutate(percent = (count / (n_total - n_post)) * 100,
         text = sprintf("%.0f (%.0f%%)", count, percent))

ggplot(other_depts, aes(y=reorder(dept_other.pre, count), x=count)) +
    geom_col() +
    geom_label(aes(label = text, hjust = -0.1),
               size = 3) +
    labs(x = "# respondents", y = element_blank()) + 
    theme_minimal() +
    theme(
      panel.grid.minor = element_blank(),
      panel.grid.major.y = element_blank()
      ) +
    expand_limits(x = c(0,max(other_depts$count)*1.1))
Warning in max(other_depts$count): no non-missing arguments to max; returning
-Inf

Current occupation / Career stage

Code
ocup <- results %>% select(occupation.pre) %>% 
  separate_rows(occupation.pre, sep=",") %>%
  mutate(occupation.pre = str_trim(occupation.pre)) %>%
  count(occupation.pre, name = "count") %>% 
  drop_na() %>% 
  mutate(percent = (count / (n_total - n_post)) * 100,
         text = sprintf("%.0f (%.0f%%)", count, percent))

ggplot(ocup, aes(y=reorder(occupation.pre, count), x=count)) +
    geom_col() +
    geom_label(aes(label = text, hjust = -0.1),
               size = 3) +
    labs(x = "# respondents", y = element_blank()) + 
    theme_minimal() +
    theme(
      panel.grid.minor = element_blank(),
      panel.grid.major.y = element_blank()
      ) +
    expand_limits(x = c(0,max(ocup$count)*1.2))
Warning in max(ocup$count): no non-missing arguments to max; returning -Inf

Motivation - Why are you participating in this workshop?

Code
motiv <- results %>% select(motivation_select.pre) %>% 
  separate_rows(motivation_select.pre, sep=",")  %>% 
  mutate(motivation_select.pre = str_trim(motivation_select.pre)) %>%
  count(motivation_select.pre, name = "count") %>% 
  drop_na() %>% 
  mutate(percent = (count / (n_total - n_post)) * 100,
         text = sprintf("%.0f (%.0f%%)", count, percent))

ggplot(motiv, aes(y=reorder(motivation_select.pre, count), x=count)) +
    geom_col() +
    geom_label(aes(label = text, hjust = -0.1),
               size = 3) +
    labs(x = "# respondents", y = element_blank()) + 
    theme_minimal() +
    theme(
      panel.grid.minor = element_blank(),
      panel.grid.major.y = element_blank()
      ) +
    expand_limits(x = c(0,max(motiv$count)*1.2))

How did you find out about this workshop?

Code
findw <- results %>% select(findout_select.pre) %>% 
  separate_rows(findout_select.pre, sep=",")  %>% 
  mutate(findout_select.pre = str_trim(findout_select.pre)) %>%
  count(findout_select.pre, name = "count") %>% 
  drop_na() %>% 
  mutate(percent = (count / (n_total - n_post)) * 100,
         text = sprintf("%.0f (%.0f%%)", count, percent))

ggplot(findw, aes(y=reorder(findout_select.pre, count), x=count)) +
    geom_col() +
    geom_label(aes(label = text, hjust = -0.1),
               size = 3) +
    labs(x = "# respondents", y = element_blank()) + 
    theme_minimal() +
    theme(
      panel.grid.minor = element_blank(),
      panel.grid.major.y = element_blank()
      ) +
    expand_limits(x = c(0,max(findw$count)*1.2))

What you most hope to learn?

Code
results %>% group_by(workshop) %>% 
  select(workshop, hopes.pre) %>% 
  drop_na()
workshop hopes.pre
2025-02-03-ucsb-computing new stuff, networking
2025-02-03-ucsb-computing I am somewhat aware of the computing resources that exist on campus, but I don’t think our research group is utilizing them as effectively as we could be, so I hope to learn some of the areas where we could improve
2025-02-03-ucsb-computing Available computing resources
2025-02-03-ucsb-computing info about the computations I run (nodes vs cores vs tasks, how to choose these), general data storage best practices
2025-02-03-ucsb-computing I have never used University-wide computing resources and would like to have a better familiarity of what’s out there in case I need it for future work. I also would like to brush up on fundamental concepts in computing.
2025-02-03-ucsb-computing How do you deal with hundreds of GB of data for processing, parallelizing, etc., and how can the university resources support this.
2025-02-03-ucsb-computing A sanity check that I sort of understand best practices
2025-02-03-ucsb-computing Ways to store and access large data bases at UCSB, with backup. Efficient command line processes to query+interface with these data bases; running processes with large data on UCSB clusters + other resources
2025-02-03-ucsb-computing How to use grit and other resources
2025-02-03-ucsb-computing Learning to get stronger computational resources.
2025-02-03-ucsb-computing Getting a better understanding of HPC and how it can help me improve my data processing workflows
2025-02-03-ucsb-computing I have an upcoming bioacoustic project that will generate multiple terabytes of data that I need to figure out how to manage. I am hoping that this workshop can help me figure out a workflow.
2025-02-03-ucsb-computing How to use supercomputer systems to process large datasets – I’d like to work through an example, prepping it for processing and understanding how to book/rent a supercomputer
2025-02-03-ucsb-computing How to store large amount of imaging data, analyze data extracted from images and make raw data and processed data available to users.
2025-02-03-ucsb-computing I hope to gain a better understanding on how to store and process data on my own devices > school/administrative computers and repositories. Can’t wait!!!
2025-02-03-ucsb-computing Learn about basic computing concepts, HPCs, what GPU/core hours are and how many I need
2025-02-03-ucsb-computing Access the servers to perform heavy computing

Learning environment in the workshop

Code
orderedq <- c("Strongly Disagree", "Somewhat Disagree", "Neither Agree or Disagree","Somewhat Agree", "Strongly Agree")
addNA(orderedq)
Code
agree_questions <- results %>% 
  select(join_key, agree_apply.post,    agree_comfortable.post, agree_clearanswers.post,
         agree_instr_enthusiasm.post, agree_instr_interaction.post, agree_instr_knowledge.post
) %>% 
  filter(!if_all(-join_key, is.na))

n_agree_questions <- nrow(agree_questions)
  
agree_questions <- agree_questions %>%
  pivot_longer(cols = -join_key, names_to = "Question", values_to = "Response") %>% 
  mutate(Response = factor(Response, levels = orderedq),
         Question = recode(Question,
                     "agree_apply.post" = "Can immediatly apply 
 what they learned",
                     "agree_comfortable.post" = "Comfortable learning in 
 the workshop environment",
                     "agree_clearanswers.post" = "Got clear answers 
 from instructors",
                     "agree_instr_enthusiasm.post" = "Instructors were enthusiastic",
                     "agree_instr_interaction.post" = "Comfortable interacting 
 with instructors",
                     "agree_instr_knowledge.post" = "Instructors were knowledgeable 
 about the material"
      ))

summary_data <- agree_questions %>%
  count(Question, Response, name = "count") %>% 
  mutate(percent = (count / n_agree_questions) * 100,
         text = sprintf("%.0f (%.0f%%)", count, percent))

ggplot(summary_data, aes(x = Question, y = count, fill = Response)) +
  geom_col(position = "fill", color = "black", show.legend = TRUE) +
  scale_y_continuous(labels = scales::percent_format()) + 
  scale_fill_manual(values = c("Strongly Disagree" = "#d01c8b", 
                               "Somewhat Disagree" = "#f1b6da", 
                               "Neither Agree or Disagree" = "#f7f7f7", 
                               "Somewhat Agree" = "#b8e186", 
                               "Strongly Agree" = "#4dac26"), 
                    na.translate = TRUE, na.value = "#cccccc", 
                    breaks = orderedq, drop = FALSE) +
  geom_text(aes(label = text), size = 3,
             position = position_fill(vjust = 0.5)) +
  labs(y = "# respondents (Percentage)", x = element_blank(), fill = "Responses",
       subtitle = paste0("Number of responses: ", n_agree_questions)) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1),
        plot.subtitle = element_text(hjust = 0.5, size = 12))

How an instructor or helper affected your learning experience

Code
results %>% 
  group_by(workshop) %>% 
  select(workshop, instructor_example.post) %>%
  drop_na()
workshop instructor_example.post
2025-02-03-ucsb-computing I don’t think it was one particular instructor that helped the experience, but rather that there were people there to represent the many different campus resources.
2025-02-03-ucsb-computing Provided concrete examples of how to use some of the resources
2025-02-03-ucsb-computing instructors were open to questions at any point during the seminar
2025-02-03-ucsb-computing I think the instructors gave a good job of providing examples of when an individual may need to switch between the different types of computing systems and conceptualized what that would entail in a way that was accessible. I feel more confident in my understanding of research computing and the situations or instances when this resources could be beneficial. More importantly, I am aware of where to go on campus to ask questions and gain access to these resources.
2025-02-03-ucsb-computing Clear slides and familiarity with the topic
2025-02-03-ucsb-computing Very engaging presentations by nice presenters!
2025-02-03-ucsb-computing answered my specific questions

Skills and perception comparison

Code
# Calculate mean scores and make graph for all respondents (only_matched=FALSE)
tryCatch(
  {
mean_nresp <- get_mean_scores_nresp(results, only_matched=FALSE)
graph_pre_post(mean_nresp$mean_scores, mean_nresp$n_resp_pre, mean_nresp$n_resp_post, mean_nresp$n_resp_pre_post, only_matched=FALSE)
},
error = function(cond) {
message("Could not do the plots as there are no pre or post results to show")
}
)

Code
# Calculate mean scores and make graph for only matched respondents in pre and post (only_matched=TRUE)
tryCatch(
  {
mean_nresp <- get_mean_scores_nresp(results, only_matched=TRUE)
graph_pre_post(mean_nresp$mean_scores, mean_nresp$n_resp_pre, mean_nresp$n_resp_post, mean_nresp$n_resp_pre_post, only_matched=TRUE)
},
error = function(cond) {
message("Could not do the plots as there are no pre or post results to show")
}
)

Workshop Strengths

Code
results %>% 
  group_by(workshop) %>% 
  select(workshop, workshop_strengths.post) %>% 
  drop_na()
workshop workshop_strengths.post
2025-02-03-ucsb-computing I think the workshop did a good job of introduction to all of the campus resources.
2025-02-03-ucsb-computing Synthesizing information. Providing examples. Starting from the basics.
2025-02-03-ucsb-computing great overview of campus resources
2025-02-03-ucsb-computing I think the workshop was paced well and each “part” got adequate time to explain and step through.
2025-02-03-ucsb-computing Exposure to the levels of computing available at UCSB
2025-02-03-ucsb-computing It felt approachable and general enough for all of the different backgrounds that the attendees had. Listed resources that folks could go to for additional help.

Ways to improve the workshop

Code
results %>% 
  group_by(workshop) %>% 
  select(workshop, workshop_improved.post) %>% 
  drop_na()
workshop workshop_improved.post
2025-02-03-ucsb-computing I think the workshop did not do enough to demystify some of the work that goes into a user using one of these campus resources.
2025-02-03-ucsb-computing A lot of information was given, but I feel that focusing on one specific resource and navigating it could have been more practical.
2025-02-03-ucsb-computing The last part of the workshop had a lot of things written in the slides, I don’t think it was that clear what we should take away from it.
2025-02-03-ucsb-computing I wanted to go through the workflow of using supercomputers with an actual example of how to write code and submit a job to a cluster and see how the results were outputted
2025-02-03-ucsb-computing Examples of past research projects that used these resources could add more context for each computing resource.
2025-02-03-ucsb-computing On of the speakers spoke fast and was harder to follow and some words were unclear, I would say speak slower and distinctly.
2025-02-03-ucsb-computing Maybe splitting up into groups for Q&A session for folks that had questions about CSC, HPC, data storage, etc.

How likely are you to recommend this workshop? Scale 0 - 10

Code
orderedq <- c("Detractor", "Passive", "Promoter")

nps <- results %>% 
  count(recommend_group.post, recommende_score.post, name = "count") %>% 
  drop_na() %>% 
  mutate(recommend_group.post = factor(recommend_group.post, levels = orderedq),
         percent = (count/sum(count)) * 100,
         text = sprintf("%.0f (%.0f%%)", count, percent))

nps %>% 
ggplot(aes(x=recommende_score.post, y=count, fill=recommend_group.post)) +
  geom_col(color="black", show.legend = TRUE) +
  scale_fill_manual(values = c("Detractor" = "#af8dc3", "Passive" = "#f7f7f7", "Promoter" = "#7fbf7b"), breaks = c("Detractor", "Passive", "Promoter"), drop = FALSE) +
  geom_label(aes(label = text, vjust = -0.5), fill = "white", size= 3) +
  scale_x_continuous(breaks = 1:10) +
  labs(x = "NPS Score", y = "# respondents", subtitle = paste0("Number of responses: ", sum(nps$count), "
 Mean score: ", format(weighted.mean(nps$recommende_score.post, nps$count), digits = 3))) +
  theme_minimal() +
  theme(
    panel.grid.minor = element_blank(),
    panel.grid.major.x = element_blank(),
    plot.subtitle = element_text(hjust = 0.5, size = 12)
  ) +
  expand_limits(x = c(1,10),
                y = c(0, max(nps$count)*1.1))

Topic Suggestions

Code
results %>% 
  group_by(workshop) %>% 
  select(workshop, suggest_topics.post) %>% 
  drop_na()
workshop suggest_topics.post
2025-02-03-ucsb-computing I feel like it might be helpful to have something like an office hours for these types of computational resources where people can get help with specific issues. I don’t exactly know how this would work in practice.
2025-02-03-ucsb-computing More hands-on the doing. More practical on how to use a specific resource. It could be a series of workshops to make people familiar with a resource that helps their needs (after this first workshop that was introductory and showing all the different resources).
2025-02-03-ucsb-computing Introduction to python
2025-02-03-ucsb-computing show step by step how to use the servers
2025-02-03-ucsb-computing workshop where we actually go through an example of submitting a job to a supercomputer
2025-02-03-ucsb-computing Bayesian modeling in R
2025-02-03-ucsb-computing Storage was touched on at this session, and use, access, and management of storage would be helpful. I know there are better naming conventions and I am concerned about the managment of duplicate files.
2025-02-03-ucsb-computing How SLURM works, how to choose nodes/tasks/cores/etc. on campus computing resources