Programmieren in Python - Grundlagenkr/python/build/alles.pdf ·...

24
Programmieren in Python - Grundlagen Klaus Rheinberger 2017 Inhaltsverzeichnis Vorwort 2 1 Installation 3 1.1 Anaconda ........................................ 3 1.2 Pakete .......................................... 4 1.3 Updates ......................................... 4 1.4 Zusatzsoftware ..................................... 4 2 Hilfe 4 2.1 Links ........................................... 4 2.2 Python Cheat Sheet .................................. 5 3 Jupyter Notebooks 5 3.1 Starten ......................................... 5 3.2 Beenden ......................................... 5 3.3 Zellen .......................................... 6 3.4 Exportieren ....................................... 7 3.5 Navigationsbefehle im Dateisystem .......................... 7 4 Datentypen 7 4.1 Überblick über Standardtypen ............................ 7 4.2 Boolean ......................................... 8 4.3 Numeric Types ..................................... 8 4.4 Sequences ........................................ 9 5 Matrizenrechnung 11 5.1 Vektoralgebra: 1-dimensionale arrays ......................... 12 5.2 Matrixalgebra: 2-dimensionale arrays ......................... 13 6 Grafiken 15 6.1 Passive Grafiken: matplotlib .............................. 15 6.2 Interaktive Grafiken: ipywidgets ............................ 17 7 Funktionen 17 7.1 Syntax .......................................... 17 7.2 Beispiel 1: Hello . . . ! .................................. 17 7.3 Beispiel 2: Fahrzeug auf ebener Fahrbahn ...................... 17 1

Transcript of Programmieren in Python - Grundlagenkr/python/build/alles.pdf ·...

Page 1: Programmieren in Python - Grundlagenkr/python/build/alles.pdf · Python-Script:Systembefehljupyter-nbconvert --to script Mein_Notebook.ipynb Slides: inkl.PräsentationviaWebserver.BevorSiedenSystembefehljupyter-nbconvert

Programmieren in Python - GrundlagenKlaus Rheinberger

2017

Inhaltsverzeichnis

Vorwort 2

1 Installation 31.1 Anaconda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2 Pakete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.3 Updates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.4 Zusatzsoftware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2 Hilfe 42.1 Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.2 Python Cheat Sheet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

3 Jupyter Notebooks 53.1 Starten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53.2 Beenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53.3 Zellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.4 Exportieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73.5 Navigationsbefehle im Dateisystem . . . . . . . . . . . . . . . . . . . . . . . . . . 7

4 Datentypen 74.1 Überblick über Standardtypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74.2 Boolean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84.3 Numeric Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84.4 Sequences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

5 Matrizenrechnung 115.1 Vektoralgebra: 1-dimensionale arrays . . . . . . . . . . . . . . . . . . . . . . . . . 125.2 Matrixalgebra: 2-dimensionale arrays . . . . . . . . . . . . . . . . . . . . . . . . . 13

6 Grafiken 156.1 Passive Grafiken: matplotlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156.2 Interaktive Grafiken: ipywidgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

7 Funktionen 177.1 Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177.2 Beispiel 1: Hello . . . ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177.3 Beispiel 2: Fahrzeug auf ebener Fahrbahn . . . . . . . . . . . . . . . . . . . . . . 17

1

Page 2: Programmieren in Python - Grundlagenkr/python/build/alles.pdf · Python-Script:Systembefehljupyter-nbconvert --to script Mein_Notebook.ipynb Slides: inkl.PräsentationviaWebserver.BevorSiedenSystembefehljupyter-nbconvert

8 Kontrollstrukturen 198.1 if else Abfrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198.2 for Schleife . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208.3 while Schleife . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

9 Daten-IO 229.1 NumPy Befehle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229.2 Pickle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

10 Literatur und Links 2410.1 Leitfaden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2410.2 Literaturverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

Vorwort

Folgende Lehrveranstaltungen im Masterstudiengang Energietechnik und Energiewirtschaftverwenden die Programmiersprache Python zusammen mit ausgewählten Paketen (insbesondereSciPy) und der webbasierten Oberfläche Jupyter:

• Angewandte Mathematik• Aufbaukurs• Data Science• Erneuerbare Energien• Technische Mathematik

In Masterarbeiten wird Python ebenfalls oft verwendet.

Python:

Python ist eine leicht zu erlernende, effiziente Programmiersprache, die folgende weitere Vorteilebietet:

• plattformunabhängig: Python-Programme laufen unter Linux, Windows und Mac OS, BSDetc.

• frei erhältlich: siehe z. B. Python Software Foundation License FAQ• weit verbreitet: Es gibt sehr viele Tutorials, Videos, Foren, Bücher etc.• viele Pakete: Der Python Package Index umfasst derzeit (2017-09-06) 116307 Pakete. “Es

gibt kaum etwas, das man mit Python nicht bauen könnte - solange es Software ist natürlich.”(Zitat Franz Geiger, FHV)

Der Name bezieht sich übrigens auf die englische Komikergruppe Monty Python.

SciPy:

SciPy umfasst die Pakete

• NumPy: Matrizenrechnung, lineare Algebra• SciPy library: Integralrechnung, Optimierung, Interpolation, Fourier, Signalanalyse, lineare

Algebra, Statistik, Bilderverarbeitung• Matplotlib: 2D-Grafiken• IPython: interaktives Programmieren mit Python• Sympy: symbolische Mathematik (im Gegensatz zu numerischer Mathematik)• Pandas: Datenanalyse

2

Page 3: Programmieren in Python - Grundlagenkr/python/build/alles.pdf · Python-Script:Systembefehljupyter-nbconvert --to script Mein_Notebook.ipynb Slides: inkl.PräsentationviaWebserver.BevorSiedenSystembefehljupyter-nbconvert

