Wordcloud mit Python erstellen
Eine „Wörterwolke“, besser bekannt unter dem englischen Wordcloud, zeigt die Häufigkeit von dem Vorkommen von Wörtern in einem Text als Grafik. Je häufiger ein Wort vorkommt, desto prominenter wird es dargestellt. Die Anzeigegröße der einzelnen Wörter wird größer, je öfters es vorkommt. Die dazugehörige Farbe ändert sich entsprechend.
Das selber programmieren einer Wordcloud ist zwar möglich aber aufwendig. Daher sind fertige Module und Bibliotheken natürlich eine gute Sache, besonders wenn eine solche in dem großen Umfang vorliegt wie bei wordcloud
. Mit diesem Modul wird ein Text ausgewertet und es können zusätzlich Wörter ausgeschlossen werden. Wörter wie „der, die, das etc.“ kommen natürlich vielfach in einem Text vor und wären wenig spannend in Groß dargestellt zu werden. Diese können gezielt ausgeschlossen werden. Zusätzlich können Masken genutzt werden, dass die Wörter in Form eines Bildes dann dargestellt werden.
Über die Bibliothek Wordcloud ist eine einfache Erstellung einer solchen mit Python schnell erledigt.
Jetzt aber Schritt für Schritt zur Nutzung (und erst einmal die Installation).
Installation Modul Wordcloud
Als Erstes muss die Bibliothek installiert werden:
pip install wordcloud
Jetzt werden alle benötigten Module installiert, sofern diese im System nicht schon vorhanden sind. Dazu gehört neben wordcloud
zum Beispiel auch numpy
und matplotlib
:
Nach der Installation können wir mit unserer ersten Wordcloud in Python starten.
erste Wordcloud in Python
Wir erstellen zum Einstieg eine sehr einfache Wörterwolke mit einem kurzen Text. Als Text nehmen wir von der Startseite https://www.python-lernen.de/ die erste 3 Absätze.
Im ersten Schritt müssen wir in unser Python-Programm WordCloud
importieren
from wordcloud import WordCloud
Zusätzlich benötigen wir für die Ausgabe das Modul matplot
:
from wordcloud import WordCloud
import matplotlib.pyplot as plt
Jetzt kommt unser Text, den wir zu einer Wörterwolke umgebaut bekommen wollen:
from wordcloud import WordCloud
import matplotlib.pyplot as plt
text = 'Python Kurs: mit Python programmieren lernen für Anfänger und Fortgeschrittene Dieses Python Tutorial entsteht im Rahmen von Uni-Kursen und kann hier kostenlos genutzt werden. Python ist eine für Anfänger und Einsteiger sehr gut geeignete Programmiersprache, die später auch den Fortgeschrittenen und Profis alles bietet, was man sich beim Programmieren wünscht. Der Kurs ist eine Einführung und bietet einen guten Einstieg. Es wird aktuelles Wissen vermittelt - daher schreiben wir unseren Python-Code mit der aktuellen Python-Version 3. einfach Python lernen über das Programmieren von Spielen Damit Python programmieren lernen noch mehr Spaß macht, werden wir im Kurs anhand verschiedener Spiele die Anwendung von Python kennen lernen und unser Wissen als Programmierer aufbauen. Die Grundlagen werden direkt umgesetzt in bekannte Spiele wie:'
Dieser wird als Variable übergeben:
from wordcloud import WordCloud
import matplotlib.pyplot as plt
text = 'Python Kurs: mit Python programmieren lernen für Anfänger und Fortgeschrittene Dieses Python Tutorial entsteht im Rahmen von Uni-Kursen und kann hier kostenlos genutzt werden. Python ist eine für Anfänger und Einsteiger sehr gut geeignete Programmiersprache, die später auch den Fortgeschrittenen und Profis alles bietet, was man sich beim Programmieren wünscht. Der Kurs ist eine Einführung und bietet einen guten Einstieg. Es wird aktuelles Wissen vermittelt - daher schreiben wir unseren Python-Code mit der aktuellen Python-Version 3. einfach Python lernen über das Programmieren von Spielen Damit Python programmieren lernen noch mehr Spaß macht, werden wir im Kurs anhand verschiedener Spiele die Anwendung von Python kennen lernen und unser Wissen als Programmierer aufbauen. Die Grundlagen werden direkt umgesetzt in bekannte Spiele wie:'
# Generate a word cloud image
wordcloud = WordCloud().generate(text)
Und jetzt noch die Ausgabe über matplot
:
from wordcloud import WordCloud
import matplotlib.pyplot as plt
text = 'Python Kurs: mit Python programmieren lernen für Anfänger und Fortgeschrittene Dieses Python Tutorial entsteht im Rahmen von Uni-Kursen und kann hier kostenlos genutzt werden. Python ist eine für Anfänger und Einsteiger sehr gut geeignete Programmiersprache, die später auch den Fortgeschrittenen und Profis alles bietet, was man sich beim Programmieren wünscht. Der Kurs ist eine Einführung und bietet einen guten Einstieg. Es wird aktuelles Wissen vermittelt - daher schreiben wir unseren Python-Code mit der aktuellen Python-Version 3. einfach Python lernen über das Programmieren von Spielen Damit Python programmieren lernen noch mehr Spaß macht, werden wir im Kurs anhand verschiedener Spiele die Anwendung von Python kennen lernen und unser Wissen als Programmierer aufbauen. Die Grundlagen werden direkt umgesetzt in bekannte Spiele wie:'
# Generate a word cloud image
wordcloud = WordCloud().generate(text)
plt.imshow(wordcloud, interpolation="bilinear")
plt.show()
Als Ergebnis erhalten wir:
Natürlich ist die Bemaßung hier wenig sinnvoll. Daher schalten wir diese ab über:
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show()
Weißer Hintergrund für die Ausgabe
Wir können noch weitere Angaben dem Modul für die Ausgabe mitgeben. Dazu gehört die Hintergrundfarbe:
wordcloud = WordCloud(background_color="white").generate(text)
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show()
Die Farben der Schrift werden automatisch angepasst:
Wörter ausschließen aus Wordcloud
Viele Wörter sind in der Ausgabe wenig interessant. Am bisherigen Beispiel fallen die Wörter „und, von, Der, das, den, wir, ist, die, auf, im“ auf. Diese wollen wir ausschließen. Dazu erstellen wir eine Liste mit den unerwünschten Wörtern:
Unseren Import müssen wir mit den STOPWORDS
ergänzen:
from wordcloud import WordCloud, STOPWORDS
Aus unserer Variablen „uninteressant“ mit den unwichtigen Wörtern erstellen wir über split()
eine Liste:
uninteressant = "und von Der das den wir ist die auf im"
liste_der_unerwuenschten_woerter = nichtinteressant.split()
Und die STOPWORDS
werden vor dem Erzeugen der WordCloud geupdatet:
STOPWORDS.update(liste_der_unerwuenschten_woerter)
wordcloud = WordCloud(background_color="white").generate(text)
Das Ergebnis ist eine viel aussagekräftigere WordCloud:
Der komplette Code bisher:
from wordcloud import WordCloud, STOPWORDS
import matplotlib.pyplot as plt
text = 'Python Kurs: mit Python programmieren lernen für Anfänger und Fortgeschrittene Dieses Python Tutorial entsteht im Rahmen von Uni-Kursen und kann hier kostenlos genutzt werden. Python ist eine für Anfänger und Einsteiger sehr gut geeignete Programmiersprache, die später auch den Fortgeschrittenen und Profis alles bietet, was man sich beim Programmieren wünscht. Der Kurs ist eine Einführung und bietet einen guten Einstieg. Es wird aktuelles Wissen vermittelt - daher schreiben wir unseren Python-Code mit der aktuellen Python-Version 3. einfach Python lernen über das Programmieren von Spielen Damit Python programmieren lernen noch mehr Spaß macht, werden wir im Kurs anhand verschiedener Spiele die Anwendung von Python kennen lernen und unser Wissen als Programmierer aufbauen. Die Grundlagen werden direkt umgesetzt in bekannte Spiele wie:'
nichtinteressant = "und von Der das den wir ist die auf im"
liste_der_unerwuenschten_woerter = nichtinteressant.split()
STOPWORDS.update(liste_der_unerwuenschten_woerter)
wordcloud = WordCloud(background_color="white").generate(text)
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show()
Es fällt noch eine gewisse Unschärfe unseres Bildes auf. Diese können wir durch die Ausgabegröße ändern!
wordcloud = WordCloud(background_color="white",width=1920, height=1080).generate(text)
Jetzt wird das Ausgabebild eine Breite von 1920 Pixel haben und eine Höhe von 1080 und somit scharf dargestellt:
Text aus Datei für WordCloud
Bisher haben wir relativ kurze Texte genutzt. Bei längeren Texten ist es sinnvoll, diese aus einer Datei einfach zu laden.
Dazu müssen wir das Modul „os“ importieren:
import os
Und nun können wir die Datei laden und den enthaltenen Text in der Variablen text
speichern.
d = os.path.dirname(__file__) if "__file__" in locals() else os.getcwd()
with open("wordcloud-beispieltext.txt") as f:
text = f.read()
Hier ist es egal, ob wir einen kurzen oder langen Text nutzen wie beispielsweise „Faust“ von Goehte ( https://de.wikisource.org/wiki/Faust_-_Der_Trag%C3%B6die_erster_Teil ) mit lockeren 8300 Zeilen.
Wir erhalten innerhalb von ein paar Sekunden dann folgende Ausgabe:
Folgende der komplette Python-Code:
from wordcloud import WordCloud, STOPWORDS
import matplotlib.pyplot as plt
import os
d = os.path.dirname(__file__) if "__file__" in locals() else os.getcwd()
with open("wordcloud-beispieltext.txt") as f:
text = f.read()
nichtinteressant = "und von Der das den wir ist die auf im"
liste_der_unerwuenschten_woerter = nichtinteressant.split()
STOPWORDS.update(liste_der_unerwuenschten_woerter)
wordcloud = WordCloud(background_color="white",width=1920, height=1080).generate(text)
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show()
Parameter für WordCloud
Über folgende Parameter können gewünschte Einstellungen getätigt werden. Dazu werden diese wie in den bisherigen Beispielen gezeigt dem Aufruf WordCloud(PARAMETER).generate(text)
übergeben. Werden mehrere Parameter übergeben, erfolgt die Trennung anhand von Kommas.
max_font_size=40
Maximale Schriftgröße
max_words=500
Maximale Anzahl der angezeigten Wörter
Viele weitere Parameter gibt es auf der Seite des Entwicklers unter:
https://amueller.github.io/word_cloud/
Ausgabe in Formen von WordCloud
Der Einsatz von Masken ermöglicht die Ausgabe der Wordcloud in beliebiger Art und Weise. Wir kommen so weg von der rechteckigen Anzeige hin zu Kreisen, Ellipsen oder einfach als Füllung von Figuren.
Starten wir mit einem Kreis:
Dazu erstellen wir eine Maske, die wir dem Aufruf mitgeben.
Für das Beispiel benötigen wir das Modul numpy
:
import numpy as np
Und folgende Angaben führen zu einem Kreis:
x, y = np.ogrid[:1000, :1000]
mask = (x - 500) ** 2 + (y - 500) ** 2 > 400 ** 2
mask = 255 * mask.astype(int)
wordcloud = WordCloud(background_color="white",width=1920, height=1080, mask=mask).generate(text)