Lecture 08 — Find Your Own Data

Browse real data sources, load a candidate in R, and draft your Milestone 1

final-project
data-sources
project-setup

Hands-on companion to the final-project intro lecture. Students browse the major data sources, download one candidate dataset, load and size it up in R, identify X and Y, write a testable hypothesis, and draft the Milestone 1 proposal plus a plan for the short presentation.

Author

Bill Perry

Published

July 5, 2026

Find Your Own Data

Recap from the lecture

  • The final project has four deliverables: a question (H₀/Hₐ), data loaded in R, a reproducible Quarto write-up, and a short presentation
  • A good dataset has ≥ 50 rows, ≥ 3 variables, a numeric Y, and at least one X predictor
  • A good question can be written as H₀ and Hₐ in one sentence each
  • You size up a dataset in R with read_csv(), glimpse(), dim(), and head()

How to use this worksheet

  • Work through the parts in order — each one feeds your Milestone 1 paragraph at the end.
  • Blocks marked ▶ Adapt this are code templates: change the file path / column names to your dataset and run them.
  • Blocks marked ✏️ Your turn ask you to write, decide, or interpret.
  • The Going further section is optional.
Note🔮 Predict before you run — and type, don’t paste

Before you run any code block on your dataset, predict what you’ll see: how many rows? which columns are numeric? Then run it and compare. Guessing first turns “looking at data” into actually understanding it — and typing the code yourself (rather than pasting) builds the habits that make Milestones 2–5 fast.


Part 1 · Claim a topic

Before you look at any data, decide what you actually care about. You are far more likely to finish a project on a topic you find interesting.

✏️ Your turn: Write one topic you can’t stop thinking about, and a first guess at a question.

Topic:

A rough question about it:

Part 2 · Visit three data sources

Open three of these in your browser and skim what they offer. Aim for at least one that could feed your topic from Part 1.

Ecology / environment: GBIF gbif.org · EDI edirepository.org · NEON data.neonscience.org · Dryad datadryad.org · NOAA-GLERL ice glerl.noaa.gov/data/ice · eBird ebird.org/science

Fun / engaging: Bigfoot, UFO, Coffee, Video-game sales — all on kaggle.com/datasets

General: Our World in Data ourworldindata.org · FiveThirtyEight github.com/fivethirtyeight/data · Bike Sharing archive.ics.uci.edu · Google Dataset Search datasetsearch.research.google.com

✏️ Your turn: List the three you visited and one dataset that caught your eye at each.

Source 1:                     Dataset / idea:
Source 2:                     Dataset / idea:
Source 3:                     Dataset / idea:

Part 3 · Download one candidate

Pick your favorite candidate and download it as a CSV (or similar) into your project’s data/ folder.

✏️ Your turn: Record where it came from.

Dataset name:
Source URL:
File name saved in data/:
File type (csv / txt / xlsx):

⚠️ Watch out! Start small — filter to CSV and files under 10 MB. You can always scale up later. If it only downloads as .xlsx, that’s fine — you’ll use read_excel() instead of read_csv().


Part 4 · Load it and size it up

Now the real test: can you get it into R?

▶ Adapt this (change the file name to yours):

# Load libraries and your candidate dataset --------------
library(tidyverse)

my_data_df <- read_csv("data/your_file_name.csv")

🔮 Predict first: before you run the next block, guess how many rows and columns the file has. Write your guess, then check.

▶ Adapt this:

# Three-part first look ----------------------------------
glimpse(my_data_df)   # column names, types, first values
dim(my_data_df)       # rows x columns
head(my_data_df)      # the first few rows

✏️ Your turn: Fill in what you found.

Rows:                        (need at least 50 — Y / N)
Columns:                     (need at least 3  — Y / N)
What does ONE row represent (a day? a person? a sighting?):
Did read_csv() load it cleanly?  Y / N — if not, what error:

Part 5 · Identify your variables

Look at the glimpse() output. Column types tell you their role: <dbl>/<int> are numeric (possible Y), <chr>/<fct> are categorical (possible grouping X).

