Hello, World!
Week 1 - Meet the Toolkit
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
Materials
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
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!


Beginning the data science cycle
You took a survey, built in Google Forms:

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

Load some packages
More on what packages are, in a nutshell “get your tools out of the toolbox”:
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.

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.

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

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.

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
- Log into JupyterHub (will go through SSO)
- Launch Server
- Open RStudio
- Navigate into the “Shared” folder
- Right click on
hello.qmdand choose “Copy” - Navigate back up to your home (root) folder
- Right click and “paste”
- Launch RStudio
- In the lower right pane, open
hello.qmd - Click the “Render” button on the top.
- 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
