Numerisches Python - Bernd Klein - E-Book

Numerisches Python E-Book

Bernd Klein

0,0

Beschreibung

- 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:

Android
iOS
von Legimi
zertifizierten E-Readern

Seitenzahl: 381

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



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

Inhalt

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)

Vorwort

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

Danksagung

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

1Einleitung
1.1Die richtige Wahl

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 Buches

In 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-Installation

Wir 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 Beispiele

Alle 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 Kritik

Falls 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/

2Numerisches Programmieren mit Python
2.1Begriffsbestimmung

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 Pandas

Python 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 MATLAB

Python 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.

TEIL INumPy
3NumPy – Einführung
4Arrays in NumPy erzeugen