Wie finde ich Mittelwert, Median und Modus in Python?

Grundlagen der Statistik in Python: Mittelwert, Median und Modus

Mittelwert, Median und Modus sind essenzielle Konzepte in der Statistik. In Python lassen sie sich unkompliziert berechnen, sowohl mit als auch ohne den Einsatz externer Bibliotheken. Diese drei Kennzahlen sind zentrale Maße der zentralen Tendenz. Sie geben uns Aufschluss über die „typischen“ oder „durchschnittlichen“ Werte eines Datensatzes. Besonders für Einsteiger in die Datenwissenschaft ist dieses Tutorial ideal.

Nach Abschluss dieses Tutorials werden Sie:

  • Das Konzept von Mittelwert, Median und Modus verstehen.
  • Eigene Funktionen zur Berechnung von Mittelwert, Median und Modus in Python entwickeln können.
  • Das Statistikmodul von Python nutzen können, um diese Berechnungen schnell und effizient durchzuführen.

Falls Sie eine herunterladbare Version der hier gezeigten Übungen bevorzugen, steht Ihnen ein GitHub-Repository zur Verfügung.

Lassen Sie uns nun die verschiedenen Methoden zur Berechnung von Mittelwert, Median und Modus genauer betrachten.

Berechnung des Mittelwerts in Python

Der Mittelwert, auch arithmetisches Mittel genannt, ist das am häufigsten verwendete Maß für die zentrale Tendenz. Die zentrale Tendenz beschreibt einen typischen Wert eines Datensatzes. Ein Datensatz ist eine Sammlung von Daten, und in Python kann ein Datensatz in Form verschiedener Datenstrukturen vorliegen:

  • Listen, Tupel und Mengen: Sammlungen von Objekten.
  • Strings: Sammlungen von Zeichen.
  • Dictionaries: Sammlungen von Schlüssel-Wert-Paaren.

Es gibt zwar noch andere Datenstrukturen in Python, wir konzentrieren uns hier jedoch auf die eingebauten.

Der Mittelwert wird berechnet, indem man alle Werte eines Datensatzes addiert und die Summe durch die Anzahl der Werte dividiert. Zum Beispiel, wenn wir folgende Zahlenliste haben:

[1, 2, 3, 4, 5, 6]

Der Mittelwert wäre 3.5, da die Summe der Liste 21 und ihre Länge 6 beträgt. Die Division von 21 durch 6 ergibt 3.5. Dies lässt sich wie folgt darstellen:

(1 + 2 + 3 + 4 + 5 + 6) / 6 = 3.5

In diesem Tutorial verwenden wir die Altersdaten eines Basketballteams als Beispieldaten.

Eigene Mittelwertfunktion erstellen

Beginnen wir mit der Berechnung des Durchschnittsalters der Spieler eines Basketballteams namens „Pythonic Machines“.

pythonic_machine_ages = [19, 22, 34, 26, 32, 30, 24, 24]

def mean(dataset):
    return sum(dataset) / len(dataset)

print(mean(pythonic_machine_ages))

Eine Erklärung des Codes:

  • „pythonic_machine_ages“ ist eine Liste, die das Alter der Basketballspieler enthält.
  • Wir definieren eine Funktion `mean()`, die die Summe der Werte im übergebenen Datensatz durch seine Länge dividiert und das Ergebnis zurückgibt.
    • Die Funktion `sum()` gibt die Gesamtsumme der Werte einer iterierbaren Struktur (in diesem Fall eine Liste) zurück. Wenn wir das Dataset übergeben, erhalten wir 211.
    • Die Funktion `len()` gibt die Länge einer iterierbaren Struktur zurück. In diesem Fall erhalten wir 8.
  • Wir übergeben die Altersliste des Basketballteams an die Funktion `mean()` und geben das Resultat aus.

Die Ausgabe lautet:

26.375
# Weil 211 / 8 = 26.375

