Hello, World!

Week 1 - Meet the Toolkit

Published

August 24, 2026

Overview

  • Part 1: Syllabus, Objectives & Opener
  • Part 2: Why Interdisciplinary?
  • Part 3: Let’s do some data science!
  • Part 4: Meet the Toolbox
  • Wrap-up & Tasks for the Week

Part 1: Syllabus, Objectives & Opener

(Joint — Amy & Robin)

Meet each other!

Please share with at least two classmates…

  • Your name
  • Your program
  • Where you’re from
  • What you did this past summer
  • What you hope to get out of this course

Syllabus & course objectives

By the end of this course, you’ll be able to:

  • Contextualize project foundations, goals, and data through consultation with subject matter experts and researchers
  • Identify and apply a variety of methodological tools to conduct qualitative research
  • Conduct systematic qualitative data analysis — coding schemes, theme generation, patterns
  • Implement reproducible qualitative workflows in R
  • Evaluate and responsibly use AI/LLM tools in qualitative analysis
  • Practice public scholarship — present analyses to campus/community decision-makers
Important

add more info here about course flow

Part 2: Why Interdisciplinary?

(Amy) Why wicked problems demand cross-disciplinary methods

Part 3: Let’s do some data science!

Data Collection

  • Yesterday we collected some data from you!
  • Today we’re going to explore that data together, following the data science cycle.
  • Didn’t take it yet? Scan the QR code and do it now!

QR code linking to the survey.

Data science cycle: Import, tidy, transform, visualize, model, communicate.

Beginning the data science cycle

You took a survey, built in Google Forms:

Screenshot of the initial getting-to-know-you Google Form.

We want to explore that data and get to know you!

Import

Data science cycle: Import, tidy, transform, visualize, model, communicate. Import is highlighted.

Load some packages

More on what packages are, in a nutshell “get your tools out of the toolbox”:

Code
library(tidyverse)      # for data wrangling and visualization
library(googlesheets4)  # to import data directly from Google
library(scales)         # for better axis labels
library(tidytext)       # for handling text data

Import the data

We could download the data and save it as a csv file on our computer, edit out the student names, name it survey-anonymized.csv and save it in a folder called data. Then we would import it into R using the read_csv() function:

Code
survey <- read_csv("data/survey-anonymized.csv")

Alternatively, we can authorize R to directly read the Google Sheet that holds the responses from the Google Form you filled out.

Code
survey <- read_sheet("https://docs.google.com/spreadsheets/d/1MC9tAqrJuzigU00IJocnnuntT9teI03Fh1NeS1YCSX0")

Take a peek at the data

