Zum Inhalt
wannacode

Welches Diagramm für welche Frage

Kurz gesagt: Die Art des Diagramms richtet sich nach der Frage: sortierte Balken für einen Vergleich, eine Linie für die Veränderung über die Zeit und wieder Balken, kein Kreisdiagramm, für einen Anteil am Ganzen.

Problem

Vier Fragen, ein Datensatz

Der Chef hat vier Fragen zum Jahr:

  1. Welche Produkte bringen das meiste Geld?
  2. Wie verläuft der Umsatz Tag für Tag?
  3. Welchen Teil des Umsatzes macht jede Kategorie aus?
  4. Was ist eine übliche Bestellung?

Die Daten sind dieselben: die Bestellungen und ihre Zeilen. Das Diagramm ist aber für jede Frage ein anderes. Es gibt kein Diagramm, das alle beantwortet. Es gibt ein Diagramm, das eine Frage gut beantwortet, und viele, die sie schlecht beantworten.

Die Idee

Erst die Frage, dann das Diagramm

Fang nicht bei „Ich will ein Kreisdiagramm“ oder „Ich will eine Linie“ an. Fang bei der Frage an und sieh, von welcher Art sie ist:

  • Vergleich („was ist mehr“): nach Wert sortierte Balken; bei langen Namen waagerecht (ax.barh);
  • Veränderung über die Zeit („wie läuft es“): eine Linie;
  • Anteil an einem Ganzen („welcher Teil“): wieder sortierte Balken, in Prozent; ein Kreisdiagramm ist schwerer zu lesen;
  • Verteilung („was ist üblich, wie stark streut es“): ein Histogramm, in der nächsten Lektion;
  • Zusammenhang („wachsen sie zusammen“): ein Streudiagramm, auch in der nächsten Lektion.

Sehen wir uns die ersten drei mit denselben Daten an.

Die Idee

Vergleich: sortierte waagerechte Balken

„Welche Produkte bringen am meisten?“ ist ein Vergleich von 25 Produkten. Ihre Namen sind lang, deshalb sind die Balken waagerecht: ax.barh(names, values). Die Namen stehen links und lassen sich lesen, ohne sie zu drehen.

Das Sortieren mit sort_values() macht das Diagramm zu einer Rangliste. barh zeichnet die erste Zeile unten, also setzt die aufsteigende Reihenfolge den größten nach oben. figsize=(7, 7) gibt der Figure eine Größe in Zoll: 25 Balken brauchen Höhe.

PythonDaten: die Tabellen des Shops

Der Weißkäse bringt am meisten: 10.325,30 €. Danach kommen die Kaffeebohnen (9.585,10 €) und der Kaschkawal (8.616,50 €). Sortiert beantworten die Balken die Frage, bevor du die Zahlen liest.

Genauer, für Neugierige

Ohne sort_values() kommen die Produkte von groupby in alphabetischer Reihenfolge. Die alphabetische Reihenfolge ist praktisch, wenn du ein Produkt nach Namen suchst. Für die Frage „welches ist das meiste“ brauchst du die Reihenfolge nach Wert.

Probier es aus

Die Bestseller nach Stück

Welche 10 Produkte haben im Jahr die meisten Stück verkauft? Leg sie in top ab (das Produkt ist der Index, die Stück sind der Wert) und zeichne sie als waagerechte Balken mit dem größten oben.

PythonDaten: die Tabellen des Shops

Die Idee

Veränderung über die Zeit: eine Linie

„Wie verläuft der Umsatz Tag für Tag?“ ist eine Veränderung über die Zeit. Eine Linie verbindet jeden Tag mit dem nächsten, und das Auge folgt der Richtung. 365 Balken wären ein Zaun, in dem man nichts sieht.

Der Tagesumsatz springt wegen des Wochenrhythmus. Eine zweite Linie mit dem 7-Tage-Durchschnitt (rolling(7) aus der Lektion über Datumswerte) zeigt die Richtung unter dem Rauschen:

PythonDaten: die Tabellen des Shops

Es sind 365 Tage. Der stärkste ist der 26. Dezember 2025 mit 852,90 €. Die dünne Linie zickzackt jede Woche, und die dicke zeigt den großen Gipfel im Dezember und die Einbrüche im Januar und September. Unten stehen Datumswerte: ordered_at wurde mit pd.to_datetime zu Datumswerten gemacht, und matplotlib setzt die Monate selbst ein.

Die Idee

Kleine Diagramme nebeneinander

In der vorigen Lektion haben sich die sieben Kategorien in einer Axes verheddert. Ein anderer Weg ist, jede Kategorie in ein eigenes kleines Diagramm zu legen und die Diagramme nebeneinander zu stellen. Das heißt Small Multiples.

