Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G....
-
Upload
eugen-kraus -
Category
Documents
-
view
124 -
download
6
Transcript of Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G....
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
33
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
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!
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!
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
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
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
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.
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:
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‘)
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.
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:
1515
Eigene ModuleSchreibe eine Textdatei mit folgendem Inhalt und speichere sie unter my_module.py ab:
In der Python Shell gib folgendes ein:
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)
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.
18
Python Standardbibliotheken
Exakte Brüche: fractions
gcd: greatest common denominator
Mehr: siehe http://docs.python.org/library/fractions.html
19
Python Standardbibliotheken
Datum und Zeit: datetimeZeit- und Datumsangaben:
Mit Zeit und Datum rechnen:date
time
datetime
timedelta
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!)
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
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
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?
2424
Klimadaten Arkona
Hier das Ergebnis:
15 „echte“ Programmzeilen!
2525
Elemente des Arkona-Programms (1)
Doc-string: Zeichenketten mit drei Anführungsstrichen werden automatisch zur Dokumentation von Programmen oder Programmteilen verwendet (s. help())
2626
Elemente des Arkona-Programms (2)
Importieren von Modulen: wird meist am Programmanfang gemacht.
Kommentare beginnen immer mit #
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.
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!
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
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.
3131
Elemente des Arkona-Programms (7)
Erstelle die Grafik.
… und zeige sie (auf dem Bildschirm) an.
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).
3333
Programm-Elemente
Schleife mit Abbruchbedingung
Funktion
Objekt
Bedingte Verzweigung
Zählschleife
Fehlerbehandlung
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
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“!
.. 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