SciPy stellt dadurch eine attraktive Alternative zu kommerziellen Produkten wie Matlab undMathematica dar.

Jupyter:

Jupyter ist eine Webapplikation, die das Arbeiten mit sogenannten Jupyter Notebooks ermöglicht.In Jupyter Notebooks können Sie neben Code (nicht nur Python) auch formatierten Text, Links,Bilder, Videos und interaktive Widgets generieren, laufen lassen und exportieren.

Neben der modernen Jupyter-Umgebung kann man Python auch im klassichen Interface “Editor+ Command Line” verwenden, z. B. mit Spyder.

Inhalte:

Grundlagen:

• Installation und Hilfe• Juypter Notebooks• Datentypen• Matrizenrechnung• Grafiken• Funktionen• Kontrollstrukturen• Daten-IO

Vertiefende Themen:

• Lineare Optimierung• Datenmanagement mit Pandas

zusätzliche Unterlagen: Auf der Webseite finden Sie zusätzliche Unterlagen: Abbildungen,Daten, Code.

Notation:

• Als Dezimaltrennzeichen wird der englische Punkt statt dem deutschen Komma verwen-det, da dies auch in der verwendeten Programmiersprache der Fall ist und zu keinenVerwechslungen mit Kommas bei der Angabe von Vektoren und Intervallen führt.

• Python-Code ist wie folgt formatiert:

r = sqrt(t)phi = pi*t

1 Installation

1.1 Anaconda

Es gibt einige Möglichkeiten, Python und Python-Pakete zu installieren. Wir verwenden diePython-Distribution Anaconda. Laden Sie unter www.anaconda.com/download Anaconda fürIhre Plattform (Linux, Mac, Windows) die Python-Version >=3.6 herunter, und installieren Siediese wie in der Installationshilfe angegeben.

3

Page 4: Programmieren in Python - Grundlagenkr/python/build/alles.pdf · Python-Script:Systembefehljupyter-nbconvert --to script Mein_Notebook.ipynb Slides: inkl.PräsentationviaWebserver.BevorSiedenSystembefehljupyter-nbconvert

1.2 Pakete

Zusätzliche (zu den bereits mitinstallierten) Pakete können Sie mit Anaconda in einem System-Terminal oder dem Anaconda Command Prompt (=Anaconda-Kommandozeile) mit dem Befehl

conda install <Paketname>

installieren, wobei <Paketname> durch den Namen des Pakets zu ersetzen ist. Alternativ könnenSie die Anaconda Navigator Oberfläche verwenden.

Eine Auflistung aller Python Pakete finden Sie im Python Package Index.

1.3 Updates

Sie können die in Anaconda installierten Pakete in einem System-Terminal oder auf der Anaconda-Kommandozeile mit dem Befehl

conda update --all

updaten. Alternativ können Sie die Anaconda Navigator Oberfläche verwenden.

1.4 Zusatzsoftware

Zum Konvertieren von Jupyter Notebooks zu pdf-Dateien müssen auf Ihrem Computer

• eine TeX-Distribution, z. B. TeX Live, und• Pandoc

installiert sein.

2 Hilfe

2.1 Links

Im Internet finden Sie viele Unterlagen. Die folgende Liste ist nur eine kleine und persönlicheAuswahl:

• A Crash Course in Python for Scientists• SciPy Lecture Notes• Notebook Gallery• www.tutorialspoint.com/python• PythonLearn: textbook, exercises, code, videos etc.• video2brain: Python 3 - Grundlagen: Zugang via FHV-Login• Zur Formatierung der Markdown-Zellen im Jupyter-Notebook: Markdown-Cheatsheet• NumPy for Matlab users• IPython• Jupyter• Jupyter Docs

4

Page 5: Programmieren in Python - Grundlagenkr/python/build/alles.pdf · Python-Script:Systembefehljupyter-nbconvert --to script Mein_Notebook.ipynb Slides: inkl.PräsentationviaWebserver.BevorSiedenSystembefehljupyter-nbconvert

2.2 Python Cheat Sheet

Da man sich nicht alle Befehle merken kann oder will, gibt es zu Programmiersprachen oftsogenannte cheat sheets. Für unsere Zwecke enthält das folgende Python Cheat Sheet einige oftgebrauchte Befehle: python_cheat_sheet_v3.pdf

3 Jupyter Notebooks

3.1 Starten

Unter Windows und Mac können Sie Jupyter Notebook aus dem Start-Menü oder demAnaconda Navigator starten. Ein Notebook Server startet anschließend in einem neu geöffnetenSystem-Terminal.

Auf allen Betriebssystemen können Sie im Anaconda Command Prompt oder einem System-Terminal den Befehl

jupyter notebook

direkt zum Start eines Notebook Servers verwenden.

Ihr Default-Browser öffnet sich, falls er nicht schon geöffnet war, und das Jupyter-Dashboarderscheint in einem neuen Browser-Tab. Sie können nun z.B.

• das Arbeitsverzeichnis ändern• neue Notebooks erstellen und starten• Notebooks herunterfahren• Ordner erstellen und löschen• Textdateien editieren• Dateien löschen

Achtung: Verwenden Sie generell für Ordner- und und Dateinamen keine Umlaute, keineSonderzeichen und keine Leerzeichen!

Wenn Sie ein (neues) IPython-Notebook - das ist eine ipynb-Datei - starten, öffnet sich ein neuerTab und ein IPython-Kernel wird gestartet. Der Kernel führt Ihre Befehle aus und beeinhaltetalle verwendeten Objekte (Variablen, Funktionen, Pakete etc.).

Starten Sie zum Einstieg unter dem Menüeintrag Help die User Interface Tour.

3.2 Beenden

