Python pyecharts创建词云图

简介

词云图,通过对文章中的词语统计词频,可以直接反应某个词在文章中的重要性以及出现次数比。

制作

怎么制作词云图呢?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就是已经封装好的词云函数,直接调用即可。
构成主要有以下三部分:

  1. add(),这个里面有我们传进去的数据,data_pair表示;word_size_range表示字体的大小范围,如上是6-66大小。
  2. set_global_opts(),一些基本的表的属性,比如标题、大小、以及一些前端赋予的格式等。
  3. 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。

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值