pyecharts制作词云图

词云图作为一种分析热度的可视化图,在数据分析占据重要地位,只一眼就可以看出某个事物的重要性。pyecharts和WordCloud都是比较方便的可视化库,当遇上词云图,会有怎样的火花呢?我们来期待一下。

1.pyecharts

1.导入包

首先保证自己电脑安装上了pyecharts包,关于包的安装就不多说,来来去去就那几种方法,网上已经说的太多了。

from pyecharts.charts import WordCloud

2.数据准备

用pyecharts画词云时,待分析数据中的每一个词为应该为(word,value)的元组形式,所有词组成一个列表。其中,word为我们需要在词云图中显示的词汇,value是对应的频率。在实现操作中,我将word和value分别形成列表进行输入,结果发现参数个数错误,而使用(word,value)的形式就正确。

word=[("数学分析",0.9),("高等代数",0.9),("近世代数",0.6),("计算机网络",0.8),("现代密码学",0.5),
      ("c程序设计",0.8),("数据结构与算法",0.9),("泛函分析",0.8),("机器学习实战",1.0),("数据挖掘导论",0.9)]

3.词云图生成

pyecharts中,主要使用add()函数来生成并设置词云图:

mywordcloud=WordCloud()
#shape词云图轮廓,有’circle’, ‘cardioid’, ‘diamond’, ‘triangleforward’, ‘triangle’, ‘pentagon’, ‘star’可选 
mywordcloud.add("",word,shape='star')
#生成html文件
mywordcloud.render("1.html")

运行程序,得到
在这里插入图片描述
是不是很简单,总结一下,用pyecharts生成词云图

  • 优点
    当鼠标在html文件里面拖动到某个词,会出现对应的频率,方便查看;
    使用简单,用户只需要构建好自己的(word,values);
    提供7种不同的词轮廓,只需要简单设置.

  • 缺点
    没有词云填充图片功能,也就是整个词云的轮廓为所给图片的形状;
    当所给的是一段文字,需要整理成需要的(word,values),比较复杂.

2.WordCloud

WordCloud虽然没有pyecharts那么简单,但是其制作词云图的功能更强大,可以制作任意形状的词云图,在举例子之前,我们先来看看主要的配置参数:(部分引用于wordcloud参数


> 这里是引用

font_path : string  #字体路径,默认状态是只支持英文,如果是中文需要展现什么字体就把该字体路径+后缀名写上,如:font_path = '黑体.ttf'
width :int #画布宽度,默认为400像素
height :int #画布高度,默认为200像素
scale: float#水平排版出现的概率,默认0.9,垂直排版概率0.1
mask:nd-array or None (default=None) #当读取图片为背景时,背景色一定要设置成白色
min_font_size : int (default=4)  #最小字体
max_font_size : int or None #一般不设置最好,不然会很小
font_step : int (default=1) #字体步长,如果步长大于1,会加快运算但是可能导致结果出现较大的误差
max_words : number (default=200) #要显示的词的最大个数
stopwords : set of strings or None #使用时需要从wordcloud中导入STOPWORDS,设置需要屏蔽的词
background_color : color value (default=”black”) #背景颜色
random_state : int or None  #为每个单词返回一个PIL颜色
mode : string (default=”RGB”) #当参数为“RGBA”并且background_color不为空时,背景为透明
relative_scaling : float (default=.5) #词频和字体大小的关联性
color_func : callable, default=None #生成新颜色的函数,如果为空,则使用 self.color_func
regexp : string or None (optional) #使用正则表达式分隔输入的文本
collocations : bool, default=True #是否包括两个词的搭配
colormap : string or matplotlib colormap, default=”viridis” #给每个单词随机分配颜色,若指定color_func,则忽略该方法

#重要函数
fit_words(frequencies)  #根据词频生成词云
generate(text)  #根据文本生成词云
generate_from_frequencies(frequencies[, ...])   #根据词频生成词云
generate_from_text(text)    #根据文本生成词云
process_text(text)  #将长文本分词并去除屏蔽词(此处指英语,中文分词还是需要自己用别的库先行实现,使用上面的 fit_words(frequencies) )
recolor([random_state, color_func, colormap])   #对现有输出重新着色。重新上色会比重新生成整个词云快很多
to_array()  #转化为 numpy array
to_file(filename)   #输出到文件

下面我以从微博上"Alex是大叔"关于12星座运势的语句,部分如下图
太阳或上升双子座:任何人都怕斤斤计较的人,你在本周很可能就会遇到这种人,或者自己变成这种人,如果你遇到了斤斤计较的人,拿出你打太极的本领,迂回过去,自己就会安全过关。但如果你变成了一个斤斤计较的人,你很可能会把一件原本很不错的事情给搞砸,甚至可能会改变别人本来对你的美好印象。这周随着满月发生在你的人际关系宫位,可能会有某个合作敲定下来或者是被人抢走(也可能是取消了、打水漂了),在本周一到周四中午之前你就会知道这个消息,也许可能是你追问获得的。
我们运用wordcloud来制作词云图。背景图片为
在这里插入图片描述

from wordcloud import WordCloud,STOPWORDS
from PIL import Image
import matplotlib.pyplot as plt
import jieba
import numpy as np

content=open("1.txt","r",encoding="utf-8").read()
tag=jieba.cut(content)
#一定要用空格将关键字串起来
text=" ".join(tag)
#读入背景图片
image=np.array(Image.open("pikaqiu.jpg"))
#设置不显示的词,停顿词
sw=set(STOPWORDS)
sw.add("不好")
sw.add("失落")

#生成词云对象
wc=WordCloud(font_path=r'C:\Users\lixue\Desktop\simhei.ttf',
             #指定词云的形状
             mask=image,
             #背景颜色
             background_color="white",
             scale=0.9,
             random_state=20
             )
#生成词云图片
wc=wc.generate(text)
#显示词云图片
plt.imshow(wc)
plt.axis("off")
plt.show()
#保存图片
wc.to_file("new_love.png")

值得注意的是,在上述代码中,因为我使用的是PIL包,所以读取图片之后要进行转换,如果不用numpy,直接用下面的语句

image=Image.open("pikaqiu.jpg")

程序会报错:
在这里插入图片描述
观察最前面的参数mask,属于nd-array or None 类型,所以我们必须将Image.open(“pikaqiu.jpg”)之后的结果转为array类型,才能保证程序的正常运行。下图为生成的词云图

皮卡丘背景词云图
不过如果采用另外一个包scipy,就不用进行数据转换了。将

image=np.array(Image.open("pikaqiu.jpg"))

换成

image=imread("pikaqiu.jpg"))

同时导入包

from scipy.misc import imread

两种方法各取所需,关于参数配置,有时间的各位可以好好研究一样,如何取到合适的值,让生成的词云图更加美观。喜欢的点个赞吧。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44460780/article/details/102593701
今日推荐