利用python制作词云图

社区

前言

词云,就是用文字词语来生成各种有趣的可视化图片。在python中使用wordcloud模块来实现词云。

采集数据

构建词云首先需要文本数据,很多时候我们都是将分好的词语,或者大段落的文本存放到本地文件中,然后在程序中完成分词,最后用来构建词云。

作为一个资深网抑云患者,数据这一块,我打算用网易云民谣的评论作为文本输入。其中就有我比较喜欢的这首《玫瑰》。

picture.image

这首歌一共接近8W条评论,我们就用爬虫技术来对部分评论做数据爬取。爬虫这一块代码我知道大家不爱看,所以直接将爬取结果放出来。

picture.image

上面是一条条原始未处理的评论,后面我们会完成分词、无效词语剔除等操作。

分词

分词使用的是jieba模块,对每条评论内容进行分词。在将评论内容分割为一个个词语的同时,像一些人称代词、数字以及“的、地”词语,需要去掉。最后一些名词、动词、形容词才是我们需要的目标单词。

jieba提供了很多分词的方法,这里我使用的是jieba.posseg完成分词和词性标注,核心代码如下:

picture.image

  1. getCommnets():爬取网易云评论
  2. forComments():解析爬取的评论json
  3. dest定义了目标词性,例如n表示名词,v表示动词
  4. pesg是jieba.posseg的别名,cut完成分词和词性标注

生成图云

将分词好的数据筛选之后,存放到list中,然后使用空格分割每个单词。

picture.image

1. 基本图云

然后通过WordCloud构建基本的图云。

picture.image

WordCloud的参数有很多,我们这里只设置字体、图云背景颜色、图云宽和高。

wordcloud = WordCloud(font_path="simsun.ttc",
                      background_color="white",
                      height=1000,
                      width=800,
                      random_state=42)
wordcloud.generate(txt)
plt.imshow(wordcloud)
plt.axis("off")
plt.show()

其中,random_state用来控制每次运行程序,生成的图云都是一样的。这里使用的字体是宋体,txt是处理后的网易云评论的文本。使用matplotlib模块来展示图云。

picture.image

这样,一张简单的词云就构建完成了,单词的大小根据词语出现的频次进行展示。

2. 以图片为背景

还有一种就是以图片为背景,图云的形状、颜色会根据背景图片生成。

im = Image.open('123.jpeg')
pic = np.array(im)
w, h = im.size
wordcloud = WordCloud(mask=pic, background_color='white', random_state=42, max_words=20000, max_font_size=60, scale=10, height=h, font_path='xknlt.ttf').generate(txt)
image_colors = ImageColorGenerator(pic)
plt.imshow(wordcloud.recolor(color_func=image_colors), interpolation='bilinear')
plt.axis("off")
plt.show()

这个是用作图云背景的图片,字体使用的是小可奶酪体,字体颜色设置为image_colors。

picture.image

下面是运行程序后生成的图云:

picture.image

图片使用PS抠图之后再用作背景。在运行程序时,在Image.py中报MemoryError的错误,后来用PS将图像尺寸缩小了一半之后,程序就能正常运行了。

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论