Um Ihre Arbeit in einem Notebook zu beenden,

1. speichern Sie zuerst das Notebook mit Strg-S oder dem Save-Icon in der Toolbar und

2. verwenden Sie danach unter File den Befehl Close and Halt. Dadurch werden

• der Kernel heruntergefahren und somit alle Variablenwerte gelöscht• der Browser-Tab geschlossen.

Achtung: Sollten Sie den Tab des Notebooks ohne Close and Halt geschlossen haben, dannläuft der Kernel weiter, und Sie können im Jupyter-Dashboard das Notebook durch Anklickenwieder in einem Tab öffnen oder im Reiter Running des Jupyter-Dashboards den noch laufendenden Kernel herunterfahren.

5

Page 6: Programmieren in Python - Grundlagenkr/python/build/alles.pdf · Python-Script:Systembefehljupyter-nbconvert --to script Mein_Notebook.ipynb Slides: inkl.PräsentationviaWebserver.BevorSiedenSystembefehljupyter-nbconvert

Um das Jupyter-Dashboard zu beenden, drücken Sie Strg-C zweimal im anfangs geöffnetenSystem-Terminal.

3.3 Zellen

Das Notebook besteht aus einer Liste von Zellen (engl. cells).

Modi: Zellen können im Command Mode (blau umrandet) oder im Edit Mode (grün umrandet)bearbeitet werden.

Bearbeiten: Über die Menüeinträge Edit, Insert, Cell und über die Toolbar können Sie Zellenausführen, verschieben, zusammenfügen, splitten, löschen etc.

Tastenkürzel: Im Menüeintrag Help finden Sie unter Keyboard shortcuts eine Liste von vielenTastenkürzeln, deren Verwendung Ihre Arbeit sehr beschleunigen können!

Die wichtigsten zwei Zelltypen sind Code und Markdown. Sie können den Typ einer Zelle überdie Toolbar oder ein Tastenkürzel ändern.

Code-Zellen: Hier können Sie

• Variablen definieren• Pakete importieren• deren Funktionen(=Befehle) aufrufen• neue Funktionen definieren• weitere Programmierstrukturen verwenden: for-Schleifen, if-Abfragen etc.

Code-Kommentare beginnen mit dem Rautezeichen #.

Der letzte Befehl einer Code-Zelle wird in einem folgenden Output-Zelle ausgegeben. Sie könnendie Ausgabe mit einem Strichpunkt am Ende des letzten Befehls unterdrücken.

Funktionen haben immer runde Klammern! Hilfe z. B. zur Funktion print erhalten Sie durch

• help(print) oder• print? oder• (öfter) SHIFT-Enter drücken, wenn der Cursor nach der ersten runden Klammer steht.

Variablen: Eine Liste der von Ihnen definierten Variablen erhalten Sie mit dem magic command%whos. Löschen einzelner Variablen, hier z. B. der Variable x, erfolgt mit dem Befehl del(x).Löschen aller selber definierten Variablen erfolgt mit dem Befehl %reset -s

Das Importieren der Numpy und Matplotlib Befehle erfolgt z. B. mit dem magic command %pylabinline. Als optionalen Parameter kann man inline angeben, sodass Abbildungen im Notebookund nicht in einem eigenen Fenster dargestellt werden.

Tipp: Tabulator-Vervollständigung verwenden!

Markdown-Zellen: Markdown ist eine vereinfachte Auszeichnungssprache, die bereits in derAusgangsform ohne weitere Konvertierung leicht lesbar ist. Sie können in Markdown sehr leichtfolgenden strukturierten Text erstellen:

• Überschirften: Rautesymbol(e) vor der Überschrift• Listen: mit Minus- oder Pluszeichen• Links: z. B. ETW, Syntax [Name](URL)• Bilder: mit Syntax ![Name](Pfad-zu-Bilddatei)• Mathematische Formeln via LaTeX, z. B. K = mv2

2

Tipp: Cheatsheet

6

Page 7: Programmieren in Python - Grundlagenkr/python/build/alles.pdf · Python-Script:Systembefehljupyter-nbconvert --to script Mein_Notebook.ipynb Slides: inkl.PräsentationviaWebserver.BevorSiedenSystembefehljupyter-nbconvert

3.4 Exportieren

Sie könne Notebooks über den Menüeintrag File/Download as oder über Systembefehle inandere Dateiformate exportieren. Systembefehle können Sie auf folgende Weisen ausführen:

• in einem System-Terminal• im Anaconda Command Prompt• in einer Codezelle, wenn Sie ein Rufezeichen vor den Systembefehl setzen.

HTML: Systembefehl !jupyter-nbconvert Mein_Notebook.ipynb

PDF: Zur Konvertierung von Jupyter-Notebook zu pdf müssen eine TeX-Distribution, z.B. TeX Live, und Pandoc installiert sein. Systembefehl: jupyter-nbconvert --to pdfMein_Notebook.ipynb

LaTeX: Systembefehl jupyter-nbconvert --to latex Mein_Notebook.ipynb

Python-Script: Systembefehl jupyter-nbconvert --to script Mein_Notebook.ipynb

Slides: inkl. Präsentation via Webserver. Bevor Sie den Systembefehl jupyter-nbconvert --toslides --post serve Mein_Notebook.ipynb in einem System-Terminal oder im AnacondaCommand Prompt aufrufen, müssen Sie zuerst in der Toolbar unter Cell Toolbar die OptionSlideshow einstellen und anschließend Ihre Zellen zu Slides, Sub-Slides, Fragements, Skip oderNotes definieren. Beenden Sie den gestarteten Webserver nach der Präsentation durch Strg-Cim Terminal bzw. im Anaconda Command Prompt.

Link: nbconvert.readthedocs.io/en/latest/usage.html

