Winter 2026 All Workshops 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("2026-02-02-ucsb-ml", "2026-01-27-ucsb-webscraping", "2026-01-14-ucsb-r", "2026-01-05-ucsb-geospatial")

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

43

Both pre- and post-

13

Only pre-workshop

24

Only post-workshop

6

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

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") + 
    theme_minimal() +
    theme(
      panel.grid.minor = element_blank(),
      panel.grid.major.y = element_blank()
      ) +
    expand_limits(x = c(0,max(ocup$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") + 
    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") + 
    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
2026-01-05-ucsb-geospatial I use ArcGIS daily but dont have R skills for spatial analysis. I would like to get some foundations to built on.
2026-01-05-ucsb-geospatial To learn more about GIS data and software
2026-01-05-ucsb-geospatial update knowledge on geospatial analysis libraries in R
2026-01-05-ucsb-geospatial I am interested in the best ways to create geospatial datavisuliazations and learning the best ways to collect, organize and showcase data information
2026-01-05-ucsb-geospatial I would like to learn about GIS and how it can be applied to the fire department.
2026-01-05-ucsb-geospatial I haven’t taught this curriculum before so it’s useful to see how others teach it.
2026-01-14-ucsb-r I am looking forward to learn a lot about R
2026-01-14-ucsb-r I hope I can learn ways to visualize my data.
2026-01-14-ucsb-r basic familiarity with RStudio and ability to manipulate data effectively
2026-02-02-ucsb-ml I am in the mechanical engr department and I actively use python for my work for geometric statistical analysis on cell shapes. My advisor now would like me to begin to incorporate ML with my geometric statistics…. so I am hoping to gain a better sense of what that really means, what it would look like, how ML models are actually built, and as an engineer, how I can implement/ build ML tools in python. :) Thank you for your time in. advance!
2026-01-14-ucsb-r The basics of understanding R
2026-01-14-ucsb-r Skills to apply data science and coding to environmental issues.
2026-01-14-ucsb-r How to better use R
2026-01-14-ucsb-r Become confortable with R
2026-01-14-ucsb-r The logic I need to be familiar with to do better in PSTAT 10, which will be a class I’ll be taking next quarter.
2026-01-14-ucsb-r I want to be confident in my R fundamentals, so that I can do my own troubleshooting without relying as heavily on Google or AI.
2026-01-14-ucsb-r How to use R well enough to do data analysis on the data I will be collecting soon
2026-01-14-ucsb-r How to be efficient in R
2026-01-14-ucsb-r I want to be able to effectively use R in a future job
2026-01-14-ucsb-r foundational skills to begin analyzing data
2026-01-14-ucsb-r I hope to learn how to analyze data using R
2026-01-14-ucsb-r how to use R
2026-01-14-ucsb-r good strategies for teaching R – looking to introduce some of my undergraduate researchers to R/R studio
2026-01-27-ucsb-webscraping I am collaborating on a project in which my team is interested in analyzing posts on Instagram, Reddit, BlueSky, Twitter, and TikTok. I am hoping to gain the basic skills to begin this work.
2026-01-27-ucsb-webscraping Learn how to scrape websites so I can then use these skills to scrap other applications.
2026-01-27-ucsb-webscraping Feel more comfortable with the Fundamentals of Website designs and webscrapping
2026-01-27-ucsb-webscraping What you can achieve via webscraping (limitations and opportunities)

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)", 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
2026-01-05-ucsb-geospatial I received an error message and through the chat I was able to work through this with help from a helper.
2026-01-05-ucsb-geospatial live troubleshooting on the chat helped keep pace
2026-01-05-ucsb-geospatial They answered my questions
2026-01-14-ucsb-r My Rstudio would not work in my laptop, one of the instructors helped me with the idea of using the online version of it
2026-01-14-ucsb-r Jose helped troubleshoot error messages and was very patient with small details and mistakes
2026-01-14-ucsb-r clear instructions and walk throughs
2026-01-14-ucsb-r Starting the workshop on Day 1 with the barebones basic and then moving to working with “real” data on day 2 helped me understand how to actually use R instead of just following the instructions
2026-01-14-ucsb-r When I asked about more resources, the instructors were excited to give me lots of options. They also explained the answers to my questions beyond just the simple fix, offering more in-depth reasoning for why the answer makes sense.
2026-01-14-ucsb-r I asked questions and they helped me out! They were awesome.
2026-01-14-ucsb-r Always checked in to see if on the same page, liked sticky notes/were responsive
2026-01-14-ucsb-r engaged in meaningful discussion when asking questions
2026-01-05-ucsb-geospatial Instructors and learners were attentive to the chat and promptly helped learners debug issues
2026-01-14-ucsb-r They were very friendly and patient!
2026-01-14-ucsb-r Getting real life feedback on code
2026-01-14-ucsb-r Checked in with pacing a lot
2026-01-14-ucsb-r The graduate student instructors made sure that I quickly recieved help whenever I had trouble or difficulty during this workshop using sticky notes. They were also super supportive and explained things clearly and enthusiastically.
2026-01-14-ucsb-r When I came in late to the first workshop, one instructor helped to catch me up and I felt comfortable with the rest of the material taught in the session. Also, I was able to get an explanation for how to fix a problem I was having because the code was not working as expected, and the instructor helped to debug the issue and explain what was wrong in a way that I understood.

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
2026-01-05-ucsb-geospatial The instructors were knowledgable about the material and approachable when problems came up.
2026-01-05-ucsb-geospatial very knowledgeable instructors
2026-01-05-ucsb-geospatial appreciated the informal tone of the workshop
2026-01-14-ucsb-r lots of knowledge, lots of help and support
2026-01-14-ucsb-r Very accommodating, patient and hands-on
2026-01-14-ucsb-r information, accessibility
2026-01-14-ucsb-r Clarity, practicality, easy-to-follow
2026-01-14-ucsb-r The environment was very welcoming, the sticky notes were a very effective way to keep up with the content, the breaks were well-timed, the instructors were sociable and very knowledgeable.
2026-01-14-ucsb-r Snacks, knowledgable instructors, I now feel more comfortable with R
2026-01-14-ucsb-r Beginner pace, challenges, answering questions
2026-01-14-ucsb-r live coding, usage of great analogies, highly knowledgeable instructors, both instructors and helpers were very helpful,
2026-01-14-ucsb-r ggplot exploration, cleaning/manipulating data, creating vectors
2026-01-05-ucsb-geospatial It provided a good overview of key data types and techniques for exploring, querying, and plotting geospatial data.
2026-01-14-ucsb-r Instructions were very clear and thorough!
2026-01-14-ucsb-r -informative ; ; -practical; ; -open-minded
2026-01-14-ucsb-r Full spectrum of R
2026-01-14-ucsb-r The envrironment was very positive and everyone quickly received help when necessary. The material was specifically tailored to Ecologists so was very applicable
2026-01-14-ucsb-r I think that the workflow of the lesson was clear and easy to follow. I also liked that it was easy to get help by using the post-it notes. I felt that it was easy to ask questions and get explanations for things I did not understand.

Ways to improve the workshop

Code
results %>% 
  group_by(workshop) %>% 
  select(workshop, workshop_improved.post) %>% 
  drop_na()
workshop workshop_improved.post
2026-01-05-ucsb-geospatial Minimize the back and worth of screens and scrolling on screens while sharing your screen. This made it tough to follow sometimes.
2026-01-05-ucsb-geospatial More time and more exercises for learners to try themselves
2026-01-05-ucsb-geospatial final section (leaflet, joins) felt rushed (could’ve been another workshop)
2026-01-05-ucsb-geospatial some of the content was rushed through and not explained
2026-01-14-ucsb-r we need more time to learn this
2026-01-14-ucsb-r I would like a deeper explanation of what that basic functions and structures are
2026-01-14-ucsb-r understanding how/where to re-access this info
2026-01-14-ucsb-r I wish that we could have started working with “real” data sooner so we can go more in depth but it was still a solid amount of time
2026-01-14-ucsb-r I’d love to learn more!
2026-01-14-ucsb-r Maybe be slightly more clear about each function? But, honestly, I feel like they couldn’t be clearer I was just having trouble keeping up since there were so many different functions.
2026-01-14-ucsb-r Would like more challenges
2026-01-14-ucsb-r slowing it down a bit, giving more time to the attendees to solve the challenge questions
2026-01-14-ucsb-r more of a focus on looking at the data set first before attempting to work with it in R
2026-01-05-ucsb-geospatial As someone new to the topic, I would have benefited from more context and clarification regarding the application of the techniques demonstrated, the real-world research questions and considerations involved, and the rationale for choosing one technique over another.
2026-01-14-ucsb-r N/A
2026-01-14-ucsb-r Taking a more step by step approach
2026-01-14-ucsb-r More breaks
2026-01-14-ucsb-r During the section where there was a preliminary lecture, it would have been helpful to have some more pauses where attendees could ask questions about the topic.

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
2026-01-05-ucsb-geospatial ArcGIS Pro/QGIS workflow with Python plugins
2026-01-05-ucsb-geospatial publishing outside of arcgis (leaflet, html etc.)
2026-01-14-ucsb-r To work with other data like geology, dataset
2026-01-14-ucsb-r more stats specific R workshops
2026-01-14-ucsb-r Maybe a series of workshops???; I want to keep working on my R skills so more workshops(specifically designed to be in series after another) would be amazing
2026-01-14-ucsb-r Simple statistics for data analysis with R!
2026-01-14-ucsb-r statistics in R
2026-01-14-ucsb-r Take sometime to talk about the data set
2026-01-14-ucsb-r -genetics applications with R
2026-01-14-ucsb-r N/A
2026-01-14-ucsb-r - Doing statistics in R; - Introductions to machine learning; - Using remote servers on campus for processing large datasets