|
Vorwort |
13 |
|
|
Kapitel 1: Einleitung |
19 |
|
|
1.1 Worum geht es in diesem Buch? |
19 |
|
|
Welche Arten von Daten? |
19 |
|
|
1.2 Warum Python für die Datenanalyse? |
20 |
|
|
Python als Kleister |
20 |
|
|
Das »Zwei-Sprachen-Problem« lösen |
21 |
|
|
Warum nicht Python? |
21 |
|
|
1.3 Grundlegende Python-Bibliotheken |
22 |
|
|
NumPy |
22 |
|
|
pandas |
23 |
|
|
matplotlib |
24 |
|
|
IPython und Jupyter |
24 |
|
|
SciPy |
25 |
|
|
scikit-learn |
26 |
|
|
statsmodels |
26 |
|
|
1.4 Installation und Einrichtung |
27 |
|
|
Windows |
27 |
|
|
Apple (OS X, macOS) |
27 |
|
|
GNU/Linux |
28 |
|
|
Python-Pakete installieren oder aktualisieren |
28 |
|
|
Python 2 und Python 3 |
29 |
|
|
Integrierte Entwicklungsumgebungen (Integrated Development Environments – IDEs) und Texteditoren |
30 |
|
|
1.5 Community und Konferenzen |
30 |
|
|
1.6 Navigation durch dieses Buch |
31 |
|
|
Codebeispiele |
32 |
|
|
Daten für die Beispiele |
32 |
|
|
Importkonventionen |
32 |
|
|
Jargon |
33 |
|
|
Kapitel 2: Grundlagen von Python, IPython und Jupyter-Notebooks |
35 |
|
|
2.1 Der Python-Interpreter |
36 |
|
|
2.2 IPython-Grundlagen |
37 |
|
|
Die IPython-Shell ausführen |
37 |
|
|
Das Jupyter-Notebook ausführen |
38 |
|
|
Befehlsergänzung mit Tab |
41 |
|
|
Introspektion |
42 |
|
|
Der %run-Befehl |
44 |
|
|
Code aus der Zwischenablage ausführen |
45 |
|
|
Terminal-Tastenkürzel |
46 |
|
|
Über magische Befehle |
47 |
|
|
matplotlib-Integration |
49 |
|
|
2.3 Grundlagen der Sprache Python |
50 |
|
|
Sprachsemantik |
50 |
|
|
Skalare Typen |
59 |
|
|
Kontrollfluss |
66 |
|
|
Kapitel 3: In Python integrierte Datenstrukturen, Funktionen und Dateien |
71 |
|
|
3.1 Datenstrukturen und Sequenzen |
71 |
|
|
Tupel |
71 |
|
|
Listen |
74 |
|
|
Eingebaute Funktionen von Sequenzen |
79 |
|
|
Dictionarys |
81 |
|
|
Set |
85 |
|
|
List, Set und Dict Comprehensions |
87 |
|
|
3.2 Funktionen |
89 |
|
|
Namensraum, Gültigkeitsbereich und lokale Funktionen |
90 |
|
|
Mehrere Rückgabewerte |
91 |
|
|
Funktionen sind Objekte |
92 |
|
|
Anonyme oder Lambda-Funktionen |
93 |
|
|
Currying: teilweise Anwendung von Argumenten |
94 |
|
|
Generatoren |
95 |
|
|
Fehler und die Behandlung von Ausnahmen |
97 |
|
|
3.3 Dateien und das Betriebssystem |
100 |
|
|
Bytes und Unicode mit Dateien |
103 |
|
|
3.4 Schlussbemerkung |
105 |
|
|
Kapitel 4: Grundlagen von NumPy: Arrays und vektorisierte Berechnung |
107 |
|
|
4.1 Das ndarray von NumPy: ein mehrdimensionales Array-Objekt |
109 |
|
|
ndarrays erzeugen |
110 |
|
|
Datentypen für ndarrays |
112 |
|
|
Rechnen mit NumPy-Arrays |
115 |
|
|
Einfaches Indizieren und Slicing |
116 |
|
|
Boolesches Indizieren |
121 |
|
|
Fancy Indexing |
124 |
|
|
Arrays transponieren und Achsen tauschen |
125 |
|
|
4.2 Universelle Funktionen: schnelle elementweise Array-Funktionen |
127 |
|
|
4.3 Array-orientierte Programmierung mit Arrays |
130 |
|
|
Bedingte Logik als Array-Operationen ausdrücken |
132 |
|
|
Mathematische und statistische Methoden |
133 |
|
|
Methoden für boolesche Arrays |
135 |
|
|
Sortieren |
135 |
|
|
Unique und andere Mengenlogik |
136 |
|
|
4.4 Dateiein- und -ausgabe bei Arrays |
137 |
|
|
4.5 Lineare Algebra |
138 |
|
|
4.6 Erzeugen von Pseudozufallszahlen |
140 |
|
|
4.7 Beispiel: Random Walks |
142 |
|
|
Viele Random Walks auf einmal simulieren |
143 |
|
|
4.8 Schlussbemerkung |
144 |
|
|
Kapitel 5: Erste Schritte mit pandas |
145 |
|
|
5.1 Einführung in die pandas-Datenstrukturen |
145 |
|
|
Series |
146 |
|
|
DataFrame |
150 |
|
|
Indexobjekte |
156 |
|
|
5.2 Wesentliche Funktionalität |
158 |
|
|
Neuindizierung |
158 |
|
|
Einträge von einer Achse löschen |
160 |
|
|
Indizierung, Auswahl und Filterung |
162 |
|
|
Integer-Indizes |
167 |
|
|
Arithmetik und Datenausrichtung |
168 |
|
|
Funktionsanwendung und Mapping |
173 |
|
|
Sortieren und Rangbildung |
175 |
|
|
Achsenindizes mit duplizierten Labels |
178 |
|
|
5.3 Zusammenfassen und Berechnen deskriptiver Statistiken |
180 |
|
|
Korrelation und Kovarianz |
182 |
|
|
Eindeutigkeit, Werteanzahl und Mitgliedschaft |
184 |
|
|
5.4 Schlussbemerkung |
187 |
|
|
Kapitel 6: Laden und Speichern von Daten sowie Dateiformate |
189 |
|
|
6.1 Lesen und Schreiben von Daten im Textformat |
189 |
|
|
Stückweises Lesen von Textdateien |
195 |
|
|
Daten in Textformaten schreiben |
197 |
|
|
Arbeiten mit separierten Formaten |
198 |
|
|
JSON-Daten |
200 |
|
|
XML und HTML: Web-Scraping |
202 |
|
|
6.2 Binäre Datenformate |
205 |
|
|
Benutzung von HDF5 |
206 |
|
|
Lesen von Microsoft Excel-Dateien |
208 |
|
|
6.3 Interaktion mit Web-APIs |
209 |
|
|
6.4 Interaktion mit Datenbanken |
210 |
|
|
6.5 Schlussbemerkung |
212 |
|
|
Kapitel 7: Daten bereinigen und vorbereiten |
213 |
|
|
7.1 Der Umgang mit fehlenden Daten |
213 |
|
|
Fehlende Daten herausfiltern |
215 |
|
|
Fehlende Daten einsetzen |
217 |
|
|
7.2 Datentransformation |
219 |
|
|
Duplikate entfernen |
219 |
|
|
Daten mithilfe einer Funktion oder eines Mappings transformieren |
221 |
|
|
Werte ersetzen |
222 |
|
|
Achsenindizes umbenennen |
224 |
|
|
Diskretisierung und Klassifizierung |
225 |
|
|
Erkennen und Filtern von Ausreißern |
227 |
|
|
Permutation und zufällige Stichproben |
229 |
|
|
Berechnen von Indikator-/Platzhaltervariablen |
230 |
|
|
7.3 Manipulation von Strings |
233 |
|
|
Methoden von String-Objekten |
233 |
|
|
Reguläre Ausdrücke |
235 |
|
|
Vektorisierte String-Funktionen in pandas |
238 |
|
|
7.4 Schlussbemerkung |
241 |
|
|
Kapitel 8: Datenaufbereitung: Verknüpfen, Kombinieren und Umformen |
243 |
|
|
8.1 Hierarchische Indizierung |
243 |
|
|
Ebenen neu anordnen und sortieren |
246 |
|
|
Zusammenfassende Statistiken nach Ebene |
247 |
|
|
Indizierung mit den Spalten eines DataFrame |
247 |
|
|
8.2 Kombinieren und Verknüpfen von Datensätzen |
249 |
|
|
Datenbankartige Verknüpfung von DataFrames |
249 |
|
|
Daten über einen Index verknüpfen |
254 |
|
|
Verketten entlang einer Achse |
258 |
|
|
Überlappende Daten zusammenführen |
263 |
|
|
8.3 Umformen und Transponieren |
264 |
|
|
Umformen mit hierarchischer Indizierung |
264 |
|
|
Transponieren vom »langen« zum »breiten« Format |
267 |
|
|
Transponieren vom »breiten« zum »langen« Format |
270 |
|
|
8.4 Schlussbemerkung |
272 |
|
|
Kapitel 9: Plotten und Visualisieren |
273 |
|
|
9.1 Kurze Einführung in die matplotlib-API |
274 |
|
|
Diagramme und Subplots |
275 |
|
|
Farben, Beschriftungen und Linienformen |
279 |
|
|
Skalenstriche, Beschriftungen und Legenden |
281 |
|
|
Annotationen und Zeichnungen in einem Subplot |
285 |
|
|
Diagramme in Dateien abspeichern |
287 |
|
|
Die Konfiguration von matplotlib |
288 |
|
|
9.2 Plotten mit pandas und seaborn |
289 |
|
|
Liniendiagramme |
289 |
|
|
Balkendiagramme |
292 |
|
|
Histogramme und Dichteplots |
297 |
|
|
Streu- oder Punktdiagramme |
299 |
|
|
Facettenraster und kategorische Daten |
301 |
|
|
9.3 Andere Visualisierungswerkzeuge in Python |
303 |
|
|
9.4 Schlussbemerkung |
304 |
|
|
Kapitel 10: Aggregation von Daten und Gruppenoperationen |
305 |
|
|
10.1 GroupBy-Mechanismen |
306 |
|
|
Iteration über Gruppen |
309 |
|
|
Auswählen einer Spalte oder einer Teilmenge von Spalten |
311 |
|
|
Gruppieren mit Dictionarys und Series |
311 |
|
|
Gruppieren mit Funktionen |
313 |
|
|
Gruppieren nach Ebenen eines Index |
313 |
|
|
10.2 Aggregation von Daten |
314 |
|
|
Spaltenweise und mehrfache Anwendung von Funktionen |
316 |
|
|
Aggregierte Daten ohne Zeilenindizes zurückgeben |
319 |
|
|
10.3 Apply: Allgemeine Operationen vom Typ split-apply-combine |
320 |
|
|
Unterdrücken der Gruppenschlüssel |
322 |
|
|
Analyse von Quantilen und Größenklassen |
323 |
|
|
Beispiel: Fehlende Daten mit gruppenspezifischen Werten auffüllen |
324 |
|
|
Beispiel: Zufällige Stichproben und Permutation |
326 |
|
|
Beispiel: Gewichteter Mittelwert für Gruppen und Korrelation |
328 |
|
|
Beispiel: Gruppenweise lineare Regression |
330 |
|
|
10.4 Pivot-Tabellen und Kreuztabellierung |
330 |
|
|
Kreuztabellen |
333 |
|
|
10.5 Schlussbemerkung |
334 |
|
|
Kapitel 11: Zeitreihen |
335 |
|
|
11.1 Datentypen und Werkzeuge für Datum und Zeit |
336 |
|
|
Konvertieren zwischen String und datetime |
337 |
|
|
11.2 Grundlagen von Zeitreihen |
340 |
|
|
Indizieren, auswählen und Untermengen bilden |
341 |
|
|
Zeitreihen mit doppelten Indizes |
344 |
|
|
11.3 Datumsbereiche, Frequenzen und Verschiebungen |
345 |
|
|
Erzeugen von Datumsbereichen |
346 |
|
|
Frequenzen und Offsets von Kalenderdaten |
348 |
|
|
Verschieben von Datumsangaben (Vorlauf und Verzögerung) |
350 |
|
|
11.4 Berücksichtigung von Zeitzonen |
353 |
|
|
Lokalisieren und Konvertieren von Zeitzonen |
353 |
|
|
Operationen mit Zeitstempeln bei zugeordneter Zeitzone |
356 |
|
|
Operationen zwischen unterschiedlichen Zeitzonen |
357 |
|
|
11.5 Perioden und Arithmetik von Perioden |
357 |
|
|
Umwandlung der Frequenz von Perioden |
358 |
|
|
Quartalsweise Perioden |
360 |
|
|
Zeitstempel zu Perioden konvertieren (und zurück) |
362 |
|
|
Erstellen eines PeriodIndex aus Arrays |
363 |
|
|
11.6 Resampling und Konvertieren von Frequenzen |
365 |
|
|
Downsampling |
367 |
|
|
Upsampling und Interpolation |
370 |
|
|
Resampling mit Perioden |
371 |
|
|
11.7 Funktionen mit gleitenden Fenstern |
372 |
|
|
Exponentiell gewichtete Funktionen |
376 |
|
|
Binäre Funktionen mit gleitendem Fenster |
377 |
|
|
Benutzerdefinierte Funktionen mit gleitenden Fenstern |
378 |
|
|
11.8 Schlussbemerkung |
379 |
|
|
Kapitel 12: pandas für Fortgeschrittene |
381 |
|
|
12.1 Kategorische Daten |
381 |
|
|
Hintergrund und Motivation |
381 |
|
|
Der Typ Categorical in pandas |
383 |
|
|
Berechnungen mit Categoricals |
385 |
|
|
Kategorische Methoden |
388 |
|
|
12.2 Erweiterter Einsatz von GroupBy |
390 |
|
|
Gruppentransformationen und »ausgepackte« GroupBys |
391 |
|
|
Gruppiertes Zeit-Resampling |
394 |
|
|
12.3 Techniken für die Verkettung von Methoden |
396 |
|
|
Die Methode pipe |
398 |
|
|
12.4 Schlussbemerkung |
398 |
|
|
Kapitel 13: Einführung in Modellierungsbibliotheken in Python |
401 |
|
|
13.1 Die Kopplung zwischen pandas und dem Modellcode |
401 |
|
|
13.2 Modellbeschreibungen mit Patsy herstellen |
404 |
|
|
Datentransformationen in Patsy-Formeln |
407 |
|
|
Kategorische Daten und Patsy |
408 |
|
|
13.3 Einführung in statsmodels |
411 |
|
|
Lineare Modelle schätzen |
411 |
|
|
Zeitreihenprozesse schätzen |
414 |
|
|
13.4 Einführung in scikit-learn |
415 |
|
|
13.5 Ihre Ausbildung fortsetzen |
419 |
|
|
Kapitel 14: Beispiele aus der Datenanalyse |
421 |
|
|
14.1 1.USA.gov-Daten von Bitly |
421 |
|
|
Zählen von Zeitzonen in reinem Python |
422 |
|
|
Zeitzonen mit pandas zählen |
424 |
|
|
14.2 MovieLens-1M-Datensatz |
431 |
|
|
Messen von Unterschieden in der Bewertung |
436 |
|
|
14.3 US-Babynamen von 1880–2010 |
437 |
|
|
Namenstrends analysieren |
442 |
|
|
14.4 Die USDA-Nahrungsmitteldatenbank |
451 |
|
|
14.5 Datenbank des US-Wahlausschusses von 2012 |
457 |
|
|
Spendenstatistik nach Beruf und Arbeitgeber |
459 |
|
|
Spenden der Größe nach klassifizieren |
462 |
|
|
Spendenstatistik nach Bundesstaat |
464 |
|
|
14.6 Schlussbemerkung |
465 |
|
|
Anhang A: NumPy für Fortgeschrittene |
467 |
|
|
Anhang B: Mehr zum IPython-System |
501 |
|
|
Index |
523 |
|
|
Über den Autor |
541 |
|
|
Kolophon |
541 |
|