Code aus diesem Tutorial online ausführen und bearbeiten
Code ausführenNicht alle Maskenbilder haben das gleiche Format, was zu unterschiedlichen Ergebnissen führt, so dass die WordCloud-Funktion nicht richtig funktioniert. Um sicherzustellen, dass deine Maske funktioniert, schauen wir sie uns in Form eines Numpy-Arrays an:
wine_mask = np.array(Image.open("img/wine_mask.png"))
wine_mask
array([[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
...,
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0]], dtype=uint8)
Die Maskierungsfunktionen erfordern, dass der weiße Anteil der Maske 255 und nicht 0 ist (Ganzzahl). Dieser Wert stellt die "Intensität" des Pixels dar. Werte von 255 sind rein weiß, während Werte von 1 schwarz sind. Hier kannst du die unten stehende Funktion verwenden, um deine Maske umzuwandeln, wenn deine Maske das gleiche Format wie oben hat. Beachte, wenn du eine Maske hast, bei der der Hintergrund nicht 0, sondern 1 oder 2 ist, passe die Funktion an deine Maske an.
Zuerst benutzt du die Funktion transform_format(), um die Zahlen 0 bis 255 zu tauschen.
def transform_format(val):
if val == 0:
return 255
else:
return val
Erstelle dann eine neue Maske mit der gleichen Form wie die Maske, die du gerade in der Hand hast, und wende die Funktion transform_format() auf jeden Wert in jeder Zeile der vorherigen Maske an.
# Transform your mask into a new one that will work with the function:
transformed_wine_mask = np.ndarray((wine_mask.shape[0],wine_mask.shape[1]), np.int32)
for i in range(len(wine_mask)):
transformed_wine_mask[i] = list(map(transform_format, wine_mask[i]))
Jetzt hast du eine neue Maske in der richtigen Form. Der Ausdruck der umgewandelten Maske ist der beste Weg, um zu überprüfen, ob die Funktion gut funktioniert.
# Check the expected result of your mask
transformed_wine_mask
array([[255, 255, 255, ..., 255, 255, 255],
[255, 255, 255, ..., 255, 255, 255],
[255, 255, 255, ..., 255, 255, 255],
...,
[255, 255, 255, ..., 255, 255, 255],
[255, 255, 255, ..., 255, 255, 255],
[255, 255, 255, ..., 255, 255, 255]])
Mit der richtigen Maske kannst du beginnen, die Wortwolke mit deiner ausgewählten Form zu erstellen. Beachte, dass es in der Funktion WordCloud ein Argument mask gibt, das die transformierte Maske enthält, die du oben erstellt hast. contour_width und contour_color sind, wie der Name schon sagt, Argumente, um die Umrissmerkmale der Wolke anzupassen. Die Weinflasche, die du hier hast, ist eine Rotweinflasche, also scheint Feuerstein eine gute Wahl für die Konturfarbe zu sein. Für weitere Farbauswahlen kannst du einen Blick auf diese Farbcodetabelle werfen.
# Create a word cloud image
wc = WordCloud(background_color="white", max_words=1000, mask=transformed_wine_mask,
stopwords=stopwords, contour_width=3, contour_color='firebrick')
# Generate a wordcloud
wc.generate(text)
# store to file
wc.to_file("img/wine.png")
# show
plt.figure(figsize=[20,10])
plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
plt.show()

Voila! Du hast eine Wortwolke in Form einer Weinflasche erstellt! Es scheint, dass in den Weinbeschreibungen am häufigsten schwarze Kirschen, Fruchtaromen und vollmundige Eigenschaften des Weins erwähnt werden. Schauen wir uns nun die Bewertungen für jedes Land genauer an und stellen die Wortwolke mit der Flagge des jeweiligen Landes dar. Im Folgenden findest du ein Beispiel, das du bald erstellen wirst:

Erstellen einer Wortwolke nach einem Farbmuster
Du kannst alle Bewertungen der fünf Länder mit den meisten Weinen kombinieren. Um diese Länder zu finden, kannst du entweder das Diagramm Land vs. Anzahl der Weine oben betrachten oder die Gruppe verwenden, die du oben erhalten hast, um die Anzahl der Beobachtungen für jedes Land (jede Gruppe) zu finden und sort_values() mit dem Argument ascending=False absteigend zu sortieren.
country.size().sort_values(ascending=False).head()
country
US 54504
France 22093
Italy 19540
Spain 6645
Portugal 5691
dtype: int64
Jetzt hast du also 5 Top-Länder: die USA, Frankreich, Italien, Spanien und Portugal. Du kannst die Anzahl der Länder ändern, indem du die gewünschte Anzahl in head() einträgst.
country.size().sort_values(ascending=False).head(10)
country
US 54504
France 22093
Italy 19540
Spain 6645
Portugal 5691
Chile 4472
Argentina 3800
Austria 3345
Australia 2329
Germany 2165
dtype: int64
Für den Moment sollten fünf Länder genug sein.
Um alle Rezensionen für jedes Land zu erhalten, kannst du alle Rezensionen mit der " ".join(list) Syntax verketten, die alle Elemente in einer Liste verbindet und sie durch Leerzeichen trennt.
# Join all reviews of each country:
usa = " ".join(review for review in df[df["country"]=="US"].description)
fra = " ".join(review for review in df[df["country"]=="France"].description)
ita = " ".join(review for review in df[df["country"]=="Italy"].description)
spa = " ".join(review for review in df[df["country"]=="Spain"].description)
por = " ".join(review for review in df[df["country"]=="Portugal"].description)
Dann kannst du die Wortwolke wie oben beschrieben erstellen. Du kannst die beiden Schritte des Erstellens und Erzeugens wie folgt kombinieren. Die Farbzuordnung wird direkt vor dem Plotten der Wolke mit der Funktion ImageColorGenerator aus der WordCloud-Bibliothek durchgeführt.
# Generate a word cloud image
mask = np.array(Image.open("img/us.png"))
wordcloud_usa = WordCloud(stopwords=stopwords, background_color="white", mode="RGBA", max_words=1000, mask=mask).generate(usa)
# create coloring from image
image_colors = ImageColorGenerator(mask)
plt.figure(figsize=[7,7])
plt.imshow(wordcloud_usa.recolor(color_func=image_colors), interpolation="bilinear")
plt.axis("off")
# store to file
plt.savefig("img/us_wine.png", format="png")
plt.show()

Sieht gut aus! Jetzt wiederholen wir das Ganze mit einem Bericht aus Frankreich.
# Generate a word cloud image
mask = np.array(Image.open("img/france.png"))
wordcloud_fra = WordCloud(stopwords=stopwords, background_color="white", mode="RGBA", max_words=1000, mask=mask).generate(fra)
# create coloring from image
image_colors = ImageColorGenerator(mask)
plt.figure(figsize=[7,7])
plt.imshow(wordcloud_fra.recolor(color_func=image_colors), interpolation="bilinear")
plt.axis("off")
# store to file
plt.savefig("img/fra_wine.png", format="png")
#plt.show()
Bitte beachte, dass du das Bild nach dem Plotten speichern solltest, um die Wortwolke mit dem gewünschten Farbmuster zu erhalten.

# Generate a word cloud image
mask = np.array(Image.open("img/italy.png"))
wordcloud_ita = WordCloud(stopwords=stopwords, background_color="white", max_words=1000, mask=mask).generate(ita)
# create coloring from image
image_colors = ImageColorGenerator(mask)
plt.figure(figsize=[7,7])
plt.imshow(wordcloud_ita.recolor(color_func=image_colors), interpolation="bilinear")
plt.axis("off")
# store to file
plt.savefig("img/ita_wine.png", format="png")
#plt.show()

Nach Italien folgt Spanien:
# Generate a word cloud image
mask = np.array(Image.open("img/spain.png"))
wordcloud_spa = WordCloud(stopwords=stopwords, background_color="white", max_words=1000, mask=mask).generate(spa)
# create coloring from image
image_colors = ImageColorGenerator(mask)
plt.figure(figsize=[7,7])
plt.imshow(wordcloud_spa.recolor(color_func=image_colors), interpolation="bilinear")
plt.axis("off")
# store to file
plt.savefig("img/spa_wine.png", format="png")
#plt.show()

