简介
词云图,通过对文章中的词语统计词频,可以直接反应某个词在文章中的重要性以及出现次数比。
制作
怎么制作词云图呢?Python已经给我们提供了一个完整的库,名为pyecharts,看名字就知道,这个库是专门为python定制的,里面包含了当下主流的一些图,例如:柱状图、饼图、折线图等,大家可以看一下官网https://pyecharts.org/。下面来看一下代码:
import pyecharts.options as opts
from pyecharts.charts import WordCloud
data = [
("生活资源", "999"),
("供热管理", "888"),
("供气质量", "777"),
("生活用水管理", "688"),
("一次供水问题", "588"),
("交通运输", "516"),
("城市交通", "515"),
("环境保护", "483"),
("房地产管理", "462"),
("城乡建设", "449"),
("社会保障与福利", "429"),
("社会保障", "407"),
("供热发展", "254"),
("农村土地规划管理", "254"),
("生活噪音", "253"),
("供热单位影响", "253"),
("城市供电", "223"),
("房屋质量与安全", "223"),
("大气污染", "223"),
("房屋安全", "223"),
("燃气管理", "152"),
("教育管理", "152"),
("医疗纠纷", "152"),
("宏观经济", "152"),
("教育管理", "112"),
("社会保障", "112"),
("二次供水问题", "112"),
("城市公共设施", "92"),
("社会保障保险管理", "92"),
("低保管理", "92"),
("文娱市场管理", "72"),
("城市交通秩序管理", "72"),
("执法争议", "72"),
("商业烟尘污染", "72"),
("占道堆放", "71"),
("地上设施", "71"),
("群众健身", "41"),
("工业排放污染", "41"),
("市场收费", "41"),
("生产资金", "41"),
("生产噪声", "41"),
("农村低保", "41"),
("劳动争议", "41"),
("劳动合同争议", "41"),
("劳动报酬与福利", "41"),
("医疗事故", "21"),
("停供", "21"),
("基础教育", "21"),
("市场外溢", "11"),
("占道经营", "11"),
("树木管理", "11"),
("农村基础设施", "11"),
("一次供水问题", "11"),
]
(
WordCloud()
.add(series_name="热点分析", data_pair=data, word_size_range=[6, 66])
.set_global_opts(
title_opts=opts.TitleOpts(
title="热点分析", title_textstyle_opts=opts.TextStyleOpts(font_size=23)
),
tooltip_opts=opts.TooltipOpts(is_show=True),
)
.render("basic_wordcloud.html")
)
首先需要导入pyecharts这个库,如果没有的话,请pip:
pip install pyecharts
我们将词云所需要的函数导入进来,WordCloud就是已经封装好的词云函数,直接调用即可。
构成主要有以下三部分:
- add(),这个里面有我们传进去的数据,data_pair表示;word_size_range表示字体的大小范围,如上是6-66大小。
- set_global_opts(),一些基本的表的属性,比如标题、大小、以及一些前端赋予的格式等。
- render(),此函数表示返回给我们一个html来展示词云。
如图所示:
讲到这儿就完了吗?不,以上都没技术含量,重点来了,如何在flask中展示到前端中?
flask展示
为什么要单独说pyechart前端展示呢,因为,针对词云这个组件,高版本的js版本,已经不支持了,所以,版本适配问题很麻烦,因此,主要就是对目前的版本做一下介绍。
我们在flask通过ajax请求的方式来对后端的信息进行请求。
首先,新建一个html,如下:
html格式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div class="text_ciyun" style="width: 500px;height: 500px">
<h2>话题词云</h2>
<div id="topic_ciyun" style="width: 100%;height: 100%"></div>
</div>
</body>
</html>
js代码
<script type="text/javascript">
var ciyunchart = echarts.init(document.getElementById('topic_ciyun'), 'white', {renderer: 'canvas'});
$(
function () {
ciyunfetchData(ciyunchart);
setInterval(ciyunfetchData, 600000);
}
);
function ciyunfetchData() {
$.ajax({
type: "GET",
url: "http://127.0.0.1:5000/wordChart",
dataType: 'json',
success: function (result) {
ciyunchart.setOption(result);
}
});
}
</script>
我们这里会通过发送一个ajax请求,进行局部刷新,请求后端,拿到一个表示词云的结果。
Python代码
# 舆情-热点话题-词云
def wordcloud_base():
result = [
('吴孟达', 1000),
('个税', 900),
('南京', 800),
('中国', 700),
('政协', 600),
('TVB', 500),
('微软', 400),
('央视', 300),
('上海', 200),
('医保', 100),
('票房', 600),
('边防', 400),
('退休', 300),
('英国', 200),
('香椿', 10),
]
c = (
WordCloud()
.add("", result, word_size_range=[20, 100], shape='circle')
)
return c
@app.route('/wordChart')
def get_word_chart():
c = wordcloud_base()
return c.dump_options_with_quotes()
当ajax请求wordChart时,我们会产生一个关于echarts的返回值,返回到页面,然后我们就可以看到了。
js版本
大家可以在这两个链接下下载,版本适应已经调试过了,没有问题。
echarts-wordcloud.min.js: https://download.csdn.net/download/qq_32113189/15683512.
echarts.min.js:https://download.csdn.net/download/qq_32113189/15683526
结语
如果大家在运行的过程中,有什么问题,可以留言或者QQ:1143948594。