Erhalten Sie Zugang zu diesem und mehr als 300000 Büchern ab EUR 5,99 monatlich.
- Grundlagen zur Lösung numerischer Probleme mit Python
- Verarbeitung großer Datenmengen mit NumPy, z. B. im maschinellen Lernen
- Datenvisualisierung mit Matplotlib
- Ideal für Personen aus Wissenschaft, Ingenieurwesen und Datenanalyse
- Ideal zum Umstieg von Matlab auf Python
- Einführung anhand vieler Beispiele und Praxisfälle sowie Musterlösungen
- Ihr exklusiver Vorteil: E-Book inside beim Kauf des gedruckten Buches
Dieses Buch vermittelt die Python-Grundlagen zur Lösung numerischer Probleme aus den Gebieten »Data Science« und »Maschinelles Lernen«.
Im ersten Teil geht es um NumPy als Basis der numerischen Programmierung mit Python. Eingehend behandelt werden Arrays als zentraler Datentyp für alles, Numerische Operationen, Broadcasting und Ufuncs. Statistik und Wahrscheinlichkeitsrechnung ist ein eigenes Kapitel gewidmet, ebenso wie Boolscher Maskierung und File-Handling.
Die Datenvisualisierung mit Matplotlib bildet den Schwerpunkt des zweiten Teils. Zunächst geht es um die Begrif ichkeit von Matplotlib. Behandelt werden Linien-, Balkendiagramme, Histogramme und Konturplots.
Der dritte Teil dreht sich um Pandas mit seinen Series und DataFrames. Behandelt wird auch der Umgang mit verschiedensten Dateiformaten wie Excel, CSV und JSON sowie mit unvollständigen Daten und NaN. Aufgezeigt werden die Möglichkeiten der Datenvisualisierung direkt mit Pandas.
Der vierte Teil bietet Beispielanwendungen des erlernten Stoffes, wie z.B. ein Haushaltsbuch und eine praxistaugliche Einnahmeüberschussrechnung. Auch findet sich hier eine Einführung in Bildverarbeitungstechniken.
Fast jedes der 32 Kapitel enthält zusätzliche Übungen zum Erproben und Vertiefen des Erlernten, die zugehörigen Lösungen sind im fünften Teil zusammengefasst.
AUS DEM INHALT //
NumPy
• Numerische Operationen auf mehrdimensionalen Arrays
• Broadcasting und Ufuncs
Matplotlib:
• Diskrete und kontinuierliche Graphen
• Balken- und Säulendiagramme, Histogramme, Konturplots
Pandas:
• Series und DataFrames
• Arbeiten mit Excel-, csv- und JSON-Dateien
• Unvollständige Daten (NaN)
• Datenvisualisierung
Praxisbeispiele:
• Bildverarbeitung
• Haushaltsbuch und Einnahmeüberschussrechnung
Sie lesen das E-Book in den Legimi-Apps auf:
Seitenzahl: 381
Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:
Bernd Klein
Numerisches Python
Arbeiten mit NumPy, Matplotlib und Pandas
2., aktualisierte und erweiterte Auflage
Der Autor:Bernd Klein, [email protected]
Alle in diesem Werk enthaltenen Informationen, Verfahren und Darstellungen wurden nach bestem Wissen zusammengestellt und mit Sorgfalt getestet. Dennoch sind Fehler nicht ganz auszuschließen. Aus diesem Grund sind die im vorliegenden Werk enthaltenen Informationen mit keiner Verpflichtung oder Garantie irgendeiner Art verbunden. Autor und Verlag übernehmen infolgedessen keine juristische Verantwortung und werden keine daraus folgende oder sonstige Haftung übernehmen, die auf irgendeine Art aus der Benutzung dieser Informationen – oder Teilen davon – entsteht.Ebenso wenig übernehmen Autor und Verlag die Gewähr dafür, dass die beschriebenen Verfahren usw. frei von Schutzrechten Dritter sind. Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt also auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benützt werden dürften.
Aus Gründen der besseren Lesbarkeit wird auf die gleichzeitige Verwendung der Sprachformen männlich, weiblich und divers (m/w/d) verzichtet. Sämtliche Personenbezeichnungen gelten gleichermaßen für alle Geschlechter.
Bibliografische Information der Deutschen Nationalbibliothek:Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.
Dieses Werk ist urheberrechtlich geschützt.Alle Rechte, auch die der Übersetzung, des Nachdruckes und der Vervielfältigung des Buches, oder Teilen daraus, vorbehalten. Kein Teil des Werkes darf ohne schriftliche Genehmigung des Verlages in irgendeiner Form (Fotokopie, Mikrofilmoder ein anderes Verfahren), auch nicht für Zwecke der Unterrichtsgestaltung – mit Ausnahme der in den §§ 53, 54 URG genannten Sonderfälle –, reproduziert oder unter Verwendung elektronischer Systeme verarbeitet, vervielfältigt oder verbreitet werden.
© 2023 Carl Hanser Verlag München, www.hanser-fachbuch.deLektorat: Brigitte Bauer-SchiewekCopy editing: Jürgen Dubau, Freiburg/ElbeLayout: le-tex publishing services, LeipzigUmschlagdesign: Marc Müller-Bremer, www.rebranding.de, MünchenUmschlagrealisation: Max KostopoulosTitelmotiv: © stock.adobe.com/ARTvektor
Print-ISBN: 978-3-446-47170-2E-Book-ISBN: 978-3-446-47366-9E-Pub-ISBN: 978-3-446-47957-9
Titelei
Impressum
Inhalt
Vorwort
Danksagung
1 Einleitung
1.1 Die richtige Wahl
1.2 Aufbau des Buches
1.3 Python-Installation
1.4 Download der Beispiele
1.5 Anregungen und Kritik
2 Numerisches Programmieren mit Python
2.1 Begriffsbestimmung
2.2 Zusammenhang zwischen Python, NumPy, Matplotlib, SciPy und Pandas
2.3 Python, eine Alternative zu MATLAB
Teil I NumPy
3 NumPy – Einführung
3.1 Überblick
3.2 Vergleich NumPy-Datenstrukturen und Python
3.3 Ein einfaches Beispiel
3.4 Grafische Darstellung der Werte
3.5 Speicherbedarf
3.6 Zeitvergleich zwischen Python-Listen und NumPy-Arrays
4 Arrays in NumPy erzeugen
4.1 Erzeugung äquidistanter Intervalle
4.1.1 arange
4.1.2 linspace
4.1.3 Nulldimensionale Arrays in NumPy
4.1.4 Eindimensionales Array
4.1.5 Zwei- und mehrdimensionale Arrays
4.2 Gestalt eines Arrays
4.3 Indizierung und Teilbereichsoperator
4.4 Dreidimensionale Arrays
4.5 Arrays mit Nullen und Einsen
4.6 Arrays kopieren
4.6.1 numpy.copy(A) und A.copy()
4.6.2 Zusammenhängend gespeicherte Arrays
4.7 Einheitsmatrix
4.7.1 Die identity-Funktion
4.7.2 Die eye-Funktion
4.8 Datentypen
4.9 Aufgaben
5 Datentyp-Objekt: dtype
5.1 dtype
5.2 Strukturierte Arrays
5.3 Ein- und Ausgabe von strukturierten Arrays
5.4 Unicode-Strings in Arrays
5.5 Umbenennen von Spaltennamen
5.6 Spaltenwerte austauschen
5.7 Komplexeres Beispiel
5.8 Aufgaben
6 Dimensionsänderungen, Konkatenationen, Stapeln
6.1 Reduktion und Reshape von Arrays
6.1.1 flatten
6.1.2 ravel
6.1.3 Unterschiede zwischen ravel und flatten
6.1.4 reshape
6.2 Weitere Dimensionen hinzufügen
6.3 Konkatenation von Arrays
6.4 Vektoren stapeln
6.4.1 stack-Funktion
6.4.2 dstack-Funktion
6.4.3 vstack
6.4.4 hstack
6.5 „Fliesen“ mit tile
7 Numerische Operationen auf NumPy-Arrays
7.1 Operatoren und Skalare
7.2 Arithmetische Operationen auf zwei Arrays
7.3 Matrizenmultiplikation und Skalarprodukt
7.3.1 Definition der dot-Funktion
7.3.2 Beispiele zur dot-Funktion
7.3.3 Das dot-Produkt im dreidimensionalen Fall
7.4 Vergleichsoperatoren
7.5 Logische Operatoren
7.6 Broadcasting
7.6.1 Zeilenweises Broadcasting
7.6.2 Spaltenweises Broadcasting
7.6.3 Broadcasting von zwei eindimensionalen Arrays
7.7 Distanzmatrix
7.8 ufuncs
7.8.1 Anwendung von ufuncs
7.8.2 Parameter für Rückgabewerte bei ufuncs
7.8.3 accumulate
7.8.4 reduce
7.8.5 outer
7.8.6 at
7.9 Aufgaben
8 Statistik und Wahrscheinlichkeiten
8.1 Einführung
8.2 Auf dem random-Modul aufbauende Funktionen
8.2.1 Echte Zufallszahlen
8.2.2 Erzeugen einer Liste von Zufallszahlen
8.2.3 Zufällige Integer-Zahlen
8.2.4 Stichproben oder Auswahlen
8.2.5 Zufallsintervalle
8.2.6 Seed oder Startwert
8.2.7 Gewichtete Zufallsauswahl
8.2.8 Stichproben mit Python
8.2.9 Kartesische Auswahl
8.2.10 Kartesisches Produkt
8.2.11 Kartesische Auswahl: cartesian_choice
8.2.12 Gauss’sche Normalverteilung
8.2.13 Übung mit Binärsender
8.3 Das random-Untermodul von NumPy
8.3.1 Integers und Floats zufällig erzeugen
8.3.2 numpy.random.choice
8.3.3 numpy.random.random_sample
8.4 Synthetische Verkaufszahlen
8.5 Aufgaben
9 Boolesche Maskierung und Indizierung
9.1 Fancy-Indizierung
9.2 Indizierung mit einem Integer-Array
9.3 nonzero und where
9.4 flatnonzero und count_nonzero
9.5 Aufgaben
10 Lesen und Schreiben von Daten-Dateien
10.1 Text-Dateien speichern mit savetxt
10.2 Text-Dateien laden mit loadtxt
10.2.1 loadtxt ohne Parameter
10.2.2 Spezielle Trenner
10.2.3 Selektives Einlesen von Spalten
10.2.4 Datenkonvertierung beim Einlesen
10.3 tofile
10.4 fromfile
10.5 Best Practice, um Daten zu laden und zu speichern
10.6 Und noch ein anderer Weg: genfromtxt
10.7 recfromcsv
Teil II Matplotlib
11 Einführung
11.1 Ein erstes Beispiel
11.2 Der Formatparameter von pyplot.plot
11.3 Bezeichnungen für die Achsen
12 Objekt-Hierarchie
12.1 Erzeugung einer Figure und Axes
12.2 Achsenbeschriftungen und Titel
12.3 Die Plot-Methode
12.4 Wertebereiche der Achsen
12.5 Plotten mehrerer Funktionen
12.6 Streudiagramme
12.7 Flächen einfärben
13 Mehrfache Plots und Doppelachsen
13.1 Mehrere Abbildungen und Achsen
14 Gridspec in Matplotlib
15 Achsen- und Skalenteilung
15.1 Achsenverschiebungen und Achsenbezeichnungen
15.2 Achsenbeschriftungen ändern
15.3 Justierung der Tick-Beschriftungen
16 Legenden und Annotationen
16.1 Legende hinzufügen
16.2 Annotations/Anmerkungen
16.3 Aufgaben
17 Konturplots
17.1 Erstellen eines Maschengitters
17.2 Funktionen auf Meshgrids
17.3 contour ohne meshgrid
17.4 Linienstil und Farben anpassen
17.5 Gefüllte Konturen
17.6 Individuelle Farben
17.7 Schwellen
17.8 Andere Grids
17.8.1 Meshgrid genauer
17.8.2 mgrid
17.8.3 ogrid
17.9 imshow
17.10 Aufgaben
18 Histogramme und Diagramme
18.1 Histogramme
18.2 Säulendiagramm
18.3 Balkendiagramme
18.4 Gruppierte Balkendiagramme
18.5 xkcd-Modus
18.6 Tortendiagramme
18.7 Stapeldiagramme
18.8 Aufgaben
Teil III Pandas
19 Pandas: Einführung
19.1 Datenstrukturen
19.2 Series
19.2.1 Indizierung
19.2.2 pandas.Series.apply
19.2.3 Zusammenhang zu Dictionaries
19.3 NaN – Fehlende Daten
19.3.1 Die Methoden isnull() und notnull()
19.3.2 Zusammenhang zwischen NaN und None
19.3.3 Fehlende Daten filtern
19.3.4 Fehlende Daten auffüllen
19.4 Aufgaben
20 DataFrame
20.1 Zusammenhang zu Series
20.2 Manipulation der Spaltennamen
20.3 DataFrames aus Dictionaries
20.4 Zugriff auf Spalten
20.5 Selektion von Zeilen
20.5.1 loc
20.5.2 query
20.6 Modifikatation von DataFrames
20.6.1 Spalten einfügen
20.6.2 Spalten austauschen
20.6.3 Zeilen austauschen
20.6.4 Einzelne Werte mittels at und iat ändern
20.7 Index ändern
20.7.1 Umsortierung der Spalten und des Index
20.7.2 Spalten umbenennen
20.7.3 Spalte in Index umfunktionieren
20.8 Summen und kumulative Summen
20.9 Sortierung
20.10 DataFrame und verschachtelte Dictionaries
20.11 Aufgaben
21 Dateiverarbeitung
21.1 DSV-/CSV-Dateien
21.1.1 CSV- und DSV-Dateien lesen
21.1.2 Schreiben von CSV-Dateien
21.2 Lesen und Schreiben von JSON-Dateien
21.3 Lesen und Schreiben von Excel-Dateien
21.4 Aufgaben
22 Pandas: groupby
22.1 groupby mit Series
22.2 Arbeitsweise von groupby
22.3 groupby mit DataFrames
22.3.1 groupby mit Funktionen
22.3.2 Weitere Anwendungen zu groupby
22.4 Aufgaben
23 Pivot-Tabellen
23.1 Pivot-Funktion in Pandas
23.2 Pivot-Aufruf ohne Werte für values
23.3 Pivoting auf den Titanic-Daten
23.4 Aufgaben
24 Umgang mit NaN
24.1 nan in Python
24.2 NaN in Pandas
24.2.1 Beispiel mit NaNs
24.3 dropna() verwenden
24.4 Aufgaben
25 Binning
25.1 Einführung
25.2 Binning mit Pandas
25.2.1 Binning mit cut
25.2.2 Erzeugen eines IntervalIndex-Objektes
25.2.3 Mehr zu pd.cut
25.2.4 Categorical
25.2.5 Binnings mit Labels
26 Mehrstufige Indizierung
26.1 Einführung
26.2 Mehrstufig indizierte Series-Objekte
26.3 Alternative Möglichkeiten
26.4 Zugriffsmöglichkeiten
26.5 Dreistufige Indizes
26.6 Zusammenhang zu DataFrames
26.6.1 Der harte direkte Weg
26.6.2 unstack und stack
26.7 Vertauschen mehrstufiger Indizes
26.8 Aufgaben
27 Datenvisualisierung mit Pandas
27.1 Einführung
27.2 Liniendiagramm in Pandas
27.2.1 Series
27.2.2 DataFrames
27.2.3 Sekundärachsen (Twin Axes)
27.2.4 Mehrere Y-Achsen
27.2.5 Spalten mit Zeichenketten (Strings) in Floats wandeln
27.3 Balkendiagramme in Pandas
27.3.1 Ein einfaches Beispiel
27.3.2 Balkengrafik für die Programmiersprachennutzung
27.3.3 Farbgebung einer Balkengrafik
27.4 Kuchendiagramme in Pandas
27.4.1 Ein einfaches Beispiel
27.5 Flächenplot mit area
27.6 Aufgaben
28 Zeit und Datum
28.1 Einführung
28.2 Python-Standardmodule für Zeit-Daten
28.2.1 Die date-Klasse
28.2.2 Die time-Klasse
28.3 Die datetime-Klasse
28.4 Unterschied zwischen Zeiten
28.4.1 Wandlung von datetime-Objekten in Strings
28.4.2 Wandlung mit strftime
28.5 Ausgabe in Landessprache
28.6 datetime-Objekte aus Strings erstellen
29 Zeitreihen
29.1 Einführung
29.2 Zeitreihen und Python
29.3 Datumsbereiche erstellen
29.4 Datumsbereiche mit Uhrzeiten
29.5 Aufgaben
Teil IV Anwendungen
30 Techniken der Bildverarbeitung
30.1 Einführung
30.2 Bilder im misc-Paket
30.3 Eigene Bilder
30.4 Histogramme der Farbwerte
30.5 Bilderausschnitte
30.6 Geometrische Transformationen
30.7 Filtern
30.8 Bilder aufhellen und abtönen
30.9 Kachelung
30.10 Wasserzeichen
30.11 Aufgaben
31 Finanzverwaltung mit Pandas
31.1 Haushaltsbuch
31.1.1 Haushaltsbuch mit CSV-Datei
31.1.2 Erzeugen eines Excel-Haushaltsbuches
31.1.3 Auswertung des Excel-Haushaltsbuches
31.2 Einnahmenüberschussrechnung
31.2.1 Journaldatei
31.2.2 Analyse und Visualisierung der Daten
31.2.3 Steuersummen
Teil V Lösungen zu den Aufgaben
32 Lösungen zu den Aufgaben
32.1 Lösungen zu Kapitel 4 (Arrays in NumPy erzeugen)
32.2 Lösungen zu Kapitel 5 (Datentyp-Objekt: dtype)
32.3 Lösungen zu Kapitel 7 (Numerische Operationen auf NumPy-Arrays)
32.4 Lösungen zu Kapitel 8 (Statistik und Wahrscheinlichkeiten)
32.5 Lösungen zu Kapitel 9 (Boolesche Maskierung und Indizierung)
32.6 Lösungen zu Kapitel 13 (Mehrfache Plots und Doppelachsen)
32.7 Lösungen zu Kapitel 16 (Legenden und Annotationen)
32.8 Lösungen zu Kapitel 17 (Konturplots)
32.9 Lösungen zu Kapitel 18 (Histogramme und Diagramme)
32.10 Lösungen zu Kapitel 19 (Pandas: Einführung)
32.11 Lösungen zu Kapitel 20 (DataFrame)
32.12 Lösungen zu Kapitel 21 (Dateiverarbeitung)
32.13 Lösungen zu Kapitel 23 (Pivot-Tabellen)
32.14 Lösungen zu Kapitel 22 (Pandas: groupby)
32.15 Lösungen zu Kapitel 24 (Umgang mit NaN)
32.16 Lösungen zu Kapitel 26 (Mehrstufige Indizierung)
32.17 Lösungen zu Kapitel 27 (Datenvisualisierung mit Pandas)
32.18 Lösungen zu Kapitel 29 (Zeitreihen)
32.19 Lösungen zu Kapitel 30 (Techniken der Bildverarbeitung)
Eine der treibenden Kräfte in der weltweiten Softwareentwicklung wird wohl am besten durch die beiden populären Begriffe „Big Data“ und „Maschinelles Lernen“ beschrieben. Immer mehr Institute und Firmen betätigen sich in diesen Feldern. Für diese und auch für individuelle Personen, die in diesen Bereichen tätig werden wollen, ist eine der bedeutendsten Fragen, – wenn nicht gar die bedeutendste Frage, – was die geeignetste Programmiersprache zu diesem Zweck ist. In vielen Umfragen wird Python als beste oder auch als beliebteste Programmiersprache genannt.
Python war ursprünglich nicht für numerische Probleme ausgerichtet gewesen. Die Erfolgsstory von Python wurde erst möglich durch die Module NumPy, SciPy, Matplotlib und Pandas. Dieses Buch bietet eine umfassende Einführung in die Module NumPy, Matplotlib und Pandas, setzt aber grundlegende Kenntnisse von Python voraus. Somit ergänzt es in idealer Weise das Buch „Einführung in Python 3: Für Ein- und Umsteiger“ von Bernd Klein.
Brigitte Bauer-Schiewek, Lektorin
Zum Schreiben eines Buches benötigt es neben der nötigen Erfahrung und Kompetenz im Fachgebiet vor allem viel Zeit. Zeit außerhalb des üblichen Rahmens. Zeit, die vor allem die Familie mitzutragen hat. Deshalb gilt mein besonderer Dank meiner Frau Karola, die mich während dieser Zeit tatkräftig unterstützt hat.
Außerdem danke ich den zahlreichen Teilnehmerinnen und Teilnehmern an meinen Python-Kursen, die mir geholfen haben, meine didaktischen und fachlichen Kenntnisse kontinuierlich zu verbessern. Ebenso möchte ich den Besucherinnen und Besuchern meiner Online-Tutorials unter www.python-kurs.eu und www.python-course.eu danken, vor allem jenen, die sich mit konstruktiven Anmerkungen bei mir gemeldet haben. Mein besonderer Dank für die zweite Auflage gilt Herrn Tobias Habermann, der dafür gesorgt hat, dass alle Python-Beispiele dieser Auflage automatisch mittels „Pythontex“ getestet und ausgeführt werden, und der auch ansonsten bei der Fehlerkorrektur sehr hilfreich war.
Zuletzt danke ich auch ganz herzlich dem Hanser Verlag, der dieses Buch nun auch in der zweiten, deutlich erweiterten und farbigen Auflage ermöglicht hat. Vor allem danke ich Frau Brigitte Bauer-Schiewek, Programmplanung Computerbuch, und Frau Kristin Rothe, Lektoratsassistenz Computerbuch, für die kontinuierliche ausgezeichnete Unterstützung. LaTeX ist ein fantastisches System, um Bücher zu schreiben, aber ohne die technische Unterstützung von Herrn Stephan Korell und Frau Irene Weilhart bei besonderen LaTeX-Problemen wäre ich manchmal vielleicht verzweifelt. Herrn Jürgen Dubau danke ich fürs Korrektorat.
Bernd Klein, Singen
Sich für die richtige Programmiersprache für die tägliche Arbeit zu entscheiden, ist von hoher Bedeutung. Diese Entscheidung hängt von vielen Faktoren ab. Oft ist es so, dass man gar keine Wahl hat. Das Institut oder die Firma geben einem bereits eine Sprache vor. Vielleicht hat man auch das Glück – wie wir es sehen – und darf mit Python arbeiten. Schaut man sich die Umfrageergebnisse zu den beliebtesten Programmiersprachen an, so findet man Python immer an erster oder einer der ersten Stellen. Nach dem von TIOBE1 berechneten Ranking führt Python deutlich vor allen anderen Programmiersprachen. In der ersten Auflage dieses Buches (also 2018) stand Python noch auf Platz 3.
Sicherlich ist es toll zu wissen, dass die Programmiersprache, die man selbst nutzt, sich auch bei anderen großer Beliebtheit erfreut und von vielen oder gar den meisten im eigenen Arbeitsgebiet genutzt wird. Aber eine der wichtigsten Fragen lautet: Lassen sich mit Python eigene Projekte einfacher und besser als mit anderen Programmiersprachen lösen? Unter „einfacher und besser“ verbergen sich natürlich Begriffe wie „Entwicklungszeit“, „Laufzeit“, „Wartbarkeit“ und so weiter.
Programmiersprachen sind wie Schuhe. Es gibt nicht den Schuh für alle Fälle. Einen Schuh, den man sowohl für feierliche Anlässe, im Büro, beim Sport oder bei Wanderungen tragen kann. Python ist jedoch eine Sprache, die sich universell in den meisten Gebieten einsetzen lässt.
Man kann sich nun die berechtigte Frage stellen, worauf dieser große Erfolg von Python beruht. Zu den Hauptgründen für die Beliebtheit und die Verbreitung von Python zählt auf jeden Fall die Benutzung von Python bei „Big Data“ und „Maschinellem Lernen“. Zwei Gebiete, in denen es um die Lösungen von numerischen Problemen geht. Der überwältigende Erfolg von Python beruht unter anderem auf den Modulen NumPy, SciPy, Matplotlib und Pandas. So stellt NumPy Datenstrukturen zur Verfügung, die um den Faktor 10 bis 100 schneller sind als Implementierungen in reinem Python oder anderen numerisch ungeeigneten Programmiersprachen. Da die Module weitestgehend in C geschrieben sind, kann man sagen, dass sie so schnell wie C-Programme laufen.
1.2Aufbau des BuchesIn diesem Buch geht es um Python und seine hervorragenden Möglichkeiten zum Einsatz bei numerischen Problemen. Also damit um die Module, die für „Big Data“ und „Maschinelles Lernen“ unabdinglich sind. Auch wenn das Buch mit einer kompletten, aber sehr knapp gehaltenen Einführung in die Grundlagen von Python beginnt, sind Grundkenntnisse in Python beim Lesen dieses Buches von großem Vorteil. Grundkenntnisse, wie man sie beispielsweise in meinem Buch „Einführung in Python 3: Für Ein- und Umsteiger“2 erwerben kann. Die Schwerpunkte des vorliegenden Buches liegen auf den Modulen NumPy, Matplotlib und Pandas. Genau die Module, die einen wesentlichen Anteil zum steilen Aufstieg von Python im Ranking der beliebtesten Programmiersprachen beigetragen haben.
1.3Python-InstallationWir gehen davon aus, dass bei den Leserinnen und Lesern des Buches Python bereits installiert ist, insbesondere mit den genannten Modulen NumPy, Matplotlib und Pandas. Sollte dies nicht der Fall sein, empfehlen wir die Installation von Anaconda3, die sich äußerst einfach auf allen Betriebssystemen gestaltet. Damit ist alles installiert, was im Laufe des Buches benötigt wird.
1.4Download der BeispieleAlle im Buch verwendeten Beispiele finden Sie zum Download unter
http://www.python-kurs.eu/buecher/numerical_python/
Dort findet sich auch ein Korrekturverzeichnis.
1.5Anregungen und KritikFalls Sie glauben, eine Ungenauigkeit oder einen Fehler im Buch gefunden zu haben, können Sie auch gerne eine E-Mail direkt an den Autor schicken: [email protected].
Natürlich gilt dies auch, wenn Sie Anregungen oder Wünsche zum Buch geben wollen. Leider können wir jedoch – so gerne wir es auch tun würden – keine individuellen Hilfen zu speziellen Problemen geben.
Wir werden versuchen, Fehler und Anmerkungen in kommenden Auflagen zu berücksichtigen. Selbstverständlich aktualisieren wir damit auch unsere Informationen unter
http://www.python-kurs.eu/buecher/numerical_python/
Ich wünsche Ihnen viel Spaß und Erfolg beim Durcharbeiten dieses Buches!
Bernd Klein, April 2023
1 Bei dem TIOBE-Index des niederländischen Unternehmens TIOBE Software BV handelt es sich um ein seit 2001 publiziertes und monatlich aktualisiertes Ranking von Programmiersprachen nach ihrer Popularität. Der Index wird jeden Monat aktualisiert. Der Listenplatz einer Sprache ergibt sich aus der Häufigkeit von Treffern bei der Suche nach dem Namen dieser Programmiersprache in den wichtigsten Suchmaschinen wie Google, Bing, Yahoo! und so weiter. Dies bedeutet also nicht, dass es sich um ein Ranking der „besten“ Programmiersprachen oder der Sprachen mit den meisten Codezeilen handelt!
2 Bernd Klein, Einführung in Python 3: Für Ein- und Umsteiger, Carl Hanser Verlag GmbH & Co. KG; Auflage: 3., überarbeitete (6. November 2017)
3https://www.anaconda.com/distribution/
Der Titel unseres Buches lautet „Numerisches Python“, was eine Anspielung auf „numerisches Programmieren“ ist. Der Ausdruck „numerisches Programmieren“ – auch bekannt unter dem Begriff „wissenschaftliches Programmieren“ – ist irreführend. Man könnte es als eine Programmierung ansehen, die mit Zahlen statt mit z. B. Texten zu tun hat. Letztendlich würde dies dann für fast alle Programme gelten. Denn auch wenn ein Programmscheinbar nichts mit Zahlen zu tun hat, birgt es einen numerischen Kern. Denkt man beispielsweise an den Google-Algorithmus und an die Art, wie er einem Vorschläge zu Webseiten auf eine Suchanfrage offeriert, dann könnte man glauben, dass es sich bei dem zugrunde liegenden Algorithmus um reine Textverarbeitung handelt. Dennoch ist auch in diesem Fall der Kern bzw. der wesentliche Teil des Algorithmus ein numerisches Problem. Um seinen PageRanking-Algorithmus, d. h. die Bewertung der Webseiten, durchzuführen, lässt Google die größte jemals von Menschen erdachte Matrix berechnen.
Bild 2.1Mathematische Formeln und Kaffeekleckse
Allgemein versteht man unter numerischer Programmierung Software zur Lösung von Problemen, die oft große Datenmengen und/oder komplexe Gleichungen enthalten. Es geht also darum, mathematische Algorithmen zu implementieren, die sich auf großen Datensätzen anwenden lassen. Vor allen Dingen effizient anwenden lassen.
In unserem Buch haben wir insbesondere die numerischen Verfahren im Fokus, die im Gebiet „Data Science“ und „Maschinelles Lernen“ besonders benötigt werden. Python gehört zu den wichtigsten und am häufigsten benutzten Programmiersprachen in diesem Gebiet. Allerdings würde Python keine Rolle spielen, wenn es nicht mächtige Module zur numerischen Programmierung zur Verfügung stellte, die wir im Folgenden beschreiben werden.
2.2Zusammenhang zwischen Python, NumPy, Matplotlib, SciPy und PandasPython ist eine universelle Programmiersprache, die sich in den unterschiedlichsten Gebieten einsetzen lässt, so zum Beispiel in der Systemadministration, als Tool zur Erzeugung und zum Betrieb von dynamischen Webseiten und in der Computerlinguistik. Da Python eine universelle Programmiersprache ist, lässt sie sich natürlich auch zum Lösen numerischer Probleme einsetzen. So weit so gut, aber die Crux bei der Sache liegt in der Laufzeit und auch im Speicherverbrauch. Reines Python – also ohne den Einsatz irgendwelcher numerischer Spezialmodule – würde sich nicht eignen für Aufgaben, für die MATLAB und R geschaffen worden sind. Sobald es um die Lösung numerischer Probleme geht, ist die Leistungsfähigkeit von Algorithmen von höchster Wichtigkeit, sowohl was die Geschwindigkeit als auch den Speicherverbrauch betrifft.
Nutzen wir Python in Kombination mit seinen Modulen NumPy, SciPy, Matplotlib und Pandas, dann gehört die Sprache zu den führenden numerischen Programmiersprachen. Sie ist so effizient wie MATLAB und R, wenn nicht gar effizienter.
NumPy ist ein Modul, welches die grundlegenden Datenstrukturen zur Verfügung stellt, die auch von Matplotlib, SciPy und Pandas benutzt werden. NumPy implementiert mehrdimensionale Arrays und Matrizen. Außerdem gibt es den Nutzerinnen und Nutzern auch die wesentlichen Funktionalitäten an die Hand, mit denen sich diese Datenstrukturen erzeugen und manipulieren lassen.
SciPy baut auf NumPy auf, d. h. es benutzt die Datenstrukturen, die NumPy bereitstellt. Es erweitert die Leistungsfähigkeit von NumPy mit weiteren nützlichen Funktionalitäten wie beispielsweise Minimierung, Regression, Fourier-Transformation und viele andere.
Die von Python-Programmen – mit oder ohne Verwendung von NumPy und SciPy – erzeugten Daten möchte man häufig gerne grafisch darstellen. Für diesen Zweck wurde das Modul Matplotlib geschaffen.
Das jüngste Kind in dieser Modulfamilie ist Pandas. Pandas benutzt alle bisher genannten Module und ist auf diesen aufgebaut. Der Fokus von Pandas besteht darin, Datenstrukturen und Operationen zur Manipulation von Tabellen und Zeitreihen bereitzustellen. Der Name ist von „panel data“ abgeleitet. Pandas ist bestens geeignet, mit Tabellendaten zu arbeiten, wie sie beispielsweise von Excel erzeugt werden.
2.3Python, eine Alternative zu MATLABPython entwickelt sich mehr und mehr zur Hauptprogrammiersprache von Data-Scientists. R und MATLAB, die Hauptkonkurrenten von Python, verlieren aus verschiedenen Gründen mehr und mehr an Bedeutung.
Bei der Entwicklung von R hatte man Statistiker und Data-Scientists im Visier, wollte aber keinesfalls eine Sprache entwickeln, die sich generell einsetzen lässt. Dies gilt ebenso für MATLAB. Python hingegen wurde von Anfang an als universelle Programmiersprache ausgerichtet. Zusätzliche eignet sich Python in Kombination mit den Modulen NumPy, SciPy, Matplotlib und Pandas bestens, um R oder MATLAB zu ersetzen.
Bild 2.2Zusammenhang zu MATLAB
Einer der wesentlichen Nachteile von MATLAB gegenüber Python sind wohl die Kosten. Python mit all seinen Modulen ist kostenlos, wohingegen MATLAB recht teuer ist und je nach eingesetzter Toolbox extrem teuer sein kann. Bei Python handelt es sich aber nicht nur um kostenlose, sondern auch um „freie“ Software, d. h. ihr Einsatz ist nicht durch prohibitive Lizenzmodelle eingeschränkt.