Week 7 of 12 · The Lead

You Can't Lead What You Can't Query

Phase 2 begins: stop managing your data by anecdote and learn to pull the numbers yourself — starting with the pandas mental model

Day 31 ~75 minutes Concept

Day 31 of 66

Welcome to Phase 2 — The Lead

Phase 1 made you fluent in the craft: rubrics, agreement, preference data, multimodal evaluation. You can produce gold-standard human data and measure it. Phase 2 is about running the operation — and the first thing an operation runs on is numbers. This week is the technical fluency that turns "I think our quality dropped" into "annotator C's mean score fell 0.6 points last week on safety items; here's the table."

The thesis of the week

A Human Data Lead who has to ask someone else to pull the numbers is leading blind and slow. The person who can load the label export, group it, and find the disagreement hot-spots in five minutes sets the agenda. You can't lead what you can't query. So this week you learn to query.

You don't need to become a data scientist. You need a small, sharp toolkit: pandas for ad-hoc analysis of label files on your laptop, SQL for the big datasets a lab stores in a warehouse, and the handful of statistics that actually matter for judging data. Today is pandas — the tool you'll live in.

The mental model: a DataFrame is just a table

Forget the jargon. pandas gives you one core object — the DataFrame — and a DataFrame is a table with named columns and rows, exactly like a spreadsheet or a database table. Your label export is already a table: one row per label, with columns like item_id, annotator, score, task. pandas just lets you operate on that table in code instead of by hand.

There are really only four moves you need this week, and you already think in all four — you just do them in a spreadsheet today:

Core Theory — the four moves

1 · Load — turn a file into a table

pd.read_csv("labels.csv") reads a CSV off disk into a DataFrame. That's the whole first step. df.head() shows you the top few rows so you can see what you're working with — always your first command on a new file.

2 · Filter — keep the rows you care about

df[df.score < 3] keeps only rows where the score is below 3. This is "show me the failures" — the single most common thing a lead asks of a label set.

3 · Group — collapse rows into per-group summaries

df.groupby("annotator") splits the table into one bucket per annotator. This is the move that turns 10,000 labels into a one-line-per-person profile. Tomorrow's lesson lives here.

4 · Aggregate — compute a number per group

.agg(["count", "mean", "std"]) says "for each group, give me the count, the average, and the spread." Group + aggregate together answer almost every question you'll have about who labeled what and how.

See it in one block

Here is the smallest possible end-to-end example. Read every line — this is the shape of nearly everything you'll write this week.

first_look.pyPython
import pandas as pd

df = pd.read_csv("labels.csv")   # the whole file becomes one table
print(df.head())                 # look before you leap: top 5 rows

low = df[df.score < 3]           # filter: only the failing labels
print(f"{len(low)} labels scored below 3")

print(df.groupby("annotator")["score"].mean())  # avg score per person
Four lines of real analysis. read_csv loads, head previews, the bracket filter keeps failing rows, and groupby(...)["score"].mean() gives you each annotator's average in one line. Notice df.groupby("annotator")["score"] reads almost like English: "group by annotator, then look at the score column."

Why pandas and not just Excel?

Excel is fine for 200 rows you'll look at once. But a lead's analysis must be repeatable — same script, next week, new file, identical answer. A four-line script you can rerun on every weekly export beats a spreadsheet you rebuild by hand and quietly get wrong. Code is how you stop managing by anecdote.

Why this is leadership, not busywork

The whole point isn't the syntax — it's the independence. When you can answer your own questions about the data, three things change. You stop waiting on an analyst for numbers you need today. You catch problems (a drifting annotator, a hot-spot item) before they compound. And when you bring a finding to your manager, it's a table with your name on it, not a vibe.

Your job today

Install pandas (pip install pandas) and work the official "10 minutes to pandas" tutorial from the getting-started page. Then load any CSV you have — even a label export from your own work — and run df.head(), one filter, and one groupby(...).mean(). The goal is comfort with the four moves, not mastery.

Your work today

Get hands on the keys

Pandas, the four moves

  1. Install pandas and confirm import pandas as pd runs without error.
  2. Work "10 minutes to pandas" from the getting-started tutorials — type the examples, don't just read them.
  3. Load a real CSV with read_csv and run df.head(). Note the column names out loud.
  4. Run one filter (e.g. low scores) and one groupby + mean. You've now done a real analysis.
The lead move

An IC asks the analyst to pull the numbers and waits a day for the answer. A lead loads the export and answers their own question in five minutes — which is what lets them set the agenda instead of reacting to someone else's table.

Say this in an interview: "I don't manage my data by anecdote. When I say quality dropped, I can hand you the DataFrame — annotator, week, and the exact items — because I pulled it myself before the meeting."

Today's Takeaways