将单词云创建为您想要使用Python的任何形状
#python #datascience #nlp

数据可视化(例如图表,图形,信息图表等)为企业提供了传达重要信息的价值,但是如果您的数据基于文本,该怎么办?如果您希望令人惊叹的可视化格式突出显示重要的文本数据点,则使用Word Cloud。

如果您不熟悉Word Cloud,则是由一组单词组成的图片,每个单词的大小代表频率或重要性。这个词出现越大,越大,在给定文本中提到的越多,它就越重要。单词云易于阅读,易于理解。关键词在读者身上脱颖而出,并且在视觉上吸引了观众。

但是,看到单词云的简单形式可能会感到无聊。如果我告诉您WordCloud也可以根据我们的喜好定制。在本文中,我们探讨了如何以您想要的任何形式生成python的单词云。所以,让我们开始。

如果您想查看本文的完整代码,请访问我的github。第一步是安装将要使用的软件包,即WordCloud。打开您的终端(Linux / MacOS)或命令提示符(Windows),然后输入:

$ pip install wordcloud

我们将首先在Internet上的文章中进行网络刮擦。如果您不熟悉网络刮擦,建议您阅读我以前的文章,标题为Web Scraping News with 4 lines using Python

在这篇文章中,我将从Wikipedia的消息中删除标题为“ Ice Cream”的消息。

from newspaper import Article
article = Article('https://en.wikipedia.org/wiki/Ice_cream')
article.download()
article.parse()

,我们只使用文章的文字,那就是:

article.text

简单的单词云

我们将首先制作一个简单的单词云。要采取的第一步是导入我们将使用的依赖项。

from wordcloud import WordCloud
import matplotlib.pyplot as plt

在这里,我们使用 wordcloud 库和 matplotlib wordcloud 库用于生成单词云,而 matplotlib 用于显示单词云的结果。之后,我们称云函数并显示字云。

wc = WordCloud()
wc.generate(article.text)
plt.imshow(wc, interpolation="bilinear")
plt.axis('off')
plt.show()

这是我们创建的简单单词云的结果。

Simple word cloud

此外,WordCloud函数具有参数,包括:

  • background_color =背景的颜色
  • max_words =所使用的唯一单词的最大数量
  • stopwords = stopword list
  • max_font_size =最大字体大小
  • Random_state =确保在
  • 中生成随机数
  • 相同的订单,因此即使生成了几次,结果也将是相同的
  • width =输出的宽度大小
  • 高度=输出的高度大小

让我们尝试使用上面的参数。首先,让我们导入WordCloud库提供的停止字

from wordcloud import STOPWORDS
Then we enter the following code

wc = WordCloud(background_color="white", max_words=2000,
               stopwords=STOPWORDS, max_font_size=256,
               random_state=42, width=500, height=500)
wc.generate(article.text)
plt.imshow(wc, interpolation="bilinear")
plt.axis('off')
plt.show()

这就是结果。

Simple word cloud with parameter tuning<br>

添加自定义字体

我们还可以更改所使用的字体。您可以从网站dafont下载字体供个人使用。接下来,将字体的路径输入参数。

font_path = 'path/to/font'
wc = WordCloud(stopwords=STOPWORDS, font_path=font_path, 
               background_color="white", max_words=2000,
               max_font_size=256, random_state=42,
               width=500, height=500)
wc.generate(article.text)
plt.imshow(wc, interpolation="bilinear")
plt.axis('off')
plt.show()

这是结果

Custom font

添加自定义蒙版

接下来,我们将为单词云添加掩码。请记住,所使用的图像的背景必须为白色,否则,系统将将背景视为对象。另外,背景是不透明的,因为透明的颜色将被视为黑色。我将使用以下图像作为口罩。

Image mask

我们需要添加一些依赖项来加载图像。

from PIL import Image
import numpy as np

接下来,输入字体的路径进入参数。

mask = np.array(Image.open('path/to/image'))
wc = WordCloud(stopwords=STOPWORDS, font_path=font_path,
               mask=mask, background_color="white",
               max_words=2000, max_font_size=256,
               random_state=42, width=mask.shape[1],
               height=mask.shape[0])