✏️ Your turn: Choose your variables.

Response variable Y (numeric — the thing you want to explain):
Its type (<dbl> / <int>):

Predictor variable X:
Its type (numeric / categorical):
If categorical, how many groups does it have?

✏️ Your turn: Any missing values to worry about? (Look for NA in glimpse()/head(), or count them.)

▶ Adapt this:

# Count missing values in your Y column ------------------
sum(is.na(my_data_df$your_Y_column))
Missing values in Y:
Will this be a problem?  (remember na.rm = TRUE and sum(!is.na()))

Part 6 · Write a testable question

A question is testable when you can write H₀ and Hₐ in one sentence each.

✏️ Your turn:

Question in plain English:

H₀ (null):

Hₐ (alternate):

✏️ Your turn: Match your question to a method (circle one) and say why.

Method:  regression  /  t-test  /  ANOVA  /  regression on year

Why this method fits my X and Y:

💡 Key idea: numeric X → regression; categorical X with 2 groups → t-test; categorical X with 3+ groups → ANOVA; time on the x-axis → regression on year.


Part 7 · Sketch your take-home graph

Before any analysis, draw the plot you hope to make. This is your target — the single figure that would answer your question.

✏️ Your turn: Sketch it (by hand is fine) and label the axes.

What's on the x-axis:
What's on the y-axis:
What pattern would support Hₐ (a slope? a group difference?):

Part 8 · Draft your Milestone 1 paragraph

Put it all together. Copy the template and fill in the blanks from Parts 3–7.

"I plan to use the __________ dataset, available at __________.
It contains approximately ____ rows and ____ columns. My predictor (X)
is __________ and my response (Y) is __________. My research question is:
__________. My null hypothesis is that __________, and my alternate
hypothesis is that __________. I plan to use __________ to test this.
I have confirmed I can load the file into R with read_csv()."

✏️ Your turn: Write your final paragraph here, then submit it to Canvas.

Your Milestone 1 paragraph:

Part 9 · Plan the short presentation

Your M5 talk is five minutes, one story. Rough it out now while the dataset is fresh.

✏️ Your turn:

Slide 1 — the question (and why you care):
Slide 2 — the data (source, what one row is, how big):
Slide 3 — the ONE figure that shows your result:
Slide 4 — the answer in one sentence + one honest caveat:

Part 10 · Checkpoint

You are ready to submit Milestone 1 when you can check every box:

✏️ Your turn: Any box unchecked? Note what’s blocking you and bring it to office hours.

What's blocking me (if anything):

Going further

Optional — do this if you finish early or want a stronger proposal.

Try a backup dataset

Repeat Parts 3–5 on a second candidate. Having a backup means a dead-end dataset never sinks your project.

# Load a second candidate and size it up -----------------
backup_df <- read_csv("data/your_backup_file.csv")
glimpse(backup_df)
dim(backup_df)

✏️ Your turn: Which of your two candidates is the stronger project, and why?

Your answer:

Pressure-test your question

✏️ Your turn: Show your H₀/Hₐ to a classmate. Can they tell you what plot and test you’d run just from your hypotheses? If not, tighten the wording.

What you changed after their feedback:

Getting unstuck

  1. read_csv() error: check the file is really in data/ and the name matches exactly (including .csv). Try list.files("data").
  2. Weird columns / one giant column: the file may be tab- or semicolon-separated — try read_tsv() or read_delim().
  3. Only loads as Excel: use library(readxl) and read_excel("data/your_file.xlsx").
  4. Column names have spaces or capitals: check exact names with names(my_data_df).
  5. Can’t find a dataset you like: Google Dataset Search + a topic + “csv”, or bring a topic to office hours.

💡 Key idea: every dataset you’ll ever download needs this same first pass — download → load → glimpse → identify X and Y. You now have it.


End of Activity 08. Next: Lecture 09 — loading and cleaning your own dataset (Milestone 2).