Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
ss14:list_comprehension_sortieren_pyplot_sitzung_vom_8._mai [2014/05/12 18:15] stefanborn [List comprehensions] |
ss14:list_comprehension_sortieren_pyplot_sitzung_vom_8._mai [2016/05/10 14:46] (aktuell) |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ===== Sitzung vom 8. Mai ===== | + | ===== List Comprehensions, Sortieren, pyplot, Zipf's law ===== |
Aus dem Programm, das ein "Wörterbuch" der Worthäufigkeiten in einem Text | Aus dem Programm, das ein "Wörterbuch" der Worthäufigkeiten in einem Text | ||
Zeile 17: | Zeile 17: | ||
Die so erzeugte Liste besteht aus zweielementigen Listen [12,'Katze'],[13,'Hunde]... | Die so erzeugte Liste besteht aus zweielementigen Listen [12,'Katze'],[13,'Hunde]... | ||
- | Allgemein lässt sich mit einer //list comprehension// aus einer Liste <code>liste1</code> | + | Allgemein lässt sich mit einer //list comprehension// aus einer Liste ''liste'' |
- | eine neue Liste <code>liste2</code> erzeugen: | + | eine neue Liste ''neueliste'' erzeugen: |
+ | <code python> neueliste=[ f(x) for x in liste] </code> | ||
+ | wobei ''f(x)'' für irgendeinen Ausdruck steht, in dem | ||
+ | ''x'' vorkommt. | ||
+ | |||
+ | |||
+ | ==== Sortieren ==== | ||
+ | |||
+ | Hat man nun eine Liste ''liste'', so lässt sich diese wieder auf verschiedene | ||
+ | Weisen sortieren: | ||
+ | |||
+ | <code python> liste.sort() </code> | ||
+ | |||
+ | sortiert die Liste lexikographisch. Anstelle mit der Methode ''sort'' lässt, die | ||
+ | die gegeben Liste modifiziert, lässt sich das auch mit der Funktion ''sorted'' machen, | ||
+ | die eine neue sortierte Liste zurückgibt: | ||
+ | |||
+ | <code python> liste=sorted(liste) </code> | ||
+ | |||
+ | Sind die Einträge wie bei ''wbliste'' selbst | ||
+ | Listen, so wird erst nach dem ersten Eintrag, dann nach dem zweiten sortiert, usw. | ||
+ | Für ''wbliste'' heißt das, dass nach Häufigkeit sortiert wird und unter den | ||
+ | Wörtern gleicher Häufigkeit alphabetisch. | ||
+ | |||
+ | Durch | ||
+ | |||
+ | <code python> liste.sort(reverse=True) </code> | ||
+ | |||
+ | wird absteigend lexikographisch geordnet. Will man nicht lexikographisch | ||
+ | ordnen, sondern nach einer selbst definierten Ordnungsrelation, so lässt | ||
+ | sich das mit Hilfe eines weiteren Paramters ''key=...'' realisieren, | ||
+ | siehe z.B. [[https://wiki.python.org/moin/HowTo/Sorting|hier.]] | ||
+ | |||
+ | ==== Zipf's law und erste Plots ==== | ||
+ | |||
+ | Ein bemerkenswertes Gesetz gilt für alle natürlichen Sprachen: Ordnet man | ||
+ | die Wörter nach absteigender Häufigkeit, so besteht zwischen dem Rang ''r'' | ||
+ | und der Häufigkeit ''f'' eine Beziehung der Form \( f=c r^{-s}\). | ||
+ | Dies bedeutet dass zwischen ''log f'' und ''log r'' eine lineare Beziehung | ||
+ | mit negativer Steigung besteht. Um das (qualitativ) zu überprüfen ist | ||
+ | ein Plot nützlich. Ist ''x'' eine Liste von x-Werten und ''y'' eine Liste | ||
+ | von gleich vielen y-Werten so lässt sich mit dem Modul matplotlib leicht | ||
+ | ein Plot erstellen: | ||
+ | |||
+ | <code python> | ||
+ | from matplotlib import pyplot as plt | ||
+ | |||
+ | plt.plot(x,y) | ||
+ | plt.show() | ||
+ | </code> | ||
+ | Es wird an anderer Stelle noch mehr zum Plotten geben... | ||
+ | |||
+ | |||
+ | Als Beispiele Winnetou1, Die Buddenbrooks und Shakespeare's complete works | ||
+ | (hier wurde der natürliche Logarithmus verwendet): | ||
+ | |||
+ | {{:ss14:zipf-winnetou.png?200|Winnetou 1}} | ||
+ | {{:ss14:zipf-buddenbrooks.png?200|Die Buddenbrooks}} | ||
+ | {{:ss14:zipf-Shakespeare.png?200|Shakespeare's complete works}} | ||
+ | |||
+ | Man sieht, dass bei diesen Graphen die lineare Abhängigkeit für die | ||
+ | allerhäufigsten Wörter verletzt ist. Ca. ab dem 20.-häufigsten Wort lässt | ||
+ | sich der Graph allerdings gut durch eine Gerade beschreiben. | ||
+ | (Ich nehme an, dass Henrikas Vermutung zutrifft, | ||
+ | dass Eigennamen eine Sonderrolle spielen. Wenn man aber ein | ||
+ | ganzes Textkorpus verschiedener Autoren einer Sprache nimmt, wird | ||
+ | die Beziehung sehr gut erfüllt.) | ||
+ | |||
+ | p.s. | ||
+ | |||
+ | - Fürs Polnische hat Ilona den folgenden [[http://www.ipipan.waw.pl/~ldebowsk/docs/seminaria/zipf1.pdf|Link]] (S. 15) gefunden. | ||
+ | - Es liegt nahe, die Untersuchung quantitativ zu machen, d.h. die optimalen Konstanten \( c\) und \( s\) im Zipf'schen Gesetz zu finden und nach Sprachen und Textsorten zu unterscheiden. | ||
+ | - Ich habe mehrere ganz verschiedene Erklärungsversuche für das Phänomen gefunden. Ein relativ neuer und interessanter findet sich [[http://www.pnas.org/content/100/3/788.full|hier]]. |