Certificate
Final assessment criteria for the NumPy + Pandas course: scoring rubric, project deliverables, and an example submission outline.
NumPy + Pandas — certificate
EXAMPLE
# ===== Award criteria =====
# Pass: >= 70% across these dimensions
# 1. Data ingestion (10 pts)
# 2. Cleaning + validation (15 pts)
# 3. Transformations (20 pts)
# 4. Joins + reshaping (15 pts)
# 5. Aggregations + groupby (15 pts)
# 6. Visualisation (10 pts)
# 7. Communication (15 pts)
# Distinction: >= 85%
# ===== Project brief =====
# Pick one real dataset >= 50k rows and deliver:
# - notebook.ipynb (reproducible from a clean kernel)
# - report.md (max 800 words, one-page summary)
# - figures/ (PNG exports of 3-5 charts)
# Example dataset choices:
# - NYC taxi trips (Jan 2024)
# - Open weather stations daily (2023)
# - GitHub archive events (sampled)
# - Australian Bureau of Stats: housing or labour
# ===== Submission outline =====
# 1. Question What are you trying to answer?
# 2. Data Source, schema, license
# 3. Ingestion pd.read_csv with explicit dtypes + parse_dates
# 4. Cleaning Missing handling, dtype coercions, dedup
# 5. Validation Sanity checks + assertions
# 6. Transformations Feature engineering (vectorised, no apply where avoidable)
# 7. Analysis groupby + agg + pivot to answer the question
# 8. Visualisation 3-5 plots, each with a takeaway in the caption
# 9. Communication One-page report; charts referenced by number
# 10. Reproducibility requirements.txt + 'Restart and Run All' works clean
# ===== Sample notebook scaffold =====
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv(
'taxi_jan_2024.csv',
parse_dates=['pickup_datetime', 'dropoff_datetime'],
dtype={'passenger_count': 'Int8', 'fare_amount': 'float32'},
)
assert df['fare_amount'].between(0, 1000).mean() > 0.99, 'fare outliers above expected'
df = (
df
.assign(duration_min=lambda d: (d.dropoff_datetime - d.pickup_datetime).dt.total_seconds() / 60)
.query('1 <= duration_min <= 120')
.query('1 <= passenger_count <= 6')
)
hourly = (
df
.assign(hour=df.pickup_datetime.dt.hour)
.groupby('hour')
.agg(trips=('fare_amount', 'count'), median_fare=('fare_amount', 'median'))
)
fig, ax = plt.subplots(figsize=(8, 4))
hourly['trips'].plot(ax=ax, marker='o')
ax.set_title('Trips by hour of day, Jan 2024')
ax.set_ylabel('Trips'); ax.set_xlabel('Hour')
plt.tight_layout(); plt.savefig('figures/hourly.png', dpi=150)
# ===== Marking sheet (example) =====
# 1. Ingestion 10/10 dtypes pinned, dates parsed
# 2. Cleaning 13/15 outliers handled, missing strategy explained
# 3. Transformations 18/20 vectorised, no apply except for one helper
# 4. Joins/reshape 12/15 one pivot, one merge with validate=
# 5. Aggregations 15/15 groupby + named agg
# 6. Visualisation 9/10 three labelled, captioned charts
# 7. Communication 13/15 clear question, takeaways tied to charts
# Total: 90/100 -> Distinction
# ===== Don'ts =====
# - Long .apply(lambda...) on hot loops; vectorise or .map a dict
# - inplace=True everywhere; pandas is moving away from inplace mutations
# - No assertions or schema checks; broken silently if upstream changes
# - Plot without labels, titles, captions
Why it matters
The certificate is not a participation prize, it is a checklist. Hit the rubric, ship one reproducible notebook and one tight report, and you can hand the same artifact to a hiring manager as proof of working ability.
Tip: Tweak the snippet with Try it Yourself », then sit the quiz at the bottom of the page.
Discussion
Loading…