jieba+pyecharts 词云图应用
用python做绘图的时候,感觉用matplotllib的风格更偏向于国外人的,做出来的图的效果交互性不太好.用百度的开源库,pyecharts的时候发现了很多的惊喜.
具体可以参考http://pyecharts.org 去看使用说明
昨天看到一个朋友做论文设计,通过从大量文献中,抓取关键词,来判断这些文献每年侧重点变化情况.
基本情况如下:
1.有82篇相关的文献,每篇文献大概有400页,全部是docx格式的,文本内容.
2.要求从文献中统计出关键词,通过关键词来判断文献的侧重点
3.做可视化展示,显示各个关键词的频次
思路:
1.通过docx 模块来获取word文献中的内容,转成txt格式的文本
2.在txt文本文件中,用jieba的库来统计,各中文词出现的频次
3.用pyecharts模块绘制词云图来展示
1. 代码实现(前提,安装docx,和jieba模块)
from docx import Document import jieba doc = Document('xxxx.docx') #读入文献 #循环读取文献中的段落文本,并通过追加模式写入到指定的txt文件中 for paragraph in doc.paragraphs: with open('xxx.txt','a') as f: f.write(paragraph.text)
2.紧接上面
#用jieba对文本内容进行词分 with open('xxx.txt','r') as f: txt = f.read() words = jieba.lcut(txt) counts={} #通过遍历words的方式,统计出每个词出现的频次 for word in words: if len(word) == 1: continue else : counts[word] = counts.get(word,0) + 1 #转换成列表的方式,方便用于后面的pyecharts绘图 items = list(counts.items()) items.sort(key=lambda x:x[1],reverse=True) #按照逆序的方式排序,因为items是列表中元组的方式呈现的,因此用了lambda函数x[1]来作为判断.
3.用pyecharts来绘制词云图
通过pyecharts的原型了解到,绘制词云图需要的配置
a.wordcloud = WordCloud() #实例化类
b.wordcloud.add("",items[0:80],word_size_range[20:60])
c.wordcloud.set_global_opts(title_opts=opts.TitleOpts(title="xxx统计")) 此处可以忽略,如果要用的话,要 import pyecharts.options as opts.
d.wordcloud.render("xxx.html") 如果用的是jupyter_notebook写成 wordcloud.render_notebook() 就可以直接在jupyter中显示图形
pyecharts支持链式调用的,那样就可以省掉一些参数,但是直观性就会差一点.
wordcloud = WordCloud() wordcloud.add("",items[0:60],word_size_range[20:80],shape= 'star) wordcloud.render_notebook()
add方法里面还有很多的参数,比如可以设置宽度,高度,云图的形状等,这些细节方面的,可以参考函数说明,国人开发的文档很好阅读和理解的.我这里用的是star 星型的图案
结果展示 :