Mathematik für Biologiestudierende¶
Wintersemester 2025/26
- Oktober 2025
© 2025 Prof. Dr. Rüdiger W. Braun
Wiederholung (interaktiv)¶
Gehen Sie auf die Website
und geben Sie folgende Zugangsnummer ein
- 670719
oder scannen Sie den QR-Code

Themen heute¶
- Installation
- Exponentialfunktion mit Python
- Punktgrafiken
- Liniengrafiken
- Tabellen
Statistik mit Python¶
Installationshinweise auf https://www.math.uni-duesseldorf.de/~internet/bio2526/software.html
123456 * 987654
121931812224
88/12
7.333333333333333
- Addition
+ - Subtraktion
- - Multiplikation
* - Division
/ - Potenz
**
2**10
1024
import numpy as np
- Es gibt mindestens fünf Implementierungen von $\exp$ in Python
- Daher müssen die benötigten Bibiotheken explizit geladen werden
np.set_printoptions(legacy='1.21')
np.exp(2)
7.38905609893065
Der Logarithmus wird aufgerufen als
np.log(7.389056)
1.9999999866111924
np.log(7.38905609893065)
2.0
Die Art der ausgewählten Zelle kann geändert werden
- Markdown: Text
- Code: Programmcode
jeweils Ausführung durch <Umschalt>-<Eingabe> oder "$\blacktriangleright$ Run" aus der Werkzeugleiste
- in dieser Vorlesung benutzen wir Python als "erweiterten Taschenrechner"
- Programmierung ist nicht unser Thema
Plots¶
Wir schauen uns die Daten aus dem Beispiel "Bakterien" an
np.arange(8)
array([0, 1, 2, 3, 4, 5, 6, 7])
np.arange: Bereich (engl. range) von Zahlen- Python beginnt Zählungen bei 0
- hat so viele Elemente, wie angegeben (also 8)
np.array: Liste von beliebigen Elementen
zeit = np.arange(8)
- die Liste wird unter dem Namen
zeitgespeichert zeitbezeichnet man als Variable
- der Variablen
zeitwird die Listenp.arange(8)zugewiesen
- der Inhalt der Variablen wird nicht automatisch ausgegeben
- das müssen wir anfordern
zeit
array([0, 1, 2, 3, 4, 5, 6, 7])
Die Konzentrationen aus dem Beispiel von letztem Mittwoch
konzentration = np.array([10000, 8500, 7225, 6141, 5220, 4437, 3771, 3206])
konzentration
array([10000, 8500, 7225, 6141, 5220, 4437, 3771, 3206])
seaborn¶
Wir benutzen für Grafik die Bibliothek seaborn
import seaborn as sns
sns.scatterplot(x=zeit, y=konzentration)
<Axes: >
scatterplot: Grafik aus einzelnen Punktenlineplot: durchgezogene Linie
Wir wollen die Achsen beschriften
Dazu geben wir als erstes dem Bild den Namen ax (von axis)
ax = sns.scatterplot(x=zeit, y=konzentration)
ax.set_xlabel("Zeit")
ax.set_ylabel("Konzentration");
- Das Semikolon am Ende der letzten Zeile bedeutet, dass die Zelle keine Ausgaben erzeugt
- Die Zelle auch ohne das Semikolon nicht die Grafik zeigen
- Die Ausgabe der Grafik muss explizit angefordert werden
ax.figure
Jetzt malen wir noch die Kurve $10000 \cdot e^{-0.1625\cdot x}$ dazu.
- Was ist eine Kurve in Python?
- Wir könnten die Kurve als
scatterplotaus sehr vielen Punkten machen - Zuerst machen wir die Punkte
x = np.linspace(0, 7, 100)
100 Zahlen zwischen 0 und 7 (äquidistant)
y = 10000*np.exp(-0.1625*x)
y ist jetzt eine Liste mit den 100 zugehörigen Funktionswerten
sns.scatterplot(x=x, y=y);
Wir wollen aber keine einzelnen Punkte
sns.lineplot(x=x, y=y);
Das malen wir jetzt in die andere Achse hinein
ax2 = sns.lineplot(x=x, y=y, ax=ax)
ax2.figure
Es gibt eine Unzahl von statistischen Zeichenfunktionen. Die wichtigsten werde ich nach und nach vorstellen.
sns.set_theme()
- Damit schalten wir einen grauen Hintergrund mit weißem Gitter ein
sns.set_context('talk')
- Nur für die Vorlesung: dickere Linien und größerer Zeichensatz
Zur Wiederholung eine Grafik zu den Absorbationstiefen¶
tiefe = np.linspace(0, 24, 50)
blau = np.exp(-0.03289*tiefe)
gruen = np.exp(-.1151*tiefe)
rot = np.exp(-.3466*tiefe)
sns.lineplot(x=tiefe, y=blau, color='blue')
sns.lineplot(x=tiefe, y=gruen, color='green')
ax = sns.lineplot(x=tiefe, y=rot, color='red')
ax.set_xlabel('Tiefe [m]')
ax.set_ylabel('Anteil');
Datensätze¶
Tabellen¶
Konstruktion einer Tabelle in Python
- Zu Fuß, beispielsweise mit
np.arraywie im Beispiel zum Scatterplot - Einlesen einer Beispieldatei aus
seaborn - Einlesen einer Datei aus einem Tabellenkalkulationsprogramm
Einlesen einer Beispieldatei aus seaborn¶
df = sns.load_dataset("penguins")
df steht für "Dataframe"
df
| species | island | bill_length_mm | bill_depth_mm | flipper_length_mm | body_mass_g | sex | |
|---|---|---|---|---|---|---|---|
| 0 | Adelie | Torgersen | 39.1 | 18.7 | 181.0 | 3750.0 | Male |
| 1 | Adelie | Torgersen | 39.5 | 17.4 | 186.0 | 3800.0 | Female |
| 2 | Adelie | Torgersen | 40.3 | 18.0 | 195.0 | 3250.0 | Female |
| 3 | Adelie | Torgersen | NaN | NaN | NaN | NaN | NaN |
| 4 | Adelie | Torgersen | 36.7 | 19.3 | 193.0 | 3450.0 | Female |
| ... | ... | ... | ... | ... | ... | ... | ... |
| 339 | Gentoo | Biscoe | NaN | NaN | NaN | NaN | NaN |
| 340 | Gentoo | Biscoe | 46.8 | 14.3 | 215.0 | 4850.0 | Female |
| 341 | Gentoo | Biscoe | 50.4 | 15.7 | 222.0 | 5750.0 | Male |
| 342 | Gentoo | Biscoe | 45.2 | 14.8 | 212.0 | 5200.0 | Female |
| 343 | Gentoo | Biscoe | 49.9 | 16.1 | 213.0 | 5400.0 | Male |
344 rows × 7 columns
- Eselspinguine heißen englisch "Gentoo penguins"
- "bill" ist der Schnabel
- "flipper" der Flügel
NaNheißt "not a number", d.h. es liegen keine Daten vor
seabornenthält einige Dutzend Beispieldatensätze, um die verschiedenen Grafiken zu demonstrieren
Einlesen einer Datei mit gemessenen Daten¶
import pandas as pd
pandas ist die Bibliothek zur Tabellenbearbeitung
df = pd.read_csv('https://www.math.uni-duesseldorf.de/~braun/bio2526/barsche.csv')
df
| Nr | Art | Länge | |
|---|---|---|---|
| 0 | 1 | gestreift | 10.7 |
| 1 | 2 | gestreift | 10.0 |
| 2 | 3 | gestreift | 9.8 |
| 3 | 4 | gestreift | 10.3 |
| 4 | 5 | gestreift | 10.3 |
| ... | ... | ... | ... |
| 115 | 116 | blau | 12.1 |
| 116 | 117 | blau | 12.5 |
| 117 | 118 | blau | 12.0 |
| 118 | 119 | blau | 12.1 |
| 119 | 120 | blau | 12.0 |
120 rows × 3 columns
pd.read_csv()liest eine Table imcsv-Format- alle Tabellenkalkulationsprogramme können im
csv-Format abspeichern
Nrist die laufende Nummer des Fisches aus der DateiArtseine ArtLängeseine Länge im mm
- Die vorderste Spalte ist ein von Pandas hinzugefügter Index
sns.scatterplot(data=df, x='Nr', y='Länge');