Finally, Portugal:
# Generate a word cloud image
mask = np.array(Image.open("img/portugal.png"))
wordcloud_por = WordCloud(stopwords=stopwords, background_color="white", max_words=1000, mask=mask).generate(por)
# create coloring from image
image_colors = ImageColorGenerator(mask)
plt.figure(figsize=[7,7])
plt.imshow(wordcloud_por.recolor(color_func=image_colors), interpolation="bilinear")
plt.axis("off")
# store to file
plt.savefig("img/por_wine.png", format="png")
#plt.show()

Das Endergebnis findest du in der Tabelle unten, um die Masken und die Wortwolken zu vergleichen. Welches ist dein Favorit?





Wie man Wortwolken interpretiert
Wir haben nun einige Beispiele für Wortwolken gesehen und wie man sie in Python erstellt. Es lohnt sich jedoch zu erforschen, wie man diese Datenvisualisierungen interpretieren kann. Im Allgemeinen steht die Größe jedes Worts in der Wolke für seine Häufigkeit oder Wichtigkeit im Text. Je häufiger ein Wort im Text vorkommt, desto größer wird es in der Wortwolke angezeigt.
Bei der Interpretation von Wortwolken gibt es einige Dinge zu beachten:
- Achte auf die Größe der Wörter: Wie bereits erwähnt, entspricht die Größe jedes Wortes in der Wolke seiner Häufigkeit oder Bedeutung im Text. Deshalb sind größere Wörter in der Regel wichtiger für die Gesamtaussage des Textes.
- Suche nach Mustern: Gibt es Gruppen von Wörtern, die häufig zusammen vorkommen? Das kann auf ein Thema hinweisen, das im Text wichtig ist.
- Bedenke den Kontext: Denk daran, dass die Wortwolke nur die Wörter darstellt, die im Text vorkommen, und keine Informationen über ihre Bedeutung oder ihre Verwendung liefert. Deshalb ist es wichtig, über den Kontext des Textes und die spezifischen Bedeutungen der verwendeten Wörter nachzudenken.
- Nimm dich vor Ausreißern in Acht: Manchmal kann ein Wort in der Wortwolke sehr groß erscheinen, einfach weil es häufig vorkommt, auch wenn es für die Gesamtaussage des Textes nicht besonders bedeutsam oder relevant ist. Halte Ausschau nach solchen Ausreißern und versuche, dich auf die Wörter und Muster zu konzentrieren, die am wichtigsten sind.
Insgesamt kann eine Wortwolke ein nützliches Instrument sein, um die wichtigsten Themen und Ideen in einem Text schnell zu visualisieren. Es ist jedoch wichtig zu bedenken, dass es nur ein Werkzeug unter vielen für die Analyse von Textdaten ist und in Verbindung mit anderen Methoden für eine tiefere Analyse und ein besseres Verständnis verwendet werden sollte.
Herzlichen Glückwunsch!
Du hast es geschafft! Du hast verschiedene Möglichkeiten kennengelernt, wie du mit der WordCloud-Bibliothek eine Wortwolke in Python zeichnen kannst, die für die Visualisierung einer Textanalyse hilfreich ist. Du lernst auch, wie du die Wolke in jede beliebige Form maskieren kannst, indem du eine Farbe deiner Wahl verwendest. Wenn du deine Fähigkeiten üben willst, solltest du das Projekt des DataCamps in Betracht ziehen: Die heißesten Themen im maschinellen Lernen
Wenn du mehr über die Verarbeitung natürlicher Sprache erfahren möchtest, besuche unseren Kurs Grundlagen der natürlichen Sprachverarbeitung in Python.