Code
survey
# A tibble: 20 × 5
   location               programming_experience data_interests learn_best hopes
   <chr>                  <chr>                  <chr>          <chr>      <chr>
 1 Rest of California     Some — I've worked on… Health (e.g.,… I do best… I'm …
 2 Butte County           None                   Crime,Politics I need to… I'm …
 3 Broader North State (… A little — I've writt… Education,Hea… Repetitio… As a…
 4 United States - Outsi… A lot — I use program… Economics,Env… Reading d… I'm …
 5 Butte County           A little — I've writt… Politics,Crime Discussio… I wa…
 6 Rest of California     None                   Sports,Entert… Visual le… I'm …
 7 Outside of the United… Some — I've worked on… Environment/C… I learn b… I'm …
 8 Broader North State (… A little — I've writt… Health (e.g.,… Step-by-s… I wa…
 9 Butte County           A lot — I use program… Crime,Economi… Trial and… I'm …
10 Rest of California     None                   Education,Ent… Structure… I'm …
11 Butte County           Some — I've worked on… Politics,Crime Hands-on … I wa…
12 United States - Outsi… A little — I've writt… Health (e.g.,… I do best… I'm …
13 Broader North State (… A lot — I use program… Economics,Env… Fast-pace… I'm …
14 Butte County           None                   Other          Honestly … I'm …
15 Rest of California     A little — I've writt… Crime,Sports   Case stud… I'm …
16 Outside of the United… Some — I've worked on… Politics,Envi… Written i… As a…
17 Broader North State (… None                   Education,Hea… Small gro… I'm …
18 Butte County           A little — I've writt… No preference  A mix of … I'm …
19 Rest of California     A lot — I use program… Crime,Economi… Building … I'm …
20 United States - Outsi… Some — I've worked on… Politics,Educ… Discussio… I'm …

Masters Program

We asked you the following multiple-choice question where you could only pick one option:

Where are you from?

  • Butte County
  • Broader North State (Sac & up)
  • Rest of California
  • United States - Outside California
  • Outside of the United States

Visualize

One way to make sense of data collected via a question like this is to visualize it.

Data science cycle: Import, tidy, transform, visualize, model, communicate. Visualize is highlighted.

Code
survey |>
  count(location) |>
  mutate(prop = n / sum(n)) |>
  ggplot(aes(y = location, x = prop))+
  geom_col(show.legend = FALSE) +
  scale_y_discrete(labels = label_wrap(20)) +
  scale_x_continuous(labels = percent_format(accuracy = 1), breaks = c(0, 0.25, 0.5)) +
  labs(
    title = "Where are you from?",
    y = NULL,
    x = "Count"
  ) +
  labs(
    caption = "Data are self-reported example survey responses (demo dataset)."
  )

Programming experience

We also asked you the following multiple-choice question where you could only pick one option:

How much experience do you have with programming?

  • None
  • A little — I’ve written a few lines or done small exercises
  • Some — I’ve worked on a few projects or used it occasionally
  • A lot — I use programming regularly and feel confident writing code
Code
survey |>
  count(programming_experience) |>
  mutate(prop = n / sum(n)) |>
  ggplot(aes(y = fct_reorder(programming_experience, prop), x = prop, fill = prop))+
  geom_col(show.legend = FALSE) +
  scale_y_discrete(labels = label_wrap(25)) +
  scale_x_continuous(labels = percent_format(accuracy = 1), breaks = c(0, 0.1, 0.2, 0.3, 0.4)) +
  scale_fill_viridis_c(option = "E") +
  labs(
    title = "Prior programming experience",
    y = NULL,
    x = "Count"
  ) +
  labs(
    caption = "Data are self-reported example survey responses (demo dataset)."
  ) +
  theme_minimal(base_size = 16)

Data Interests

We also asked you the following multiple-choice question where you could as many options as you liked:

What types of data interest you?

  • Crime
  • Economics
  • Education
  • Entertainment (e.g., books, movies, music)
  • Environment/Climate
  • Health (e.g., social determinants of health, medical)
  • Politics
  • Sports
  • Other
  • No preference

Peek at the data

Code
survey |>
  select(data_interests)
# A tibble: 20 × 1
   data_interests                                                               
   <chr>                                                                        
 1 Health (e.g., social determinants of health, medical),Politics               
 2 Crime,Politics                                                               
 3 Education,Health (e.g., social determinants of health, medical)              
 4 Economics,Environment/Climate                                                
 5 Politics,Crime                                                               
 6 Sports,Entertainment (e.g., books, movies, music)                            
 7 Environment/Climate,Education                                                
 8 Health (e.g., social determinants of health, medical)                        
 9 Crime,Economics,Politics                                                     
10 Education,Entertainment (e.g., books, movies, music)                         
11 Politics,Crime                                                               
12 Health (e.g., social determinants of health, medical),Education              
13 Economics,Environment/Climate,Politics                                       
14 Other                                                                        
15 Crime,Sports                                                                 
16 Politics,Environment/Climate                                                 
17 Education,Health (e.g., social determinants of health, medical),Entertainmen…
18 No preference                                                                
19 Crime,Economics                                                              
20 Politics,Education                                                           

Before we can visualize this variable, we need to tidy and transform it.

Data science cycle: Import, tidy, transform, visualize, model, communicate. Tidy and transform are highlighted.

Tidy + Transform

Code
survey |>
  # remove text in parentheses
  mutate(data_interests = str_remove_all(data_interests, "\\s*\\(.*?\\)")) |>
  # separate into multiple rows for each interest, using comma as delimiter
  separate_longer_delim(data_interests, delim = ",") |>
  count(data_interests, sort = TRUE) |>
  mutate(prop = n / sum(n))
# A tibble: 10 × 3
   data_interests          n  prop
   <chr>               <int> <dbl>
 1 Politics                8 0.2  
 2 Crime                   6 0.15 
 3 Education               6 0.15 
 4 Health                  5 0.125
 5 Economics               4 0.1  
 6 Environment/Climate     4 0.1  
 7 Entertainment           3 0.075
 8 Sports                  2 0.05 
 9 No preference           1 0.025
10 Other                   1 0.025
Code
survey |>
  mutate(data_interests = str_remove_all(data_interests, "\\s*\\(.*?\\)")) |>
  separate_longer_delim(data_interests, delim = ",") |>
  count(data_interests, sort = TRUE) |>
  mutate(prop = n / sum(n)) |>
  filter(!is.na(data_interests)) |>
  ggplot(aes(y = fct_reorder(data_interests, prop), x = prop, fill = prop)) +
  geom_col(show.legend = FALSE) +
  scale_y_discrete(labels = label_wrap(20)) +
  scale_x_continuous(labels = percent_format(accuracy = 1)) +
  scale_fill_distiller(palette = "RdPu") +
  labs(
    title = "Data interests",
    y = NULL,
    x = "Count",
    caption = "Data are self-reported example survey responses (demo dataset)."
  ) +
  theme_minimal(base_size = 16)

Learn best

We also asked you the following open-ended question:

How do you learn best?

Tidy + Transform + Summarize

We can use text mining techniques, like tokenizing to words to explore this open-ended question:

Code
survey |>
  select(learn_best) |>
  unnest_tokens(word, learn_best) |>
  anti_join(stop_words, by = "word") |>
  count(word, sort = TRUE) |>
  filter(n > 1) |>
  print(n = Inf)
# A tibble: 18 × 2
   word           n
   <chr>      <int>
 1 practice       5
 2 fast           4
 3 reading        4
 4 examples       3
 5 real           3
 6 abstract       2
 7 building       2
 8 concept        2
 9 discussion     2
10 hands          2
11 honestly       2
12 lecture        2
13 mix            2
14 notes          2
15 step           2
16 text           2
17 times          2
18 understand     2

We can also tokenize to bigrams (pairs of words):

Code
survey |>
  select(learn_best) |>
  tidytext::unnest_tokens(bigrams, learn_best, token = "ngrams", n = 2) |>
  count(bigrams, sort = TRUE) |>
  filter(n > 2) |>
  print(n = Inf)
# A tibble: 4 × 2
  bigrams     n
  <chr>   <int>
1 i can       4
2 back to     3
3 i get       3
4 with a      3

Hopes and dreams

We also asked you the following open-ended question:

What do you hope to get out of this course?

Not so easy to tidy

And the answers are non-trivial to tidy up, e.g.,

Code
survey$hopes[1:3]
[1] "I'm in the MSW program and want to get more comfortable pulling insights out of interview and case-note data without just eyeballing it — right now I only trust myself with spreadsheets."
[2] "I'm a criminal justice student and I want a real toolkit for coding interview transcripts from my thesis project instead of just highlighting printouts by hand."                          
[3] "As a sociology student I want to bridge the gap between the qualitative interviews I'm trained in and the kind of systematic analysis that gets taken seriously by policy audiences."      

Can AI help?

Prompt:

Summarize the following responses to the question “What do you hope to get out of this course?”. Write your response in a short paragraph.

Response:

Most students hope to develop practical skills for analyzing qualitative data in a more systematic and rigorous way, particularly through coding interview transcripts, case notes, and other text-based data. Many want to strengthen their research toolkit by combining qualitative and quantitative approaches, applying data analysis to real-world problems in fields such as social work, sociology, criminal justice, political science, public policy, and environmental research. Several students also expressed a desire to become more confident with coding, data analysis, and mixed-methods research, while a few are looking to broaden their methodological training or explore research approaches outside their current area of expertise.

Can it be trusted 100%?

No. They can be misleading, inaccurate, hallucinate or in general sound more confident than they are. Humans should always stay “in the loop”. Hence – the interdisciplinary approach!

Do you have concerns that I gave an AI agent your information?

Part 4: Meet the Toolbox

Buckle up! You’re going to learn the programming language R, using a program called RStudio, which is installed and fully setup for us inside JupyterHub, which you can access with a web browser.

R is visualized as a car engine, and RStudio is the dashboard of the car

This is where we will create Quarto files that interweave code, output, and narrative text to create a practical reproducible research pipeline that empowers you to be the boss of your own data.

Two fuzzy round monsters dressed as wizards, working together to brew different things together from a pantry (code, text, figures, etc.) in a cauldron labeled “R Markdown”. The monster wizard at the cauldron is reading a recipe that includes steps “1. Add text. 2. Add code. 3. Knit. 4. (magic) 5. Celebrate perceived wizardry.” The R Markdown potion then travels through a tube, and is converted to markdown by a monster on a broom with a magic wand, and eventually converted to an output by pandoc. Stylized text (in a font similar to Harry Potter) reads “R Markdown. Text. Code. Output. Get it together, people.”

Artwork by Allison Horst

Quarto is the next generation Markdown, but I like this image better

Why this toolkit?

Why R?

  • Open source, cross-platform, and free
  • Great for reproducibility
  • Tons of learning resources
  • Works on data of all shapes and sizes
  • Produces high-quality graphics
  • Large and welcoming community
  • Flexible and extensible — doesn’t do something you want? Write a custom function
  • Used by professionals across public health, economics and finance, political science and policy research, and social science research — not just academia

Why RStudio?

  • Customizable workspace that docks all your windows together
  • Notebook formats for easy sharing of code and output
  • Syntax highlighting and helpful error warnings
  • Cross-platform — works on Windows, macOS, and Linux
  • Tab completion for functions — forget the syntax? Popup helpers are there
  • One-button publishing of reproducible documents (reports, dashboards, presentations, websites — like this one)

Why JupyterHub?

  • No install required — access from any computer with a browser
  • Same environment every session — no “it works on my machine” problems
  • Log in with your Chico credentials — no extra accounts to manage
  • Everyone in class has the same package versions, so troubleshooting is shared, not solo
  • Removes setup friction — you’re writing code in minutes, not after an afternoon of installation

Why Quarto?

  • One document = narrative + code + output, always in sync — no copy-pasting results into a report
  • Fully reproducible — anyone can re-run it and get the same result
  • One source file renders to multiple formats (HTML, PDF, Word, slides)
  • This course’s entire website is built with it — you’re learning the same tool powering these notes
  • The direct successor to R Markdown, with broader language support

“Let them eat cake” — Hello Penguins

  • “Let them eat cake” — give you the finished cake with all the fancy decorations. Then we can start to dissect how it’s built, and learn how you can make your own from scratch.
  • Recipe-following, not baking from scratch. We lean on existing packages and existing functions.
  • Recipe-following still needs a legible, repeatable recipe — that’s what Quarto gives you.
  • Today’s recipe (penguins) is quantitative, but skills extend to qualitative data as well.

Follow Along

  1. Log into JupyterHub (will go through SSO)
  2. Launch Server
  3. Open RStudio
  4. Navigate into the “Shared” folder
  5. Right click on hello.qmd and choose “Copy”
  6. Navigate back up to your home (root) folder
  7. Right click and “paste”
  8. Launch RStudio
  9. In the lower right pane, open hello.qmd
  10. Click the “Render” button on the top.
  11. Make the right side window tall and compare what you see left to right.

Coding is a hands-on activity. You must do your own typing, do your own practice for your brain to connect what you are writing to what it is doing.

Only watching someone code and then trying to do something yourself would be like listening to someone read a book to you and then trying to go write one yourself without being taught how to write.

Normalize and accept the struggle

  • Hard things make you stronger.
  • The “roller coaster of emotions” that comes with learning to code is temporary — and normal.
  • Learning a programming language is like learning a foreign language: vocabulary, grammar, syntax, and yes — a steep learning curve that takes real commitment. If R feels less comfortable right now than point-and-click tools you’ve used before, that’s expected, not a sign you’re doing something wrong. (R4NP, Ch. 2)
  • It’s worth it: R opens up analytical methods that point-and-click software doesn’t have, and the struggle itself builds abstract, conceptual thinking that makes you a stronger researcher — in this class and beyond it.
  • [debugging-humor image — placeholder, not sourced yet]
  • Don’t go solo — lean on the learning community.

Wrap-up & Tasks for the Week

Remember to check the Canvas calendar for all due dates.

Homework

  • Make modifications to hello.qmd, render, and submit through Canvas

Reading