3.5 Navigationsbefehle im Dateisystem

Für die Arbeit in einem System-Terminal, dem Anaconda Command Prompt oder in einer Codezellesind oft folgende Navigationsbefehle nützlich:

• pwd: print working/current directory• ls oder dir: list files in current directory• cd DIR: change into absolute or relative directory DIR• cd ..: change to parent directory

4 Datentypen

In Python stehen Ihnen, wie auch in anderen Programmiersprachen, für unterschiedliche Zweckeentsprechende Datentypen zur Verfügung. Jedes Objekt ist von einem bestimmten (Daten)Typ.

4.1 Überblick über Standardtypen

Wir verwenden die englischen Namen der Standardtypen, da Sie diese auch so in der (interaktiven)Hilfe und beim Suchen im Internet finden.

• Boolean: die logischen Wahrheitswerte True und False• Numeric Types: Integers (ganze, auch negative Zahlen), Floats (Dezimalzahlen), kom-

plexe Zahlen• Sequences: Lists (Listen von anderen Daten), Tuples (unveränderbare Listen), Strings

(Wörter inkl. Leerzeichen, Zeilenumbruch und Sonderzeichen)

7

Page 8: Programmieren in Python - Grundlagenkr/python/build/alles.pdf · Python-Script:Systembefehljupyter-nbconvert --to script Mein_Notebook.ipynb Slides: inkl.PräsentationviaWebserver.BevorSiedenSystembefehljupyter-nbconvert

• Sets: Mengen• Dictionaries: Schlüssel-Objekt-Paare wie z. B. {“AT”: 1, “CH”:2, “DE”:3}• Functions: Input zu Output Transformationen• . . .

Link: Python standard types documentation

4.2 Boolean

Eine Abfrage über größer (gleich), (un)gleich oder kleiner (gleich) liefert als Ergebnis ein Objektvom Typ Boolean:

3 > 2 # greater

True

3 > 3

False

3 >= 3 # greater or equal

True

3 == 3.0 # equal

True

42 != 42 # not equal

False

Auch Wörter (Strings, siehe weiter unten) können verglcihen werden:

"Emil" == "emil"

False

Von welchem Typ ein Objejekt ist, können Sie mit der eingebauten Funktion type bestimmen:

type(True)

bool

4.3 Numeric Types

Ganze Zahlen: . . . , -3, -2, -1, 0, 1, 2, 3, . . . sind vom Typ int.

n = 12type(n)

int

Fließkommazahlen (=Dezimalzahlen) sind von Typ float.

x = 12.3type(x)

float

Komplexe Zahlen bestehen aus einen Realteil (int oder float) und einem Imaginärteil. Dieimaginäre Einheit wird mit j geschrieben und ohne Malzeichen * an den Imaginärteil multipliziert.

8

Page 9: Programmieren in Python - Grundlagenkr/python/build/alles.pdf · Python-Script:Systembefehljupyter-nbconvert --to script Mein_Notebook.ipynb Slides: inkl.PräsentationviaWebserver.BevorSiedenSystembefehljupyter-nbconvert

z = 12.4 + 3.7jtype(z)

complex

Rechenoperationen:

x + 2*n

36.3

x - z

(-0.09999999999999964-3.7j)

12/5

2.4

vgl. Modulo-Rechnung

12//5

2

Achtung: Potenzieren mit ** und nicht mit ˆ

x**2

151.29000000000002

4.4 Sequences

• können Daten unterschiedlichen Typs enthalten

• haben geordnete Elemente, Indizierung:

– mit eckigen Klammern– beginnend bei 0– von Index a inklusive bis b exklusive mit a:b– der letzte Eintrag hat den Index -1, der vorletzte Eintrag hat den Index -2, . . .

Lists:

• verwenden eckige Klammern• sind veränderbar

numbers = [12, 12.3, 5, -8, 23]numbers

[12, 12.3, 5, -8, 23]

type(numbers)

list

len(numbers) # Länge = Anzahl an Elementen

5

numbers[0] # erstes Element

12

9

Page 10: Programmieren in Python - Grundlagenkr/python/build/alles.pdf · Python-Script:Systembefehljupyter-nbconvert --to script Mein_Notebook.ipynb Slides: inkl.PräsentationviaWebserver.BevorSiedenSystembefehljupyter-nbconvert

numbers[-1] # letztes Element

23

# erstes Element neu setzen:numbers[0] = 10numbers

[10, 12.3, 5, -8, 23]

Slicing: nicht nur einzelne Elemente, sondern ganze Unterlisten “herausschneiden”

numbers[2:4]

[5, -8]

Achtung: Oben wars das Element mit Index 2 (das dritte Element) inklusive und das Elementmit Index 4 (das fünfte Element) exklusive!

numbers[1:] # open end

[12.3, 5, -8, 23]

numbers[:3] # beginning from start

[10, 12.3, 5]

Anfügen ans Ende der Liste:

numbers.append(-3)numbers

[10, 12.3, 5, -8, 23, -3]

Sortieren:

numbers.sort() # aufsteigend sortieren, mit Option reverse=True absteigendnumbers

[-8, -3, 5, 10, 12.3, 23]

Achtung: + und * bewirken Aneinanderkettung

numbers + numbers

[-8, -3, 5, 10, 12.3, 23, -8, -3, 5, 10, 12.3, 23]

3*numbers

[-8, -3, 5, 10, 12.3, 23, -8, -3, 5, 10, 12.3, 23, -8, -3, 5, 10, 12.3, 23]

Sie können überprüfen, ob ein Objekt in einer Liste vorkommt.

7 in [2, 3, 4, 5, 6, 7, 8, 9, 7] # incuded in

True

Tipp: list comprehension

[x**2 for x in numbers if x > 0]

