- Nutze alle Lernfunktionen, wie Tests, Quizze und Umfragen.
- Schreibe Beiträge und tausche dich in unseren Foren aus.
- In einigen Lernangeboten bestätigen wir dir die Teilnahme.
AI.Lab
Kursthemen
-
-
Statistik
Auch für die Statistik liefert NumPy bereits einige hilfreiche Funktionen, sodass wir diese nicht für jedes Programm selbst schreiben müssen. Die ersten haben wir bereits im letzten Kapitel kurz vorgestellt.
-
Random
Um die Funktionen zur Statistik testen zu können, beschäftigen wir uns vorerst mit der zufälligen Erstellung von Daten. Die für uns wichtigsten Funktionen sind die folgenden:
np.random.normal()
: Generiert normalverteilte (Gauß'sche Verteilung) Zufallszahlen. Die Parameter sind derMittelwert
, dieStandartabweichung
und dieGröße
des Arrays.
np.random.uniform()
: Generiert gleich verteilte (uniform) Zufallszahlen in einem Intervall. Die Parameter sind deruntere Rand
(inklusiv), derobere Rand
(exklusiv) und dieGröße
des Arrays.
np.random.choice()
: Generiert Zufallszahlen aus einer gegebenen Wahrscheinlichkeitsverteilung. Die Parameter sind dasArray der Elemente
, dieGröße
des ausgegebenen Arrays, einBoolean
der entscheidet, ob mit oder ohne zurücklegen gezogen wird und dieWahrscheinlichkeit
der einzelnen Elemente.Es folgen ein paar Beispiele:
-
import numpy as np # Normalverteilung normal = np.random.normal(10, 5, 5) #Erstellt ein Array mit Mittelwert 10, Standarabweichung 5 und 5 Werten print("Normalverteilung: ", normal) # Uniformverteilung uniform = np.random.uniform(0, 10, 5) print("\nUniformverteilung: ", uniform) # Gegebene Wahrscheinlichkeiten given = np.random.choice(np.array((1,2,3,4)), 10, True, np.array((0.1, 0.2, 0.3, 0.4))) # ACHTUNG: Summe der Wahrscheinlichkeiten muss 1 ergeben print("\nGegebene Wahrscheinlichkeiten: ", given) for i in range(1,5): print("Anzahl ",i,": ", np.count_nonzero(given==i))
-
Summe
Mit der
sum()
Funktion lässt sich die Summe über alle Elemente eines Arrays bilden. Dazu bekommt die Funktion das Array übergeben, über welches die Summe gebildet werden soll. -
import numpy as np arr = np.random.randint(1,10,(9)) print(arr,"\nSumme des Arrays:", np.sum(arr),"\n") # Summe aller Elemente des Arrays (1D) arr2 = np.random.randint(1,10,(3,3)) print(arr2,"\nSumme des Arrays:", np.sum(arr2)) # Summe aller Elemente des Arrays (2D)
-
Wenn statt der Summe über das gesamte Array nur die Summe über eine Dimension berechnet werden soll, kann der Funktion der zusätzliche Parameter
axis=x
übergeben werden. Dasx
bestimmt dann die Dimension, über welche die Summation durchgeführt werden soll.Bei der Summation über die
1. Dimension
werden für den Eintrag an der Stelle[x][y]
die Elemente[0][x][y]
,[1][x][y]
und[2][x][y]
aufaddiert. Da die Summe entlang derZ-Achse
gebildet wurde, hat diese nun die Länge eins und das Array kann als Zweidimensionales Array dargestellt werden. -
arr = np.reshape(np.array(list(range(27))),(3,3,3)) print("Array: \n") print(arr,"\n") print("Summation über die 1. Dimension (Z-Achse) ([0][0] = 0+9+18):\n") print(np.sum(arr, axis=0),"\n") print("Summation über die 2. Dimension (Y-Achse) ([0][0] = 0+3+6):\n") print(np.sum(arr, axis=1),"\n") print("Summation über die 3. Dimension (X-Achse) ([0][0] = 0+1+2):\n") print(np.sum(arr, axis=2),"\n")
-
Sortierung
Soll ein Array sortiert werden, kann dazu die
np.sort()
Funktion verwendet werden. Diese gibt das eine sortierte Kopie des übergebenen Arrays zurück. Alternativ kann auch.sort()
verwendet werden. Dabei wird das ursprüngliche Array sortiert. -
arr = np.random.randint(1,10,(5)) print(arr, "\n", np.sort(arr)) # Alternativ: print("\n",arr) arr.sort() print(arr)
-
Übung (Mittelwert)
Da wir als Nächstes den Mittelwert kennenlernen werden, wollen wir nun eine Funktion schreiben, die uns den Mittelwert eines übergebenen Arrays berechnet und zurückgibt. Dabei soll immer der Mittelwert des gesamten Arrays zurückgeben werden (nicht entlang einer Achse).
Der Mittelwert berechnet sich aus der Summe aller Werte des Arrays, geteilt durch die Anzahl der Werte im Array:
$\bar{x} = \frac{\sum_{i=0}^{n-1}x_i}{n}$ -
Mittelwert und Median
Damit wir die Funktion nicht selbst implementieren müssen, diese auf mehrdimensionale Arrays und entlang verschiedener Achsen (wie bei der Summenfunktion) anwenden können, lernen wir nun die in NumPy integrierten Funktionen
np.mean()
undnp.median()
kennen. Du kannst damit deine Ergebnisse aus den vorherigen Aufgaben vergleichen: -
arr = np.random.uniform(1,100,(np.random.randint(5,11))) print("Numpy Mittelwert =", np.mean(arr), "\ndein Mittelwert = ", meanfunc(arr), "\nNumpy Median =", np.median(arr), "\ndein Median = ", medianfunc(arr))
-
Standardabweichung
Auch für die Standardabweichung gibt es eine eigene Numpy Funktion. Diese kann über
np.std()
aufgerufen werden. Die Formel zur Berechnung lautet: $\sigma = \sqrt{\frac{\sum_{i=0}^{n-1}(x_i - \bar{x})^2}{n}} $ -
mean = 12 std = 5 size = 10000000 arr = np.random.normal(mean, std, size) print("Standardabweichung: ", np.std(arr),"\nMittelwert: ", np.mean(arr))
-
Unique
Die
unique()
Funktion wird dazu verwendet eindeutige Werte aus einem Array zu extrahieren. Im Ergebnisarray stehen dann alle Werte des Ursprungsarrays, aber nur genau ein Mal. Zudem wird das Array sortiert.
Wir betrachten das folgende Beispiel: -
# Beispiel-Daten arr = np.array([7, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4]) # Eindeutige Werte extrahieren unique_values = np.unique(arr) print("Eindeutige Werte im Array:", unique_values)
-
Histogramme
In einem Histogramm lässt sich die Häufigkeitsverteilung der Daten aus einem Array darstellen. Die Daten werden dabei in diskrete Intervalle (Bins) aufgeteilt. In den Bins wird die Häufigkeit der Daten gezählt, die in den jeweiligen Bin fallen. Das Ergebnis ist ein Array mit den Häufigkeiten der Datenpunkte und den Begrenzungen der einzelnen Bins.
Die Funktionnp.histogram()
erwartet Array mit den Daten als Argument. Zusätzlich kann die Anzahl der Bins angegeben werden. Wird sie nicht angegeben, werden diese automatisch festgelegt. -
# Beispiel-Daten data = np.random.normal(0,1,1000) # Histogramm erstellen hist, bins = np.histogram(data,10) print(hist,"\n", bins) # Histogramm plotten plt.hist(data, bins) plt.show()
-
Alternativ können die Bins auch selbst festgelegt werden. Dazu wird der
np.histogram()
Funktion erst das Array mit den Daten und dann ein Array mit den jeweiligen Grenzwerten der Arrays übergeben. Diese können dann auch unterschiedlich groß sein: -
noten = np.random.randint(0,16,10) print("Noten", noten) # Erstellung eines Histogramms mit verschieden großen Bins: 0-5, 5-16 (Bestanden, Nicht Bestanden) hist, bins = np.histogram(noten, np.array((0,5,16))) print("Bins: ", bins) plt.hist(noten, bins) plt.show()
-