Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf VORLESUNG 9: MODULE MATTHIAS BIEG 1 of 35 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf MODULE: INTRO 2 of 35 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf WAS SIND MODULE Module bieten die Möglichkeit Python Code logisch zu organisieren Wenn Code zu einem grossen Programm wächst, sollte man diesen in organisierte Stücke unterteilen und in einzelne Module speichern Module können dann über die import Anweisung in andere Module, bzw. Skripte eingefügt werden Üblicherweise werden Funktionen, die eine bestimmte Art von Problemen lösen, jedoch unabhängig voneinander operieren in ein Modul gespeichert und dieses Modul in ein Python Skript mit der Anweisung import eingebunden, falls dessen Funktionen gebraucht werden 3 of 35 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf WAS SIND MODULE Module sind also eine Art Python Code zu organisieren Diese Art der Organisation macht das Teilen von Code sehr einfach Es gibt unzählige Module, die in der Python Standardbibliothek enthalten sind Ein Beispiel ist das Modul sys, das Schnittstellen (Funktionen, Attribute, etc) zur Interaktion mit dem Python Interpreter zur Verfügung stellt import sys # Importieren des Moduls sys input1 = sys.argv[1] # Zugriff auf die Liste argv 4 of 35 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf MODULE UND DATEIEN 5 of 35 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf MODULE UND DATEIEN Während Module eine Möglichkeit darstellen Python Code logisch zu organisieren, so stellen Dateien eine Möglichkeit dar Module physikalisch zu organisieren Das heisst: Jede Datei kann als ein Modul angesehen werden und umgekehrt Der Dateiname eines Moduls ist der Modulname mit dem Anhängsel .py, das heisst also, dass jedes Python Skript als Modul angesehen werden kann und über die Anweisung import in andere Pythonskripte eingebunden werden kann Beispiel: Angenommen ich schreibe ein Modul mit dem Namen mymodule, so heisst die Datei in dem der Code für dieses Modul gespeichert wird mymodule.py 6 of 35 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf SUCHPFAD UND PFADSUCHE Der Prozess des Importierens eines Moduls verlangt vom Python Interpreter ein Prozess namens Pfadsuche Die Pfadsuche durchsucht vordefinierte Bereiche im Dateisystem nach der Datei mymodule.py, wenn das Modul mymodule eingebunden werden soll Diese vordefinierten Bereiche nennt man Suchpfad Es gibt Fälle in denen das Importieren eines Moduls fehlschlägt: >>> import xxx Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named 'xxx' Hierbei kann der Interpreter auf das engeforderte Modul nicht zugreifen. Der sehr wahrscheinlich Grund hierfür ist, dass das Modul nicht im Suchpfad enthalten ist, weshalb die Pfadsuche fehlschlägt 7 of 35 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf STANDARD SUCHPFADE Standard Suchpfade werden während der Installation des Python Interpreters definiert Es gibt zwei Möglichkeiten Standard Suchpfade einzusehen, bzw. zu modifizieren Die Linux Systemvariable PYTHONPATH enthält eine durch : getrennte Liste an Pfaden in denen der Python Interpreter nach Modulen sucht: Innerhalb von Python Skripten kann man über die Variable sys.path auf Suchpfade zugreifen >>> import sys >>> sys.path ['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-i386-linux-gnu'] Wichtig: Der Pfad in dem ein Pythonskript ausgeführt wird ist immer im Suchpfad enthalten 8 of 35 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf MODULE UND NAMENSRÄUME (NAMESPACES) Um Konflikte in der Namensgebung von Variablen, Funktionen, etc. zwischen unterschiedlichen Modulen zu vermeiden, besitzt jedes Modul seinen eigenen Namensraum (namespace) Funktionen, Variablen, etc. die innerhalb eines Moduls definitert wurden nennt man Attribute des Moduls Auf Attribute eines Moduls greift man über den Namen des Attributs mit vorangestelltem Namen des Moduls, verknüpft durch einen Punkt "." zu Wichtig: Um auf Attribute (Variablen, Funktionen, etc.) des lokalen Namensraums zuzugreifen muss kein Modulname vorangestellt werden! 9 of 35 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf MODULE UND NAMENSRÄUME: BEISPIEL Wir definieren ein Modul mymodule und speichern dieses in der Datei mymodule.py # mymodule.py def listSum(l): sum = 0 for element in l: sum += element return sum tripletMap = {"AUG": "Start", "UAA": "Stop"} >>> import mymodule # Importiere Modul mymodule >>> l = [1,2,3] >>> print mymodule.listSum(l) # Benutze Funktion listSum aus mymodule 6 >>> tripletMap = {"ATG": "Start", "TAA": "Stop"} # Definiere tripletMap lokal >>> print tripletMap # greife auf lokale tripletMap zu {"ATG": "Start", "TAA": "Stop"} >>> print mymodule.tripletMap # greife auf tripletMap aus mymodule zu {"AUG": "Start", "UAA": "Stop"} 10 of 35 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf MODULE IMPORTIEREN 11 of 35 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf DIE IMPORT ANWEISUNG Um Module in ein Pythonskript, bzw. ein eigenes Modul einzubinden benötigt man die Anweisung import Schema import modul1 import modul2 . . import moduln Ausserdem ist es möglich mehrere Module innerhalb einer Zeile einzubinden Schema import modul1, modul2, ... , moduln 12 of 35 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf DIE FROM-IMPORT ANWEISUNG Es ist möglich bestimmte Attribute eines Moduls in sein eigenes Modul zu importieren D.h. die Namen der Attribute eines fremden Moduls in den lokalen Namensraum des eigenen Moduls einzubinden Hierfür genügt folgende Anweisung Schema from module import attribute1, attribute2, ..., attributen 13 of 35 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf DIE FROM-IMPORT ANWEISUNG: BEISPIEL # mymodule.py def listSum(l): sum = 0 for element in l: sum += element return sum tripletMap = {"AUG": "Start", "UAA": "Stop"} >>> from mymodule import listSum, tripletMap >>> l = [1,2,3] >>> print(listSum(l)) 6 >>> print(tripletMap) {"AUG": "Start", "UAA": "Stop"} Wenn man Attribute eines fremden Moduls mit der from-import Anweisung in sein eigenes Modul einbindet, so kann man auf diese ohne vorangestellten Modulnamen zugreifen! 14 of 35 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf ERWEITERTE IMPORT ANWEISUNG (AS) Manchmal kann es sinnvoll sein für ein Modul, das man importiert ein Alias zu verwenden Gründe hierfür können sein: Man hat schon ein Modul oder ein Modulattribut importiert, das den gleichen Namen besitzt; Der Name des zu importierenden Moduls ist zu lang, oder vielleicht mag man den Namen des Moduls schlichtweg nicht, ... Um ein Modul mit einem Alias zu importieren genügt folgende Anweisung Schema import module as module_alias 15 of 35 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf ERWEITERTE IMPORT ANWEISUNG (AS): BEISPIEL # mymodule.py def listSum(l): sum = 0 for element in l: sum += element return sum tripletMap = {"AUG": "Start", "UAA": "Stop"} >>> import mymodule as mm # Importiere Modul mit Alias mm >>> print(mm.tripletMap) # Zugriff auf Attribut tripletMap über mm.tripletMap {"AUG": "Start", "UAA": "Stop"} Will man nicht über den langen Modulnamen mymodule auf Attribute dieses Moduls zugreifen, so kann man das Modul mit einem Alias mm in das lokale Modul einfügen 16 of 35 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf PLOTTING: DAS MODUL MATPLOTLIB. PYPLOT 17 of 35 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf MATPLOTLIB.PYPLOT: INTRO Das Modul matplotlib.pyplot kann zum Plotten von Daten benutzt werden Es bietet eine Sammlung von Funktionen: Zum Erstellen von Figures und Plotting Bereichen innerhalb der Figures; zum Plotten von Linien, Punkten innerhalb der Plotting Bereiche; zum Dekorieren des Plots mit Labels; etc. In matplotlib.pyplot werden die Zustände zwischen Funktionsaufrufen erhalten. D.h. das Modul merkt sich die momentane Figure und den momentanen Plotting Bereich. Plotting Funktionen plotten immer in den momentanen Plotting Bereich 18 of 35 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf MATPLOTLIB.PYPLOT: PLOT() Die Funktion plot(*args, **kwargs) wir dazu benutzt Linien und Punkte in definierten Plottingbereichen (Axes) zu Plotten args ist ein Argument variabler Länge, das mehrere x und y Listenpaare erlaubt, gefolgt von einem optionalen String, der das Format der zu plottenden Punkte/ Linien angibt Folgende Beispielaufrufe der Funktion plot() sind zulässig plot(x, plot(x, plot(y) plot(y, y) # Plotte x und y mit dem Standard Lininienformat y, 'bo') # Plotte x und y als blaue Kreise # Plotte y mit x als Indexliste 0..N 'r+') # Gleich wie plot(y) mit roten Plussen Hierbei sind x und y numerische Listen gleicher Länge. Es werden die Werte von x (x-Achsen Werte) gegen die Werte von y (y-Achsen Werte) geplottet 19 of 35 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf MATPLOTLIB.PYPLOT: PLOT() Folgende Liste gibt eine Übersicht über die Linienformate 20 of 35 Zeichen Beschreibung '-' Solide Linie '--' Gestrichelte Linie '-.' Gestrichelt/ gepunktete Linie ':' Gepunktete Linie '.' Punkt Marker 'o' Kreis Marker 'v' Dreiecks Marker (Spitze nach unten) '<' Dreiecks Marker (Spitze nach links) '>' Dreiecks Marker (Spitze nach rechts) 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf MATPLOTLIB.PYPLOT: PLOT() Folgende Liste gibt eine Übersicht über die Farben 21 of 35 Zeichen Farbe 'b' Blau 'g' Grün 'r' Rot 'c' Cyan 'm' Magenta 'y' Gelb 'k' Schwarz 'w' Weiss 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf MATPLOTLIB.PYPLOT: PLOT() Beispiele >>> >>> >>> >>> 22 of 35 import matplotlib.pyplot as plt # Importiere matplotlib.pyplot als Alias plt x = [float(i)/10. for i in range(100)] plt.plot(x, [i*i for i in x]) # Plotte x gegen x*x mit Standardlinienformat plt.show() # Zeige Bild in Fenster an 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf MATPLOTLIB.PYPLOT: PLOT() Beispiele >>> >>> >>> >>> 23 of 35 import matplotlib.pyplot as plt # Importiere matplotlib.pyplot als Alias plt x = [float(i)/10. for i in range(100)] plt.plot(x, [i*i for i in x], "ro") # Plotte x gegen x*x als rote Punkte plt.show() # Zeige Bild in Fenster an 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf MATPLOTLIB.PYPLOT: ANZEIGEN VON PLOTS Plots können auf zwei Arten angezeigt werden: Direktes Anzeigen in einem Fenster: Um Plots direkt in einem neuen Fenster anzuzeigen kann die Funktion plt.show() benutzt werden Speichern in Datei: Um Plots in eine Datei zu speichern wird die Funktion plt.savefig(dateiname) benutzt 24 of 35 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf MATPLOTLIB.PYPLOT: DEKORIEREN VON PLOTS MIT TEXT Um Plot mit beschreibendem Text (x-Achsen Beschriftung, y-Achsen Beschriftung, Titel des Plots) zu versehen können folgende Funktionen verwendet werden: plt.xlabel(string): Fügt den String string als x-Achsen Beschriftung dem Plot hinzu plt.ylabel(string): Fügt den String string als y-Achsen Beschriftung dem Plot hinzu plt.title(string): Fügt den String string als Überschrift des Plots hinzu 25 of 35 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf MATPLOTLIB.PYPLOT: DEKORIEREN VON PLOTS MIT TEXT >>> >>> >>> >>> >>> >>> >>> 26 of 35 import matplotlib.pyplot as plt # Importiere matplotlib.pyplot als Alias plt x = [float(i)/10. for i in range(100)] plt.plot(x, [i*i for i in x], "ro") # Plotte x gegen x*x als rote Punkte plt.xlabel("x-Werte") plt.ylabel("y-Werte") plt.title("Parabel f(x)=x*x") plt.show() # Zeige Bild in Fenster an 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf MATPLOTLIB.PYPLOT: FIGURES UND PLOTTING BEREICHE (AXES) Figure und Axes Schema 27 of 35 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf MATPLOTLIB.PYPLOT: DEFINIEREN VON FIGURES Mit Hilfe der Funktion plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True) erstellt man eine neue Figure Die Parameter haben folgende bedeutung Parameter Bedeutung 28 of 35 num Integer Wert. Wenn der Wert nicht angegeben wird, wird eine neue Figure erstellt. Wird der Wert angegeben und es existiert schon eine Figure mit diesem Wert, so wird dies Figure aktiviert figsize Tuple aus Integer Werten. Weite und Höhe der Figure in Zoll 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf MATPLOTLIB.PYPLOT: DEFINIEREN VON FIGURES Parameter Bedeutung dpi Integer Wert. Auflösung des Plots in Anzahl der Punkte pro Zoll facecolor Hintergrund Farbe edgecolor Farbe des Rahmens Wichtig: Wird nicht explizit eine neue Figure erstellt, so wird automatisch in eine Figure mit den Standardwerten geplottet 29 of 35 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf MATPLOTLIB.PYPLOT: DEFINIEREN VON PLOTTING BEREICHEN Die funktion plt.subplot(numrows, numcols, numaxes) wird dazu benutzt Plottingbereiche zu erstellen und den momentanen Plotting Bereich zu setzen Die Parameter haben folgende Bedeutung Parameter Bedeutung numrows Anzahl der Zeilen in die die Figure unterteilt werden soll numcols Anzahl der Spalten in die die Figure unterteilt werden soll numaxes Die Nummer des Plottingbereichs, der als momentaner Bereich gesetzt werden soll Wichtig: Wird kein Plottingbereich definiert, so wird der gesamte Figure Bereich als Plottingbereich benutzt 30 of 35 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf MATPLOTLIB.PYPLOT: FIGURES UND PLOTTING BEREICHE Beispiel >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> 31 of 35 import matplotlib.pyplot as plt plt.figure(figsize=(10, 10), dpi=80) x = [float(i)/10. for i in range(100)] plt.subplot(2,2,1) plt.plot(x, [i*i for i in x]) plt.subplot(2, 2, 2) plt.plot(x, [i*i for i in x], 'ro') plt.subplot(2, 2, 3) plt.plot(x, [i*i for i in x], 'gv') plt.subplot(2, 2, 4) plt.plot(x, [i*i for i in x], 'm<') plt.show() 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf MATPLOTLIB.PYPLOT: FIGURES UND PLOTTING BEREICHE Beispiel 32 of 35 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf MATPLOTLIB.PYPLOT: EINIGE PLOTTING FUNKTIONEN Das Modul matplotlib.pyplot stellt neben der Funktion plt.plot() unzählige Funktionen zum Plotten verschiedenster Daten zur Verfügung Beispiele hierfür sind: Funktion Beschreibung plt.bar() Erstellt Bar Charts plt.boxplot() Erstellt Boxplots plt.histogram() Erstellt Histogrammplots 33 of 35 plt.contour() Erstell Contourplots . . . . . . 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf SUMMARY 34 of 35 24.11.2015 12:27 Vorlesung 9: Module file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf SUMMARY Module werden dazu benutzt Code logisch zu organisieren Jedes Modul wird einer Datei mit der Endung .py gespeichert Jedes Modul beinhaltet Attribute (wie z.B. Funktionen, Variablen, etc.), auf die man nach dem importieren Zugreifen kann Das Modul matplotlib.pyplot stellt Funktionen zum Darstellen von Daten zur Verfügung Es gibt unzählige funktionen zum Plotten verschiedenster Daten (siehe http://matplotlib.org für eine detaillierte Beschreibung des Moduls) 35 of 35 24.11.2015 12:27