Übungsaufgaben zu Häufigkeitsmaßen Sitemap Maße von Häufigkeitsverteilungen

Häufigkeitsverteilungen in Korpora

Wenn man dieselbe Anfrage in verschiedenen Korpora – oder in verschieden klar definierten Teilkorpora eines Korpus – durchführt, bilden die Häufigkeitsmaße, die sich aus den Suchergebnissen ermitteln lassen, zusammen genommen eine sogenannte Häufigkeitsverteilung der Häufigkeitsmaße über die Korpora bzw. Teilkorpora. Häufigkeitsverteilungen kann man auch innerhalb eines einzigen Gesamt- oder Teilkorpus bilden, wenn die Häufigkeitsmaße aus verschiedenen Ausprägungen eines bestimmten Merkmals der Korpusdaten ermittelt werden.

Häufigkeitsverteilungen sind die Grundlage für weitere statistische Auswertungen von Korpusdaten, die auch Rückschlüsse auf die Sprache, aus der die Daten stammen, ermöglichen. Im Folgenden werden wir sehen, wie Häufigkeitsverteilungen mit R erstellt und sowohl tabellarisch als auch grafisch dargestellt werden können.

Häufigkeitsverteilungen über verschiedene Korpora

Beginnen wir mit der Häufigkeitsverteilung der Wortform Hund in den frei recherchierbaren DWDS-Korpora. Um diese Häufigkeitsverteilung zu ermitteln, könnten wir die Anfrage ‚@Hund‘ in jedem Korpus durchführen, aber das DWDS-Abfragesystem erpart uns diese Mühe, denn neben der Anzeige der Suchergebnisse zur Anfrage im aktuellen Korpus stehen rechts der Suchmaske die absoluten Häufigkeiten zu dieser Anfrage in allen frei recherchierbaren Korpora:

Daher müssen wir die Anfrage nur einmal durchgeführen und können dann die Ergebnisse als Elemente eines Vektors mit Hilfe der c()-Funktion in R eingeben:

Anmerkung:

Nun haben wir bei den Häufigkeitsmaßen schon gesehen, dass absolute Häufigkeiten für einen Vergleich zwischen unterschiedlich großen Korpora ungeeignet sind, stattdesse brauchen wir die entsprechenden relativen Häufigkeiten. Daher erstellen wir zwei weitere Vektoren, einen mit den Korpusgrößen (zur Erinnerung: diese Angaben befinden sich hier) und einen mit den entsprechenden Korpusnamen (zwecks der Zuordnung in tabellarischen und grafischen Darstellungen, siehe unten):

Anmerkungen:

Jetzt können wir mit Hilfe der selbst-definierten Funktion freq.rel() (die Sie mit dem schon vorgestellten source()-Aufruf evtl. erneut in R laden müssen) einen Vektor der relativen Häufigkeiten in pMW erstellen:

Anmerkungen:

Häufigkeitstabellen

Eine tabellarische Darstellung dieser Verteilung lässt sich mit der eingebauten Funktion data.frame() erstellen, indem wir dieser Funktion den Vektoren der Korpusnamen und der entsprechenden relativen Häufigkeiten als Argumente übergeben:

Anmerkung:

Die Anordnung der Häufigkeiten in dieser Tabelle entspricht einfach der Reihenfolge der oben erstellten Vektoren, die wiederum der Reihenfolge der aufgelisteten Korpora auf der DWDS-Seite der angezeigten Suchergebnisse entspricht. Eine sinnvollere Darstellung der Häufigkeitsverteilung wäre z.B. nach aufsteigender Häufigkeit, die wie folgt erstellt werden kann:

Anmerkung:

Eine alternative, wenn auch weniger übersichtliche, Darstellung der Häufigkeitstabelle bekommt man mit Hilfe der eingebauten names()-Funktion, wodurch die einzelnen Häufigkeiten mit den entsprechenden Korpusnamen „benannt“ werden:

Auch hier kann man die Häufigkeiten z.B. in aufsteigender Reihenfolge zeigen, allerdings mit Hilfe einer anderen Funktion als order():

Anmerkung:

Um die Namen der Elemente des Vektors zu löschen, geben Sie folgenden Anweisung ein (NULL ist ein Schlüsselwort in R, dessen Zuweisung hier die Löschung der Namen bewirkt):

Einen noch nützlicheren Einsatz als bei der Erstellung von Häufigkeitstabellen findet die names()-Funktion bei der grafischen Darstellung von Häufigkeitsverteilungen, wie wir jetzt sehen werden.

Grafische Darstellungen

