📝 Übung zum Data Mining mit Pandas#

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)

Aufgabe: Pandas Basics#

Wir gehen noch mal ein paar grundlegende Befehle durch.

  1. Importieren Sie die Bibliothek Pandas entsprechend der gängigen Konventionen.

import pandas as pd
  1. Lesen Sie die Datei speeches-bundesregierung_bearbeitet.json im Ordner datader relativ zum übergeordneten Ordner liegt, als Dataframe ein.

# Daten einlesen
df = pd.read_json('../data/speeches-bundesregierung_bearbeitet.json')
  1. Lassen Sie sich die ersten und letzten Zeilen des Dataframes anzeigen

df.head()
date person address title sub_title place src_url text ntokens
0 2002-02-06 Gerhard Schröder Sehr geehrte Frau Nair, liebe Mitglieder der J... Rede des Bundeskanzlers zur Eröffnung der 52. ... Man kann diese Filmfestspiele nicht eröffnen, ... na http://archiv.bundesregierung.de/bpaexport/red... es ist angekündigt worden, man sollte im Beruf... 1941
1 2002-02-01 Julian Nida-Rümelin Meine sehr geehrten Damen und Herren! Redebeitrag von Staatsminister Nida-Rümelin in... "Ich bin der Auffassung, wir müssen nicht nur ... na http://archiv.bundesregierung.de/bpaexport/red... Frau Präsidentin! An Sie gerichtet, Herr Börn... 1322
2 2002-04-14 Gerhard Schröder None Interview mit Bundeskanzler Schröder in 'Berli... In dem Interview äußert sich Bundeskanzler Sch... na http://archiv.bundesregierung.de/bpaexport/red... Frage (Peter Hahne): Bevor wir uns über den Au... 1512
3 2005-03-08 Gerhard Schröder Herr Ministerpräsident! Lieber Herr Dr. Bernot... Rede von Bundeskanzler Gerhard Schröder bei de... Der Kampf gegen die Arbeitslosigkeit ist eine ... na http://archiv.bundesregierung.de/bpaexport/red... Einen Satz von Ihnen, Herr Dr. Bernotat, habe ... 2515
4 2000-05-04 Gerhard Schröder Sehr geehrter Herr Professor Landfried, sehr ... Rede von Bundeskanzler Gerhard Schröder auf de... None na http://archiv.bundesregierung.de/bpaexport/red... diese Jahresversammlung der Hochschulrektorenk... 735
df.tail()
date person address title sub_title place src_url text ntokens
2978 1991-10-21 Helmut Kohl None Rede anlässlich der Verleihung der Ehrendoktor... None None https://www.helmut-kohl.de/index.php?menu_sel=... Für die Verleihung der Ehrendoktorwürde durch ... 2807
2979 1996-11-08 Helmut Kohl None Ansprache anlässlich der Verleihung des Preise... None None https://www.helmut-kohl.de/index.php?menu_sel=... Majestät,\nKönigliche Hoheit,\nHerr Stiftungsp... 749
2980 1996-01-25 Helmut Kohl None : Laudatio des Ministerpräsidenten des Staates... None None https://www.helmut-kohl.de/index.php?menu_sel=... Herr Bundeskanzler, liebe Freunde,\ndie guten ... 2312
2981 1998-02-18 Helmut Kohl None Dankesrede für die Verleihung der Ehrenbürgerw... None None https://www.helmut-kohl.de/index.php?menu_sel=... My Lord Mayor, Herr Premierminister,Exzellenze... 1752
2982 1997-12-31 Helmut Kohl None Neujahrsansprache über die Deutsche Welle None None https://www.helmut-kohl.de/index.php?menu_sel=... Liebe Landsleute im Ausland,\nliebe Freunde De... 819
  1. Lassen Sie sich die statistische Beschreibung aller (!) verfügbaren Spalten ausgeben.

