📝 Übung zur Datenvisualisierung mit Pandas und Matplotlib#

Zum Lösungsnotebook

Aufgabe: Mit Datenvisualisierungen vertraut machen#

Experimentieren Sie mit verschiedenen Gestaltungsmöglichkeiten einer Balkendiagramm-Visualisierung in Matplotlib und Seaborn, um ein besseres Verständnis für die Anpassung und Konfiguration von Diagrammen zu entwickeln.

1. Farbpalette ändern: Konsultieren Sie die Dokumentation von Seaborns Farbpaletten und wählen Sie eine andere Palette aus. Wenden Sie diese auf Ihr Balkendiagramm an.

2. Kontext und Skalierung anpassen: Spielen Sie mit unterschiedlichen Kontexten wie notebook, talk und poster herum. Ändern Sie auch die Skalierung der Schriftgröße, um die Auswirkungen auf die Visualisierung zu beobachten.

3. Titel und Achsenbeschriftungen: Ändern Sie den Titel des Diagramms und die Beschriftungen der Achsen. Probieren Sie verschiedene Schriftgrößen aus.

4. Achsenkonfiguration: Modifizieren Sie die .xticks und .yticks Anweisungen, um andere Schriftgrößen und Drehwinkel zu testen. Setzen Sie verschiedene Wertebereiche für die Y-Achse mit .ylim, um zu sehen, wie sich dies auf die Darstellung der Daten auswirkt.

5. Rasterlinien (Grid): Schalten Sie das Raster ein und aus und fügen Sie es spezifisch für die X- oder Y-Achse hinzu. Passen Sie die Stil- und Farboptionen des Rasters an (siehe dazu die Matplotlib-Dokumentation). Für die Konfiguration der Farbe, werden in der Regel HTML-Codes verwendet, nutzen Sie entsprechend gerne einen HTML Color Picker.

Nützliche Ressourcen (neben den Verlinkungen):

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# Seaborn-Stil anstelle von Matplotlib


# Anweisung speziell für Jupyter Notebooks: 
# Anzeige der Matplotlib-Grafiken direkt im Notebook statt in einem neuen Fenster
# Erzeugung von Beispieldaten: Wahl zum 1. Deutschen Bundestag am 14. August 1949

votes_dict = {'Parteien':['SPD', 'CDU', 'FDP', 'CSU', 
                        'KPD', 'Parteilose', 'BP', 'DP', 
                        'Zentrum', 'Sonstige'],
                'Stimmen':[6934975, 5978636, 2829920, 1380448,
                           1361706, 1141647, 986478, 939934, 
                           727505, 1451149],
                'Prozent': [29.2, 25.2, 11.9, 5.8, 5.7, 
                            4.8, 4.2, 4.0, 3.1, 6.1],
                'color': ['red', 'black', 'yellow', 'darkblue', 
                          'darkred', 'orange', 'blue', 'grey',
                          'darkgrey', 'darkorange']
             }

df_vote = pd.DataFrame(votes_dict,                                   # Übergabe der Daten
                          columns=['Stimmen', 'Prozent', 'color'],   # Spezifikation der Spalten
                          index=votes_dict['Parteien'])              # Spezifikation des Index
df_vote

Der zu modifizierende Code:

# Diesen Code gerne beliebig anpassen oder in eine andere Codezelle kopieren

colors = sns.color_palette('Paired', 12) 
sns.set_context('notebook', font_scale=1.5, rc={'lines.linewidth': 2.5})   

fig, ax = plt.subplots(figsize=(12,6))

df_vote.loc[:, 'Prozent'].plot(kind='bar', 
                               color=colors, # oder: df_vote.loc[:, 'color'],
                               ax=ax)

# Formatierung der Überschrift des Diagramms
ax.set_title(label='Wahl zum 1. Deutschen Bundestag am 14. August 1949',
             family='serif',
             color='grey',
             weight='semibold',
             size=16
             )

# Formatierung und Beschriftung von x-Achse und y-Achse
ax.set_xlabel('Partei',
              weight='bold',
              size=14
             )

ax.set_ylabel('Prozent',
              size=14,
              weight='bold',
             )

# Beschriftung der Labelnamen vergrößern und rotieren
ax.set_xticklabels(df_vote.index, 
                   size=14,
                   rotation=45)

# Zeichnen nur der Gitterlinien der y-Achse
ax.yaxis.grid(True)

