Course Description

Python is one of the leading programming languages for scientific research, data science, and machine learning. The course will familiarize students with the Python scientific stack, including NumPy, SciPy, Matplotlib, and Pandas, and best practices for scientific computing.
Every class will present a scientific problem, a method for solving it, and an implementation in Python. Examples will include how to model the spread of infectious diseases, find stationary points for a predator-prey equation system, identify an object in an image, calculate the extinction probability of a rare mutation, analyze results of a tennis game, and plot a map of hurricane density.

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).

Class Time & Location

Fall Semester
Oct 2018 - Feb 2019
Sunday 15:45-18:15
Room C.B02

Office Hours

Sunday 14:30-15:30
Room PE.309

Grading Policy

Assignments: 40%
Final Project: 60%


Course forum on Piazza: announcements, questions, and answers

Course Book

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


If you can, please bring your laptop and interact with the course notebooks during the class.
But please, no social networks or news websites during class.


  • Programming skills
    All class lectures and assignments will be in Python 3 and use the Python scientific stack. We'll dedicate the first classes to provide an introduction to Python, NumPy, SciPy, Matplotlib, and Pandas.
    If you have programming experience but in a different language (e.g. Java/C/C++/Matlab/Javascript/Ruby/Perl/R) you will probably be fine, just go over a tutorial before the first class.
  • Undergraduate Calculus & Linear Algebra
    You should be comfortable with differentiation, integration, and matrix and vector operations and notation.
  • Basic Probability and Statistics
    You should be familiar with basics of probability theory (e.g. Bayes' theorem, law of large nubmers, central limit theorem), the characteristics of basic distributions (e.g. uniform, Poisson, Gaussian), and basic 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.
Can I do the assignments or the final project in groups?
No, you may not. See more details about the Final Project
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. Of course, 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."