文本数据的可视化:Python中的词云生成

在日常设计中,经常遇到用文字来表达想法或传递信息的设计。这些文字以不同的大小、形状、颜色出现,通过出现频率来表示读者或想法的重要性。这种设计也被称为词云或标签云。

那么,什么是词云呢?词云是一种文本数据的可视化技术,其中出现频率最高的单词以最大的字体大小显示。在这篇文章中,将学习如何在Python中创建自定义词云。

安装

首先,来安装特定的包。Python提供了一个内置库叫做“WordCloud”,它可以帮助生成词云。可以通过以下命令来安装这个库:

! pip install wordcloud

还将使用基本库如‘numpy’, ‘pandas’, ‘matplotlib’, ‘pillow’。如果是Python新手,请访问相关教程,这将对非常有帮助。

Numpy:最受欢迎的库是Numpy。它主要用于处理多维数组和矩阵。在这篇文章中,将用它来改变词云图像的形状。

Pandas:Pandas库用于数据分析,这里用它来从一组信息中提取单词。

Matplotlib:对于可视化,Python提供了matplotlib库,它为用pandas收集的数据创建图表。

Pillow:Pillow库用于收集不同的图像用于词云生成,用作PIL。

以下代码可以用于导入这些库:

import numpy as np import pandas as pd import matplotlib.pyplot as plt from PIL import Image from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator

数据集

作为样本数据集,将使用来自kaggle的“Fake News classification”数据集。

词云生成

让进入代码部分来生成词云。这部分将详细描述构建自定义词云图像的不同参数。

函数描述:

wordcloud():从WordCloud库导入的函数,将生成词云。

.generate方法:在.generate方法中包含一个文本数据参数(想要创建词云的文本)。语法是.generate(text)

imshow():imshow函数将显示图像。

现在,让从一个基本的词云示例开始:

# 创建并生成词云图像 wordcloud = WordCloud().generate(text) # 显示生成的图像 plt.imshow(wordcloud, interpolation="bilinear") plt.figure(figsize=[8,10]) plt.axis("off")

哇!已经成功生成了第一个词云图像。它显示大多数文章/新闻数据都谈到了“trump”,“said”,“one”,“people”。

接下来,可以改变词云的最大字体大小、最大单词数和背景颜色。

# 改变字体大小、最大单词数和背景颜色 wordcloud = WordCloud(max_font_size=50, max_words=10, background_color="white").generate(text) # 显示图像 plt.imshow(wordcloud, interpolation="bilinear") plt.figure() plt.axis("off")

在上述代码中,已经改变了WordCloud函数的参数。

max_font_size:这个参数定义了最大单词的最大字体大小。如果没有设置,将根据图像高度调整。

max_words:它指定了单词的最大数量,默认是200。

background_color:它设置了词云图像的背景颜色,默认颜色定义为黑色。

为了显示词云图像,使用了matplotlib.pyplot的.imshow()方法。在上述代码中,使用了两个参数:

wordcloud:在上述步骤中创建的

interpolation="bilinear":用于显示更平滑的图像。

让再生成一个具有宽度、高度、随机状态、背景颜色和词云颜色图的词云。

# 创建停用词 stopwords = set(STOPWORDS) # 生成一个词云图像 wordcloud = WordCloud(width = 3000, height = 2000, random_state=1, background_color='black', colormap='Set2', collocations=False, stopwords = STOPWORDS).generate(text) # 显示生成的图像 plt.imshow(wordcloud, interpolation='bilinear') plt.axis("off") plt.show()

以下参数的描述如下:

width/height:可以使用这些参数来改变画布的尺寸。这里将宽度设置为3000,高度设置为2000。

random_state:它将为每个单词返回PIL颜色,设置为整数值。

background_color:它用于词云图像的背景颜色。如果想添加不同的颜色,可以探索相关网站。

colormap:使用这个参数可以改变每个单词的颜色。Matplotlib颜色图提供很棒的颜色。

collocation:collocation参数设置为FALSE以确保词云不包含任何二元组或重复单词。

stopwords:‘stop_words’是那些在英语中常用的单词,如‘we’, ‘the’, ‘a’, ‘an’等。因此,必须消除这些单词。已经从WordCloud库导入了STOPWORDS函数。

自定义形状词云

要创建自定义形状,需要一个PNG格式的遮罩图像。词云的设计将在该图像中生成。可以使用关键词如“词云遮罩图像”在不同的搜索引擎上搜索。也可以访问这个数据集——在这里,可以探索不同的自定义图像。

在这篇文章中,使用了‘cloud.png’来创建自定义图像。

要创建自定义形状,‘WordCloud’函数有一个mask参数,使其能够接受可遮罩的图像。将‘cloud.png’图像添加到NumPy数组中,并将其存储为mask变量。在这里,改变了更多的参数来创建一个吸引人的词云。参数描述如下:

mask:指定词云图像的形状。默认情况下,它采用矩形。正如所知,已经创建了一个变量作为mask,并将其分配给mask参数。

contour_width:此参数为词云遮罩创建轮廓。将遮罩图像的宽度设置为3。

contour_color:contour_color用于遮罩图像的轮廓颜色。它可以是字符串或颜色代码。这里使用颜色代码‘#023075’。

# 生成一个词云图像 stopwords = set(STOPWORDS) mask = np.array(Image.open("../input/input-img/cloud.png")) wordcloud = WordCloud(stopwords=stopwords,background_color='white', max_words=1000, mask=mask,contour_color='#023075',contour_width=3,colormap='rainbow').generate(' '.join(df['text_without_stopwords'])) # 创建图像作为云 plt.figure() plt.imshow(wordcloud, interpolation="bilinear") plt.axis("off") # 存储到文件 plt.savefig("cloud.png", format="png") plt.show()

太棒了!刚刚创建了一个云形状的词云。它看起来像一个充满单词的云。让使用Twitter徽标作为遮罩图像再创建一个词云。

# 生成一个词云图像 stopwords = set(STOPWORDS) mask = np.array(Image.open("../input/input-img/Twitter.png")) wordcloud = WordCloud(stopwords=stopwords, background_color="white", max_words=1000, mask=mask).generate(' '.join(df['text_without_stopwords'])) # 创建Twitter图像 plt.figure() plt.imshow(wordcloud, interpolation="bilinear") plt.axis("off") # 存储到文件 plt.savefig("twitter.png", format="png") plt.show() # 生成一个词云图像 stopwords = set(STOPWORDS) mask = np.array(Image.open("../input/input-img/News_mask.PNG")) wordcloud = WordCloud(width = 3000, height = 2000, random_state=1, background_color='white', colormap='Set2', collocations=False, stopwords = STOPWORDS,mask=mask).generate(' '.join(df['text_without_stopwords'])) # 创建着色来自图像 image_colors = ImageColorGenerator(mask) plt.figure(figsize=[20,20]) plt.imshow(wordcloud, interpolation="bilinear") plt.axis("off") # 存储到文件 plt.savefig("news.png", format="png") plt.show() # 生成一个词云图像 stopwords = set(STOPWORDS) mask = np.array(Image.open("../input/input-img/News_mask.PNG")) wordcloud = WordCloud(stopwords=stopwords, background_color="white", mode="RGBA", max_words=1000, mask=mask).generate(' '.join(df['text_without_stopwords'])) # 创建着色来自图像 image_colors = ImageColorGenerator(mask) plt.figure(figsize=[20,20]) plt.imshow(wordcloud.recolor(color_func=image_colors), interpolation="bilinear") plt.axis("off") # 存储到文件 plt.savefig("news1.png", format="png") plt.show()
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485