Dies ist das Durchschnittsalter der Spieler des Basketballteams. Es ist wichtig zu beachten, dass dieser Wert nicht zwingend im Datensatz selbst vorhanden sein muss, er beschreibt aber das typische Alter.

Verwendung von `mean()` aus dem Python-Statistikmodul

Das Berechnen von Maßen der zentralen Tendenz ist eine Routineaufgabe für viele Entwickler. Das Python-Statistikmodul bietet daher diverse Funktionen für diese Berechnungen sowie weitere grundlegende statistische Funktionen an.

Da es Teil der Python-Standardbibliothek ist, ist keine Installation über PIP erforderlich.

Die Verwendung sieht wie folgt aus:

from statistics import mean

pythonic_machine_ages = [19, 22, 34, 26, 32, 30, 24, 24]

print(mean(pythonic_machine_ages))

Im obigen Code importieren wir die Funktion `mean()` aus dem Statistikmodul und übergeben den Datensatz als Argument. Das Ergebnis ist dasselbe wie bei unserer zuvor selbst definierten Funktion:

26.375

Nachdem das Konzept des Mittelwerts verstanden ist, gehen wir zum Median über.

Den Median in Python finden

Der Median ist der mittlere Wert eines sortierten Datensatzes. Er dient ebenfalls dazu, einen „typischen“ Wert einer Population zu bestimmen. In der Programmierung können wir den Median als den Wert definieren, der eine sortierte Sequenz in zwei Hälften teilt.

Um den Median zu berechnen, muss der Datensatz zunächst sortiert werden. Dies kann mithilfe von Sortieralgorithmen oder der eingebauten Funktion `sorted()` erfolgen. Im zweiten Schritt ist festzustellen, ob die Länge des Datensatzes gerade oder ungerade ist. Je nachdem, wird die Berechnung wie folgt durchgeführt:

  • Ungerade: Der Median ist der mittlere Wert des Datensatzes.
  • Gerade: Der Median ist der Durchschnitt der beiden mittleren Werte.

Wir fahren mit unserem Basketballteam-Datensatz fort und betrachten die Körpergrößen der Spieler in Zentimetern:

[181, 187, 196, 196, 198,  203, 207, 211, 215]
# Da der Datensatz ungerade ist, wählen wir den mittleren Wert
median = 198

Wie zu sehen, können wir bei ungerader Länge den mittleren Wert als Median nehmen. Was aber passiert, wenn ein Spieler aufhört?

Dann müssten wir den Median aus den beiden mittleren Werten berechnen:

[181, 187, 196, 198, 203, 207, 211, 215] 
# Wir wählen die beiden mittleren Werte und dividieren durch 2
median = (198 + 203) / 2
median = 200.5

Eigene Medianfunktion erstellen

Implementieren wir das obige Konzept in eine Python-Funktion.

Wir benötigen drei Schritte, um den Median eines Datensatzes zu finden:

  • Sortieren des Datensatzes mit `sorted()`.
  • Bestimmung, ob die Länge des Datensatzes gerade oder ungerade ist, mithilfe des Modulo-Operators (%).
  • Rückgabe des Medians basierend auf der Länge des Datensatzes:
    • Ungerade: Rückgabe des mittleren Wertes.
    • Gerade: Rückgabe des Durchschnitts der beiden mittleren Werte.

Die entsprechende Funktion sieht wie folgt aus:

pythonic_machines_heights = [181, 187, 196, 196, 198, 203, 207, 211, 215]
after_retirement = [181, 187, 196, 198, 203, 207, 211, 215]

def median(dataset):
    data = sorted(dataset)
    index = len(data) // 2
    
    # Wenn der Datensatz ungerade ist
    if len(dataset) % 2 != 0:
        return data[index]
    
    # Wenn der Datensatz gerade ist
    return (data[index - 1] + data[index]) / 2

Ausgabe der Ergebnisse für unsere Datensätze:

print(median(pythonic_machines_heights))
print(median(after_retirement))

Ausgabe:

198
200.5

