Appendix A: Running Code Samples

Using the Command Line

Running the code samples in this documentation requires a rudimentary knowledge of the command-line terminal (command prompt on Windows). The terminal can seem very “texty” and confusing at first; however, with a little practice it gets to be fairly intuitive and efficient. There are many tutorials online, for example, The Command Line Crash Course. However, a few basic command line concepts are covered here, for reference.

When you start a terminal, you will be presented with a window to type commands. In this documentation, the terminal command prompt will be denoted as home>$, where “home” indicates the current folder where the commands will be executed and “>$” is just a separator. These things do not need to be typed when entering commands. A similar format is common in a lot of online documentation. Some commands generate output. The output will occur after the command prompt, but will not be preceded by a command prompt symbol.

The most important thing you’ll want to be able to do is move to different directories (i.e. folders). To do this there are a couple of useful terminal commands: “change directory” (cd) and “present working directory” (pwd). When you open the terminal, you will usually start in your “home” directory. This will probably be “/Users/username” on Mac, “/home/username” on Linux, or “C:\Users\username” on Windows. To move to a different directory, use the cd command; to see the location of the current folder, use pwd. Here’s an example.

home$> pwd
/home/username/

home$> cd folder1

folder1$> pwd
/home/username/folder1

The second command here moved active directory to the folder called folder1. There are also a few special directory shortcuts:

  • ~ This refers to the home directory.

  • .. (Double dot) This refers to the parent directory of the current directory.

  • . (Single dot) This refers to the current directory.

  • \ or / Separators to combine directory names. The first works on Linux/Mac (and in IPython, see below), the second is required on Windows.

Here’s these shortcuts in action.

home>$ cd folder1/folder2

folder2>$ pwd
/home/username/folder1/folder2

folder2>$ cd .

folder2>$ pwd
/home/username/folder1/folder2

folder2>$ cd ../..

home>$ pwd
/home/username

home>$ cd folder1/folder2

folder2>$ cd ~

home>$ pwd
/home/username

home>$ cd folder1/folder2

folder2>$ cd ~/folder3

folder3>$ pwd
/home/username/folder3

The other important command is ls, which lists the contents of the current directory. (In Windows, the equivalent command is dir.)

folder3>$ ls
file1 file2 folder4

IPython

Start IPython

One of Python’s strengths as a data analysis language is its interactive interpreter. This mode is accessed from a terminal by typing python.

