Python Track · self-paced · free

Python for Predictive Analytics

ISOM 835 assumes you can read and write basic Python and pandas. This track gets you there — or back there — in about twenty hours, at your own pace. Start with Python, Guided: seven lessons you read, run, and get graded on without leaving the page. Then go deeper with Prof. Arslan's ISOM 730 modules — slides, lecture notebooks, exercises, and a challenge for every level — and the best free resources on the web.

If you are… Never coded
Levels 0 → 6 in order, one level per sitting. Budget three weeks; finish Level 4 before Session 2.
If you are… Rusty
Do the Playground in one evening. Wherever you stumble, open that level's exercises.
If you are… Comfortable
Skip to Level 4 (pandas) and Level 6 (first scikit-learn), then start Session 1.
01 // THE TRACK

Seven levels, one notebook habit

Each level: what you will be able to do, Prof. Arslan's slides and notebooks, exercises and a challenge, and the two or three outside resources worth your time.

0

Setup & your first notebook

30 min

Colab is a Python notebook in your browser: cells you run one at a time, text and code side by side. Learn the five keystrokes you will use ten thousand times.

1

Python foundations

3–4 hours

Expressions, variables, and types; conditionals and try/except; functions with arguments and return values; while and for loops with break and continue. Everything else in the course is built from these.

After this level you can
  • Write numeric expressions and understand operator precedence
  • Direct control flow with if / elif / else and handle errors with try / except
  • Define and reuse functions with any number of arguments; know when a function returns nothing
  • Automate repetition with definite (for) and indefinite (while) loops
Practice: Python, Guided — Lesson 1 (six exercises, ending with FizzBuzz).
Materials
3

Dictionaries, tuples & the web

3 hours

A dictionary is a set of counters — the idiom behind every "rate by group" you will compute. Tuples are hashable and comparable, so you can sort lists of them and use them as keys. Then Python pretends to be a browser.

4

pandas: working with data

4–6 hours

The library the whole course runs on. Read a CSV, look at it, select rows and columns, summarize, group, merge — and clean the column that was secretly a string.

After this level you can
  • Load data from CSV, Excel, URLs, and APIs into a DataFrame
  • Select with .loc / .iloc and boolean masks; add and transform columns
  • Summarize with describe / value_counts; aggregate with groupby; combine tables with merge
  • Recognize the three merge shapes (one-to-one, many-to-one, many-to-many) and check row counts
Practice: Python, Guided — Lesson 4 (six pandas exercises), then Session 2's notebook.
Materials
5

Visualization

2 hours

A chart is an argument. matplotlib draws anything; seaborn draws the statistical charts you need with one call and integrates with DataFrames.

After this level you can
  • Make and label line, bar, scatter, and histogram charts in matplotlib; save a figure
  • Use seaborn for distributions, pair plots, categorical comparisons, and heatmaps
  • Choose the chart that answers the question, and title it with the answer
Practice: Re-make three charts from Session 2 with seaborn.
6

First scikit-learn

3 hours

Choose a model, set its hyperparameters, arrange X and y, fit, predict. The estimator API is the same for every model in the course — learn it once here at a gentle pace, then Session 1 moves fast.

02 // PRACTICE ARENAS

Where to get your reps

Programming is a motor skill. Ten minutes a day in one of these beats three hours on a Sunday.

03 // REFERENCES

Keep these open

Slide decks are Google Slides (view-only). Notebooks marked "Prof. Arslan" open in Colab from this course's repository; Fall 2025 lecture Colabs open from Drive. Everything here is free.

04 // IDIOMS

Six lines you will type all semester

Count things
counts[key] = counts.get(key, 0) + 1
Clean a money column
df['price'] = df['price'].str.replace('[$,]', '', regex=True).astype(float)
Rate by group
df.groupby('contract')['churn'].mean().sort_values(ascending=False)
Coerce text to numbers, safely
pd.to_numeric(df['TotalCharges'], errors='coerce')
Filter and pick columns
df.loc[df['tenure'] < 12, ['customerID', 'MonthlyCharges']]
Read from a URL
pd.read_csv('https://raw.githubusercontent.com/harslan/isom-835/master/public/data/telco_churn.csv')