Während eine Häufigkeitstabelle eine genaue quantitative Darstellung einer Häufigkeitsverteilung gibt, bekommt man üblicherweise einen einprägsameren Gesamteindruck der Häufigkeitsverteilung durch eine grafische Darstellung. Die Grafiken kann man auch mit Beschriftungen versehen, um den Informationsgehalt zu präzisieren oder ergänzen. Mit R gibt es viele Möglichkeiten der grafischen Darstellung; hier zeigen wir eine kleine Auswahl.

Für Verteilungen, die nicht zu viele Werte enthalten, gehören Säulendiagramme oder Balkendiagramme zu den bekanntesten Darstellungen; in R kann man diese mit der barplot()-Funktion erzeugen.

Hier sind z.B. R-Eingaben für beschriftete Säulen- und Balkendiagramme der Häufigkeitsverteilung von Hund in den DWDS-Korpora nach Häufigkeit sortiert:

Anmerkungen:

Alternativen zu den Säulen- und Balkendiagramme sind sogenannte Dotplots, bei denen die Häufigkeiten durch Punkte statt Säulen dargestellt werden. R bietet mit den Funktionen dotchart() und stripchart() zwei Varianten davon:

Anmerkungen:

Häufigkeitsverteilungen über Teilkorpora eines Korpus

Um eine Häufigkeitsverteilung über Teilkorpora eines Korpus zu erstellen, müssen zum einen die Teilkorpora klar definiert und voneinander getrennt sein, damit für eine gegebene Definition jedes Token nur zu einem der Teilkorpora gehört. Zweitens müssen die Größen der Teilkorpora bekannt sein, denn nur so lassen sich die Häufigkeitsmaße der Teilkorpora in statistisch gültiger Weise miteinander vergleichen.

In DWDS kann man Teilkorpora nach den Metadaten Dekade und Textklasse spezifizieren (nach Textklasse allerdings nur bei den Referenzkorpora) und die entsprechenden Teilkorpusgrößen ermitteln, wie wir schon beim Differenzenkoeffizienten gesehen haben. (Man kann Teilkorpora in DWDS auch nach Tag (POS) bilden, das eignet sich allerdings weniger für einen Vergleich zwischen Teilkorpora als für die Erstellung von Häufigkeitsverteilungen im ganzen Korpus, siehe den nächsten Abschnitt weiter unten.)

DWDS stellt hierzu eine besondere Suchmöglichkeit zur Verfügung: Count-Anfragen (auf der DWDS-Website heißen sie Count-Abfragen). Die Ergebnisse solcher Anfragen sind keine Korpustreffer sondern nur die nach den entsprechenden Teilkorpora aufgeteilten Häufigkeiten des Suchbegriffs. Um z.B. die Häufigkeiten der Wortform Hund in den zehn Dekaden bzw. vier Textklassen des Kernkorpus zu ermitteln, kann man, statt 14mal die Anfrage ‚@Hund‘ im jeweiligen Teilkorpus durchzuführen, einfach folgende zwei Anfragen im ganzen Korpus durchführen:

Die Ergebnisse dieser Anfragen zeigen die Häufigkeitsverteilungen in Form von Häufigkeitstabellen mit absoluten statt mit relativen Häufigkeiten. Man könnte die Zahlen manuell in R eingeben und dann, wie oben bei den Häufigkeitsverteilungen über verschiedene Korpora gezeigt, Verteilungen von relativen Häufigkeiten erstellen.

Häufigkeitstabellen

Aber es gibt eine bequemere Möglichkeit, bei der man die Daten nicht manuell eingeben muss (was z.B. Tippfehler vermeidet). Wenn man den Link in der Tabellenüberschrift „[Export als: TSV]“ (zu sehen in den obigen Screenshots) anklickt, dann öffnet sich eine Seite mit der Häufigkeitstabelle im Textformat:

Das Format dieser Tabelle ist geeignet für das Einlesen in R mit Hilfe der eingebauten Funktion read.table(), indem man der Funktion die passende URL übergibt:

Anmerkungen:

Hier ist die R-Ausgabe der so eingelesenen Tabellen:

Für die Berechnung von relativen Häufigkeiten brauchen wir auch noch die Teilkorpusgrößen. Die entsprechenden Angaben können Sie hier abrufen, indem Sie die gewünschten Eigenschaften auswählen und auf den Button „Statistik abfragen“ klicken. Dann erscheinen die entsprechenden Häufigkeitstabellen darunter:

Auch diese Tabellen können Sie über den darüber stehenden Link „Textformat“ mit read.table() in R laden (Sie müssen genau wie oben darauf achten, die korrekte URL als Argument zu übergeben):