df.describe(include="all")
C:\Users\nitra\AppData\Local\Temp\ipykernel_32040\1985922364.py:1: FutureWarning: Treating datetime data as categorical rather than numeric in `.describe` is deprecated and will be removed in a future version of pandas. Specify `datetime_is_numeric=True` to silence this warning and adopt the future behavior now.
  df.describe(include="all")
date person address title sub_title place src_url text ntokens
count 2983 2983 1447 2982 2088 2500 2983 2983 2983.000000
unique 2351 46 1260 2948 1625 183 2983 2983 NaN
top 2005-05-04 00:00:00 Angela Merkel Meine Damen und Herren, Regierungserklärung von Bundeskanzlerin Merkel in Berlin na http://archiv.bundesregierung.de/bpaexport/red... es ist angekündigt worden, man sollte im Beruf... NaN
freq 5 1128 46 15 276 1810 1 1 NaN
first 1982-12-14 00:00:00 NaN NaN NaN NaN NaN NaN NaN NaN
last 2017-09-21 00:00:00 NaN NaN NaN NaN NaN NaN NaN NaN
mean NaN NaN NaN NaN NaN NaN NaN NaN 1947.653369
std NaN NaN NaN NaN NaN NaN NaN NaN 1289.666985
min NaN NaN NaN NaN NaN NaN NaN NaN 5.000000
25% NaN NaN NaN NaN NaN NaN NaN NaN 964.000000
50% NaN NaN NaN NaN NaN NaN NaN NaN 1615.000000
75% NaN NaN NaN NaN NaN NaN NaN NaN 2626.500000
max NaN NaN NaN NaN NaN NaN NaN NaN 10512.000000
  1. Greifen Sie auf die Zeilen 35 bis 212 in den Spalten “person” und “title” zu.

df.loc[35:212, ["person", "title"]]
person title
35 Gerhard Schröder Bundeskanzler Schröder beim Bundesverband der ...
36 Gerhard Schröder Bundeskanzler Schröder auf dem Deutschen Stein...
37 Gerhard Schröder Rede von Bundeskanzler Schröder anlässlich &qu...
38 Gerhard Schröder Rede von Bundeskanzler Gerhard Schröder anläss...
39 Gerhard Schröder Rede von Bundeskanzler Schröder anlässlich des...
... ... ...
208 Christina Weiss Zu den Chancen der neuen Medien. Kulturstaatsm...
209 Gerhard Schröder Rede von Bundeskanzler Schröder "Durch In...
210 Gerhard Schröder Rede von Bundeskanzler Gerhard Schröder an der...
211 Gerhard Schröder Bundeskanzler Schröder zur Eröffnung der Frank...
212 Gerhard Schröder Grußwort von Bundeskanzler Gerhard Schröder be...

178 rows × 2 columns

Aufgabe: Eigene Datenabfrage gestalten#

Überlegen Sie sich für das Korpus der Reden von Angehörigen der Bundesregierung eine eigene inhaltlich-thematische Datenabfrage, die von booleschen Masken Gebrauch macht. Ihre Abfrage sollte aus mehreren Bestandteilen bestehen (“Schlagwortsuche”, Begrenzung nach Redner:in oder Jahr). Gerne können Sie verschiedene logische/boolesche Operatoren miteinander verknüpfen (&, |, ==, usw.).

# Beispielabfrage zur Orientierung
mask = (df.loc[:, "text"].str.contains("Ukraine")) \
      & (df.loc[:, "text"].str.contains("Russland")) \
      & (df.loc[:, "person"] == "Angela Merkel")        