Beachten Sie, dass wir eine Variable `data` verwenden, die auf die sortierte Liste zeigt. Obwohl die Listen im Beispiel bereits sortiert sind, wollen wir eine wiederverwendbare Funktion erstellen, die den Datensatz bei jedem Aufruf sortiert. Die Variable `index` speichert den mittleren Index (oder den oberen mittleren Index bei gerader Anzahl) mit Hilfe der ganzzahligen Division. Zum Beispiel, bei der Liste `pythonic_machine_heights` wäre dieser Wert 4. Die Indexierung in Python beginnt bei Null, weshalb wir den mittleren Index durch die ganzzahlige Division erhalten.

Wir überprüfen, ob die Länge des Datensatzes ungerade ist, indem wir das Ergebnis der Modulo-Operation mit einem Wert ungleich Null vergleichen. Wenn die Bedingung wahr ist, geben wir das mittlere Element zurück, wie im Beispiel mit der Liste `pythonic_machine_heights`:

>>> pythonic_machine_heights[4]
# 198

Bei gerader Anzahl geben wir die Summe der beiden mittleren Werte dividiert durch 2 zurück. Hierbei liefert `data[index – 1]` den unteren Mittelwert und `data[index]` den oberen Mittelwert des Datensatzes.

Verwendung von `median()` aus dem Python-Statistikmodul

Dieser Weg ist wesentlich einfacher, da wir eine bereits vorhandene Funktion des Statistikmoduls verwenden.

Wenn eine Funktion bereits vorhanden ist, sollte diese im Sinne des DRY-Prinzips („Don’t repeat yourself“) genutzt werden, um Code-Redundanz zu vermeiden.

Der Median der vorherigen Datensätze kann wie folgt berechnet werden:

from statistics import median

pythonic_machines_heights = [181, 187, 196, 196, 198, 203, 207, 211, 215]
after_retirement = [181, 187, 196, 198, 203, 207, 211, 215]

print(median(pythonic_machines_heights))
print(median(after_retirement))

Ausgabe:

198
200.5

Berechnung des Modus in Python

Der Modus ist der häufigste Wert in einem Datensatz. Man kann ihn sich als die „beliebteste“ Gruppe einer Schule vorstellen, die für alle Schüler als Standard dienen kann. Ein Beispiel für den Modus wären die täglichen Verkaufszahlen eines Technologiegeschäfts. Der Modus wäre das am häufigsten verkaufte Produkt eines bestimmten Tages.

['Laptop', 'Desktop', 'Smartphone', 'Laptop', 'Laptop', 'Kopfhörer']

Der Modus dieses Datensatzes ist „Laptop“, da er der am häufigsten vorkommende Wert in der Liste ist.

Das Besondere am Modus ist, dass der Datensatz nicht numerisch sein muss. Es können beispielsweise auch Strings verarbeitet werden.

Analysieren wir die Verkäufe eines anderen Tages:

['Maus', 'Kamera', 'Kopfhörer', 'USB', 'Kopfhörer', 'Maus']

Dieser Datensatz hat zwei Modi: „Maus“ und „Kopfhörer“, da beide eine Häufigkeit von zwei haben. Dies bezeichnet man als multimodalen Datensatz.

Was passiert, wenn wir in einem Datensatz wie dem folgenden keinen Modus finden können?

['USB', 'Kamera', 'Smartphone', 'Laptop', 'TV']

Dies wird als eine Gleichverteilung bezeichnet, was bedeutet, dass es in diesem Datensatz keinen Modus gibt.

Nachdem das Konzept des Modus verständlich ist, gehen wir zur Berechnung in Python über.

Eigene Modusfunktion erstellen

Die Häufigkeit eines Wertes lässt sich als Schlüssel-Wert-Paar darstellen, also in Form eines Python-Dictionaries.

Um die Basketball-Analogie beizubehalten, verwenden wir zwei Datensätze als Arbeitsgrundlage: die erzielten Punkte pro Spiel und das Sponsoring der Spieler durch verschiedene Sneaker-Hersteller.

