Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G....

36
Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung

Transcript of Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G....

Page 1: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

Wissenschaftliche Programmierung mit Python

- für Meteorologie und Atmosphärenforschung

Martin G. Schultz

Teil 1: Einführung

Page 2: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

22

Was bedeutet „Wissenschaftliche Programmierung“?

• Umsetzung naturwissenschaftlicher Gleichungen in numerische Algorithmen

• Numerische Methoden zum Lösen von Gleichungssystemen• Numerische Modellierung• Visualisierung und statistische Analyse von Beobachtungs-

und Modelldatensätzen

Page 3: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

33

Page 4: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

44

Was ist Python?

• Moderne Skriptsprache (d.h. keine Kompilierung nötig)• High-level Funktionalität• Objektorientierter Ansatz, einfach mit prozeduraler

Programmierung zu verbinden• Erweiterbar (jede Menge Bibliotheken verfügbar)• Python ist frei erhältlich und läuft auf den verschiedensten

Plattformen (Linux, Windows, Mac OS, Smartphone, …)

Oder: http://www.python.org/doc/essays/blurb.html

Page 5: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

55

Warum Python?• Syntax ist klar, leicht zu lesen & lernen (fast Pseudocode)• intuitive Objektorientierung• volle Modularität, hierarchische Pakete• Fehlerbehandlung mittels Ausnahmen• dynamische, “ High Level”-Datentypen• umfangreiche Standard-Bibliothek für viele Aufgaben• einfache Erweiterbarkeit durch C/C++, Wrappen von C/C++-

Bibliotheken

Schwerpunkt: Programmiergeschwindigkeit!

Page 6: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

66

Ist Python schnell genug?

• für rechenintensive Algorithmen: evtl. besser Fortran, C, C++

• für Anwenderprogramme: Python ist schnell genug!• Großteil der Python-Funktionen sind in C geschrieben• Performance-kritische Teile können jederzeit in C/C+

+ ausgelagert werden• erst analysieren, dann optimieren!

Page 7: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

77

Wo bekomme ich Python und was brauche ich?

• Python: http://www.python.org/download/(2 Versionen: 3.2.x, 2.7.x); numerische Bibliotheken (SciPy, numpy, Matplotlib) oft nur für Python 2.7.x verfügbar [Okt. 2011]

• SciPy und NumPy: http://www.scipy.org/Download (siehe auch „Linux unofficial releases“)

• Matplotlib: http://matplotlib.sourceforge.net/ (download link rechts unter „News“)

• Basemap toolkit: http://matplotlib.github.com/basemap/• Netcdf API:

– netCDF4: http://code.google.com/p/netcdf4-python/ (netcdf3, 4, HDF5: read/write; Linux and Windows)

• Enthought Python Distribution: freie Version unter http://www.enthought.com/products/epd_free.php (Windows, auch erhältlich für Linux und Mac); enthält die wichtigsten numerischen Bibliotheken inkl. Matplotlib

Page 8: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

Programmierumgebungen

• Editor + „python“ (geht immer)• idle: Programmierumgebung mit Syntax-

Highlighting und einfachem Debugger (in Standard Python Paket enthalten)