[25, 100, 151.29000000000002, 529]

Tuples:

• verwenden runde Klammern

10

Page 11: Programmieren in Python - Grundlagenkr/python/build/alles.pdf · Python-Script:Systembefehljupyter-nbconvert --to script Mein_Notebook.ipynb Slides: inkl.PräsentationviaWebserver.BevorSiedenSystembefehljupyter-nbconvert

• sind nicht veränderbar

t = (3, 2, 5)type(t)

tuple

# results in TypeError: 'tuple' object does not support item assignment# t[1] = 10

Strings:

Wörter, Buchstaben und Wortketten, inkl. Sonderzeichen

• einfache oder doppelte Anführungszeichen, dieselben zu Beginn und am Ende• veränderbar• Zeilenumbruch mit \n

s1 = 'Hello \n's2 = "World!"s1 + s2

'Hello \nWorld!'

print(s1 + s2)

HelloWorld!

Formatierte Ausgabe:

n = 12print("Die Wurzel aus {:d} ist circa {:8.5f}".format(n, n**0.5))# Variante:print("Die Wurzel aus %d ist circa %8.5f" %(n, n**0.5))

Die Wurzel aus 12 ist circa 3.46410Die Wurzel aus 12 ist circa 3.46410

5 Matrizenrechnung

Um mit Vektoren und Matrizen nach den Regeln der Mathemaik zu arbeiten, gibt es das PaketNumPy. das den Datentyp numpy.ndarray, kurz array, bereitstellt:

• Die Indizierung erfolgt analog zu Sequences• Import: Wir imporieren die NumPy-Funktionen in den Haupt-Namespace mit %pylab

inline. Oft wird NumPy auch als Namespace np durch import numpy as np importiert,um den Haupt-Namespace nicht zu überladen.

%pylab inline

%config InlineBackend.figure_format = 'svg'import seaborn as sns

Populating the interactive namespace from numpy and matplotlib

11

Page 12: Programmieren in Python - Grundlagenkr/python/build/alles.pdf · Python-Script:Systembefehljupyter-nbconvert --to script Mein_Notebook.ipynb Slides: inkl.PräsentationviaWebserver.BevorSiedenSystembefehljupyter-nbconvert

5.1 Vektoralgebra: 1-dimensionale arrays

• nur eine Klammerung, z. B. beim Inputs der array-Funktion und bei der Indizierung• Achtung: keine Unterscheidung in Spalten- oder Zeilenvektoren!

v = array([3, 2.1, -5])v

array([ 3. , 2.1, -5. ])

type(v)

numpy.ndarray

# Vektoren sind 1-dimensional

ndim(v)

1

Die Anzahl der Elemente wird als Länge (engl. length) bezeichnet. Achtung, das ist nicht diegeometrische Länge des Vektors!

len(v)

3

Viele Funktionen lassen sich alternativ als Methoden der Objekte mit Punkt-Notation aufrufen:

print(v.dtype) # data type: Type der Einträgeprint(v.ndim)print(v.mean())

float6410.0333333333333

Rechnoperationen: Achtung! +, -, *, ** und / sind nun elementweise Operationen.

3*v # Skalarmultiplikation

array([ 9. , 6.3, -15. ])

v + v # Vektoraddition

array([ 6. , 4.2, -10. ])

Das innere Produkt wird im Englischen oft “dot product” genannt.

dot(v, v)

38.409999999999997

# alternativ mit dem @ Operator:v@v

38.409999999999997

cross(v, v) # Kreuzprodukt

array([ 0., 0., 0.])

v*v # Achtung elementweise!

array([ 9. , 4.41, 25. ])

12

Page 13: Programmieren in Python - Grundlagenkr/python/build/alles.pdf · Python-Script:Systembefehljupyter-nbconvert --to script Mein_Notebook.ipynb Slides: inkl.PräsentationviaWebserver.BevorSiedenSystembefehljupyter-nbconvert

v/v # elementweise!

array([ 1., 1., 1.])

v**3 # elementweise!

array([ 27. , 9.261, -125. ])

5.2 Matrixalgebra: 2-dimensionale arrays

Zwei Dimensionen und daher auch zwei Klammeren:

• erste Dimension: wievielte Zeile = Zeilenindex• zweite Dimension: wievielte Spalte = Spaltenindex

A = array([[1, 2, sqrt(4)],[4, -3, pi]])

A

array([[ 1. , 2. , 2. ],[ 4. , -3. , 3.14159265]])

A.shape # 2x3 Matrix

(2, 3)

dot(A, v) # Matrix-Vektor-Produkt

array([ -2.8 , -10.00796327])

# alternativ mit dem @ Operator:A@v

array([ -2.8 , -10.00796327])

dot(v[:2], A) # Vektor-Matrix-Produkt

array([ 11.4 , -0.3 , 12.59734457])

# alternativ mit dem @ Operator:v[:2]@A

array([ 11.4 , -0.3 , 12.59734457])

w = array([[1, 2, 3]])

w.shape

(1, 3)

# dot(A, w) gibt einen Fehler. Warum?

w.T # Transponieren

array([[1],[2],[3]])

w.T.shape

(3, 1)

dot(A, w.T) # oder [email protected]

13

Page 14: Programmieren in Python - Grundlagenkr/python/build/alles.pdf · Python-Script:Systembefehljupyter-nbconvert --to script Mein_Notebook.ipynb Slides: inkl.PräsentationviaWebserver.BevorSiedenSystembefehljupyter-nbconvert

array([[ 11. ],[ 7.42477796]])

Slicing:

A[:,0] # Ergebnis: 1-dim array

array([ 1., 4.])

A[:,[0]] # Ergebnis: 2-dim array

array([[ 1.],[ 4.]])

A = array([[3, -2],[0, 12]])

