Python Introduction for Seismologists
Here we want to give a small, incomplete introduction to the Python programming language, with links to useful packages and further resources. The key features are explained via the following Python script:
1#!/usr/bin/env python
2import glob
3from obspy.core import read
4
5for file in glob.glob('*.z'):
6 st = read(file)
7 tr = st[0]
8 msg = "%s %s %f %f" % (tr.stats.station, str(tr.stats.starttime),
9 tr.data.mean(), tr.data.std())
10 print(msg)
Description of each line of the example above:
- Line 1
Shebang, specifying the location of the Python interpreter for Unix-like operating systems.
- Lines 2-3
Import modules/libraries/packages in the current namespace. The
glob
module, which allows wildcard matching on filenames, is imported here. All functions inside this module can be accessed viaglob.function()
afterwards, such asglob.glob()
. Furthermore, a single functionread()
from theobspy.core
module is imported, which is used to read various different seismogram file formats.- Line 5
Starts a
for
-loop using theglob()
function of the moduleglob
on all files ending with'.z'
.Note
The length of all loops in Python is determined by the indentation level. Do not mix spaces and tabs in your program code for indentation, this produces bugs that are not easy to identify.
- Line 6
Uses the
read()
function from theobspy.core
module to read in the seismogram to aStream
object namedst
.- Line 7
Assigns the first
Trace
object of the list-likeStream
object to the variabletr
.- Line 8-9
A Python counterpart for the well-known C function
sprintf
is the%
operator acting on a format string. Here we print the header attributesstation
andstarttime
as well as the return value of the methodsmean()
andstd()
acting on the data sub-object of theTrace
(which are of typenumpy.ndarray
).- Line 10
Prints content of variable
msg
to the screen.
As Python is an interpreter language, we recommend to use the IPython shell
for rapid development and trying things out. It supports tab completion,
history expansion and various other features. E.g.
type help(glob.glob)
or glob.glob?
to see the help of the
glob()
function (the module must be imported beforehand).
Further Resources
- https://docs.python.org/3/tutorial/
Official Python tutorial.
- https://docs.python.org/3/library/index.html
Python library reference
- https://software-carpentry.org/
Very instructive video lectures on various computer related topics. A good starting point for learning Python and Version Control with Git.
- https://ipython.org/
An enhanced interactive Python shell.
- https://docs.scipy.org/doc/
NumPy and SciPy are the matrix based computation modules of Python. The allow fast array manipulation (functions in C). NumPy and SciPy provide access to FFTW, LAPACK, ATLAS or BLAS. That is svd, eigenvalues… ObsPy uses the numpy.ndarrays for storing the data (e.g. tr.data).
- https://matplotlib.org/gallery.html
matplotlib is the 2-D plotting package for Python. The gallery is the market place which allows you to go shopping for all kind of figures. The source code for each figure is linked. Note matplotlib has even its own latex renderer.
- https://scitools.org.uk/cartopy/docs/latest/
Package plotting 2D data on maps in Python. Similar to GMT.
- https://trac.osgeo.org/gdal/wiki/GdalOgrInPython
Package which allows to directly read a GeoTiff which then can be plotted with the Cartopy package.
- https://svn.geophysik.uni-muenchen.de/trac/mtspecpy
Multitaper spectrum bindings for Python