Course Description

Python is a leading programming language for scientific research, data science, and machine learning. This course will familiarize students with the Python scientific stack and with best practices for scientific computing using methods from dynamical systems, stochastic processes, classical statistics, numerical analysis, Bayesian statistics, and artificial neural networks.
Every class will present a scientific problem, a computational method for tackling it, and a Python implementation of the method. Examples will include predicting points in tennis matches and survival on the Titanic, modelling evolutionary dynamics and infectious diseases, finding stationary points for a predator-prey system, inference in animal social networks, and classification of handwritten digits.

Instructor: Yoav Ram

Language: The course will be taught in English.

Environment: The course will be given using interactive Jupyter notebooks with built-in exercises and problems. Students can work in the cloud (Azure Notebooks) or on their own computer (Anaconda).

Prerequisites: Python, NumPy & Matplotlib, Calculus, Linear Algebra, Probability. See more details below.


Spring Semester
March 2019 - July 2020
Sunday 15:45-18:15
Online on Zoom

Office Hours

Sunday 14:30-15:30
Online on Zoom

Grading Policy

Assignments: 20%
Final Project: 80%


Course forum on Piazza: announcements, questions, and answers
Instructors visit the forum daily, morning and afternoon.

Course Books

IPython Interactive Computing and Visualization Cookbook by Cyrille Rossant.
Available online for free or at the library.

Laptops & PCs

Interact with the course material using interactive Jupyter notebooks during the lectures.


  • Programming skills
    All class lectures and assignments will be in Python 3 and use the Python scientific stack. Students are expected to be familiar with Python, NumPy & Matplotlib. See Calendar for links to tutorials.
  • Calculus & Linear Algebra
    You should be comfortable with differentiation and integration, as well as matrix and vector operations and notation.
  • Probability and Statistics
    You should be familiar with probability theory (e.g. Bayes' theorem, law of large nubmers, central limit theorem, conditional probability), the characteristics of common distributions (e.g. uniform, Poisson, Gaussian), and standard statistical operations (e.g. mean, standard deviation, variance).


Can I audit or sit in?
In general we are very open to sitting-in guests if you are a member of the IDC community (student, postdoc, staff, and/or faculty). We ask that you talk to the instructor before the first class you attend. If the class is too full and we're running out of space, we would ask that you please allow registered students to attend.
I have a question about the class. What is the best way to reach the course staff?
Almost all questions should be asked on Piazza. If you have a sensitive issue you can email the instructor directly.
What do the home assignments look like?
Assignments are given as a Jupyter notebooks and require writing Python code to complete one or more computational tasks.
What is the balance between theory and application in the course?
When possible, lectures will include the theoretical background for the models and methods that will be used. When deep understanding requires advanced mathematics or statistics, or very specific scientific knowledge, students will be reffered to the literature.
Where can I find additional resources on scientific computing with Python?
Cyrille Rossant maintains a curated list of awesome scientific Python resources on GitHub.
Kaggle hosts a library of machine and deep learning notebooks.
QuantEcon hosts an open notebook library for economic modeling.
Claus O. Wilke's online preview of the Fundamentals of Data Visualization is a great "guide to making visualizations that accurately reflect the data, tell a story, and look professional."