Matplotlib学习---用wordcloud画词云(Word Cloud)

画词云首先需要安装wordcloud(生成词云)和jieba(中文分词)。

先来说说wordcloud的安装吧,真是一波三折。首先用pip install wordcloud出现错误,说需要安装Visual C++ 14.0。折腾半天安装好Visual C++后,还是不行,按网上指点,下载第三方包安装(https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud)。安装是成功了,可是在anaconda里导入的时候又出现了问题,说是"no module named wordcloud"。随后又折腾了各种方案,比如网上有人说重新安装pillow包,等等,均不可行。突发奇想,打开Pycharm试了试,导入成功了。这说明wordcloud包其实已经安装好了,只是anaconda不识别。最后,终于找到解决方案:在anaconda prompt里输入命令:conda install -c conda-forge wordcloud,即可安装成功(https://anaconda.org/conda-forge/wordcloud)。

再来看一下wordcloud的基本原理(摘自:):

总的来说,wordcloud做的是三件事:

(1) 文本预处理

(2) 词频统计

(3) 将高频词以图片形式进行彩色渲染

下面用vanity fair这本小说来试一下画词云图。(wordcloud的一些参数介绍可参见:https://www.cnblogs.com/delav/articles/7837975.html

from wordcloud import WordCloud, STOPWORDS
from matplotlib import pyplot as plt
fig,ax=plt.subplots()

with open(r‘...\vanity fair.txt‘) as f:
    text=f.read()

mycloudword=WordCloud(width=800,
                      height=600,
                      scale=1,
                      margin=2,
                      background_color=‘white‘,
                      max_words=200,
                      min_font_size=40,
                      max_font_size=140,
                      stopwords=STOPWORDS,
                      random_state=50).generate(text)

ax.imshow(mycloudword)
ax.axis("off")
plt.show()

mycloudword.to_file(r"...\vanityfair.png")

输出:

注:设置不同的random_state值会让字的分布不一样。

上面演示的是用英文做的词云,那么如果我们要用中文生成词云呢?这时候就要用到jieba了。

英文语料可以直接输入到wordcloud中,但是对于中文语料,仅仅用wordcloud不能直接生成中文词云图。这是因为英文单词以空格分隔,而中文的词与词之间一般没有字符分隔。因此,应用到中文语料上的时候,注意要先分好词,再用空格分隔连接成字符串,最后输入到wordcloud

另外需要注意的是:需要下载中文字体到相应的文件夹,设置该字体路径为font_path。否则,如果设置的是英文字体,那么中文将显示为方框。

让我们用翻译版的名利场小说来做演示:

from wordcloud import WordCloud, STOPWORDS
import jieba
from matplotlib import pyplot as plt
fig,ax=plt.subplots()

with open(r‘...\名利场.txt‘,‘rb‘) as f:
    text=f.read()

wsplit=jieba.cut(text)
words="".join(wsplit)

mycloudword=WordCloud(font_path=r‘C:\Windows\Fonts\msyh.ttf‘,
                      width=800,
                      height=600,
                      scale=1,
                      margin=2,
                      background_color=‘white‘,
                      max_words=200,
                      min_font_size=40,
                      max_font_size=140,
                      stopwords=STOPWORDS,
                      random_state=50).generate(words)

ax.imshow(mycloudword)
ax.axis("off")
plt.show()

mycloudword.to_file(r"...\vanityfair1.png")

输出:

接下来,我们把词云做成我们想要的形状。用pillow读取某张图片,转换成numpy arrray格式,并将其设置为mask(遮罩)。除图片全白的部分将不会被绘制,其余部分会用于绘制词云。

from wordcloud import WordCloud, STOPWORDS
import jieba
from PIL import Image
import numpy as np
from matplotlib import pyplot as plt
fig,ax=plt.subplots()

with open(r‘...\名利场.txt‘,‘rb‘) as f:
    text=f.read()

wsplit=jieba.cut(text)
words="".join(wsplit)

shape=np.array(Image.open(r‘C:\Users\ccav\timg.jpg‘))

mycloudword=WordCloud(font_path=r‘C:\Windows\Fonts\msyh.ttf‘,
                      scale=1,
                      margin=2,
                      background_color=‘white‘,
                      mask=shape,
                      max_words=200,
                      min_font_size=14,
                      max_font_size=50,
                      stopwords=STOPWORDS,
                      random_state=50).generate(words)

ax.imshow(mycloudword)
ax.axis("off")
plt.show()

mycloudword.to_file(r"...\vanityfair2.png")

原图:

输出的词云:

此外,还可以让词按某个图片的颜色进行显示。用recolor([random_state, color_func, colormap])对现有输出重新着色。(重新上色比重新生成整个词云要快很多)

添加以下这几句即可:

from wordcloud import ImageColorGenerator
color=ImageColorGenerator(np.array(Image.open(r‘...\timg2.jpg‘)))
mycloudword.recolor(color_func=color)

原图:

输出:

原文地址:https://www.cnblogs.com/HuZihu/p/9675304.html

时间: 2024-11-05 19:26:07

Matplotlib学习---用wordcloud画词云(Word Cloud)的相关文章

推荐一个免费的生成词云(word cloud)的在线工具

"词云"这个概念由美国西北大学新闻学副教授.新媒体专业主任里奇·戈登(Rich Gordon)提出. "词云"就是对网络文本中出现频率较高的"关键词"予以视觉上的突出,形成"关键词云层"或"关键词渲染",从而过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨. 今天推荐一个免费的生成词云的在线网站: http://www.yyyweb.com/demo/inner-show/word-i

用Python和WordCloud绘制词云(内附让字体清晰的秘笈)

环境及模块: Win7 64位 Python 3.6.4 WordCloud 1.5.0 Pillow 5.0.0 Jieba 0.39 目标: 绘制安徽省2018年某些科技项目的词云,直观展示热点. 思路: 先提取项目的名称,再用Jieba分词后提取词汇:过滤掉"研发"."系列"等无意义的词:最后用WordCloud 绘制词云. 扩展: 词云默认是矩形的,本代码采用图片作为蒙版,产生异形词云图.这里用的图片是安徽省地图. 秘笈: 用网上的常规方法绘制的词云,字体有

R系列:分词、去停用词、画词云(词云形状可自定义)

附注:不要问我为什么写这么快,是16年写的. R的优点:免费.界面友好(个人认为没有matlab友好,matlab在我心中就是统计软件中极简主义的代表).小(压缩包就几十M,MATLAB.R2009b的压缩包是1.46G).包多(是真的多,各路好友会经常上传新的包). R的麻烦之处:经常升级,是经常,非常经常,这就导致你在加载一个包之前需要考虑这个包要在R的哪个版本上才能使用,而往往做一件事情都要加载10个包左右,一般比较方便的做法就是先升级到最新版,因为只有小部分的包在新版本上不能用. 言归正

初窥wordcloud之老司机带你定制词云图片

抓紧上车啦 #-*-coding:utf-8 -*- from os import path from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator #用来画词云的. import matplotlib.pyplot as plt #用来解析特殊的图片模板,numpy也可以的. from scipy.misc import imread #第一步读你要制作成词云的源文件,少年记得用'r'去读,手抖用了次'w+'结果文件让我清

数据词云(wordcloud)

import pandas as pdimport numpy as npfrom pandas import Seriesfrom pandas import DataFramefrom wordcloud import WordCloud,ImageColorGeneratorimport matplotlib.pyplot as pltimport jiebafrom PIL import Image df =pd.read_csv('ZHILIAN_SPIDER.csv',header=

Matplotlib学习---用matplotlib画直方图/密度图(histogram, density plot)

直方图用于展示数据的分布情况,x轴是一个连续变量,y轴是该变量的频次. 下面利用Nathan Yau所著的<鲜活的数据:数据可视化指南>一书中的数据,学习画图. 数据地址:http://datasets.flowingdata.com/crimeRatesByState2005.csv 以下是这个数据文件的前5行: state murder forcible_rape robbery aggravated_assault 0 United States 5.6 31.7 140.7 291.1

爬取网易云音乐评论并使用词云展示

最近听到一首很喜欢的歌,许薇的<我以为>,评论也很有趣,遂有想爬取该歌曲下的所有评论并用词云工具展示. 我们使用chrome开发者工具,发现歌曲的评论都隐藏在以 R_SO_4 开头的 XHR 文件中 接下来思路就很明确,拿到该文件,解析该文件的 json 数据,拿到全部评论. 我们可以看到该文件有两个用JS加密的参数 params 和 encSecKey ,关于这两个加密参数,参考了知乎用户的解答:https://www.zhihu.com/question/36081767 . 步骤: 1.

用QQ聊天记录生成一个词云

QQ的聊天记录可以通过消息管理器,选中联系人,右键导出为 .txt 格式.由于是中文,需要分词,本文的分词工具采用的是 jieba 分词. 不知道这个“福”能不能扫出来. 假设你已经导出与某人的聊天记录,接下来需要先过滤再分词生成词云. 1. 过滤掉图片和表情,以及聊天记录的时间和qq名称 newtext = [] for word in open('lr.txt', 'r', encoding='utf-8'): tmp = word[0:4] if (tmp == "2019" o

Python 词云 【中/英】小白简单入门教程

1. 分析 构建词云需要具备: 原料即文章等内容 将内容进行分词 将分词后的内容利用构建词云的工具进行构建 保存成图片 2. 需要的主要模块 jieba 中文分词 wordcloud 构建词云 3. 模块原理 wordcloud的实现原理 文本预处理 词频统计 将高频词以图片形式进行彩色渲染 jieba的实现原理 进行中文分词(有多种模式)[详情] 4. 英文词云 英文分词和构建词云只需要wordcloud模块 具体实现如下: 1 from wordcloud import WordCloud