题主最近要做一个政策可视化的小项目参加学校的比赛。
想做一个简介凝练可以传达文章主题的图表,于是自然地想到了词云图。
词云图需要原料,就是词语和词频。为了解决这个原料需求,简单利用了jieba库。
jieba库概述:
jieba是优秀的中文分词第三方库
- 中文文本需要通过分词获得单个的词语
- jieba是优秀的中文分词第三方库,需要额外安装
- jieba库提供三种分词模式,最简单只需掌握一个函数
jieba分词的原理
Jieba分词依靠中文词库
- 利用一个中文词库,确定汉字之间的关联概率
- 汉字间概率大的组成词组,形成分词结果
- 除了分词,用户还可以添加自定义的词组
由于我们只是需要词语、词频,所以对jieba库的应用是比较简单的。
直接放代码:
import jieba
#变量名: items
txt = open("这里替换成自己的文本文档文件", "r", encoding='utf-8').read()
words = jieba.lcut(txt) # 使用精确模式对文本进行分词
counts = {} # 通过键值对的形式存储词语及其出现的次数
for word in words:
if len(word) == 1: # 单个词语不计算在内
continue
else:
counts[word] = counts.get(word, 0) + 1 # 遍历所有词语,每出现一次其对应的值加 1
items = list(counts.items()) # 将键值对转换成列表
items.sort(key=lambda x: x[1], reverse=True) # 根据词语出现的次数进行从大到小排序
其中的items就可以直接作为Pyecharts的数据,即“data_pair”。
数据的例子:需要list型数据,前面为词语,后面为词频。根据词频Pyecharts可以自动分配字号大小。
[
('健康', 252),
('服务', 248),
('人口', 245),
('发展', 195),
('建设', 142),
('机构', 138),
('加强', 84),
]
完成了词语、词频的准备,我们就可以开始进行绘图了。
import pyecharts.options as opts
from pyecharts.charts import WordCloud
wordcloudof=(
WordCloud()
.add(
series_name="设置系列名",
data_pair=items, #数据来源
word_size_range=[16, 66], #字号大小范围设置
textstyle_opts=opts.TextStyleOpts(
color='#dcdada'
)
)
.set_global_opts( #全局设置项
title_opts=opts.TitleOpts(
title="", title_textstyle_opts=opts.TextStyleOpts(font_size=23),
subtitle=''
),
tooltip_opts=opts.TooltipOpts(is_show=False),
)
.set_series_opts(
areastyle_opts=opts.AreaStyleOpts(opacity = 0)
)
.render("wordcloud.html") #渲染成html页面
)
以上就是绘出词云图的代码,参照Pyecharts官网的demo略加修改就可以达成目的了。
效果大致如下:
后续还可以通过编辑html页面达到进一步优化页面的目的。(小白水平有限,还不会用Python编辑网页,只能手改html文件了)
第一次写博客,还望大佬轻喷。