home>$ python
Python 3.4.1 (default, Oct 10 2014, 15:29:52)
[GCC 4.7.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

Any command that is typed at the >>> prompt is treated as Python code, and executed appropriately. That means you can interactively write and explore code in this manner.

>>> 2 + 2
4
>>> print('Hello World')
Hello World

The default Python interpreter is very limited, which is why IPython was developed. IPython is an advanced Python interpreter, which has several advanced features like autocompletion and introspection, just to name two. Over the years, this project has grown substantially, and in addition to a terminal based interpreter, there is now a GUI version and a very cool web-based Notebook as well. To learn more about the other features, consult the IPython documentation.

IPython is started from the terminal using the ipython command:

home>$ ipython
Python 3.4.1 (default, Oct 10 2014, 15:29:52)
Type "copyright", "credits" or "license" for more information.

IPython 2.3.1 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: 2 + 2
Out[1]: 4

In [2]: print('Hello World')
Hello World

The In [#]: prompt now takes the place of >>> in the regular Python interpreter. In addition, certain types of output are preceded by an Out[#]: prompt. The numbers in brackets help you to determine the order that commands are processed. For this documentation, though, the numbers will be stripped for clarity, e.g. In : and Out:. If you see these prompts, you should know that the commands are being run in an IPython session.

Autocompletion and Introscpection

The take home message of this section is use the Tab key a lot! It will make you much more productive.

Two very nice aspect of the IPython interpreter are autocompletion and object introspection. Both of these will make use of the Tab key on your keyboard; in code snippets, this key will be denoted as <tab>, which means you should press the Tab key rather than typing it out. To see these two operations in action, we can first create a new string object.

In : my_string = 'Hello World'

In : print(my_string)
Hello World

To determine the methods available to a string object, we can use IPython’s object introspection.

In : my_string.<tab>
my_string.capitalize    my_string.isidentifier  my_string.rindex
my_string.casefold      my_string.islower       my_string.rjust
my_string.center        my_string.isnumeric     my_string.rpartition
my_string.count         my_string.isprintable   my_string.rsplit
my_string.encode        my_string.isspace       my_string.rstrip
my_string.endswith      my_string.istitle       my_string.split
my_string.expandtabs    my_string.isupper       my_string.splitlines
my_string.find          my_string.join          my_string.startswith
my_string.format        my_string.ljust         my_string.strip
my_string.format_map    my_string.lower         my_string.swapcase
my_string.index         my_string.lstrip        my_string.title
my_string.isalnum       my_string.maketrans     my_string.translate
my_string.isalpha       my_string.partition     my_string.upper
my_string.isdecimal     my_string.replace       my_string.zfill
my_string.isdigit       my_string.rfind

As you can see, there are many, many things that you can do with this string object. IPython can also use the Tab key to autocomplete long names for variables, path strings, etc. Here’s an example:

In : my_string.is<tab>
my_string.isalnum       my_string.isidentifier  my_string.isspace
my_string.isalpha       my_string.islower       my_string.istitle
my_string.isdecimal     my_string.isnumeric     my_string.isupper
my_string.isdigit       my_string.isprintable

In : my_string.isi<tab>

Notice that when you type tab here IPython automatically expands this to my_string.isidentifier. This works for path strings as well.

Note

It should be pointed out that tab completion also works on the regular command line terminal interface as well.

Magic Commands

IPython has a number of special, non-Python, commands that make its interpreter behave much like a command-line terminal. These commands, called Magic Commands, are preceded by % or %%. The magic command documentation covers many of these, but a few that are useful to the examples in this document are discussed here.

The magics %cd, %pwd, and %ls serve the exact same purpose as in the terminal. Another very useful magic is %run. This command executes a Python program file from inside the IPython session, and in addition to executing the code, it also loads the data and variables into the current IPython session. This is best explained by example. Create a new folder called folder1 in your home directory. Create the file test.py in folder1 and paste the following code into that file. (See Working with Text Files for some information on text files and Python programs.)

var1 = 7
var2 = "Hello World"
var3 = var1*var2

Now let’s start up IPython and run this new program.

home>$ ipython
Python 3.4.1 (default, Oct 10 2014, 15:29:52)
Type "copyright", "credits" or "license" for more information.

IPython 2.3.1 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In : %pwd
/home/username

In : %cd folder1
/home/username/folder1

In : %ls
test.py

In : %run test.py

In :

At this point, it seems like nothing has happened; however, the variable that we defined in our file “test.py” are now contained in our IPython session. Assuming that the following IPython code is the same session as above.

In : var1
Out: 7

In : var3
Out: Hello WorldHello WorldHello WorldHello WorldHello WorldHello
WorldHello WorldHello World

As you can see, this is a very powerful way to save your work for later or to run code that is fairly repetitive.

Notebook Interface

Todo.

Working with Text Files

There are many instances where you will need to work with plain text files, including writing Python programs. Plain text files are not word processing documents (e.g. MS Word), so you will want to use a dedicated text editor. Another source of problems for beginners is that leading white space in Python programs is important. For these reasons, a dedicated Python text editor can be very useful for beginners. Anaconda is bundled with Spyder, which has a builtin text editor. The Anaconda FAQ has information on running Spyder on your system. Spyder is actually a full development environment, so it can be very intimidating for beginners. Don’t worry! The far left panel is the text editor, and you can use that without knowing what any of the other panels are doing. Some internet searches will reveal other text editors if you’d prefer something smaller. (Do not use MS Notepad.)

The “.py” suffix for Python programs can be important. On Windows, however, file extensions are not shown by default, which makes them difficult to modify. In these cases, you may inadvertently create a file with the extension “.py.txt”, which will not behave as you expect. Consult the internet for ways to show file extensions on a Windows machine.