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

Slides:



Advertisements
Ähnliche Präsentationen
OStR Dipl. Ing. Carsten Kraft
Advertisements

Programmieren in Logik
Objektorientierte Programmierung
HTML - Einführung Richard Göbel.
FH-Hof Einbindung von JavaScript Anweisungen
Java: Objektorientierte Programmierung
Sortierverfahren Richard Göbel.
Java: Dynamische Datentypen
Sortierverfahren Richard Göbel.
Indirekte Adressierung
Java: Grundlagen der Sprache
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
1A: POSIX POSIX (Portable Operating System) ist ein Standard für UNIX-Systeme. Er dient dazu, Programme portabel unter UNIX und Derivaten zu tauschen und.
Datenbankanbindung mit ASP Wilhelm-Schickard-Schule Tübingen
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Werkzeuge und Softwareumgebung von Christian Michele.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Brandenburgische Technische Universität Cottbus Program Profiling Andrzej Filipiak Übung Testen von Software SoSe 2006.
Die Skriptsprache Perl (8) Wolfgang Friebel DESY Zeuthen.
Packages Vortrag : Cornelia Hardt 23. November 1999.
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Klassen und Objekte
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Die Skriptsprache Python im Kontext des Softwareentwicklungsprozesses
Welche Funktion hat die php.ini? -Beinhaltet wichtige Einstellungen für PHP. Genannt seien hier u.a. der Speicherort von Cookies, Parameter der Kompilierung,
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
SQL PHP und MySQL Referat von Katharina Stracke und Carina Berning
Java programmieren mit JavaKara
Delphi II - OOP IFB Fortbildung
Selbsttest zum Modul 2 Informationstechnik
University of Applied Sciences Übung Objektorientierte Programmierung II Dipl.-Inf. (FH) Markus Vogler.
Einführung in die Programmiersprache Java
TWS/Graph HORIZONT Produkt-Präsentation Software für Rechenzentren
Kostenlose Alternative zu Microsoft Office
Projektarbeit PHP 5.3 / MySQL & Content Management Systems
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
HORIZONT 1 XINFO ® Das IT - Informationssystem Java Scanner HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 / 540.
Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 3: Numpy.
Debugging in Lua Universität zu Köln Re-usable Content in 3D und Simulationssystemen Prof. Dr. Manfred Thaller Referent: Artur Wilke.
Proseminar Programmiersprachen Python
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
FORTRAN 77.
Einführung in die Programmiersprache C 4
Informatik 1 Letzte Übung.
CGI (Common Gateway Interface)
Analyse von Ablaufdiagrammen
HORIZONT 1 XINFO ® Das IT - Informationssystem HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 /
HORIZONT 1 XINFO ® Das IT - Informationssystem PL/1 Scanner HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 / 540.
HORIZONT 1 XINFO ® Das IT - Informationssystem Assembler HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 /
PHP Basic.
SQLite und XML in PHP 5.
Einführung in PHP.
Einführung in PHP 5.
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
Neuerungen in Java 5/6/7. Stefan Bühler für InfoPoint Überblick Java 5 neue Sprachfeatures Erweiterungen Klassenbibliothek Java 6 Erweiterungen.
BMEVIEEA100 Grundlagen der Programmierung
Programmieren ... in C++ Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I.
Übung 2 - MdMT Methoden der Medizintechnik Übung zur Vorlesung Folge 2 – Basics Vom ersten Befehl zum Plot.
2. Konferenz der SAS Benutzer in Forschung und Entwicklung KSFE 1 SAS/INSIGHT interaktive Datenanalyse Iris Krammer SAS Institute GmbH CC Datamining.
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Übersicht Nachtrag zu Ausdrücken
Web und Mobile Apps Programmieren Marco Jakob Kurzvortrag OSS an Schulen
Java-Kurs Übung Besprechung der Hausaufgabe
Pointer, Arrays und verkettete Listen. Mehrdimensionale Arrays  Pointer auf ein Array von Pointern  int32 **matrix = new int32*[3];  matrix: Zeiger.
 Präsentation transkript:

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

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 2

3

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 4

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! 5

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! 6

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 7

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/)

(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 9

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. 10

Einige nützliche Hilfen Wo 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: Mehr Informationen unter: http://docs.python.org/install/index.html und http://docs.python.org/tutorial/modules.html 11

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‘) 12

Module Funktionen, Klassen und Objekte, die thematisch zusammengehören, werden in Modulen gebündelt. Beispiel: math Enthä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. 13

Module importieren Einfache 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 deutlich erschwert wird. Beispiel: from os import * überschreibt die ursprüngliche open() Funktion. Und hier noch eine Variante für Experten: 14

Eigene Module Schreibe eine Textdatei mit folgendem Inhalt und speichere sie unter my_module.py ab: In der Python Shell gib folgendes ein: 15

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) 16

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. 17

Python Standardbibliotheken Exakte Brüche: fractions gcd: greatest common denominator Mehr: siehe http://docs.python.org/library/fractions.html

Python Standardbibliotheken Datum und Zeit: datetime Zeit- und Datumsangaben: Mit Zeit und Datum rechnen: date time datetime timedelta

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!)

NumPy + SciPy + Matplotlib = Pylab NumPy - N-dimensional Array manipulations SciPy - Scientific tools for Python: Interpolation Optimization and fitting techniques (linear regression, fit statistics, ..) More: http://www.scipy.org

Matplotlib - Plotting library Plots, 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

Python-Power Aufgabe: 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? 23

Klimadaten Arkona 15 „echte“ Programmzeilen! Hier das Ergebnis: 24

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

Elemente des Arkona-Programms (2) Kommentare beginnen immer mit # Importieren von Modulen: wird meist am Programmanfang gemacht. 26

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. 27

Elemente des Arkona-Programms (4) 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! Einrückungen definieren die Programmstruktur (Blöcke). Ende der Einrückung = Ende des Blocks. Standard-Einrückung ist 4 Zeichen. 28

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 29

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. 30

Elemente des Arkona-Programms (7) Erstelle die Grafik. … und zeige sie (auf dem Bildschirm) an. 31

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. Exec: exec „print ‚Hello World!‘“ exec mit inline Text: „““ code „““ exec akzeptiert auch eine geöffnete Datei (laut Doku) andere Möglichkeiten: exec_file und diverse Varianten in verschiedenen Modulen … Exec birgt ein gewisses Sicherheitsrisiko! 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). 32

Programm-Elemente Funktion Objekt Bedingte Verzweigung Schleife mit Abbruchbedingung Zählschleife Fehlerbehandlung 33

Aufgaben Schreibe eine Funktion, die die Summe 2*a+b zurückgibt, wenn a und b zwei Argumente sind. 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? Wie ruft man eine Funktion auf, die keinen Rückgabewert hat (in anderen Programmiersprachen „Prozeduren“ genannt)? Lese (mindestens) eines der Tutorials auf http://wiki.python.org/moin/BeginnersGuide/NonProgrammers oder http://wiki.python.org/moin/BeginnersGuide/Programmers 34

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“! 35

.. 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