Inhalt | 6 |
Vorwort | 16 |
Danksagung | 17 |
1 Einleitung | 18 |
1.1 Die richtige Wahl | 18 |
1.2 Aufbau des Buches | 19 |
1.3 Python-Installation | 20 |
1.4 Download der Beispiele | 20 |
1.5 Anregungen und Kritik | 20 |
2 Numerisches Programmieren mit Python | 22 |
2.1 Definition von numerischer Programmierung | 22 |
2.2 Zusammenhang zwischen Python, NumPy, Matplotlib, SciPy und Pandas | 23 |
2.3 Python, eine Alternative zu Matlab | 24 |
Teil I Kurze Einführung in Python | 26 |
3 Kurze Einführung in Python | 28 |
3.1 Datenstrukturen | 28 |
3.1.1 Zahlen und Variablen | 28 |
3.1.2 Zeichenketten | 29 |
3.1.3 Listen | 32 |
3.1.4 Tupel | 33 |
3.1.5 Frozensets und Mengen in Python | 34 |
3.1.6 Dictionaries | 35 |
3.2 Kontrollstrukturen | 36 |
3.2.1 Bedingte Anweisungen | 36 |
3.2.2 Schleifen | 37 |
3.2.3 Funktionen | 40 |
3.3 Ausnahmebehandlung | 43 |
3.3.1 Die optionale else-Klausel | 46 |
3.3.2 Exceptions generieren | 46 |
3.3.3 Finalisierungsaktion | 46 |
3.4 Dateien lesen und schreiben | 47 |
3.4.1 Datei lesen | 47 |
3.4.2 Datei schreiben | 48 |
3.5 Modularisierung | 49 |
3.5.1 Namensräume von Modulen | 49 |
3.5.2 Suchpfad für Module | 50 |
3.5.3 Inhalt eines Moduls | 50 |
3.5.4 Eigene Module | 50 |
3.5.5 Dokumentation für eigene Module | 51 |
3.6 Klassen-Definition | 52 |
3.6.1 Eine einfache Klasse | 52 |
3.6.2 Attribute | 52 |
3.6.3 Initialisierung von Instanzen | 54 |
3.6.4 Vererbung | 54 |
3.6.5 Private, geschützte und öffentliche Attribute | 55 |
3.6.6 Properties | 56 |
Teil II NumPy | 58 |
4 NumPy Einführung | 60 |
4.1 Überblick | 60 |
4.2 Vergleich NumPy-Datenstrukturen und Python | 61 |
4.3 Ein einfaches Beispiel | 61 |
4.4 Grafische Darstellung der Werte | 62 |
4.5 Speicherbedarf | 63 |
4.6 Zeitvergleich zwischen Python-Listen und NumPy-Arrays | 66 |
5 Arrays in NumPy erzeugen | 68 |
5.1 Erzeugung äquidistanter Intervalle | 68 |
5.1.1 arange | 68 |
5.1.2 linspace | 69 |
5.1.3 Nulldimensionale Arrays in NumPy | 70 |
5.1.4 Eindimensionales Array | 70 |
5.1.5 Zwei- und Mehrdimensionale Arrays | 71 |
5.2 Shape/Gestalt eines Arrays | 71 |
5.3 Indizierung und Teilbereichsoperator | 73 |
5.4 Dreidimensionale Arrays | 78 |
5.5 Arrays mit Nullen und Einsen | 81 |
5.6 Arrays kopieren | 82 |
5.6.1 numpy.copy(A) und A.copy() | 82 |
5.6.2 Zusammenhängend gespeicherte Arrays | 82 |
5.7 Identitätsarray | 84 |
5.7.1 Die identity-Funktion | 84 |
5.7.2 Die eye-Funktion | 85 |
5.8 Aufgaben | 86 |
5.9 Lösungen | 87 |
6 Datentyp-Objekt: dtype | 90 |
6.1 dtype | 90 |
6.2 Strukturierte Arrays | 92 |
6.3 Ein- und Ausgabe von strukturierten Arrays | 94 |
6.4 Unicode-Strings in Arrays | 96 |
6.5 Umbenennen von Spaltennamen | 96 |
6.6 Spaltenwerte austauschen | 97 |
6.7 Komplexeres Beispiel | 97 |
6.8 Aufgaben | 99 |
6.9 Lösungen | 100 |
7 Dimensionsänderungen | 102 |
7.1 Reduktion und Reshape von Arrays | 102 |
7.1.1 flatten | 103 |
7.1.2 ravel | 103 |
7.1.3 Unterschiede zwischen ravel und flatten | 104 |
7.1.4 reshape | 105 |
7.2 Konkatenation von Arrays | 106 |
7.3 Weitere Dimensionen hinzufügen | 107 |
7.4 Vektoren stapeln | 108 |
7.5 Fliesen mit tile | 109 |
8 Numerische Operationen auf NumPy-Arrays | 112 |
8.1 Operatoren und Skalare | 112 |
8.2 Arithmetische Operationen auf zwei Arrays | 114 |
8.3 Matrizenmultiplikation und Skalarprodukt | 115 |
8.3.1 Definition der dot-Funktion | 115 |
8.3.2 Beispiele zur dot-Funktion | 115 |
8.3.3 Das dot-Produkt im 3-dimensionalen Fall | 117 |
8.4 Vergleichsoperatoren | 122 |
8.5 Logische Operatoren | 123 |
8.6 Broadcasting | 123 |
8.6.1 Zeilenweises Broadcasting | 124 |
8.6.2 Spaltenweises Broadcasting: | 126 |
8.6.3 Broadcasting von zwei eindimensionalen Arrays | 127 |
8.7 Distanzmatrix | 128 |
8.8 Ufuncs | 129 |
8.8.1 Anwendung von Ufuncs | 129 |
8.8.2 Parameter für Rückgabewerte bei Ufuncs | 131 |
8.8.3 accumulate | 132 |
8.8.4 reduce | 133 |
8.8.5 outer | 134 |
8.8.6 at | 135 |
8.9 Aufgaben | 135 |
8.10 Lösungen | 136 |
9 Statistik und Wahrscheinlichkeiten | 138 |
9.1 Einführung | 138 |
9.2 Zufallszahlen mit Python | 139 |
9.2.1 Die Module random und secrets | 139 |
9.2.2 Erzeugen einer Liste von Zufallszahlen | 139 |
9.3 Zufällige Integer-Zahlen mit Python | 140 |
9.4 Stichproben/Auswahlen | 143 |
9.5 Zufallsintervalle | 144 |
9.6 Gewichtete Zufallsauswahl | 145 |
9.7 Stichproben mit Python | 147 |
9.8 Kartesische Auswahl | 149 |
9.8.1 Kartesisches Produkt | 149 |
9.8.2 Kartesische Auswahl: cartesian_choice | 150 |
9.9 Echte Zufallszahlen | 152 |
9.10 Seed/Startwert | 153 |
9.11 Gauss'sche Normalverteilung | 154 |
9.12 Übung mit Binärsender | 156 |
9.13 Synthetische Verkaufszahlen | 158 |
9.14 Aufgaben | 160 |
9.15 Lösungen | 162 |
10 Boolesche Maskierung und Indizierung | 168 |
10.1 Fancy-Indizierung | 170 |
10.2 Indizierung mit einem Integer-Array | 170 |
10.2.1 Übung | 171 |
10.2.2 Lösung | 171 |
10.3 nonzero und where | 171 |
10.3.1 Übung | 172 |
10.3.2 Lösung | 173 |
10.3.3 Flatnonzero und count_nonzero | 173 |
11 Lesen und Schreiben von Datendateien | 174 |
11.1 Textdateien speichern mit savetxt | 174 |
11.2 Textdateien laden mit loadtxt | 176 |
11.2.1 loadtxt ohne Parameter | 176 |
11.2.2 Spezielle Trenner | 176 |
11.2.3 Selektives Einlesen von Spalten | 176 |
11.2.4 Datenkonvertierung beim Einlesen | 177 |
11.3 tofile | 178 |
11.4 fromfile | 179 |
11.5 Best Practice, um Daten zu laden und zu speichern | 181 |
11.6 Und noch ein anderer Weg: genfromtxt | 181 |
Teil III Matplotlib | 182 |
12 Einführung | 184 |
12.1 Ein erstes Beispiel | 185 |
12.2 Der Formatparameter von pyplot.plot | 186 |
12.3 Bezeichnungen für die Achsen | 189 |
12.4 Abfragen und Ändern des Wertebereichs der Achsen | 191 |
12.5 linspace zur Definition von X-Werten | 192 |
12.6 Linienstil ändern | 194 |
12.7 Flächen einfärben | 195 |
13 Achsen- und Skalenteilung | 198 |
13.1 Achsenverschiebungen und Achsenbezeichnungen | 198 |
13.2 Verändern der Achsenbeschriftungen | 203 |
13.3 Justierung der Tick-Beschriftungen | 204 |
14 Legenden und Kommentare hinzufügen | 206 |
14.1 Legende hinzufügen | 206 |
14.2 Kommentare | 211 |
15 Mehrfache Plots und Doppelachsen | 216 |
15.1 Mehrere Abbildungen und Achsen | 216 |
15.2 Unterdiagramm mit gridspec | 225 |
15.3 Arbeiten mit Objekten | 228 |
15.4 Ein Plot innerhalb eines anderen Plots | 230 |
15.5 Setzen des Plotbereichs | 231 |
15.6 Logarithmische Darstellung | 232 |
15.7 Sekundäre Y-Achse | 233 |
15.8 Gitterlinien | 234 |
15.9 Abbildungen speichern | 235 |
15.10 Aufgaben | 236 |
15.11 Lösungen | 236 |
16 Konturplots | 240 |
16.1 Erstellen eines Maschengitters | 240 |
16.2 Berechnung der Werte | 242 |
16.3 Linienstil und Farben anpassen | 244 |
16.4 Gefüllte Konturen | 245 |
16.5 Individuelle Farben | 246 |
16.6 Schwellen | 247 |
16.7 Andere Grids | 248 |
16.7.1 Meshgrid genauer | 248 |
16.7.2 mgrid | 252 |
16.7.3 ogrid | 252 |
16.8 Aufgaben | 253 |
16.9 Lösungen | 254 |
17 Balken-, Säulendiagramme und Histogramme | 258 |
17.1 Histogramme | 258 |
17.2 Säulendiagramm | 264 |
17.3 Balkendiagramme | 266 |
17.4 Aufgaben | 267 |
17.5 Lösung | 267 |
Teil IV Pandas | 268 |
18 Einführung in Pandas | 270 |
18.1 Datenstrukturen | 270 |
18.2 Series | 271 |
18.2.1 Indizierung | 273 |
18.2.2 pandas.Series.apply | 274 |
18.2.3 Zusammenhang zu Dictionaries | 275 |
18.3 NaN – Fehlende Daten | 275 |
18.3.1 Die Methoden isnull() und notnull() | 276 |
18.3.2 Zusammenhang zwischen NaN und None | 277 |
18.3.3 Fehlende Daten filtern | 277 |
18.3.4 Fehlende Daten auffüllen | 278 |
19 DataFrame | 280 |
19.1 Zusammenhang zu Series | 280 |
19.2 Manipulation der Spaltennamen | 281 |
19.3 Zugriff auf Spalten | 282 |
19.4 DataFrames aus Dictionaries | 283 |
19.5 Index ändern | 284 |
19.5.1 Umsortierung der Spalten | 284 |
19.5.2 Spalte in Index umfunktionieren | 286 |
19.6 Selektion von Zeilen | 287 |
19.7 Summen und kumulative Summen | 288 |
19.8 Spaltenwerte ersetzen | 288 |
19.9 Sortierung | 290 |
19.10 Spalten einfügen | 291 |
19.11 DataFrame und verschachtelte Dictionaries | 292 |
19.12 Aufgaben | 293 |
19.13 Lösungen | 295 |
20 Dateien lesen und schreiben | 300 |
20.1 Trennerseparierte Werte | 300 |
20.2 CSV- und DSV-Dateien lesen | 301 |
20.3 Schreiben von CSV-Dateien | 302 |
20.4 Lesen und Schreiben von Excel-Dateien | 304 |
20.5 Aufgaben | 305 |
20.6 Lösungen | 305 |
21 Umgang mit NaN | 308 |
21.1 'nan' in Python | 308 |
21.2 NaN in Pandas | 309 |
21.2.1 Beispiel mit NaNs | 311 |
21.3 dropna() verwenden | 312 |
21.4 Aufgaben | 314 |
21.5 Lösungen | 314 |
22 Binning | 316 |
22.1 Einführung | 316 |
22.2 Binning mit Pandas | 318 |
22.2.1 Von Pandas verwendete Bins | 318 |
22.2.2 Andere Wege, um Bins zu definieren | 319 |
22.2.3 Bins und Werte zählen | 320 |
22.2.4 Bins benennen | 322 |
23 Mehrstufige Indizierung | 324 |
23.1 Einführung | 324 |
23.2 Mehrstufig indizierte Series | 324 |
23.3 Zugriffsmöglichkeiten | 326 |
23.4 Zusammenhang zu DataFrames | 327 |
23.5 Dreistufige Indizes | 329 |
23.6 Vertauschen mehrstufiger Indizes | 331 |
23.7 Aufgaben | 332 |
23.8 Lösungen | 333 |
24 Datenvisualisierung mit Pandas | 334 |
24.1 Einführung | 334 |
24.2 Liniendiagramme in Pandas | 335 |
24.2.1 Series | 335 |
24.2.2 DataFrames | 337 |
24.2.3 Sekundärachsen (Twin Axes) | 339 |
24.2.4 Mehrere Y-Achsen | 340 |
24.3 Ein komplexeres Beispiel | 342 |
24.3.1 Spalten mit Zeichenketten (Strings) in Floats wandeln | 345 |
24.4 Balkendiagramme in Pandas | 346 |
24.4.1 Ein einfaches Beispiel | 346 |
24.4.2 Balkengrafik für die Programmiersprachennutzung | 347 |
24.4.3 Farbgebung einer Balkengrafik | 348 |
24.5 Kuchendiagramme in Pandas | 349 |
24.5.1 Ein einfaches Beispiel | 349 |
25 Zeit und Datum | 354 |
25.1 Einführung | 354 |
25.2 Python-Standardmodule für Zeitdaten | 355 |
25.2.1 Die date-Klasse | 355 |
25.2.2 Die time-Klasse | 356 |
25.3 Die datetime-Klasse | 357 |
25.4 Unterschied zwischen Zeiten | 359 |
25.4.1 Wandlung von datetime-Objekten in Strings | 360 |
25.4.2 Wandlung mit strftime | 360 |
25.5 Ausgabe in Landessprache | 361 |
25.6 datetime-Objekte aus Strings erstellen | 362 |
26 Zeitserien | 364 |
26.1 Einführung | 364 |
26.2 Zeitreihen und Python | 364 |
26.3 Datumsbereiche erstellen | 367 |
Stichwortverzeichnis | 370 |