df_uk_ru = df.loc[mask,:]
df_uk_ru.shape
(83, 9)
df_uk_ru
date person address title sub_title place src_url text ntokens
989 2006-09-18 Angela Merkel None Rede von Bundeskanzlerin Angela Merkel auf der... am 18. September in Berlin na http://www.bundesregierung.de/nn_914560/Conten... Sehr geehrter Herr Fromme,\nliebe Kollegen aus... 1713
994 2006-09-22 Angela Merkel Herr Weidenfeld, meine Damen und Herren! Rede von BundeskanzlerinAngela Merkel anlässli... Die Rede im Wortlaut na http://www.bundesregierung.de/nn_914560/Conten... Ich möchte mich ganz herzlich bei der Bertelsm... 3154
1016 2006-10-25 Angela Merkel None Handlungsfähigkeit der Nato stärken Die Deutsch-Atlantische Gesellschaft bemüht si... na http://www.bundesregierung.de/nn_914560/Conten... Sehr geehrter Herr Kollege, lieber Ruprecht Po... 2913
1220 2007-12-05 Angela Merkel None Rede von Bundeskanzlerin Angela Merkel vor dem... in Berlin na http://www.bundesregierung.de/nn_914560/Conten... Sehr geehrter Herr Bundespräsident,\nsehr vere... 4746
1242 2008-03-10 Angela Merkel None Rede von Bundeskanzlerin Merkel anlässlich der... in Berlin na http://www.bundesregierung.de/nn_914560/Conten... Sehr geehrter Herr Generalinspekteur, sehr gee... 4622
... ... ... ... ... ... ... ... ... ...
2598 2015-03-30 Angela Merkel Sehr geehrter Herr Ministerpräsident, lieber A... Rede von Bundeskanzlerin Merkel anlässlich des... None Helsinki https://www.bundesregierung.de/Content/DE/Rede... Ich kann mich leider nicht mit einer Rede auf ... 1207
2619 2016-01-07 Angela Merkel Sehr geehrter Herr Präsident Olbricht,sehr gee... Rede von Bundeskanzlerin Merkel auf dem Neujah... None Magdeburg https://www.bundesregierung.de/Content/DE/Rede... Sehr geehrter Herr Ministerpräsident, lieber R... 4467
2628 2015-01-22 Angela Merkel Sehr geehrter Herr Professor Schwab,meine Dame... Rede von Bundeskanzlerin Merkel anl. des Jahre... None Davos https://www.bundesregierung.de/Content/DE/Rede... Ich freue mich, auch in diesem Jahr – nachdem ... 1903
2631 2014-06-25 Angela Merkel None Rede von Bundeskanzlerin Merkel anlässlich der... In Berlin Deutscher Bundestag https://www.bundesregierung.de/Content/DE/Rede... In Berlin\nSehr geehrter Herr Präsident! Liebe... 4885
2636 2016-09-15 Angela Merkel Sehr geehrter Herr van Dülmen,sehr geehrter He... Rede von Bundeskanzlerin Merkel beim M100 Sans... in Potsdam Potsdam https://www.bundesregierung.de/Content/DE/Rede... Ich werde gewiss nicht der Laudatio vorgreifen... 1803

83 rows × 9 columns

Aufgabe: Anzahl der Token pro Rede ermitteln und speichern#

Wir wollen die Anzahl der Token, also die Länge der einzelnen Reden ermitteln und die Informationen wieder im Dataframe als neue Spalte speichern.

  • Lesen Sie dazu die Texte aus der Spalte text aus und speichern Sie sie in einer Liste.

  • Sorgen Sie nun dafür, dass die einzelnen Texte in Wortlisten zerlegt werden und bestimmen Sie die Länge der einzelnen Wortlisten.

  • Die Länge der Texte soll als neue Spalte ntokens zum Dataframe hinzugefügt werden.

