0%

Die Standardbibliothek gibt es bereits · Übung

Mit statistics zusammenfassen

Die Übersicht weiß jetzt, wann Aktivitäten stattgefunden haben und wie viele zu jeder Kategorie gehören. Ihre dritte Aufgabe ist, die Dauer der Aktivitäten zu beschreiben.

„Durchschnitt“ ist für die Wahl einer API zu ungenau. Wir wollen zwei benannte Kennzahlen:

  • Der arithmetische Mittelwert addiert die Werte und teilt durch ihre Anzahl;

  • der Median ist nach dem Sortieren der mittlere Wert oder bei gerader Anzahl der Mittelwert der beiden mittleren Werte.

Das Modul statistics bietet beide Definitionen:

Try it

Die lange Aktivität von 80 Minuten zieht den Mittelwert nach oben. Der Median beantwortet eine andere Frage und bleibt zwischen den beiden mittleren Aktivitäten. Keines der Ergebnisse ist allgemein „der wahre Durchschnitt“. Der Bericht nennt beide, damit seine Leser den Unterschied sehen können.

Den Fall ohne Daten an der Projektgrenze entscheiden

Laut Dokumentation lösen mean([]) und median([]) einen StatisticsError aus. Das ist eine sinnvolle Vereinbarung für eine allgemeine Bibliothek: Keine universelle Zahl stellt die Mitte nicht vorhandener Daten dar.

In unserem Projekt gibt summarize_minutes([]) None zurück. Damit wird „Es gibt keine Zusammenfassung“ zu einem ausdrücklichen Wert, den build_briefing behandeln kann. Beachte die Aufgabenteilung:

  • statistics ist für die mathematischen Operationen zuständig;

  • unsere Funktion entscheidet, was eine leere Aktivitätsliste in diesem Projekt bedeutet.

Fange nicht jede Ausnahme um die Bibliotheksaufrufe ab. Ein Datensatz ohne Schlüssel minutes oder mit ungeeigneten Daten ist ein anderer Fehler. Ihn zu verbergen würde die spätere Fehlerbehandlung erschweren.

Warum gibt das Projekt bei einer leeren Datensatzliste None zurück, bevor es mean oder median aufruft?

Ergänze die Zusammenfassungsfunktion in derselben Datei. Probiere sie sowohl mit einer ungeraden als auch mit einer geraden Anzahl von Aktivitäten aus, da der Median jeweils anders definiert ist. Probiere außerdem eine leere Liste aus, damit du dein None zurückbekommst.

Aufgabe

Implementiere summarize_minutes(records) in activity_report.py.

  • Gib sofort None zurück, wenn records leer ist.

  • Sammle andernfalls den Wert minutes jedes Datensatzes.

  • Gib ein Dictionary mit genau den Schlüsseln mean und median zurück.

  • Berechne diese Werte mit statistics.mean und statistics.median.

Behalte die von den Bibliotheksfunktionen zurückgegebenen Werte bei. Runde sie nicht und wandle sie nicht in Anzeigetext um; die Formatierung gehört zur fertigen Übersicht.