更多Python数据可视化案例请关注我的公众号:早起Python
========
前言
大家好,不知道大家会在什么场合使用词云图,对我来说词云图的优点除了它可以展示大量文本数据。从而让读者快速抓住重点,更重要的是词云图好看啊,所以今天给大家分享几种词云图的制作方法。首先我们来思考一下词云图是怎样生成的,简单来说不就是读取文本—>分词—>计算词频—>词云,下面将以我们制作词云的复杂程度来介绍不同的方法。
在线交互式制作:图悦词云
最省事的当然是一步到位,将文本数据传进去然后直接整个词云图出来,这时一般要借助第三方网站。百度在线词云制作,选择几个排名靠前的网站,我们以之前文章中的网易云音乐评论数据示例,来对比不同方法制作的词云。首先登场选手是最简单的词云制作:图悦词云http://www.picdata.cn/picdata/index.php#
就像上图一样,不用注册不用登陆,把文本粘贴进去就出来词云了,但是可选择的样式较少而且有水印,并且也不支持更多的参数调整,早起主观评分:60分|毕竟能满足基本的词云制作。
在线交互式制作:微思词云
下一位选手是微思词云
可以看到,相较于上一个网站,该网站的词云并没有水印,看上去也舒服一点,并且支持对文字旋转、背景颜色、字体等相关参数进行调整。但是需要先注册登陆才可以使用并且每个账户有一定的使用次数,部分功能需要付费。早起主观评分: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分|毕竟简单操作能画出好看的词云。
结束语
以上就是一些绘制词云图的方法,你用过哪些?你又Pick哪一款。当然绘制词云的方法远不止这些,如果你有生成词云更简单、更好看的方法,可以点击下方小程序给我留言。不过虽然词云图很酷炫,但并不是所有数据都适合用词云图显示,例如数据量太少时很难布局出好看的词云图,此时就需要考虑其他的图表了,拜拜~