# Course Schedule

Part 1: Performance

### Week 1

**[Mon]** Labor Day (Sep 6)

### Week 2

**[Mon]** Performance 1 (Sep 13)

- check_output
- time

**Lab:**Cloud Setup

**Released:**P1 (perf measurements)

**Watch**: Lecture

**Slides**: PDF

**Read**: Lecture Notes (NB)

**[Wed]** Performance 2 (Sep 15)

- complexity analysis
- Big O

**Watch**: Lecture

**Slides**: PDF

**Read**: Lecture Notes (NB)

**[Fri]** Performance 3 (Sep 17)

- practice

**Watch**: Lecture

**Worksheet**: PDF

**PythonTutor**: examples

**Read**: Lecture Notes (NB)

### Week 3

**[Mon]** Performance 4 (Sep 20)

- large data
- generators

**Lab:**Git Practice

**Watch**: Lecture

**PythonTutor**: examples

**[Wed]** OOP 1: Classes (Sep 22)

- attributes
- methods
- constructors

**Optional Reading**: Think Python 15, 16, and 17.1 - 17.5

**Watch**: Lecture

QUIZ 1 DUE

**Slides**: PDF

**Read**: Lecture Notes (NB)

**[Fri]** OOP 2: Special Methods (Sep 24)

- __str__, __repr__, _repr_html_
- __eq__, __lt__
- __len__, __getitem__
- __enter__, __exit__

**Optional Reading**: Python Data Model

**Watch**: Lecture

**Slides**: PDF

**Read**: Lecture Notes (NB)

### Week 4

**[Mon]** OOP 3: Inheritance (Sep 27)

- method resolution order
- overriding methods
- calling overridden methods

**Due:**P1

**Released:**P2 (trees)

**Optional Reading**: Think Python 18

**Lab:**Files and Complexity

**Watch**: Lecture

**Slides**: PDF

**Read**: Lecture Notes (NB)

**[Fri]** Recursion (Oct 1)

- functions that return something
- functions that do something

**Watch**: Lecture

**Read**: Lecture Notes (NB)

### Week 5

**[Mon]** Graphs and Tree Intro (Oct 4)

- types of graph
- graphviz

**Lab:**Linked Lists

**Watch**: Lecture

**Read**: Lecture Notes (NB)

**[Wed]** Trees 1 (Oct 6)

- trees
- binary trees
- binary search trees (BSTs)

**Watch**: Lecture

**Read**: Lecture Notes (NB)

**[Fri]** Trees 2 (Oct 8)

- implementing sets with BSTs
- balance, complexity
- graph search

**Watch**: Lecture

**Slides**: PDF

**Read**: Lecture Notes (NB)

### Week 6

**[Mon]** Graph Search 1 (Oct 11)

- depth-first search

**Lab:**BSTs

**Watch**: Lecture

**Slides**: PDF

**Read**: Lecture Notes (NB)

**[Wed]** Graph Search 2 (Oct 13)

- breadth-first search

**Due:**P2

**Released:**P3 (crawler)

QUIZ 4 DUE

**Watch**: Lecture

**Slides**: PDF

**Read**: Lecture Notes (NB)

**[Fri]** Web 1: Selenium (Oct 15)

- advanced web scraping

**Watch**: Lecture

**Slides**: PDF

**Read**: Lecture Notes (NB)

Part 2: Web and Visualization

### Week 7

**[Mon]** Web 2: Recursive Crawl (Oct 18)

- more tricky pages
- BFS for webpages

**Lab:**DFS vs. BFS

**Watch**: Lecture

**Read**: Lecture Notes (NB)

**[Wed]** Web 3: Flask (Oct 20)

- Internet overview
- flask
- decorators

**Watch**: Lecture

**Slides**: PDF

**Read**: Lecture Notes (NB)

**[Fri]** Web 4: More Flask (Oct 22)

- query strings
- rate limiting (HTTP 429)
- robots.txt

**Watch**: Lecture

**Read**: Lecture Notes (NB)

### Week 8

**[Mon]** Web 5: A/B testing (Oct 25)

- data collection
- significance

**Read**: The Morality of A/B Testing (TechCrunch article)

**Due:**P3

**Released:**P4 (website)

**Lab:**Web

**Watch**: Lecture

**Slides**: PDF

**[Fri]** Regex 1 (Oct 29)

- character classes
- repetition
- anchoring

**Read**: DS100 Ch 13

**Watch**: Lecture

**Slides**: PDF

### Week 9

**[Wed]** In-Class Midterm (Nov 3)

**[Fri]** Visualization 1 (Nov 5)

- matplotlib coordinate systems
- drawing custom lines/polygons

**Watch**: Lecture

**Read**: Lecture Notes (NB)

### Week 10

**[Mon]** Visualization 2 (Nov 8)

- geographic maps
- shapefiles
- high resolution graphics

**Lab:**Geo Maps

**Watch**: Lecture

**Read**: Lecture Notes (NB)

**[Wed]** Visualization 3 (Nov 10)

- shapely
- animations

**Due:**P4

**Released:**P5 (trace analysis)

QUIZ 7 DUE

**Watch**: Lecture

**Read**: Lecture Notes (NB)

**[Fri]** Visualization 4 (Nov 12)

- big example
- animated map of incidents scraped from Madison Fire Department

**Watch 1**: Lecture (In Class)

**Watch 2**: Lecture (After Class)

Part 3: Machine Learning

### Week 11

**[Mon]** Regression 1 (Nov 15)

- ML overview
- sklearn LinearRegression
- explained variance
- train/test split

**Lab:**Regressions and SQL

**Watch**: Lecture

**Slides**: PDF

**[Fri]** Linear Algebra 1 (Nov 19)

- numpy arrays
- numpy images
- multiplication

**Watch**: Lecture

**Read**: Lecture Notes (NB)

### Week 12

**[Mon]** Linear Algebra 2 (Nov 22)

- more multiplication
- fit with np.linalg.solve
- predict with np.dot
- column perspective

**Watch**: Lecture

**Due:**P5

**Released:**P6 (land matrices and regression)

**Lab:**Dot Product and Counting Cells

**Read**: Lecture Notes (NB)

**[Fri]** Thanksgiving Break (Nov 26)

### Week 13

**[Mon]** Linear Algebra 3 (Nov 29)

- column spaces
- projection matrices

**Lab:**Model Comparison

**Watch**: Lecture

**Read**: Lecture Notes (NB)

**[Wed]** Classification 1 (Dec 1)

- LogisticRegression
- multiclass, proba
- decision boundaries

**Watch**: Lecture

**Slides**: PDF

**[Fri]** Classification 2 (Dec 3)

- confusion matrices
- accuracy, precision, recall
- regularization and standardization

**Due:**P6

**Released:**P7 (classification)

**Watch**: Lecture

**Slides**: PDF

### Week 14

**[Wed]** Clustering 2 (Dec 8)

- hierarchical clustering
- dendrograms
- linkage matrices
- AgglomerativeClustering

**Watch**: Lecture

**Slides**: PDF

**[Fri]** Decomposition (Dec 10)

- Singular Value Decomposition (SVD)
- Principal Component Analysis (PCA)
- Compressing Data

**Watch**: Lecture

**Read**: Lecture Notes (NB)

### Week 15

**[Mon]** Parallelism 1 (Dec 13)

- multiprocessing pools
- parallel map

**Lab:**Clustering Pixels

**Due:**P7

**Watch**: Lecture

**Slides**: PDF

**Read**: Lecture Notes (NB)