# Variante 1
df.loc[:, 'tokens'] = df.loc[:, 'text'].apply(lambda text: text.split())
df.loc[:, 'ntokens'] = df.loc[:, 'tokens'].apply(len)
df.head()
date person address title sub_title place src_url text ntokens tokens
0 2002-02-06 Gerhard Schröder Sehr geehrte Frau Nair, liebe Mitglieder der J... Rede des Bundeskanzlers zur Eröffnung der 52. ... Man kann diese Filmfestspiele nicht eröffnen, ... na http://archiv.bundesregierung.de/bpaexport/red... es ist angekündigt worden, man sollte im Beruf... 1941 [es, ist, angekündigt, worden,, man, sollte, i...
1 2002-02-01 Julian Nida-Rümelin Meine sehr geehrten Damen und Herren! Redebeitrag von Staatsminister Nida-Rümelin in... "Ich bin der Auffassung, wir müssen nicht nur ... na http://archiv.bundesregierung.de/bpaexport/red... Frau Präsidentin! An Sie gerichtet, Herr Börn... 1322 [Frau, Präsidentin!, An, Sie, gerichtet,, Herr...
2 2002-04-14 Gerhard Schröder None Interview mit Bundeskanzler Schröder in 'Berli... In dem Interview äußert sich Bundeskanzler Sch... na http://archiv.bundesregierung.de/bpaexport/red... Frage (Peter Hahne): Bevor wir uns über den Au... 1512 [Frage, (Peter, Hahne):, Bevor, wir, uns, über...
3 2005-03-08 Gerhard Schröder Herr Ministerpräsident! Lieber Herr Dr. Bernot... Rede von Bundeskanzler Gerhard Schröder bei de... Der Kampf gegen die Arbeitslosigkeit ist eine ... na http://archiv.bundesregierung.de/bpaexport/red... Einen Satz von Ihnen, Herr Dr. Bernotat, habe ... 2515 [Einen, Satz, von, Ihnen,, Herr, Dr., Bernotat...
4 2000-05-04 Gerhard Schröder Sehr geehrter Herr Professor Landfried, sehr ... Rede von Bundeskanzler Gerhard Schröder auf de... None na http://archiv.bundesregierung.de/bpaexport/red... diese Jahresversammlung der Hochschulrektorenk... 735 [diese, Jahresversammlung, der, Hochschulrekto...
# Variante 2
texts = df.loc[:, "text"].to_list()         # Texte in Liste einlesen

ntokens = []                                
for text in texts:                          # Die einzelnen Texten per Schleife durchgehen
    ntokens.append(len(text.split()))       # jeden Text mit der Funktion split() in eine Liste zerlegen und die Länge der Liste ermitteln und zur Liste ntokens hinzufügen

df.loc[:, "ntokens"] = ntokens              # fertige Liste zum Dataframe hinzufügen

df.head()
date person address title sub_title place src_url text ntokens tokens
0 2002-02-06 Gerhard Schröder Sehr geehrte Frau Nair, liebe Mitglieder der J... Rede des Bundeskanzlers zur Eröffnung der 52. ... Man kann diese Filmfestspiele nicht eröffnen, ... na http://archiv.bundesregierung.de/bpaexport/red... es ist angekündigt worden, man sollte im Beruf... 1941 [es, ist, angekündigt, worden,, man, sollte, i...
1 2002-02-01 Julian Nida-Rümelin Meine sehr geehrten Damen und Herren! Redebeitrag von Staatsminister Nida-Rümelin in... "Ich bin der Auffassung, wir müssen nicht nur ... na http://archiv.bundesregierung.de/bpaexport/red... Frau Präsidentin! An Sie gerichtet, Herr Börn... 1322 [Frau, Präsidentin!, An, Sie, gerichtet,, Herr...
2 2002-04-14 Gerhard Schröder None Interview mit Bundeskanzler Schröder in 'Berli... In dem Interview äußert sich Bundeskanzler Sch... na http://archiv.bundesregierung.de/bpaexport/red... Frage (Peter Hahne): Bevor wir uns über den Au... 1512 [Frage, (Peter, Hahne):, Bevor, wir, uns, über...
3 2005-03-08 Gerhard Schröder Herr Ministerpräsident! Lieber Herr Dr. Bernot... Rede von Bundeskanzler Gerhard Schröder bei de... Der Kampf gegen die Arbeitslosigkeit ist eine ... na http://archiv.bundesregierung.de/bpaexport/red... Einen Satz von Ihnen, Herr Dr. Bernotat, habe ... 2515 [Einen, Satz, von, Ihnen,, Herr, Dr., Bernotat...
4 2000-05-04 Gerhard Schröder Sehr geehrter Herr Professor Landfried, sehr ... Rede von Bundeskanzler Gerhard Schröder auf de... None na http://archiv.bundesregierung.de/bpaexport/red... diese Jahresversammlung der Hochschulrektorenk... 735 [diese, Jahresversammlung, der, Hochschulrekto...