• eric: leistungsfähige Programmierumgebung, gut für Entwicklung größerer Projekte geeignet (http://eric-ide.python-projects.org/)

8

Page 9: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

99

(Aller)erste Schritte

Aufrufen der interaktiven Umgebung idle(Linux: > idle &)oder > python oder > ipython

Python 2.x: Python 3.x:

Das ist auch schon fast der bedeutendste Unterschied zwischen Python 2.x und Python 3.x (soweit es diese Vorlesung angeht).

Im Folgenden werden wir uns auf Python 2.7 fokussieren.

Python version differences: http://python3porting.com/differences.html

Page 10: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

1010

Python Versionen

Derzeit gebräuchlich sind python 2.5, 2.6 oder 2.7 bzw. python 3.x

Die Pythonversion kann mit Hilfe des sys Moduls (Module kommen später)herausgefunden werden:

sys.version dient dem menschlichen Leser

sys.version_info fasst das Wesentliche in einem Tupel zusammen, so dass die Information in eigenen Programmen verwendet werden kann.

Page 11: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

1111

Mehr Informationen unter: http://docs.python.org/install/index.html und http://docs.python.org/tutorial/modules.html

Einige nützliche HilfenWo findet Python seine Module?• Umgebungsvariablen

– PYTHONHOME: Ort der Python-Installation

– PYTHONPATH: Suchpfad für Bibliotheken

Windows 7: Suche „Umgebungsvariablen“, Neuer Eintrag …; Windows XP: Systemsteuerung, System, Erweitert…; Linux: in .bashrc, .ksh, .csh oder .profile mit Editor einfügen

• In Python Zugriff auf den Suchpfad über sys.path:

Page 12: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

1212

Nützliche Hilfen (2)

• help([object]): „object“ kann eine Zeichenkette sein oder eine Variable, ein Modul, ein Objekt, …

• dir([object]): Liste der Objekt-Attribute (Variablen, Methoden, Funktionen)

• object.__doc__: Zeigt den „doc string“ (eine Art Online-Hilfe) eines Objektes an

• Das Internet – Suche nach „python [frage]“ führt meistens schnell zu einer Lösung

Beispiele: a=9; help(a)import sys; help(sys)help(‘open‘)

Page 13: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

1313

ModuleFunktionen, Klassen und Objekte, die thematisch zusammengehören, werden in Modulen gebündelt.

Beispiel: mathEnthält: acos(X), acosh(X), asin(X), asinh(X), atan(X), atanh(X), atan2(X), ceil(X), copysign(X,Y), cos(X), cosh(X), degrees(X), e, erf(X), erfc(X), exp(X), expm1(X), fabs(X), factorial(X), floor(X), fmod(X,Y), frexp(X), fsum(iter), gamma(X), hypot(X,Y), isinf(X), isnan(X), ldexp(X,i), lgamma(X), log(X,base), log1p(X), log10(X), modf(X), pow(X,Y), radians(X), pi, sin(X), sinh(X), sqrt(X), tan(X), tanh(X), trunc(X)

Anmerkung: Mit help(modules‘) kann man eine Liste aller installierter Module bekommen.

Page 14: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

1414

Module importierenEinfache import Anweisung

Importieren einzelner Funktionen

Importieren mit Aliasnamen

Mehrere Module können mit einem Befehl importiert werden

Alle Modulkomponenten in den Namensraum integrieren:

Von dieser Variante ist dringend abzuraten, weil dadurch das Verstehen von Programmen deutlicherschwert wird. Beispiel: from os import * überschreibt die ursprüngliche open() Funktion.

Und hier noch eine Variante für Experten:

Page 15: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

1515

Eigene ModuleSchreibe eine Textdatei mit folgendem Inhalt und speichere sie unter my_module.py ab:

In der Python Shell gib folgendes ein:

Page 16: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

1616

Los geht‘s!• Python als Taschenrechner:

Grundrechenarten: +, -, *, /, **, //, %** : Exponent (kann auch nicht-ganzzahlig sein)// : Ganzzahl-Divison% : Modulo

Division zwischen Ganzzahlen führt u.U. zum falschen Ergebnis (Python 2.x): Schreibe immer 8./3. oder (bei Variablen) a/float(b)

Page 17: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

1717

Python Standardbibliotheken• Genaue Dezimalrechnungen:

• Trigonometrische (und andere) Funktionen:Mehr: siehe http://docs.python.org/library/decimal.html

Mehr: siehe http://docs.python.org/library/math.html Anmerkung: diese Funktionen werden auch im numpy Modul definiert.

Page 18: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

18

Python Standardbibliotheken

Exakte Brüche: fractions

gcd: greatest common denominator

Mehr: siehe http://docs.python.org/library/fractions.html

Page 19: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

19

Python Standardbibliotheken

Datum und Zeit: datetimeZeit- und Datumsangaben:

Mit Zeit und Datum rechnen:date

time

datetime

timedelta

Page 20: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

20

Python Standardbibliotheken

• Zufall: random• Operationen auf Verzeichnisnamen: os.path• Dateien und Verzeichnisse: os• Verzeichnislisting: glob• Systemfunktionen: sys• Mehr: http://docs.python.org/library/ (insgesamt

235 Bibliotheken!)

Page 21: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

21

NumPy - N-dimensional Array manipulations

SciPy - Scientific tools for Python:• Interpolation• Optimization and fitting techniques (linear regression, fit statistics, ..)• More: http://www.scipy.org

NumPy + SciPy + Matplotlib = Pylab

Page 22: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

22

Matplotlib - Plotting libraryPlots, histograms, power spectra, bar charts, errorcharts, scatterplots, etc.

More: http://matplotlib.sourceforge.net/

You can find your plot with python-script on the gallery of the typical plots: http://matplotlib.sourceforge.net/gallery.html

Page 23: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

2323

Python-PowerAufgabe: Laden Sie die Klimadaten der Station Arkona aus dem Internet und plotten Sie die Zeitreihe der Tagesmitteltemperatur zwischen 1947 und 1999.

Die Daten finden Sie auf den Webseiten des DWD:

Das Datenformat ist „KL-90“, d.h. Datum und Tagesmitteltemperatur sind in bestimmten Spalten kodiert.

Benötigt werden:• Internetzugriff• Einlesen einer Datei bzw. eines Datenstroms• Analyse („parsen“) einer Textzeile• Datumsarithmetik• Grafische Darstellung einer Zeitreihe

Wie lang ist wohl das Python-Programm, das dies alles kann?

Page 24: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

2424

Klimadaten Arkona