b = array([1, 2])

# Lösen des quadratischen Gleichungssystems Ax=bx = solve(A, b)x # Ergebnis: 1-dim array, wie b

array([ 0.44444444, 0.16666667])

c = b.reshape(2,1)c # 2-dim array

array([[1],[2]])

Lösen eines Gleichungssystems:

x = solve(A, c)x # Ergebnis: 2-dim array, wie c

array([[ 0.44444444],[ 0.16666667]])

flattening of a 2-dim array into a 1-dim array:

A.ravel()

array([ 3, -2, 0, 12])

# vergleiche:A

array([[ 3, -2],[ 0, 12]])

Aufgabe:

Welche Funktionalitäten bieten folgende Befehle?

• linspace• arange• eye• ones• zeros• diag• vstack

14

Page 15: Programmieren in Python - Grundlagenkr/python/build/alles.pdf · Python-Script:Systembefehljupyter-nbconvert --to script Mein_Notebook.ipynb Slides: inkl.PräsentationviaWebserver.BevorSiedenSystembefehljupyter-nbconvert

• hstack• column_stack• row_stack• reshape

Experimentieren Sie mit den Befehlen!

6 Grafiken

6.1 Passive Grafiken: matplotlib

Wir werden nur zwei Beispiele in diesem Abschnitt aufzeigen. Die fast unüberschaubare Vielfaltan grafischen Darstellungsmöglichkeiten mit dem Python-Paket Matplotlib finden Sie z. B. unterMatplotlib Gallery

# Importieren der der Numpy und Matplotlib Befehle:%pylab inline

Populating the interactive namespace from numpy and matplotlib

# Bilder werden im SVG-Format erstellt:%config InlineBackend.figure_format = 'svg'

# Durch den Import des seaborn Paketes wird die Default-Darstellung von Abbildungen geändert:import seaborn as sns

Beispiel 1: 2D-Plot

Wir plotten einen Vektor x gegen einen Vektor y:

x = linspace(-1, 3, num = 11)

x

array([-1. , -0.6, -0.2, 0.2, 0.6, 1. , 1.4, 1.8, 2.2, 2.6, 3. ])

# Typ des Objekts x:type(x)

numpy.ndarray

%whos

Variable Type Data/Info-------------------------------sns module <module 'seaborn' from '/<...>ges/seaborn/__init__.py'>x ndarray 11: 11 elems, type `float64`, 88 bytes

y = -x**2 + 8

figure(figsize=(5,3))plot(x, y, 'o-r', label='Parabel')xlabel('Weite')ylabel('Höhe')ylim(-2, 10)title('Wurfparabel')legend(numpoints=1, loc='best')grid(True)

15

Page 16: Programmieren in Python - Grundlagenkr/python/build/alles.pdf · Python-Script:Systembefehljupyter-nbconvert --to script Mein_Notebook.ipynb Slides: inkl.PräsentationviaWebserver.BevorSiedenSystembefehljupyter-nbconvert

savefig('abbildungen/Wurfparabel.pdf')

Beispiel 2: Sankey-Diagramm

Nach dem Import der Sankey Funktion erstellen wir ein Sankey-Diagramm.

from matplotlib.sankey import Sankey

fig = figure(figsize=(6,4))ax = fig.add_subplot(1,1,1)axis('off')Sankey(flows=[0.25, 0.15, 0.60, -0.20, -0.15, -0.05, -0.50, -0.10], ax = ax,

labels=['', '', '', 'First', 'Second', 'Third', 'Fourth', 'Fifth'],orientations=[-1, 1, 0, 1, 1, 1, 0, -1]).finish();

savefig('abbildungen/Sankey.pdf')

16

Page 17: Programmieren in Python - Grundlagenkr/python/build/alles.pdf · Python-Script:Systembefehljupyter-nbconvert --to script Mein_Notebook.ipynb Slides: inkl.PräsentationviaWebserver.BevorSiedenSystembefehljupyter-nbconvert

6.2 Interaktive Grafiken: ipywidgets

Link: ipywidgets.readthedocs.io/en/stable/

from ipywidgets import interact

x = linspace(-2, 2, num= 100)

def my_f(k):y = k*xplot(x, y)ylim((-2, 2))xlim((-2, 2))grid(True)show()

interact(my_f, k=(-1, 1, 0.1));

7 Funktionen

7.1 Syntax

def my_function(x, y, a = 1):""""Hilfetext""" "z = 3*x + 5*sin(y) + areturn z

7.2 Beispiel 1: Hello . . . !

def my_hello(what):"""returns the string "Hello" concatenated with the input string"""text = "Hello, " + what + "!"return text

my_hello("world")

'Hello, world!'

7.3 Beispiel 2: Fahrzeug auf ebener Fahrbahn

Wir verwenden mit dem Befehl linspace die Datenstruktur array, um die Strömungswiderstands-kraft für unterschiedliche Geschwindigkeiten zu berechnen. Auf nicht ebener Strecke kommt dieGravitationskraft noch dazu.

Links:

• Strömungswiderstandkraft• Rollwiderstandskraft

17

Page 18: Programmieren in Python - Grundlagenkr/python/build/alles.pdf · Python-Script:Systembefehljupyter-nbconvert --to script Mein_Notebook.ipynb Slides: inkl.PräsentationviaWebserver.BevorSiedenSystembefehljupyter-nbconvert

%pylab inline

Populating the interactive namespace from numpy and matplotlib

Paramterwerte:

# Massse in kgm = 110

# Erdbeschleunigung in m/s^2g = 9.81

# Rollwiderstandsbeiwertcr = 0.0055

# Strömungswiderstandskoeffizientcw = 0.076

# Bezugsfläche in m^2A = 0.41

