Lecture 1 Introduction to Python Programming Jeffery S. Horsburgh Hydroinformatics Fall 2014 This work was funded by National Science Foundation Grants EPS 1135482 and EPS 1208732
Objectives Introduction to the Python programming language Write and execute computer code to automate repetitive tasks Retrieve and use data from common hydrologic data sources
This Week’s Schedule Today Thursday Introduction to Python Key Python coding concepts and conventions Introduction to the coding challenge Thursday Group work on coding challenge
Why Python? http://www.python.org Python is generally: Comparatively easy to learn Freely available Cross-platform (Windows, Mac, Linux) Widely used – extensive capabilities, documentation, and support Access to advanced math, statistics, and database functions Integrated into ArcGIS and other applications Simple, interpreted language – no compilation step http://www.python.org
What is Python?
Python Basics To run Python interactively, we will use Idle (the Python GUI) Command line interpreter – evaluates whatever you type in Text editor with syntax highlighting Menu commands for changing settings and running files Windows: Start All Programs Python 2.7 Idle (Python GUI) Mac: Applications Python 2.7 Idle
Idle on Windows
>>>print 1 + 2 3 >>> Simple Arithmetic >>>print 1 + 2 3 >>> Try typing some mathematical expressions
>>>print ‘charles’ + ‘darwin’ charlesdarwin >>> Manipulate Strings >>>print ‘charles’ + ‘darwin’ charlesdarwin >>> Try typing some string expressions
Variables Variables are names for values Created by use – no declaration necessary >>>planet = ‘Pluto’ >>>print planet Pluto >>> variable value planet ‘Pluto’
Variables Variables are names for values Created by use – no declaration necessary >>>planet = ‘Pluto’ >>>print planet Pluto >>>moon = ‘Charon’ >>> variable value planet ‘Pluto’ moon ‘Charon’
Variables Variables can be assigned to other variables >>>p = planet >>> variable value planet ‘Pluto’ moon ‘Charon’ p
Variables Variables can be assigned to other variables >>>p = planet >>>print p Pluto >>> variable value planet ‘Pluto’ moon ‘Charon’ p
Variables In Python, variables are just names Variables do not have data types >>>planet = ‘Pluto’ >>> string variable value planet ‘Pluto’
Variables In Python, variables are just names Variables do not have data types >>>planet = ‘Pluto’ >>>planet = 9 >>> variable value planet ‘Pluto’ 9 integer
Variables In Python, variables are just names Variables do not have data types >>>planet = ‘Pluto’ >>>planet = 9 >>> variable value planet ‘Pluto’ 9 Python collects the garbage and recycles the memory (e.g., ‘Pluto’) integer
Variables You must assign a value to a variable before using it >>>planet = ‘Sedna’ >>>
Variables You must assign a value to a variable before using it >>>planet = ‘Sedna’ >>>print plant #Note the deliberate misspelling
Variables You must assign a value to a variable before using it >>>planet = ‘Sedna’ >>>print plant #Note the deliberate misspelling Traceback (most recent call last): File "<pyshell#11>", line 1, in <module> print plant NameError: name 'plant' is not defined Unlike some languages – Python does not initialize variables with a default value
Values Do Have Types >>>string = ‘two’ >>>number = 3 >>>print string * number
Values Do Have Types >>>string = ‘two’ >>>number = 3 >>>print string * number #Repeated concatenation twotwotwo >>>
Values Do Have Types >>>string = ‘two’ >>>number = 3 >>>print string * number #Repeated concatenation twotwotwo >>>print string + number ‘two3’ ???? If so, then what is the result of ‘2’ + ‘3’ Should it be the string ‘23’ Should it be the number 5 Should it be the string ‘5’
Values Do Have Types >>>string = ‘two’ >>>number = 3 >>>print string * number #Repeated concatenation twotwotwo >>>print string + number Traceback (most recent call last): File "<pyshell#15>", line 1, in <module> print string + number TypeError: cannot concatenate 'str' and 'int' objects
Use Functions to Convert Between Types >>>print int(‘2’) + 3 5 >>>
Arithmetic in Python + - * / ** Addition 35 + 22 57 ‘Py’ + ‘thon’ Subtraction - 35 - 22 13 Multiplication * 3 * 2 6 ‘Py’ * 2 ‘PyPy’ Division / 3.0 / 2 1.5 3 / 2 1 Exponentiation ** 2 ** 0.5 1.41421356…
Comparisons >>>3 < 5 True >>> Comparisons turn numbers or strings into True or False
Comparisons Single ‘=‘ is assignment Double ‘==‘ is comparison 3 < 5 True Less than 3 != 5 Not equal to 3 == 5 False Equal to (Notice double ==) 3 >= 5 Greater than or equal to 1 < 3 < 5 Multiple comparisons Single ‘=‘ is assignment Double ‘==‘ is comparison
Python Lists A container that holds a number of other objects in a given order To create a list, put a number of expressions in square brackets: >>> L1 = [] # This is an empty list >>> L2 = [90,91,92] # This list has 3 integers >>> L3 = [‘Captain America’, ‘Iron Man’, ‘Spider Man’] Lists do not have to be homogenous >>>L4 = [5, ‘Spider Man’, 3.14159]
Accessing Elements in a List Access elements using an integer index item = List[index] List indices are zero based >>> L3 = [‘Captain America’, ‘Iron Man’, ‘Spider Man’] >>> print ‘My favorite superhero is’ + L3[2] My favorite superhero is Spider Man To get a range of elements from a list use: >>>L3[0:2] #Get the first two items in a list ['Captain America', 'Iron Man'] >>>len(L3) #Returns the number of elements in a list 3 >>L3[-1] #Get the last item in a list 'Spider Man'
Dictionaries A collection of pairs (or items) where each pair has a key and a value >>> D = {‘Jeff’: ‘a’, ‘Steve’:‘b’, ‘Jon’:‘c’} >>> D[‘Jeff’] ‘a’ >>> D[‘Steve’] = ‘d’ #update value for key ‘Steve’ >>> D[‘Steve’] ‘d’
Behold the Power of Programming! The real power of programming comes from the ability to perform: Selection – the ability to do one thing rather than another Repetition – the ability to automatically do something many times
Selection – if, elif, and else moons = 3 if moons < 0: print ‘less’ elif moons == 0: print ‘equal’ else: print ‘greater’ Always starts with if and a condition There can be 0 or more elif clauses The else clause has no condition and is executed if nothing else is done Tests are always tried in order Since moons is not less than 0 or equal to zero, neither of the first two blocks is executed
Selection – if, elif, and else >>>moons = 3 >>>if moons < 0: print ‘less’ elif moons == 0: print ‘equal’ else: print ‘greater’ greater >>>
Indentation Python uses indentation to show which statements are in an if, elif, else statement Any amount of indentation will work, but the standard is 4 spaces (and you must be consistent)
Repetition - Loops Simplest form of repetition is the while loop numMoons = 3 while numMoons > 0: print numMoons numMoons -= 1
Repetition - Loops Simplest form of repetition is the while loop numMoons = 3 while numMoons > 0: print numMoons numMoons -= 1 While this is true Do this
Repetition - Loops >>>numMoons = 3 >>>while numMoons > 0: print numMoons numMoons -= 1 3 2 1 >>>
Combine Looping and Selection numMoons = 0 while numMoons < 5: if numMoons > 0: print numMoons numMoons += 1
Combine Looping and Selection >>>numMoons = 0 >>>while numMoons < 5: if numMoons > 0: print numMoons numMoons += 1 1 2 3 4 >>>
Saving and Executing Code Writing and executing complex code is too difficult to do line by line at the command line As soon as you close the Python interpreter, all of your work is gone… Instead Write code using a text editor Save the code as a text file with a “.py” extension Execute code in the file from the command line
Using a Script File Start a new Python text file in Idle. You can write Python in Notepad, but if you use a formal editor, you get color coding! Click “File/New File”. This will open the script editor. Write your script and save it as a “*.py” file. Then click “Run/Run Module” to test it…. Results appear in the “shell” window.
Modules You may want to reuse a function that you have written in multiple scripts without copying the definition into each one Save the function(s) as a module Import the module into other scripts It’s like an “extension” or “plug-in” In the interpreter type, help(‘modules’) to get a list of all currently installed modules.
Import a Module into a Script
Some Python Resources Python 2.7.8 documentation: https://docs.python.org/2/index.html Software Carpentry: http://software-carpentry.org/index.html Python in Hydrology: http://www.greenteapress.com/pythonhydro/pythonhydro.html And many others…
Coding Challenge
Get the Data http://waterdata.usgs.gov/nwis/uv?cb_00060=on&format=rdb&site_no=10109000&period=&begin_date=2014-08-18&end_date=2014-08-25
Coding Challenge Divide into small groups of no more than 3-4 people Choose a real-time streamflow gage from the USGS that you are interested in. It could be a nearby gage or one that is near and dear to your heart. To see an interactive map of gage locations, go to: http://maps.waterdata.usgs.gov/mapper/index.html Create a Python script that does the following: Download the most recent data from the USGS website Read the file Extract the most recent streamflow value from the file Print the most recent streamflow value and the date at which it occurred to the screen
Example Solution “The most recent streamflow value for USGS Gage 10109000 was 109 cfs on 2014-08-25 3:15.”
Some Hints Develop your solution as a script so you can save it as a file. The USGS website returns the data as a file, but you have to request it using a URL in your code. The Python module called “urllib2” is one option for downloading a file using a URL. The data are returned in a text file where each new line represents a new date/time and data value. The Python module called “re” is one option for splitting a string using delimiters such as tabs or new-line characters. Also – check out the Python “split” method
Credits Some instructional materials adapted from the Software Carpentry website http://software-carpentry.org Copyright © Software Carpentry Support: EPS 1135482