wc.generate(article.text)
plt.imshow(wc, interpolation="bilinear")
plt.axis('off')
plt.show()

这就是结果。

Masked word cloud

调整颜色

我们还可以调整单词云中使用的颜色。基本上,我们可以自由确定我们将使用的颜色,但是在本文中,我将讨论相当常用的。我们将仅使用一种颜色。但是,我们必须定义要使用的函数。

def one_color_func(word=None, font_size=None, 
                   position=None, orientation=None, 
                   font_path=None, random_state=None):
    h = 160 # 0 - 360
    s = 100 # 0 - 100
    l = 50 # 0 - 100
return "hsl({}, {}%, {}%)".format(h, s, l)

使用的颜色格式是HSL格式(色调,饱和,轻度)。有关更多详细信息,请访问HSL彩色选择器,以了解有关所使用的颜色的更多信息。然后,要形成单词云,我们要做的就是添加我们创建的函数。

wc = WordCloud(stopwords=STOPWORDS, font_path=font_path,
               mask=mask, background_color="white",
               max_words=2000, max_font_size=256,
               random_state=42, width=mask.shape[1],
               height=mask.shape[0], color_func=one_color_func)
wc.generate(article.text)
plt.imshow(wc, interpolation="bilinear")
plt.axis('off')
plt.show()

,图像将如下出现。

One color

除此之外,我们还可以通过在一定范围内随机化来产生相似的颜色。我将为轻度添加一个随机功能以调整颜色的亮度。

def similar_color_func(word=None, font_size=None,
                       position=None, orientation=None,
                       font_path=None, random_state=None):
    h = 40 # 0 - 360
    s = 100 # 0 - 100
    l = random_state.randint(30, 70) # 0 - 100
return "hsl({}, {}%, {}%)".format(h, s, l)

那么,与以前一样。将函数输入WordCloud函数。

wc = WordCloud(stopwords=STOPWORDS, font_path=font_path,
               mask=mask, background_color="white",
               max_words=2000, max_font_size=256,
               random_state=42, width=mask.shape[1],
               height=mask.shape[0], color_func=similar_color_func)
wc.generate(article.text)
plt.imshow(wc, interpolation="bilinear")
plt.axis('off')
plt.show()

,结果就是这样。

Similar colors

此外,我们可以定义许多我们将使用的颜色。例如。

def multi_color_func(word=None, font_size=None,
                     position=None, orientation=None,
                     font_path=None, random_state=None):
    colors = [[4, 77, 82],
              [25, 74, 85],
              [82, 43, 84],
              [158, 48, 79]]
    rand = random_state.randint(0, len(colors) - 1)
return "hsl({}, {}%, {}%)".format(colors[rand][0], colors[rand][1], colors[rand][2])

并将函数添加到WordCloud函数中。

wc = WordCloud(stopwords=STOPWORDS, font_path=font_path,
               mask=mask, background_color="white",
               max_words=2000, max_font_size=256,
               random_state=42, width=mask.shape[1],
               height=mask.shape[0], color_func=multi_color_func)
wc.generate(article.text)
plt.imshow(wc, interpolation="bilinear")
plt.axis('off')
plt.show()

,结果就是这样。

Multi colors

,最后但并非最不重要的一点是,基于面具生成颜色。我们将需要WordCloud库提供的功能。

from wordcloud import ImageColorGenerator

然后添加蒙版颜色并将功能添加到WordCloud函数中。

mask_colors = ImageColorGenerator(mask)
wc = WordCloud(stopwords=STOPWORDS, font_path=font_path,
               mask=mask, background_color="white",
               max_words=2000, max_font_size=256,
               random_state=42, width=mask.shape[1],
               height=mask.shape[0], color_func=mask_colors)
wc.generate(article.text)
plt.imshow(wc, interpolation="bilinear")
plt.axis('off')
plt.show()

这是最终结果。

Generated Colors

正如我们所看到的,云一词的颜色遵循原始图像的颜色。


所以对于这篇文章,我希望您从我所说的话中获得新知识。如果您还有其他意见,请在评论中写信。将来,我将分析此词云的用法进行文本分析。