plt.show()
# weitere Codezellen nach Bedarf einfügen

Aufgabe: Visualisierung der häufigsten Redner:innen#

Erstellen Sie analog zur Visualisierung der Reden pro Jahr ein Balkendiagramm, das die Anzahl der Reden der 15 häufigsten Redner:innen visualisiert. Sie können den Code weitestgehend übernehmen und an den Stellen anpassen, wo es nötig ist. Überlegen Sie aber, was Sie tun müssen, um nur die 15 Redner:innen mit den meisten Reden zu visualisieren.


Für die folgenden Aufgaben nutzen wir einen neuen Datensatz. Es handelt sich hier um Reden der Bundesregierung. Die Textdaten f sind dem Projekt German Political Speeches Corpus entnommen. Adrien Barbaresi. (2019). German Political Speeches Corpus (Version v4.2019) [Data set]. Zenodo. https://doi.org/10.5281/zenodo.3611246.

Barbaresi, Adrien (2018). “A corpus of German political speeches from the 21st century”, Proceedings of the Eleventh International Conference on Language Resources and Evaluation (LREC 2018), European Language Resources Association (ELRA), pp. 792–797. http://purl.org/corpus/german-speeches (BibTeX entry)

df = pd.read_json('../data/speeches-bundesregierung_bearbeitet.json')
# Gruppieren der Daten nach Jahr und Zählen der Einträge mit der groupby()-Funktion
# Sortierung
# Basisvisualisierung


# Plotten der Daten


# Styling des Layouts

Aufgabe: Ergebnis von Datenabfragen visualisieren#

Visualisieren Sie die absoluten und relativen Häufigkeiten Suchen Sie nach Reden, die sich auf Umweltthemen beziehen. In Frage kommen hierfür Begriffe wie “Umwelt”, “Klima”, “Nachhaltigkeit” oder ähnliches. Formulieren Sie eine Abfrage, die mehrere dieser Begriffe berücksichtigt. Achten Sie ggf. darauf, wie die Bedingungen mit runden Klammern gruppiert werden müssen.

Was fällt Ihnen bei der Visualisierung der relativen Häufigkeiten auf?

# Basisvisualisierung


# Plotten der Daten


# Styling des Layouts
# Gruppieren der Daten nach Jahr und Zählen der Einträge mit der groupby()-Funktion
# Basisvisualisierung


# Plotten der Daten


# Styling des Layouts

Optionale Zusatzaufgabe: Funktion für Visualisierung erstellen#

Wie Sie sicherlich festgestellt haben, konnte der Code zur Visualisierung der Auswertungen im zweiten Teil dieses Notebook mit kleineren Anpassungen immer wieder verwendet werden, da die Art der zu visualisierenden Daten sich sehr ähneln. Das heißt, statt immer wieder den Code zu kopieren, könnte eigentlich, wie wir es gelernt haben, eine Funktion erstellt werden, die mit verschiedenen Parametern dann in unterschiedlichen Kontexten aufgerufen werden kann.

Probieren Sie gerne einmal aus, wie der Code zur Visualisierung verallgemeinert werden müsste, damit er für die verschiedenen Aufgaben in diesem Notebook verwendet werden kann.

def visualize_as_bar(series_object, label_y, label_x, title):
    """Erstellt ein Balkendiagramm aus einem Pandas Series-Objekt

    Diese Funktion nimmt ein Pandas Series-Objekt und visualisiert es als Balkendiagramm 
    mit der Möglichkeit, die Beschriftungen der x- und y-Achse sowie den Titel des Diagramms anzupassen.
    Die Farben der Balken werden automatisch anhand der "husl"-Farbpalette von Seaborn generiert, 
    basierend auf der Anzahl der Elemente im Series-Objekt. Das kann auch noch über Parameter flexibler 
    gestaltet werden.

    Parameters:
    - series_object: Pandas Series-Objekt. Die Daten, die als Balkendiagramm visualisiert werden sollen
    - label_y (str): Die Beschriftung für die y-Achse des Diagramms
    - label_x (str): Die Beschriftung für die x-Achse des Diagramms
    - title (str): Der Titel des Diagramms

    Returns:
    - Ein Balkendiagramm, das die Daten im series_object visualisiert. Die Funktion gibt nichts zurück, 
      ruft aber plt.show() auf, um das Diagramm anzuzeigen."""




    # Plotten der Daten


    # Styling des Layouts

    return 
# test function