Py学习  »  Python

Python 制作词云大总结,你会选择哪一款?

编程派 • 4 年前 • 1267 次点击  

点击上方“编程派”,选择设为“设为星标

优质文章,第一时间送达!


前言

大家好,不知道大家会在什么场合使用词云图,对我来说词云图的优点除了它可以展示大量文本数据,从而让读者快速抓住重点,更重要的是词云图好看啊,今天给大家分享几种词云图的制作方法。

首先我们来思考一下词云图是怎样生成的,简单来说不就是读取文本—>分词—>计算词频—>词云。

下面将以我们制作词云的复杂程度来介绍不同的方法。

在线交互式制作:图悦词云

最省事的当然是一步到位,将文本数据传进去然后直接整个词云图出来,这时一般要借助第三方网站。

首先登场选手是最简单的词云制作:图悦词云

http://www.picdata.cn/picdata/index.php#


就像上图一样,不用注册不用登陆,把文本粘贴进去就出来词云了,但是可选择的样式较少而且有水印,并且也不支持更多的参数调整。


主观评分:60分|毕竟能满足基本的词云制作。


在线交互式制作:微思词云

下一位选手是微思词云


https://wis-ai.com/wordcloud



可以看到,相较于上一个网站,该网站的词云并没有水印,看上去也舒服一点,并且支持对文字旋转、背景颜色、字体等相关参数进行调整。

但是需要先注册登陆才可以使用并且每个账户有一定的使用次数,部分功能需要付费。

主观评分:65分|需要很多的邮箱才能一直用。

在线交互式制作:花火词云

最后一位在线制作词云的选手是花火

http://hanabi.data-viz.cn/visualisation



可以看到,花火相较于上面两个在线平台,依旧是传个txt进去就出来词云,但是做出来的图更好看,并且支持更多自定义的参数,不过需要付费才能去除水印。

主观评分75分|颜值即正义,但是门票¥30/月

以上就是几个在线制作词云网站的测评,并无任何广告与抹黑,其实与其他没有列出的网站都大同小异,免费的功能简单复杂的图会好看点但是会收费,各有千秋吧。

接下来有请Python出场。

Python 制作:Pyecharts

Python 中制作词云使用 Pyecharts 还是比较方便的,做出来的图也比较清爽。

https://pyecharts.org/#/zh-cn/basic_charts?id=wordcloud%ef%bc%9a%e8%af%8d%e4%ba%91%e5%9b%be



因为是写代码制作那么有关文字样式、旋转角度、高度、距离、阴影等都可以自定义,并且可以使用 pyecharts 的局和系列配置项进行调整。


唯一的问题是 pyecharts 接收的数据必须是类似经过分词计算之后的数据,也就是你要给它这样的数据。

data = [
    ("生活资源", "999"),
    ("供热管理", "888"),
    ("供气质量", "777"),
    ("生活用水管理", "688"),
    ("一次供水问题", "588"),
    ("交通运输", "516"),
    ("城市交通", "515"),
    ("环境保护", "483"),
    ("房地产管理", "462"),
    ("城乡建设", "449"),
    ("社会保障与福利", "429"),
......
]


当然这里的数字并不一定需要是频率,也可以是权重等数据。


所以如果需要绘制词云的数据恰好是这种计算好的数据,尝试使用 Pyecharts 吧。


主观评分75分|好看但也有一定限制。


Python 制作:wordcloud

现在登场的就是 Python 中制作词云最常用的 wordcloud,说到 wordcloud 就不得不介绍 jieba 分词了,简单来说流程就是传一个 txt 进去, jieba 分词得到结果后再传给 wordcloud 制作词云,同时支持比 Pyecharts 更多的自定义设置。





    
from wordcloud import WordCloud
import matplotlib.pyplot as plt #绘制图像的模块
import  jieba #jieba分词

path_txt='music.txt'
f = open(path_txt,'r',encoding='UTF-8').read()

# 结巴分词,生成字符串,wordcloud无法直接生成正确的中文词云
cut_text = " ".join(jieba.cut(f))

wordcloud = WordCloud(
   #设置字体,不然会出现口字乱码,文字的路径是电脑的字体一般路径,可以换成别的
   font_path="msyh.ttc",
   #设置了背景,宽高
   background_color="white",width=1000,height=1000).generate(cut_text)

plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show()



从代码和词云效果来看,wordcloud 由于支持修改的参数更多,所以也就需要更多的测试不同效果下的图片来找到适合这组数据最优的词云,比如我的这图看着就没有 pyecharts 生成的舒服,当然只要自己调整好了,就可以保存为一个脚本以后直接使用即可。


主观评分80分|毕竟是使用最多的词云库。


Python 制作:stylecloud

最后介绍一个由 wordcloud 优化而来的库 stylecloud,也需要搭配 jieba 分词使用,但是代码更加简介,生成的词云也更加美观,比如还是刚刚的文本,使用下面的代码即可


def jieba_cloud


    
(file_name):
    with open(file_name,'r',encoding='utf8') as f:
        word_list = jieba.cut(f.read())
        result = " ".join(word_list) #分词用 隔开
        #制作中文云词
        gen_stylecloud(text=result,font_path='msyh.ttc',output_name=file_name.split('.')[0] + '.png') #必须加中文字体,否则格式错误
        
if __name__ == "__main__":
    file_name = 'music.txt'
    jieba_cloud(file_name)



可以看到,在不添加任何配置项默认生成的词云比 wordcloud 更清爽一点,并且也支持更改颜色、背景、风格等。


主观评分 85 分|毕竟简单操作能画出好看的词云。


结束语

以上就是一些绘制词云图的方法,你用过哪些?你又会选择哪一款。


当然绘制词云的方法远不止这些,如果你有生成词云更简单、更好看的方法。不过虽然词云图很酷炫,但并不是所有数据都适合用词云图显示,例如数据量太少时很难布局出好看的词云图,此时就需要考虑其他的图表了。




PyCharm 2020.1 稳定版发布


pip install 今年将出现重大变化!


入坑 Python 后强烈推荐的一套工具库


实战:Flask + Vue 生成漂亮的词云


Github 热门,程序员想拿高薪建议都看看



回复下方「关键词」,获取优质资源


回复关键词「 pybook03」,立即获取主页君与小伙伴一起翻译的《Think Python 2e》电子版

回复关键词「入门资料」,立即获取主页君整理的 10 本 Python 入门书的电子版

回复关键词「m」,立即获取Python精选优质文章合集

回复关键词「book 数字」,将数字替换成 0 及以上数字,有惊喜好礼哦~


题图:pexels,CC0 授权。

好文章,我在看❤️
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/61926
 
1267 次点击  
文章 [ 1 ]  |  最新文章 3 年前