Um den Modus zu finden, müssen wir zuerst ein Häufigkeits-Dictionary mit jedem im Datensatz vorhandenen Wert erstellen, dann die maximale Häufigkeit bestimmen und alle Elemente mit dieser Häufigkeit zurückgeben.

Dies wird wie folgt in Code umgesetzt:

points_per_game = [3, 15, 23, 42, 30, 10, 10, 12]
sponsorship = ['nike', 'adidas', 'nike', 'jordan',
               'jordan', 'rebook', 'under-armour', 'adidas']

def mode(dataset):
    frequency = {}

    for value in dataset:
        frequency[value] = frequency.get(value, 0) + 1

    most_frequent = max(frequency.values())

    modes = [key for key, value in frequency.items()
                      if value == most_frequent]

    return modes

Wir überprüfen das Ergebnis, indem wir die beiden Listen als Argumente übergeben:

print(mode(points_per_game))
print(mode(sponsorship))

Ausgabe:

[10]
['nike', 'adidas', 'jordan']

Die erste print-Anweisung liefert uns einen einzelnen Modus, während die zweite mehrere Modi zurückgibt.

Erläuterung des Codes:

  • Wir deklarieren ein Häufigkeits-Dictionary.
  • Wir iterieren durch den Datensatz, um ein Histogramm zu erstellen (der statistische Begriff für eine Sammlung von Zählern (oder Häufigkeiten)).
    • Wenn der Schlüssel im Dictionary gefunden wird, wird der Wert um eins erhöht.
    • Wenn der Schlüssel nicht gefunden wird, wird ein neues Schlüssel-Wert-Paar mit dem Wert eins erstellt.
  • Die Variable `most_frequent` speichert den größten Wert (nicht den Schlüssel) im Häufigkeits-Dictionary.
  • Wir geben die Variable `modes` zurück, die alle Schlüssel im Häufigkeits-Dictionary enthält, deren Häufigkeit am höchsten ist.

Beachten Sie, wie wichtig die Wahl der Variablennamen für die Lesbarkeit des Codes ist.

Verwendung von `mode()` und `multimode()` aus dem Python-Statistikmodul

Das Statistikmodul bietet uns auch hier eine einfache Möglichkeit, grundlegende statistische Operationen durchzuführen. Wir können zwei Funktionen nutzen: `mode()` und `multimode()`.

from statistics import mode, multimode

points_per_game = [3, 15, 23, 42, 30, 10, 10, 12]
sponsorship = ['nike', 'adidas', 'nike', 'jordan',
               'jordan', 'rebook', 'under-armour', 'adidas']

Der obige Code importiert beide Funktionen und definiert die Datensätze, mit denen wir gearbeitet haben. Die Funktion `mode()` gibt den ersten Modus zurück, auf den sie stößt, während `multimode()` eine Liste mit allen häufigsten Werten im Datensatz liefert. Die von uns selbst definierte Funktion ist demnach eine `multimode()`-Funktion.

print(mode(points_per_game))
print(mode(sponsorship))

Ausgabe:

10
nike

Hinweis: In Python 3.8 oder neuer gibt die Funktion `mode()` den ersten gefundenen Modus zurück. In älteren Versionen erhalten Sie eine `StatisticsError`.

Verwendung der Funktion `multimode()`:

print(multimode(points_per_game))
print(multimode(sponsorship))

Ausgabe:

[10]
['nike', 'adidas', 'jordan']

Zusammenfassung

Herzlichen Glückwunsch! Wenn Sie bis hierhin gefolgt sind, haben Sie gelernt, wie man Mittelwert, Median und Modus berechnet, die grundlegenden Maße der zentralen Tendenz. Obwohl es möglich ist, eigene Funktionen zur Berechnung von Mittelwert, Median und Modus zu definieren, wird empfohlen, das Statistikmodul zu verwenden, da es Teil der Standardbibliothek ist und keine zusätzliche Installation erfordert.

Als nächstes könnten Sie sich mit einer Einführung in die Datenanalyse in Python befassen.