In this lecture, you will learn how to
- get a Python environment up and running with all the necessary tools
- execute simple Python commands
- run a sample program
- install the code libraries that underpin these lectures
The core Python package is easy to install but not what you should choose for these lectures.
These lectures require the entire scientific programming ecosystem, which
- the core installation doesn’t provide
- is painful to install one piece at a time
Hence the best approach for our purposes is to install a free Python distribution that contains
- the core Python language and
- the most popular scientific libraries
The best such distribution is Anaconda.
- very popular
- completely unrelated to the Nicki Minaj song of the same name
Anaconda also comes with a great package management system to organize your code libraries.
All of what follows assumes that you adopt this recommendation!
Installing Anaconda is straightforward: download the binary and follow the instructions.
- Install the latest version.
- If you are asked during the installation process whether you’d like to make Anaconda your default Python installation, say yes.
- Otherwise, you can accept all of the defaults.
Anaconda supplies a tool called conda to manage and upgrade your Anaconda packages.
One conda command you should execute regularly is the one that updates the whole Anaconda distribution.
As a practice run, please execute the following
- Open up a terminal
conda update anaconda
For more information on conda, type conda help in a terminal.
Jupyter notebooks are one of the many possible ways to interact with Python and the scientific libraries.
They use a browser-based interface to Python with
- The ability to write and execute Python commands.
- Formatted output in the browser, including tables, figures, animation, etc.
- The option to mix in formatted text and mathematical expressions.
Because of these possibilities, Jupyter is fast turning into a major player in the scientific computing ecosystem.
Here’s an image showing execution of some code (borrowed from here) in a Jupyter notebook
You can find a nice example of the kinds of things you can do in a Jupyter notebook (such as include maths and text) here.
While Jupyter isn’t the only way to code in Python, it’s great for when you wish to
- start coding in Python
- test new ideas or interact with small pieces of code
- share or collaborate scientific ideas with students or colleagues
These lectures are designed for executing in Jupyter notebooks.
Starting the Jupyter Notebook¶
- search for Jupyter in your applications menu, or
open up a terminal and type
- Windows users should substitute “Anaconda command prompt” for “terminal” in the previous line.
If you use the second option, you will see something like this
The output tells us the notebook is running at
localhostis the name of the local machine
8888refers to port number 8888 on your computer
Thus, the Jupyter kernel is listening for Python commands on port 8888 of our local machine.
Hopefully, your default browser has also opened up with a web page that looks something like this
What you see here is called the Jupyter dashboard.
If you look at the URL at the top, it should be
localhost:8888 or similar, matching the message above.
Assuming all this has worked OK, you can now click on
New at the top right and select
Python 3 or similar.
Here’s what shows up on our machine:
The notebook displays an active cell, into which you can type Python commands.
Notice that in the previous figure the cell is surrounded by a green border.
This means that the cell is in edit mode.
As a result, you can type in Python code and it will appear in the cell.
When you’re ready to execute the code in a cell, hit
Shift-Enter instead of the usual
(Note: There are also menu and button options for running code in a cell that you can find by exploring)
The next thing to understand about the Jupyter notebook is that it uses a modal editing system.
This means that the effect of typing at the keyboard depends on which mode you are in.
The two modes are
- Indicated by a green border around one cell
- Whatever you type appears as is in that cell
- The green border is replaced by a grey border
- Keystrokes are interpreted as commands — for example, typing b adds a new cell below the current one
To switch to
- command mode from edit mode, hit the
- edit mode from command mode, hit
Enteror click in a cell
The modal behavior of the Jupyter notebook is a little tricky at first but very efficient when you get used to it.
User Interface Tour¶
At this stage, we recommend you take your time to
- look at the various options in the menus and see what they do
- take the “user interface tour”, which can be accessed through the help menu
Inserting Unicode (e.g., Greek Letters)¶
Python 3 introduced support for unicode characters, allowing the use of characters such as $ \alpha $ and $ \beta $ in your code.
Unicode characters can be typed quickly in Jupyter using the tab key.
Try creating a new code cell and typing
\alpha, then hitting the tab key on your keyboard.
A Test Program¶
Let’s run a test program.
Here’s an arbitrary program we can use: http://matplotlib.org/3.1.1/gallery/pie_and_polar_charts/polar_bar.html.
On that page, you’ll see the following code
import numpy as np import matplotlib.pyplot as plt %matplotlib inline # Fixing random state for reproducibility np.random.seed(19680801) # Compute pie slices N = 20 θ = np.linspace(0.0, 2 * np.pi, N, endpoint=False) radii = 10 * np.random.rand(N) width = np.pi / 4 * np.random.rand(N) colors = plt.cm.viridis(radii / 10.) ax = plt.subplot(111, projection='polar') ax.bar(θ, radii, width=width, bottom=0.0, color=colors, alpha=0.5) plt.show()
Don’t worry about the details for now — let’s just run it and see what happens.
The easiest way to run this code is to copy and paste it into a cell in the notebook.
(In older versions of Jupyter you might need to add the command
%matplotlib inline before you generate the figure)
In the previous program, we executed the line
import numpy as np
- NumPy is a numerical library we’ll work with in depth.
After this import command, functions in NumPy can be accessed with
np.<function_name> type syntax.
- For example, try
We can explore these attributes of
np using the
For example, here we type
np.ran and hit Tab
Jupyter offers up the two possible completions,
In this way, the Tab key helps remind you of what’s available and also saves you typing.
Documentation appears in a split window of the browser, like so
Clicking on the top right of the lower split closes the on-line help.
In addition to executing code, the Jupyter notebook allows you to embed text, equations, figures and even videos in the page.
For example, here we enter a mixture of plain text and LaTeX instead of code
Esc to enter command mode and then type
m to indicate that we
are writing Markdown, a mark-up language similar to (but simpler than) LaTeX.
(You can also use your mouse to select
Markdown from the
Code drop-down box just below the list of menu items)
Shift+Enter to produce this
Notebook files are just text files structured in JSON and typically ending with
You can share them in the usual way that you share files — or by using web services such as nbviewer.
The notebooks you see on that site are static html representations.
To run one, download it as an
ipynb file by clicking on the download icon at the top right.
Save it somewhere, navigate to it from the Jupyter dashboard and then run as discussed above.
Other libraries can be installed with
One library we’ll be using is QuantEcon.py.
You can install QuantEcon.py by starting Jupyter and typing
!pip install --upgrade quantecon
into a cell.
Alternatively, you can type the following into a terminal
pip install quantecon
More instructions can be found on the library page.
To upgrade to the latest version, which you should do regularly, use
pip install --upgrade quantecon
Another library we will be using is interpolation.py.
This can be installed by typing in Jupyter
!pip install interpolation
Working with Files¶
How does one run a locally saved Python file?
There are a number of ways to do this but let’s focus on methods using Jupyter notebooks.
Option 1: Copy and Paste¶
The steps are:
- Navigate to your file with your mouse/trackpad using a file browser.
- Click on your file to open it with a text editor.
- Copy and paste into a cell and
Option 2: Run¶
run command is often easier than copy and paste.
- For example,
%run test.pywill run the file
(You might find that the
% is unnecessary — use
%automagic to toggle the need for
Note that Jupyter only looks for
test.py in the present working directory (PWD).
test.py isn’t in that directory, you will get an error.
Let’s look at a successful example, where we run a file
test.py with contents:
for i in range(5): print('foobar')
foobar foobar foobar foobar foobar
Here’s the notebook
pwdasks Jupyter to show the PWD (or
%pwd— see the comment about automagic above)
- This is where Jupyter is going to look for files to run.
- Your output will look a bit different depending on your OS.
lsasks Jupyter to list files in the PWD (or
- Note that
test.pyis there (on our computer, because we saved it there earlier).
- Note that
cat test.pyasks Jupyter to print the contents of
!type test.pyon Windows)
run test.pyruns the file and prints any output
But File X isn’t in my PWD!¶
If you’re trying to run a file not in the present working directory, you’ll get an error.
To fix this error, you need to either
- Shift the file into the PWD, or
- Change the PWD to where the file lives
One way to achieve the first option is to use the
- The button is on the top level dashboard, where Jupyter first opened to
- Look where the pointer is in this picture
The second option can be achieved using the
- On Windows it might look like this
- On Linux / OSX it might look like this
Note: You can type the first letter or two of each directory name and then use the tab key to expand.
It’s often convenient to be able to see your code before you run it.
In the following example, we execute
load white_noise_plot.py where
white_noise_plot.py is in the PWD.
%load if automagic is off)
Now the code from the file appears in a cell ready to execute.
Editors and IDEs¶
The preceding discussion covers most of what you need to know to interact with this website.
However, as you start to write longer programs, you might want to experiment with your workflow.
There are many different options and we mention them only in passing.
A text editor is an application that is specifically designed to work with text files — such as Python programs.
Nothing beats the power and efficiency of a good text editor for working with program text.
A good text editor will provide
- efficient text editing commands (e.g., copy, paste, search and replace)
- syntax highlighting, etc.
For a top-quality open source text editor with a steeper learning curve, try Emacs.
If you want an outstanding free text editor and don’t mind a seemingly vertical learning curve plus long days of pain and suffering while all your neural pathways are rewired, try Vim.
Text Editors Plus IPython Shell¶
To run them you can continue to use Jupyter as described above.
Another option is to use the excellent IPython shell.
To use an IPython shell, open up a terminal and type
You should see something like this
The IPython shell has many of the features of the notebook: tab completion, color syntax, etc.
It also has command history through the arrow key.
The up arrow key brings previously typed commands to the prompt.
This saves a lot of typing…
Here’s one set up, on a Linux box, with
- a file being edited in Vim
- an IPython shell next to it, to run the file
IDEs are Integrated Development Environments, which allow you to edit, execute and interact with code from an integrated environment.
One of the most popular in recent times is VS Code, which is now available via Anaconda.
We hear good things about VS Code — please tell us about your experiences on the forum.
If Jupyter is still running, quit by using
Ctrl-C at the terminal where you started it.
Now launch again, but this time using
jupyter notebook --no-browser.
This should start the kernel without launching the browser.
Note also the startup message: It should give you a URL such as
http://localhost:8888 where the notebook is running.
- Start your browser — or open a new tab if it’s already running.
- Enter the URL from above (e.g.
http://localhost:8888) in the address bar at the top.
You should now be able to run a standard Jupyter notebook session.
This is an alternative way to start the notebook that can also be handy.
Git is a version control system — a piece of software used to manage digital projects such as code libraries.
In many cases, the associated collections of files — called repositories — are stored on GitHub.
GitHub is a wonderland of collaborative coding projects.
For example, it hosts many of the scientific libraries we’ll be using later on, such as this one.
Git is the underlying software used to manage these projects.
Git is an extremely powerful tool for distributed collaboration — for example, we use it to share and synchronize all the source files for these lectures.
There are two main flavors of Git
- the plain vanilla command line Git version
the various point-and-click GUI versions
- See, for example, the GitHub version
As the 1st task, try
- Installing Git.
- Getting a copy of QuantEcon.py using Git.
For example, if you’ve installed the command line version, open up a terminal and enter.
git clone https://github.com/QuantEcon/QuantEcon.py.
(This is just
git clone in front of the URL for the repository)
As the 2nd task,
- Sign up to GitHub.
- Look into ‘forking’ GitHub repositories (forking means making your own copy of a GitHub repository, stored on GitHub).
- Fork QuantEcon.py.
- Clone your fork to some local directory, make edits, commit them, and push them back up to your forked GitHub repo.
- If you made a valuable improvement, send us a pull request!
For reading on these and other topics, try