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"))

shoreline <- read_csv("data/shoreline/2025-02-03-ucsb-computing-shoreline.csv") %>% 
  filter(`RSVP'ed`=='Yes')

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 = "RSVP'ed Yes - Shoreline", value = nrow(shoreline), ,
    theme = NULL, showcase = bs_icon("card-checklist"), showcase_layout = "left center",
    full_screen = FALSE, fill = TRUE, height = NULL
  ),
  value_box(
    title = "Total survey 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
  )
)

RSVP'ed Yes - Shoreline

82

Total survey responses

28

Both pre- and post-

5

Only pre-workshop

19

Only post-workshop

4

Departments (Shoreline info)

Code
name_var <- shoreline %>% select(starts_with("Please")) %>% names()
depts_2 <- shoreline %>% rename(dept_select.pre = name_var) %>% 
  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 / nrow(shoreline)) * 100,
         text = sprintf("%.0f (%.0f%%)", count, percent))

ggplot(depts_2, 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_2$count)*1.1))

Current occupation / Career stage (Shoreline info)

Code
name_var <- shoreline %>% select(starts_with("What is")) %>% names()
ocup_2 <- shoreline %>% rename(occupation.pre = name_var) %>% 
  select(occupation.pre) %>% 
  separate_rows(occupation.pre, sep=",") %>%
  mutate(occupation.pre = str_trim(occupation.pre)) %>%
  count(occupation.pre, name = "count") %>% 
  mutate(percent = (count / nrow(shoreline)) * 100,
         text = sprintf("%.0f (%.0f%%)", count, percent))

ggplot(ocup_2, 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_2$count)*1.2))

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 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 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 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 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