Anhand dieser vier Häufigkeitstabellen hund.kk.10.tab, kk.10.tab, hund.kk.tk.tab und kk.tk.tab wollen wir nun die relativen Häufigkeiten der Teilkorpora mit der Funktion freq.rel() berechnen. Aber dafür müssen die Angaben in den Spalten der Tabellen in Form von Vektoren zur Verfügung stehen, weil die Argumente von freq.rel() Vektoren sind. Diese Umwandlung machen die folgenden Eingaben (auf solche Eingaben gehen wir im 4. Themenblock ausführlich ein), wie man an den Ausgaben sieht:

Anmerkung:

Diese Bezeichner für die Vektoren sind allerdings etwas umständlich und teilweise redundant (nämlich, die Bezeichner für die Namen der Dekaden und der Textklassen). Daher ersetzen wir sie durch lesbarere Variablennamen mit folgenden Zuweisungen:

Nach all diesen vorbereitenden Schritten berechnen wir schließlich die relativen Häufigkeiten von Hund in den Teilkorpora und erstellen dann mit data.frame() die entsprechenden Häufigkeitstabellen:

Und hier ist auch die alternative tabellarische Darstellung mit Hilfe der names()-Funktion:

Grafische Darstellungen

Auch Häufigkeitsverteilungen über Teilkorpora können natürlich grafisch dargestellt werden. Wir zeigen hier zwei weitere Diagramme, das Tortendiagramm (auch Kreisdiagramm genannt) und das Liniendiagramm, sowie einige zusätzliche grafische Gestaltungsmöglichkeiten von R:

Anmerkungen:

Häufigkeitsverteilungen von Korpusmerkmalen

Auch innerhalb eines einzelnen Gesamt- oder Teilkorpus kann man Häufigkeitsverteilungen erstellen, und zwar Verteilungen von Merkmalen der Korpusdaten oder -metadaten. Beispiele sind grammatische Merkmale wie Flexionsvarianten eines Lemmas, die verschiedenen Wortarten insgesamt (z.B. Nomen, Verb, Adjektiv usw.) oder die Realisierungen einer Wortart (z.B. die Formen eines Pronomens), die Ausprägungen von Genus (Femininum, Maskulinum, Neutrum), Numerus (Singular, Plural) oder Kasus (Nominativ, Akkusativ usw.), auch komplexe syntaktische Eigenschaften wie z.B. Funktionsverbgefüge oder die Stellung von Modalpartikeln im Satz; numerische Merkmale wie Wortlänge (in Zeichen) und Satzlänge (in Wörtern); und auch Metadaten wie Textklasse, Entstehungszeit (Dekade, Jahr), Quelle usw.

Ob die Häufigkeitsverteilung eines gegebenen Merkmals in einem gegebenen Korpus oder Teilkorpus erstellt werden kann, hängt nicht nur von der Aufbereitung des Korpus sondern auch vom Abfragesystem ab. Die DWDS-Korpora haben z.B. keine Annotatationen für Genus, Numerus oder Kasus, also kann man Anfragen zu diesen Merkmalen nicht mit Hilfe von Tags formulieren. Auch strukturelle Eigenschaften wie Funktionsverbgefüge und Wortstellung sind in der DWDS-Anfragesprache nur begrenzt suchbar.

Auf der anderen Seite sind Häufigkeitsverteilungen der Tokens (und auch der Sätze und der Dokumente) eines Korpus nach Textklassen oder Dekade in DWDS einfach abfragbar, wie wir im Zusammenhang mit Teilkorpusgrößen gesehen haben. Und genauso einfach kann man Häufigkeitsverteilungen der Wortarten in DWDS erstellen, indem auf dieser Seite die Checkbox „nach POS gruppieren“ (unter „4. Weitere Gruppierungskriterien“) anklickt. Und wie bei den Textklassen und Dekaden kann auch die Häufigkeitstabelle der Wortarten mit read.table() in R einlesen (bei Übergabe der passenden URL).

Darüber hinaus kann man in DWDS mit Hilfe von Count-Anfragen Häufigkeitsverteilungen von Suchbegriffen nicht nur nach Textklasse oder Dekade erstellen, sondern auch nach anderen Merkmalen. Ein einfaches Beispiel ist die nach Häufigkeit absteigend sortierte Verteilung der Flexionsvarianten des Lemmas Hund im Kernkorpus:

Allerdings stößt man dabei schnell an die Grenzen der Verwendbarkeit von Count-Anfragen, wie folgende Beispiele zeigen:

Beispiel Wortlänge