plt.subplots(2, 3) liefert eine Figure mit 2 Zeilen und 3 Spalten von Axes. axes ist ein NumPy-Array der Form (2, 3), und axes.flat gibt sie nacheinander her. sharey=True gibt allen dieselbe senkrechte Skala. fig.suptitle ist ein Titel für die ganze Figure. Unten steht nur die Nummer des Monats (pv.index.str[5:]), damit es passt:

PythonDaten: die Tabellen des Shops

Mit einer gemeinsamen Skala lassen sich die Höhen vergleichen: Die Milchprodukte sind das ganze Jahr am höchsten, und die Küche ist niedrig mit einem Gipfel im Dezember. Jede Linie liest sich für sich, ohne Legende und ohne Farben zur Unterscheidung.

Die Idee

Anteil an einem Ganzen: Balken gegen Kreis

„Welchen Teil des Umsatzes macht jede Kategorie aus?“ ist eine Frage nach Anteilen. Oft wird sie als Kreisdiagramm gezeichnet. Hier sind der Kreis und die sortierten Balken mit denselben Zahlen nebeneinander. plt.subplots(1, 2) liefert zwei Axes: Hier heißen sie left und right:

PythonDaten: die Tabellen des Shops

Der Kreis zeigt, dass die Milchprodukte das größte Stück sind, etwas über ein Viertel. Reinigung (9,8 %) und Küche (10,2 %) sehen aber gleich aus. Auch Brot (11,9 %) liegt nah dran. Die Balken rechts bringen sie in Ordnung, und die Unterschiede zeigen sich.

1. Sieh nur auf das Kreisdiagramm links. Was ist größer: Küche oder Reinigung?

Die Idee

Warum ein Kreis in die Irre führt

Balken vergleicht man nach der Länge von derselben Linie aus. Das Auge kann das gut. Ein Kreis lässt das Auge Winkel und Flächen von Stücken vergleichen, die in verschiedene Richtungen gedreht sind. Das Auge kann das schlecht, besonders wenn die Anteile nah beieinander liegen.

Ein Kreis hat noch andere Probleme:

  • bei mehr als 4–5 Stücken türmen sich die Beschriftungen;
  • zwei Kreise nebeneinander (Dezember gegen das Jahr) lassen sich kaum vergleichen;
  • allein die Farbe verbindet ein Stück mit seinem Namen.

Ein Kreis erfüllt seinen Zweck in einem Fall: zwei oder drei Stücke und die Frage „mehr oder weniger als die Hälfte?“. Für alles andere sagen sortierte Balken dasselbe klarer.

Die Idee

Verteilung und Zusammenhang

Zwei Arten von Fragen bleiben übrig. Sie brauchen Diagramme, die in der nächsten Lektion kommen:

  • Verteilung: „Was ist eine übliche Bestellung?“ Die Antwort ist nicht eine Zahl, sondern wie sich 10.459 Bestellungen verteilen: wie viele klein und wie viele groß sind. Ein Histogramm zeigt das;
  • Zusammenhang: „Sind Bestellungen mit mehr Zeilen teurer?“ Jede Bestellung wird zu einem Punkt mit zwei Zahlen. Die Punktwolke ist ein Streudiagramm.
1. Der Chef fragt: „Was ist eine übliche Bestellung: liegen die meisten bei etwa 5 € oder bei etwa 20 €?“ Welches Diagramm antwortet?
2. „Sind Bestellungen mit mehr Zeilen teurer?“ Welches Diagramm antwortet?

Übung

Was der Dezember bringt

Der Dezember ist der stärkste Monat. Hat er mehr Bestellungen oder größere? Leg in orders_n die Anzahl der Bestellungen in jedem Monat (ohne die stornierten) und in avg die durchschnittliche Bestellung in Euro ab und zeichne sie als zwei Linien in zwei Axes nebeneinander, jede mit einem Titel.

PythonDaten: die Tabellen des Shops

Welchen Teil des Umsatzes im Dezember 2025 macht jede Kategorie aus, mit der Geschenkkarte? Leg den Anteil in Prozent sortiert in share ab und zeichne ihn als waagerechte Balken mit dem größten oben.

PythonDaten: die Tabellen des Shops

Test

Teste dich

1. Du willst den Umsatz von 25 Produkten mit langen Namen vergleichen. Was liest sich am besten?
2. Du hast top = units.nlargest(10) mit ax.barh gezeichnet. Warum steht das meistverkaufte Produkt unten?
3. Die Anzahl der Bestellungen und die durchschnittliche Bestellung in Euro nach Monat. Warum in zwei Axes nebeneinander und nicht in einer?
4. Was macht sharey=True in plt.subplots(2, 3, sharey=True)?
5. Was entscheidest du zuerst, bevor du ein Diagramm zeichnest?

Erstellt von Ivo Gergov im Rahmen der Kampagne von Evo Tech für zugängliche Programmierausbildung ·