Aufgabe: Datenabfragen gestalten#

Erkunden Sie das Korpus von Reden von Angehörigen der Bundesregierung, um ein tieferes Verständnis verschiedener thematischer Schwerpunkte und die Nutzung spezifischer Begrifflichkeiten über die Zeit zu gewinnen.

  1. Extrahieren Sie alle Reden, die im Jahr 2001 gehalten wurden.

  2. Ermitteln Sie die Anzahl der Reden, die das Wort “Europa” enthalten.

  3. Identifizieren Sie Reden, die den Begriff “digital” und “Digitalisierung” enthalten.

  4. Suchen Sie nach Reden, die zwischen 2000 und 2010 gehalten wurden, 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.

Hinweise:

  • Für diese Aufgabe benötigen Sie die logischen Operatoren für UND (&) und ODER (|) - letzteres ist je nach Tastatur auf einer anderen Taste. Wichtig: In Python hat der logische Operator & eine höhere Priorität als |. Bei Abfragen, die beide Operatoren verwenden, muss also darauf geachtet werden, wie die Abfragebestandteile mit runden Klammern gruppiert werden.

  • Die Funktion contains() arbeitet standardmäßig case-sensitiv. Wenn Sie eine case-insensitive Suche durchführen möchten, können Sie den Parameter case=False ergänzen.

# Erste Aufgabe
mask = df.loc[:, "date"].dt.year == 2001
year_2001 = df.loc[mask, ["date", "text"]]
year_2001
date text
8 2001-03-14 Sperrfrist Redebeginn!\nSehr geehrter Herr Pot...
21 2001-01-03 Das britische Parlament hat kürzlich das Klone...
22 2001-02-01 in meinem Manuskript steht alles drin - aber n...
24 2001-06-11 schön haben Sie es hier am Gendarmenmarkt. Ich...
26 2001-06-26 Kein Zweifel: All diejenigen, die heute Morgen...
... ... ...
844 2001-02-13 Verehrte Frau Stihl,verehrte Frau Braun,\nich ...
845 2001-06-11 mit den soeben geleisteten Unterschriften habe...
847 2001-09-26 Herr Glos, in einem Punkt bin ich Ihnen dankba...
859 2001-09-20 Dinner Speech zum Empfang der Sächsischen Staa...
865 2001-05-17 angesichts des schnellen technischen, wirtscha...

156 rows × 2 columns

# Zweite Aufgabe
mask = df.loc[:, "text"].str.contains("Europa").sum()
mask
1899
# Dritte Aufgabe
mask = (df.loc[:, "text"].str.contains("digital", case=False)) \
        & (df.loc[:, "text"].str.contains("Digitalisierung", case=False))

