You have now been taught every step of the workflow.
Tomorrow and Friday you build one of your own: a notebook that takes a dataset nobody in this room has seen, walks it through the ten steps, and ends with a figure and a claim. You will do it in teams, and on Friday afternoon each team walks the class through theirs.
The single biggest predictor of how those two days go is whether you leave this room with a dataset you have already opened and a question you have already written down. That is the whole job of this session. There is no new Python in it.
By the end of this session your team will have:
a team, of two or three people
a dataset, loaded into a DataFrame, with its shape and its nulls printed
three candidate questions, written down in complete sentences
one figure, however ugly, made from that data
a written record of all of the above, in a notebook, saved
Getting Started
This session produces one notebook per team, not one per person, so wait until you have a team before you make it.
Create a new notebook from the Command Palette (Create: New Jupyter Notebook), and confirm its kernel reads eds217_2026.
Rename it to Project_<your team name>.ipynb.
Add a title cell (Markdown), with every team memberβs name in it:
# EDS 217 Final Project: <team name>Members: <names>[Session Webpage](https://eds-217-essential-python.github.io/course-materials/interactive-sessions/7d_project_kickoff.html)Date: 09/09/2026
This is the file you will still be working in on Friday afternoon. Decide now whose machine it lives on, and get it into a shared folder or a repository before you leave.
The ten steps, one last time
Your project notebook is graded against the ten-step workflow, and every step should appear in it under a markdown heading, even where the step is one line long.
#
Step
Taught
1
Import
Day 2
2
Explore
Day 2
3
Clean
Day 4
4
Filter
Day 3
5
Sort
Day 3
6
Transform
Day 4
7
Group
Day 5
8
Aggregate
Day 5
9
Join / Reshape
Day 6
10
Visualize
Day 7
βEven where the step is one line longβ is not a loophole, it is the point. A project where the Clean step reads βthis file arrived clean; .isnull().sum() is zero in every column and there are no duplicate rowsβ has done the Clean step properly. A project that silently skips it has not, and neither you nor anyone reading it knows which situation you were in.
Step 1: Form a team
Teams of two or three. Three is fine; four is not, because on a two-day project the fourth person ends up watching.
Take five minutes. When you have a team, open one shared notebook, name it after your team, and put everybodyβs name in the first markdown cell.
Step 2: Find a dataset
You are looking for a CSV. Not a database, not an API, not a shapefile, not a zip of forty files.
What makes a dataset workable in two days
Check all five before you commit to it:
It is a single CSV file, and you can get its download URL.
It has more than a couple of hundred rows. Fewer than that and every group has three members in it and nothing you compute means anything.
It has at least two numeric columns. You need two to make a scatter plot.
It has at least one categorical column with a handful of repeated values: species, region, year, type, country. This is what you will group by and what you will pass to hue=. A dataset without one is a dataset where half of what you learned this week does not apply.
You can say where it came from and what one row is. If you cannot answer βwhat does one row of this file representβ in a sentence, keep looking.
It does not have to be environmental data. Be curious. A dataset you actually want to know the answer about will carry you through Friday morning better than a worthy one you find dull.
If your file is not already at a public URL, put it in a Google Drive folder in your UCSB account and use the loading recipe at the bottom of the final project page.
Step 3: The twenty-minute smoke test
Do not spend the afternoon reading a datasetβs documentation. Load it and look at it. Everything below is Day 2 vocabulary, and it takes four cells:
import pandas as pdurl ='...'# your filedf = pd.read_csv(url)print(df.shape)print(df.dtypes)
df.head()
df.isnull().sum()
df.describe()
Here is what that looks like on a file you already know, so you can see the shape of the thing:
Code
import pandas as pdurl ='https://eds-217-essential-python.github.io/data/penguins.csv'df = pd.read_csv(url)print(df.shape)print(df.dtypes)
(344, 7)
species object
island object
bill_length_mm float64
bill_depth_mm float64
flipper_length_mm float64
body_mass_g float64
sex object
dtype: object
Code
df.isnull().sum()
species 0
island 0
bill_length_mm 2
bill_depth_mm 2
flipper_length_mm 2
body_mass_g 2
sex 11
dtype: int64
If the smoke test turns up a file with 30 rows, or 400 columns, or one usable numeric column, drop it now and find another one. Twenty minutes of looking beats two days of coping.
Step 4: Write three questions
A good project question has a shape, and it is a shape you have been building all week:
For each <category>, how does <measurement> compare?
Does the relationship between <measurement> and <measurement> differ by <category>?
Has <measurement> changed between <time> and <time>, and is the change the same everywhere?
Those are the three shapes the ten steps are built to answer. Write three questions about your dataset in those shapes, in complete sentences, with your actual column names in them.
Three, not one, because the first question you write about a new dataset is usually the one the data cannot answer, and you will not find that out until Thursday afternoon.
Note
π Questions to avoid, and why:
βCan we predict X from Y?β Prediction is a different course. You have not been taught a model and you are not expected to fit one.
βIs X significantly higher in group A?β You have not been taught a hypothesis test. You can say a difference is large or small, and show the counts it rests on, which is honest. Do not use the word significant.
βWhat are all the interesting patterns in this data?β Not a question. You will produce fourteen figures and no claim.
Step 5: Make one figure
Before you leave, make one. Any of the three from this morning, on any two columns, with hue= on your categorical column if it fits.
It does not have to be good. It has to exist, because a figure is the fastest way to find out that your categorical column has 340 distinct values, or that your numeric column is stored as text, or that half your rows are a footer that pandas read as data.
What to save
By the end of the session, your team notebook should hold:
A title cell with the teamβs names and the date.
The datasetβs name, its URL, and one sentence saying what one row represents.
The output of .shape, .dtypes and .isnull().sum().
Three candidate questions, in markdown, in complete sentences.
One figure, with axis labels.
A markdown cell naming which of the ten steps you expect to be the hard one for this dataset.
Save it. Tomorrow morning starts from this file.
Note for the instructor: if Day 7 has run long
This session is the designated buffer for Day 7. If 7A, 7B and 7C have run over, or if the class is visibly out of road, convert this slot to review and questions and move the kickoff to Day 8 morning.
If you do, still take five minutes at the end of today to form the teams, so that tomorrow starts with people sitting together rather than with a negotiation. Teams are the part of this session that cannot be compressed; dataset browsing and question drafting can.
Key points
Teams of two or three, one shared notebook.
A workable dataset is one CSV, a few hundred rows, two numeric columns, one categorical column, and you can say what one row is.
Load it before you commit to it. The smoke test is four cells and it saves days.
Write three questions, not one, in the shapes the workflow answers.
Make one figure today, however rough.
Every one of the ten steps appears in the final notebook, under its own heading, even when the honest content of a step is a single sentence.