Zum Schluss zeigen wir ein Beispiel für die Häufigkeitsverteilung eines numerischen Merkmals, Wortlänge in Zeichen. Die DWDS-Anfragesprache bietet zwar keine Möglichkeit in einer einzigen Anfrage sämtliche Wortlängen zu suchen, aber man kann sehr wohl nach spezifischen Wortlängen suchen, und damit kann man mit etwas Mühe und Geduld alle Wortlängen in einem Korpus quantitativ erfassen.

Zunächst nehmen wir aus Gründen der Einfachheit an, dass Wortformen nur aus Buchstaben bestehen (dass diese Annahme nicht stimmt, zeigen Wortformen wie z.B. ‚2020‘, ‚2000er‘ und ‚deutsch-französich‘; man könnte die folgenden Anfragen ergänzen, um solcher Wortformen zu finden, aber wir verzichten hier darauf). Mit Hilfe von regulären Ausdrücken, und insbesondere der Zeichenklasse ‚[[:alpha:]]‘, formulieren wir folgende Anfragen, die alle Wortformen jeweils aus einem, zwei, drei, …, n Buchstaben finden:

Man führt diese Anfragen durch und hält die jeweils angezeigte absolute Häufigkeit fest, bis die Anfrage für die Wortlänge n keine Treffer findet, was bedeutet, dass die Wortlänge n die absolute Häufigkeit 0 im Korpus hat. Dann gibt man folgende Anfrage (mit der tatsächlich verwendeten Zahl anstelle von n) ein:

Diese Anfrage sucht Wortformen, die aus mindestens n+1 Buchstaben bestehen. Wenn diese Anfrage Treffer findet, dann handelt sich bei der Wortlänge n um eine Lücke und man führt weitere Anfragen für n+1, n+2 Buchstaben usw. durch, bis es wieder keine Treffer gibt. Erst, wenn eine Anfrage wie in (*) keine Treffer findet, weiß man, dass die längste Wortform im Korpus aus n−1 Buchstaben besteht.

In dieser Weise habe ich die Häufigkeitsverteilungen der Wortlängen im DWDS-Kernkorpus und Kernkorpus 21 ermittelt und als Vektoren in R angelegt:

Der Vektor wl.kk enthält 90 Elemente und der Vektor wl.kk21 enthält 63 Häufigkeiten. Nach der oben geschilderten Vorgehensweise bedeutet das, dass die längste Wortform im Kernkorpus aus 90 Buchstaben besteht und die längste im Kernkorpus 21 aus 63 Buchstaben, und diese Wortformen kommen jeweils nur einmal vor; aber es gibt z.B. keine Wortform im Kernkorpus aus genau 89 Buchstaben und keine im Kernkorpus 21 aus genau 62 Buchstaben.

Tabellarische Darstellungen von diesen Häufigkeitsverteilungen in R sind aufgrund der vielen Einträge nicht sehr anschaulich, grafische Darstellungen dagegen schon eher:

Anmerkungen:

Diese Grafiken machen deutlich, dass die Häufigkeitsverteilungen der Wortlängen im Kernkorpus und im Kernkorpus 21 von der Gestalt her sehr ähnlich sind aber unterscheiden sich stark in absoluten Häufigkeiten, was wohl mit den sehr unterschiedlichen Korpusgrößen zusammenhängt. Diese Vermutung bestätigt sich, wenn wir statt der absoluten Häufigkeiten die relativen Häufigkeiten in pMW grafisch darstellen: Die Gestalten sind unverändert aber die (relativen) Häufigkeiten unterscheiden sich verhältnismäßig wenig (zu sehen durch die Werte entlang der y-Achsen beider Grafiken):

In diesen Grafiken – sowohl in den Darstellungen mit absoluten Häufigkeiten als auch in denen mit Häufigkeiten in pMW – scheinen alle Wortlängen ab ca. 21 Buchstaben eine Häufigkeit von 0 zu haben. Aber wie man in den Vektoren wl.kk und wl.kk21 überprüfen kann, gibt es absolute Häufigkeiten von deutlich über 100 bis Wortlänge 35 im Kernkorpus und bis Wortlänge 30 im Kernkorpus 21:

Der täuschende Eindruck in den grafischen Darstellungen ist der Skalierung der y-Achse geschuldet, die notwendig ist, um alle Häufigkeiten darzustellen, weil die Wortlängen bis ca. 21 Buchstaben fast die gesamte Summe der Häufigkeiten umfasst. Besonders auffällig dabei ist, dass die Wortlänge 3 mit großem Abstand am häufigsten auftritt – warum wohl?

Übungsaufgaben zu Häufigkeitsmaßen Sitemap Maße von Häufigkeitsverteilungen