Hier das Ergebnis:

15 „echte“ Programmzeilen!

Page 25: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

2525

Elemente des Arkona-Programms (1)

Doc-string: Zeichenketten mit drei Anführungsstrichen werden automatisch zur Dokumentation von Programmen oder Programmteilen verwendet (s. help())

Page 26: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

2626

Elemente des Arkona-Programms (2)

Importieren von Modulen: wird meist am Programmanfang gemacht.

Kommentare beginnen immer mit #

Page 27: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

2727

Elemente des Arkona-Programms (3)

Variablenzuweisung: Variablenname muss mit einem Buchstaben beginnen. Einfaches = Zeichen. Groß- und Kleinschreibung werden unterschieden!

Lange Zeilen können mit \ umgebrochen werden.

Page 28: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

2828

Elemente des Arkona-Programms (4)

Einrückungen definieren die Programmstruktur (Blöcke). Ende der Einrückung = Ende des Blocks. Standard-Einrückung ist 4 Zeichen.

Fehler abfangen: erst einmal probieren (try), wenn‘s nicht klappt, dann eben eine Fehlermeldung ausgeben (except).

Das ist alles, was zum Lesen der Daten benötigt wird!

Page 29: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

2929

Elemente des Arkona-Programms (5)

Initialisierung der x- und y-Werte als zwei leere Listen.

Anmerkung: im Allgemeinen wäre es besser,hier ein numpy array zu verwenden

Page 30: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

3030

Elemente des Arkona-Programms (6)Schleife („loop“) über alle eingelesenen Datenzeilen.

Sicherheitsabfrage: ignoriere leere (oder unvollständige) Datenzeilen.

Füge das Datum der aktuellen Zeile der Liste hinzu.

Füge die Temperatur der Liste hinzu.

Page 31: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

3131

Elemente des Arkona-Programms (7)

Erstelle die Grafik.

… und zeige sie (auf dem Bildschirm) an.

Page 32: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

3232

Python Programme

• Programmtext kann in IDLE oder jedem Editor erstellt werden

• Speichern mit der Endung .py• Aufruf:

– aus IDLE mit F5 (Run – Run Module)– von der Kommandozeile mit python programm.py

• Unix: erste Zeile #!/usr/bin/python, dann kann das Skript direkt ausführbar gemacht werden.

Programme (Programmbestandteile) aus anderen Dateien können mit import verfügbar gemacht werden oder mit exec direkt ausgeführt werden.Das Hauptprogramm hat immer den Namen „__main__“.Für Interessierte: http://docs.python.org/tutorial/classes.html (sections 9.1 und 9.2).

Page 33: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

3333

Programm-Elemente

Schleife mit Abbruchbedingung

Funktion

Objekt

Bedingte Verzweigung

Zählschleife

Fehlerbehandlung

Page 34: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

3434

Aufgaben

1. Schreibe eine Funktion, die die Summe 2*a+b zurückgibt, wenn a und b zwei Argumente sind.

2. Teste diese Funktion mit verschiedenen Eingabewerten. Was passiert, wenn man z.B. eine Zeichenkette statt einer Zahl übergibt? Was passiert, wenn nur eine Zahl übergeben wird?

3. Wie ruft man eine Funktion auf, die keinen Rückgabewert hat (in anderen Programmiersprachen „Prozeduren“ genannt)?

4. Lese (mindestens) eines der Tutorials auf http://wiki.python.org/moin/BeginnersGuide/NonProgrammers oder http://wiki.python.org/moin/BeginnersGuide/Programmers

Page 35: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

3535

Literatur und Weblinks• Python Anfänger-Tutorials: http://

wiki.python.org/moin/BeginnersGuide/NonProgrammers• Python Tutorials für Leute mit Programmiererfahrung: http://

wiki.python.org/moin/BeginnersGuide/Programmers• Das „offizielle“ Python Tutorial: http://docs.python.org/tutorial• Python Referenz: http://docs.python.org/library/• Dive into Python: http://www.faqs.org/docs/diveintopython/index.html• Deutsches Python-Forum: www.python-forum.de • Deutsches Python Wiki: wiki.python.de • Python FAQ: http://docs.python.org/faq/• Climate Data Analysis Tools http://www2-pcmdi.llnl.gov/cdat• Other software: http://www.scipy.org/Topical_Software

… und immer wieder „einfach suchen“!

Page 36: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 1: Einführung.

.. und mehr• Donald Ervin Knuth, The Art of Computer Programming: Seminumerical

algorithms (vol. 2), Addison-Wesley Pub. Co., 19812

• Vorlesung: http://www5.in.tum.de/wiki/index.php/Einf%C3%BChrung_in_die_wissenschaftliche_Programmierung_-_Winter_10

• Python Tipps&Tricks: http://www.siafoo.net/article/52 • Python version differences: http://python3porting.com/differences.html

36