# verschiedene Anströmgeschwindigkeiten in m/sv = linspace(0, 20, num=20)

Strömungswiderstandkraft:

def F_Stroemung(cw, A, v, rho = 1.2041):"""Strömungswiderstandskraft in Abhängigkeit von

- Strömungswiderstandskoeffizient: cw- Bezugsfläche: A in m^2- Anströmgeschwindigkeit: v in m/s- Dichte: rho in kg/m^3, Default= 1.2041 (Luft)

ist gegeben durch

F = cw*A*1/2*rho*v**2"""

F = cw*A*0.5*rho*v**2

return F

F_S = F_Stroemung(cw, A, v, rho = 1.2)F_S

array([ 0. , 0.02071579, 0.08286316, 0.18644211, 0.33145263,0.51789474, 0.74576842, 1.01507368, 1.32581053, 1.67797895,2.07157895, 2.50661053, 2.98307368, 3.50096842, 4.06029474,4.66105263, 5.30324211, 5.98686316, 6.71191579, 7.4784 ])

Rollwiderstandskraft:

F_R = cr*m*gF_R

18

Page 19: Programmieren in Python - Grundlagenkr/python/build/alles.pdf · Python-Script:Systembefehljupyter-nbconvert --to script Mein_Notebook.ipynb Slides: inkl.PräsentationviaWebserver.BevorSiedenSystembefehljupyter-nbconvert

5.93505

figure(figsize=(5,3))plot(v, F_S, 'b', label='Strömung')hlines(F_R, min(v), max(v), color= 'r', label='Roll')xlabel('Geschwindigkeit [m/s]')ylabel('Strömungswiderstandskraft [N]')legend(loc='best')grid(True)

8 Kontrollstrukturen

Die wichtigsten Typen von Kontrollstrukturen sind:

• if else Abfrage• for Schleife• while Schleife

%pylab inline

%config InlineBackend.figure_format = 'svg'import seaborn as sns

Populating the interactive namespace from numpy and matplotlib

8.1 if else Abfrage

Beispiel: Determinante und inverse Matrix

Falls eine Matrix eine Determinante nicht Null hat, ist sie invertierbar.

A = array([[1, 2],[3, 4]])

print(A)

[[1 2][3 4]]

19

Page 20: Programmieren in Python - Grundlagenkr/python/build/alles.pdf · Python-Script:Systembefehljupyter-nbconvert --to script Mein_Notebook.ipynb Slides: inkl.PräsentationviaWebserver.BevorSiedenSystembefehljupyter-nbconvert

if det(A) != 0:B = 1/det(A)*array([ [ A[1,1], -A[0,1] ],

[-A[1,0], A[0,0] ] ])print(B)print(inv(A))

else:print("Matrix ist nicht invertierbar.")

[[-2. 1. ][ 1.5 -0.5]]

[[-2. 1. ][ 1.5 -0.5]]

# Probe:dot(A, B) # oder A@B

array([[ 1., 0.],[ 0., 1.]])

8.2 for Schleife

Beispiel: Arrhenius-Gleichung

Die Arrhenius-Gleichung, benannt nach Svante Arrhenius, beschreibt näherungsweise eine quan-titative Temperaturabhängigkeit bei physikalischen und vor allem chemischen Prozessen, beidenen auf molekularer Ebene eine Aktivierungsenergie überwunden werden muss. Die Arrhenius-Gleichung ist eine phänomenologische Beziehung und gilt für sehr viele chemische Reaktionen.Unter anderem wird auch das Alterungsverhalten von Lithium-Ionen-Akkumulatoren damitbeschreibbar.

Die Arrhenius-Gleichung beschreibt in der chemischen Kinetik für den Spezialfall monomolekularerReaktionen die quantitative Abhängigkeit der Reaktionsgeschwindigkeitskonstanten k von derTemperatur:

k = Ae−EART

mit

• A . . . präexponentieller oder Frequenzfaktor• EA . . . Aktivierungsenergie (Einheit: J mol−1)• R . . . universelle Gaskonstante (8,314 J K−1 mol−1)• T . . . absolute (thermodynamische) Temperatur (Einheit: K)

Quelle: https://de.wikipedia.org/wiki/Arrhenius-Gleichung

A = 1EA_values = arange(10, 200, 50)R = 8.314T = linspace(1, 500, num = 100)

figure(figsize=(6,4))

for EA in EA_values:k = A*exp(-EA/(R*T))plot(T, k, label="EA = {:d} J/mol".format(EA), linewidth=2)

legend(loc='best')xlabel('T')

20

Page 21: Programmieren in Python - Grundlagenkr/python/build/alles.pdf · Python-Script:Systembefehljupyter-nbconvert --to script Mein_Notebook.ipynb Slides: inkl.PräsentationviaWebserver.BevorSiedenSystembefehljupyter-nbconvert

ylabel('k')grid(True)

8.3 while Schleife

Beispiel: Collatz-Problem

Das Collatz-Problem, auch als (3n+1)-Vermutung bezeichnet, ist ein ungelöstes mathematischesProblem, das 1937 von Lothar Collatz gestellt wurde. Bei dem Problem geht es um Zahlenfolgen,die nach einem einfachen Bildungsgesetz konstruiert werden:

• Beginne mit irgendeiner natürlichen Zahl n > 0.• Ist n gerade, so nimm als Nächstes n/2,• Ist n ungerade, so nimm als Nächstes 3n + 1.• Wiederhole die Vorgehensweise mit der erhaltenen Zahl.

So erhält man zum Beispiel für die Startzahl n = 19 die Folge 19, 58, 29, 88, 44, 22, 11, 34, 17, 52,26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1, . . . Anscheinend mündet jede Folge mit n > 0 in den Zyklus4, 2, 1, unabhängig davon, welche Startzahl n man probiert hat. Die Collatz-Vermutung lautet:Jede so konstruierte Zahlenfolge mündet in den Zyklus 4, 2, 1, egal, mit welcher natürlichen Zahln > 0 man beginnt.