df_digital = df.loc[mask, :]
print(df_digital.shape)
df_digital.head()
(266, 10)
date person address title sub_title place src_url text ntokens tokens
119 2002-06-13 Julian Nida-Rümelin None Rede von Staatsminister Nida-Rümelin im Deutsc... In einem Redebeitrag stellt Kulturstaatsminist... na http://archiv.bundesregierung.de/bpaexport/red... Gesellschaften bilden Kommunikations- und Vers... 1545 [Gesellschaften, bilden, Kommunikations-, und,...
150 2001-08-24 Gerhard Schröder Sehr geehrter Herr Dr. Hecker, sehr geehrter H... Rede von Bundeskanzler Gerhard Schröder zur Er... Ich begrüße Sie recht herzlich zur Eröffnung d... na http://archiv.bundesregierung.de/bpaexport/red... Ich begrüße Sie recht herzlich zur Eröffnung d... 1758 [Ich, begrüße, Sie, recht, herzlich, zur, Eröf...
161 2000-04-14 Michael Naumann None Rede von Staatsminister Dr. Michael NaumannBea... None na http://archiv.bundesregierung.de/bpaexport/red... .\nVor wirklich sehr, sehr langer Zeit, am Obe... 2460 [., Vor, wirklich, sehr,, sehr, langer, Zeit,,...
182 1999-10-01 Michael Naumann None Interview von Staatsminister Michael Naumann m... None na http://archiv.bundesregierung.de/bpaexport/red... Kulturstaatsminister Michael Naumann über die ... 1885 [Kulturstaatsminister, Michael, Naumann, über,...
203 1999-10-03 Gerhard Schröder None Rede von Bundeskanzler Gerhard Schröder zum Ta... None na http://archiv.bundesregierung.de/bpaexport/red... Vier Jahrzehnte lang haben der Kalte Krieg und... 1562 [Vier, Jahrzehnte, lang, haben, der, Kalte, Kr...
# Vierte Aufgabe; Oder-Abfragen sind durch runde Klammern als eine Gruppe zusammengefasst

mask = ((df.loc[:, "text"].str.contains("Umwelt", case=False)) \
        | (df.loc[:, "text"].str.contains("Klima", case=False)) \
        | (df.loc[:, "text"].str.contains("Nachhaltigkeit", case=False))) \
        & (df.loc[:, "date"].dt.year >= 2000) \
        & (df.loc[:, "date"].dt.year <= 2010)

df_umwelt = df.loc[mask, :]
print(df_umwelt.shape)
df_umwelt.head()
(539, 10)
date person address title sub_title place src_url text ntokens tokens
3 2005-03-08 Gerhard Schröder Herr Ministerpräsident! Lieber Herr Dr. Bernot... Rede von Bundeskanzler Gerhard Schröder bei de... Der Kampf gegen die Arbeitslosigkeit ist eine ... na http://archiv.bundesregierung.de/bpaexport/red... Einen Satz von Ihnen, Herr Dr. Bernotat, habe ... 2515 [Einen, Satz, von, Ihnen,, Herr, Dr., Bernotat...
5 2005-07-14 Christina Weiss None Übergabe des Grassi-Museums für Angewandte Kun... Rund ein Dreivierteljahrhundert nach der Einwe... na http://archiv.bundesregierung.de/bpaexport/red... ich habe nie einen Hehl daraus gemacht, dass i... 697 [ich, habe, nie, einen, Hehl, daraus, gemacht,...
19 2000-05-30 Gerhard Schröder None Rede von Bundeskanzler Gerhard Schröder anläss... None na http://archiv.bundesregierung.de/bpaexport/red... ()\nEin sehr erfreulicher Anlass führt uns heu... 1175 [(), Ein, sehr, erfreulicher, Anlass, führt, u...
21 2001-01-03 Julian Nida-Rümelin None Staatsminister Nida-Rümelin zur Bio-Ethik: &qu... None na http://archiv.bundesregierung.de/bpaexport/red... Das britische Parlament hat kürzlich das Klone... 1572 [Das, britische, Parlament, hat, kürzlich, das...
22 2001-02-01 Gerhard Schröder Sehr geehrte Damen und Herren, Rede von Bundeskanzler Gerhard Schröder anläss... None na http://archiv.bundesregierung.de/bpaexport/red... in meinem Manuskript steht alles drin - aber n... 4294 [in, meinem, Manuskript, steht, alles, drin, -...