Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

einfache Wordcloud

Um ganz schnell und einfach eine Wordcloud zu erstellen, brauchen wir nur die Packages "wordcloud" und "matplotlib" in unser Pythonprojekt zu installieren.

In Kapitel - Python Projekt aufsetzen habe ich gezeigt, wie man ein neues Pythonprojekt mit poetry aufsetzt und in diesem Kapitel habe ich gezeigt, wie wir ein Projekt so aufsetzen können, dass wir es mit poetry run start ausführen können.

Nachdem wir mit poetry add wordcloud matplotlib als Befehl in unserem Projekt ausgeführt haben, können wir dies direkt als aller erstes ganz oben in unserer main.py Datei importieren:

from wordcloud import WordCloud
import matplotlib.pyplot as plt

Hier importiere ich WordCloud von dem Package wordcloud und pyplot von matplotlib, welches ich umbenenne zu plt, um später nicht immer pyplot tippen zu müssen, sondern einfach nur plt.

Um eine Wordcloud von etwas erstellen zu können, brauchen wir das "etwas", zum Beispiel ein Buch. Dafür habe ich mal das Buch "Japan an attempt at interpretation" von Lafcadio als .txt Datei aus dem Internet heruntergeladen und in den Ordner "books" in meinem Projekt mit den Namen "lafcadio.txt" abgespeichert.

Sobald wir ein Buch oder irgendeinen anderen Text haben, müssen wir diesen erstmal in unser Programm lesen:

def main():
    f = open("books/lafcadio.txt", "r")
    book = f.read()
    f.close()

Mit der Funktion open geben wir den Pfad zu einer Datei, die wir sprichwörtlich "öffnen" wollen, mit einem zweiten String, um den Betriebsystem zu sagen, dass wir vorhaben diese Datei zu lesen. Mit read lesen wir dann den kompletten Inhalt der Datei als String. Und zum guten Schluss, schließen wir die geöffnete Datei, damit wir nicht unnötig Resourcen vom Computer blockieren, die auch andersweitig verwendet werden könnten.

Um jetzt eine Wordcloud zu erstellen, fügen wir diese Zeilen noch hinzu:

def main():
    # ...

    wordcloud = WordCloud().generate(book)
    plt.imshow(wordcloud)
    plt.show()

Mit WordCloud() initialisieren wir eine WordCloud. Die generate Funktion generiert dann eine neue WordCloud mit dem Text, den wir eben dieser "generate" Funktion geben.

plt.imshow(wordcloud) nimmt die generierte Wordcloud und zeigt diese als ein Image grafisch dar, beziehungsweise wird die Wordcloud hier noch nicht gezeigt, sondern einer "Warteliste hinzugefügt" und mit plt.show() werden dann alle "Aufträge", in dem Fall nur die eine Wordcloud, die wir plt gegeben haben, grafisch in einem neuen Fenster dargestellt.

Wenn wir jetzt poetry run start in der Konsole ausführen, dann sehen wir eine Wordcloud:

TODO: Bild

Diese Wordcloud sieht aber ein bisschen hässlig aus, oder?

Wir können der WordCloud noch mehr Informationen geben, um diese hübscher zu machen. Hier mal ein Beispiel:

def main():
    # ...

    wordcloud = WordCloud(
        background_color = "white",
        height = 1000,
        width = 1000,
        max_words = 200,
        random_state = 5,
    ).generate(book)
    
    # ...

Als erstes mache ich den Hintergrund weiß und die Höhe und Weite zu 1000px, damit unsere Wordcloud nicht nur größer ist, sondern auch eine höhere Auflösung hat und nicht mehr so verschwommen aussieht. Mit max_words kann ich sagen wie viele Wörter ich in der Wordcloud maximal haben möchte.

Speicher Wordcloud als .png

Mit plt.show() zeigen wir zwar die Wordcloud grafisch in einem Fenster und ich könnte jetzt davon ein Screenshot machen, um es zum Beispiel in meiner Hausarbeit zu verwenden, aber dies geht auch viel viel besser.

Die to_file Funktion von WordCloud erlaubt es uns, eine generierte WordCloud als png, jpg/jpeg, svg oder pdf abzuspeichern.

Zum Beispiel hier speichere ich die Wordcloud als png in den Ordner "ouput", den ich in meinen Projekt erstellt habe, ab:

def main():
    # ...

    wordcloud.to_file("output/cloud_simple.png")
    
    # ...

Der ganze Code

Am Ende sieht dann der ganze Code alles zusammen so aus.

from wordcloud import WordCloud
import matplotlib.pyplot as plt

def main():
    f = open("books/lafcadio.txt", "r")
    book = f.read()
    f.close()

    wordcloud = WordCloud(
        background_color = "white",
        height = 1000,
        width = 1000,
        max_words = 200,
    ).generate(book)

    wordcloud.to_file("output/cloud_simple.png")

    plt.imshow(wordcloud)
    plt.show()