Trotz zahlreicher Anstrengungen gehört diese Vermutung noch immer zu den ungelösten Proble-men der Mathematik. Mehrfach wurden Preise für eine Lösung ausgelobt.

Quelle: https://de.wikipedia.org/wiki/Collatz-Problem

n = 70while True:

if n % 2 == 0: # Der Modulo Operator % liefert den Rest der Division.n = n/2

else:n = 3 * n + 1

21

Page 22: Programmieren in Python - Grundlagenkr/python/build/alles.pdf · Python-Script:Systembefehljupyter-nbconvert --to script Mein_Notebook.ipynb Slides: inkl.PräsentationviaWebserver.BevorSiedenSystembefehljupyter-nbconvert

print(n)if n == 1:

break

35.0106.053.0160.080.040.020.010.05.016.08.04.02.01.0

9 Daten-IO

Daten laden und speichern

9.1 NumPy Befehle

Link: docs.scipy.org/doc/numpy/reference/routines.io.html

%pylab inline

Populating the interactive namespace from numpy and matplotlib

Daten aus Textdatei einlesen:

A = genfromtxt('daten/AustriaW-o.csv', delimiter=",", skip_header=1)A

array([[ 47.235154 , 9.59921836, 467. ],[ 47.23515 , 9.59921 , 466. ],[ 47.23451 , 9.59925 , 465. ],...,[ 47.94042 , 17.06803 , 142. ],[ 47.94034 , 17.06798 , 142. ],[ 47.94011 , 17.06859 , 140. ]])

elevation = A[:,2]

figure(figsize=(8,3))plot(elevation)xlabel('Datenpunkt')ylabel('elevation')grid(True)

22

Page 23: Programmieren in Python - Grundlagenkr/python/build/alles.pdf · Python-Script:Systembefehljupyter-nbconvert --to script Mein_Notebook.ipynb Slides: inkl.PräsentationviaWebserver.BevorSiedenSystembefehljupyter-nbconvert

Matrix von Zufallszahlen:

B = randn(10, 3)B

array([[ 0.69647387, 0.92849206, 0.04061399],[ 0.5511336 , 0.89693122, -1.18229411],[-0.18151827, -0.98037619, -0.47596028],[-0.04850343, 0.14501138, 0.88081873],[ 0.89181773, -0.07503731, 0.93466913],[-0.34304204, 0.61168174, -0.74506326],[-0.40687218, -0.37346573, -0.21545588],[ 0.91194416, -0.4345603 , 0.14213569],[-0.58071868, -0.75033516, 1.25259673],[ 0.58517214, -1.28535455, -0.39639893]])

Speichern als CSV-Datei:

savetxt('daten/Zufallszahlenmatrix.csv', B, delimiter=',')

9.2 Pickle

Speichern und Laden von Objekten jeglichen Datentyps. Siehe z. B. wiki.python.org/moin/UsingPickle

import pickle

my_object = ['Ich', 'und', 7]

pickle.dump( my_object, open( "daten/save.p", "wb" ) )

del my_object

%whos

Variable Type Data/Info--------------------------------A ndarray 9398x3: 28194 elems, type `float64`, 225552 bytes (220.265625 kb)B ndarray 10x3: 30 elems, type `float64`, 240 byteselevation ndarray 9398: 9398 elems, type `float64`, 75184 bytesmy_object list n=3pickle module <module 'pickle' from '/u<...>lib/python3.6/pickle.py'>

23

Page 24: Programmieren in Python - Grundlagenkr/python/build/alles.pdf · Python-Script:Systembefehljupyter-nbconvert --to script Mein_Notebook.ipynb Slides: inkl.PräsentationviaWebserver.BevorSiedenSystembefehljupyter-nbconvert

my_object = pickle.load( open( "daten/save.p", "rb" ) )

my_object

['Ich', 'und', 7]

10 Literatur und Links

10.1 Leitfaden

Einführungen und Grundlagen:

• IPython Notebook Essentials (Martins 2014)• IPython Interactive Computing and Visualization Cookbook (Rossant 2014)• Introduction to Computation and Programming Using Python (Guttag 2013)

Fortgeschrittene Bücher und Vertiefungen:

• Numerical Python - A Practical Techniques Approach for Industry (Johansson 2015)• Python for Data Analysis (McKinney 2012), PDF-Download im FHV-Campusnetz, deutsche

Übersetzung: Datenanalyse mit Python (McKinney 2015)• Introduction to Machine Learning with Python: A Guide for Data Scientists (Müller; Gui-

do 2016)

10.2 Literaturverzeichnis

Guttag, John V. (2013): Introduction to Computation and Programming Using Python. Revisedand Exp. Mit Pr, S. 296.

Johansson, Robert (2015): Numerical Python: A Practical Techniques Approach for Industry. 1sted. Apress, S. 512.

Martins, L. Felipe (2014): IPython Notebook Essentials. Packt Publishing, S. 190.

McKinney, Wes (2015): Datenanalyse mit Python: Auswertung von Daten mit Pandas, NumPyund IPython. 1., Auflage. O’Reilly, S. 478.

McKinney, Wes (2012): Python for Data Analysis. 1. Aufl. O’Reilly Media, S. 452.

Müller, Andreas; Guido, Sarah (2016): Introduction to Machine Learning with Python: A Guidefor Data Scientists. 1. Aufl. O’Reilly UK Ltd., S. 400.

Rossant, Cyrille (2014): IPython Interactive Computing and Visualization Cookbook. PacktPublishing, S. 512.

24