Was ist eine Wortwolke?
Vielleicht hast du schon einmal eine Wolke mit vielen Wörtern in verschiedenen Größen gesehen, die die Häufigkeit oder Wichtigkeit der einzelnen Wörter darstellen. Das nennt man eine Tag Cloud oder Wortwolke. In diesem Tutorial lernst du, wie du eine Wortwolke in Python erstellst und sie nach deinen Vorstellungen anpasst. Dieses Tool ist praktisch, um Textdaten zu untersuchen und deinen Bericht lebendiger zu gestalten.
Übe mit dieser praktischen Übung, eine WordCloud in Python zu erstellen.
In diesem Lernprogramm werden wir einen Datensatz mit Weinrezensionen von der Wine Enthusiast Website verwenden, um zu lernen:
Wann eine Wortwolke verwendet werden sollte
Es ist wichtig, daran zu denken, dass Wortwolken zwar nützlich sind, um häufig vorkommende Wörter in einem Text oder Datensatz zu visualisieren, dass sie aber in der Regel nur einen Überblick über die Themen bieten. Sie ähneln den Bar Blots, sind aber oft visuell ansprechender (wenn auch manchmal schwieriger zu interpretieren). Wortwolken können besonders hilfreich sein, wenn du das möchtest:
Es ist jedoch wichtig zu bedenken, dass Wortwolken keinen Kontext oder ein tieferes Verständnis der verwendeten Wörter und Ausdrücke liefern. Daher sollten sie in Verbindung mit anderen Methoden zur Analyse und Interpretation von Textdaten verwendet werden.
Voraussetzungen
Um mit der Erstellung einer Wortwolke in Python zu beginnen, musst du einige der folgenden Pakete installieren:
Die Bibliothek
numpyist eine der beliebtesten und hilfreichsten Bibliotheken, die für den Umgang mit mehrdimensionalen Arrays und Matrizen verwendet wird. Sie wird auch in Kombination mit derpandasBibliothek verwendet, um Datenanalysen durchzuführen.Das Python-Modul
osist eine integrierte Bibliothek, du musst es also nicht installieren. Um mehr über den Umgang mit Dateien mit dem os-Modul zu erfahren, ist dieses DataCamp-Tutorial zum Lesen und Schreiben von Dateien in Python hilfreich.Für die Visualisierung ist
matplotlibeine Basisbibliothek, die es vielen anderen Bibliotheken ermöglicht, auf ihrer Grundlage zu arbeiten und zu plotten.seabornoderwordcloud, die du in diesem Lernprogramm verwenden wirst. DiepillowBibliothek ist ein Paket, das das Lesen von Bildern ermöglicht. Pillow ist ein Wrapper für PIL - Python Imaging Library. Du brauchst diese Bibliothek, um das Bild als Maske für die Wortwolke einzulesen.wordcloudkann ein wenig schwierig zu installieren sein. Wenn du nur eine einfache Wortwolke erstellen willst, reichtpip install wordcloudoderconda install -c conda-forge wordcloudaus. Die neueste Version mit der Möglichkeit, die Wolke in jede beliebige Form zu bringen, erfordert jedoch eine andere Installationsmethode (siehe unten):Dataset:
Dieses Tutorial verwendet den Weinbewertungsdatensatz von Kaggle. Diese Sammlung ist ein großartiger Datensatz zum Lernen, da es keine fehlenden Werte gibt (was Zeit kostet) und viele Text- (Weinbewertungen), kategoriale und numerische Daten.
Erstellen einer Wortwolke in Python: Vorbereitung
Installiere die notwendigen Bibliotheken
Als Erstes lädst du alle notwendigen Bibliotheken:
Wenn du mehr als 10 Bibliotheken hast, ordne sie nach Abschnitten (z. B. Basislibs, Visualisierung, Modelle usw.). Durch die Verwendung von Kommentaren im Code wird dein Code sauber und leicht nachvollziehbar.
Lade die Daten in den Datenrahmen
Benutze jetzt Pandas
read_csv, um den Datenrahmen zu laden. Beachte die Verwendung vonindex_col=0, was bedeutet, dass wir den Zeilennamen (Index) nicht als separate Spalte einlesen.Du kannst einige grundlegende Informationen über den Datensatz ausdrucken, indem du
print()mit.format()kombinierst, um einen schönen Ausdruck zu erhalten.Gruppen erstellen, um Merkmale zu vergleichen
Um Vergleiche zwischen Gruppen eines Merkmals anzustellen, kannst du
groupby()verwenden und eine zusammenfassende Statistik berechnen.Mit dem Weindatensatz kannst du nach Ländern gruppieren und dir entweder die zusammenfassenden Statistiken für alle Länder nach Punkten und Preis ansehen oder die beliebtesten und teuersten auswählen.
So werden die Top 5 der höchsten Durchschnittspunkte aller 44 Länder ermittelt:
Plotten der Daten
Du kannst die Anzahl der Weine nach Land mit der Plot-Methode von Pandas DataFrame und Matplotlib darstellen. Wenn du mit Matplotlib nicht vertraut bist, wirf einen Blick auf unser Matplotlib-Tutorial.
Unter den 44 Ländern, die Wein produzieren, haben die USA mehr als 50.000 Weintypen im Datensatz der Weinkritik, doppelt so viele wie das nächste Land auf der Rangliste, Frankreich - das Land, das für seinen Wein berühmt ist. Italien produziert auch viele Qualitätsweine und hat fast 20.000 Weine, die du bewerten kannst.
Untersuche die Daten
Werfen wir nun einen Blick auf die Darstellung aller 44 Länder nach dem am höchsten bewerteten Wein, wobei wir die gleiche Technik wie oben anwenden:
Australien, die USA, Portugal, Italien und Frankreich haben alle 100-Punkte-Weine. Wie du siehst, liegt Portugal auf Platz 5 und Australien auf Platz 9, was die Anzahl der produzierten Weine im Datensatz angeht, und beide Länder haben weniger als 8000 Weinsorten.
Das ist ein bisschen Datenexploration, um den Datensatz kennenzulernen, den du heute benutzt. Jetzt tauchst du in den Hauptgang der Mahlzeit ein: die Wortwolke.
Einrichten einer einfachen Wortwolke in Python
Erste Schritte
Eine Wortwolke ist eine Technik, die zeigt, welche Wörter in einem bestimmten Text am häufigsten vorkommen. Wir können eine Python-Bibliothek verwenden, die uns dabei hilft. Das erste, was du tun solltest, bevor du eine Funktion verwendest, ist, dir den Docstring der Funktion anzusehen und alle erforderlichen und optionalen Argumente zu überprüfen. Dazu gibst du
?functionein und führst es aus, um alle Informationen zu erhalten.Du kannst sehen, dass das einzige erforderliche Argument für ein WordCloud-Objekt die Textist, während alle anderen optional sind.
Beginne mit einer einfachen Eingabe
Beginnen wir also mit einem einfachen Beispiel: Wir verwenden die erste Beobachtungsbeschreibung als Eingabe für die Wortwolke. Die drei Schritte sind:
Toll! Wie du siehst, wurde in der ersten Bewertung viel über den Trockengeschmack und die Aromen des Weins geschrieben.
Optionale Argumente für die Wortwolke ändern
Ändere nun einige optionale Argumente der Wortwolke wie
max_font_size,max_wordundbackground_color.Es scheint, als wäre es keine gute Idee,
max_font_sizehier zu verwenden. Dadurch wird es schwieriger, die Unterschiede zwischen den Worthäufigkeiten zu erkennen. Wenn du den Hintergrund aufhellst, ist die Wolke jedoch leichter zu lesen.Wenn du das Bild speichern möchtest, bietet WordCloud die Funktion
to_fileDas Ergebnis wird so aussehen, wenn du sie einlädst:
Du hast wahrscheinlich das Argument
interpolation="bilinear"in derplt.imshow()bemerkt. Dadurch wird das angezeigte Bild flüssiger dargestellt. Wenn du mehr über die Auswahl wissen willst, ist dieses Tutorial über Interpolationsmethoden für imshow eine nützliche Ressource.Daten kombinieren
Jetzt fasst du also alle Weinbewertungen in einem großen Text zusammen und erstellst eine große fette Wolke, um zu sehen, welche Eigenschaften bei diesen Weinen am häufigsten vorkommen.
Es scheint, als wären Schwarzkirsche und Vollmundigkeit die am häufigsten genannten Eigenschaften, und Cabernet Sauvignon ist der beliebteste von allen. Das deckt sich mit der Tatsache, dass Cabernet Sauvignon "eine der bekanntesten Rotweinrebsorten der Welt ist. Er wird in fast allen großen Weinbauländern angebaut, und zwar in den unterschiedlichsten Klimazonen, vom kanadischen Okanagan Valley bis zum Beqaa Valley im Libanon.[1]
Visualisierung von Wortwolken in Python
Jetzt lass uns diese Worte in eine Tasse (oder sogar eine Flasche) Wein gießen!
Um eine Form für deine Wortwolke zu erstellen, musst du zunächst eine PNG-Datei finden, die als Maske dienen soll. Im Folgenden findest du ein schönes Exemplar, das im Internet verfügbar ist: