wordcloud安装_小工具系列——wordcloud词云图

本系列旨在与大家分享一些基于Python的实用小工具,简单易用、代码量少。如需了解基础的Python知识,推荐使用廖雪峰Python系列教程 https://www.liaoxuefeng.com/wiki/1016959663602400

1. wordcloud安装

wordcloud是基于Python开发的词云生成库,其主要功能是,读取文本文件中的内容并使用指定的图片为背景生成基于词频的词云图。安装wordcloud的过程也比较简单,支持Pythonpip安装,命令如下:

pip install wordcloud

此外,wordcloud需要的主要依赖库包括,matplotlib用于可视化,jieba用于分词(主要针对中文),安装方式同上。感兴趣的小伙伴,可以点击项目地址查看源码,使用时可参考以下API文档

wordcloud项目地址:https://github.com/amueller/word_cloud

API文档地址:http://amueller.github.io/word_cloud/changelog.html

2. wordcloud使用

下面通过简单的例子来讲述如何使用wordcloud

import matplotlib.pyplot as pltimport numpy as npimport wordcloudimport jiebaimport PILimport re

首先导入必备的依赖库

with open(r'C:/Users/Gan/Downloads/test.txt', encoding='utf8') as f:    text = f.readlines()

使用文件读写操作读取txt文本文件,该文本文件内容将作为后续生成词云图的源,例如上述代码读到的内容如下:

['数据结构与算法\n', '\t算法\n', '\t\t排序\n', '\t\t\t简单排序\n', '\t\t\t\t冒泡排序\n', '\t\t\t\t选择排序\n', '\t\t\t\t插入排序\n', '\t\t\t希尔排序\n', '\t\t\t\t增量序列的选择\n', '\t\t\t堆排序, 对选择排序的改进\n', '\t\t\t\t最小堆排序\n', '\t\t\t\t最大堆排序\n', '\t\t\t归并排序\n', '\t\t\t\t递归方式\n', '\t\t\t\t非递归方式\n', '\t\t\t快速排序\n', '\t\t\t表排序\n', '\t\t\t基数排序\n', '\t\t散列查找\n', '\t\t\t散列表\n', '\t\t\t散列函数\n', '\t数据结构\n', '\t\t线性结构\n', '\t\t\t数组, 一维、多维\n', '\t\t\t链表\n', '\t\t\t\t堆栈\n', '\t\t\t\t队列\n', '\t\t树\n', '\t\t\t二叉树遍历, 前序、中序、后序\n', '\t\t\t二叉搜索树, BST\n', '\t\t\t平衡二叉树, AVL\n', '\t\t\t堆, 最大堆、最小堆\n', '\t\t\t并查集\n', '\t\t\t哈夫曼树、哈夫曼编码\n', '\t\t图\n', '\t\t\t遍历, 深度优先DFS、广度优先BFS\n', '\t\t\t最短路径\n', '\t\t\t\tDijkstra算法, 单源\n', '\t\t\t\tA*算法, 单源\n', '\t\t\t\tFloyd算法, 多源\n', '\t\t\t最小生成树\n', '\t\t\t\tPrime算法\n', '\t\t\t\tKruskal算法\n', '\t\t\t拓扑排序\n', '\t\t\t\tAOV Activity on vertex 图\n', '\t\t\t\t拓扑序\n', '\t\t\t\tAOE Activity on edge\n']

该文本文件含有大量分割符,在生成词云图时会有所干扰,需使用正则表达式将分割符去除

text_filtered = re.sub('[,。、“”‘ ’t \\\ n]','',str(text))
tree_mask = np.array(PIL.Image.open(r'C:/Users/Gan/Downloads/cf02e8ede6c411a6daa0b63698db2935.jpg'))

64ef19c6d44a849405835c1e3861abaa.png

使用PIL库读取图片文件(如上图)并存储为3维RGB值数组,它将作为词云图的背景,即所生成词云图的轮廓为该图片

remove_lst = ["简单","数据结构"]for ele in remove_lst:    jieba.del_word(ele)

指定想从文本中忽略掉的词,并指定为列表,使用jieba删除这些词

content = ' '.join(jieba.lcut(text_filtered))

jieba分割后得到的词用空格隔开,类似于英文中每个单词间的空格

WC = wordcloud.WordCloud(font_path = 'C:/Windows/Fonts/STXINGKA.TTF',max_words=2000,mask = tree_mask,height= 940,width=400,background_color='white',repeat=True,mode='RGB')

生成词云对象,可指定的属性如下:

  • font-path:词云字体的路径,一般来说可以在Windows字体文件中选择自己喜欢的样式

  • max_words:词的最大数量

  • mask:所使用的图片对应的RGB值,此处全白的内容,即RGB值为#FF和#FFFFFF的部分将全部被忽略。简单来说,只有图片上非白色的部分才会有词覆盖

  • height:画布的高度

  • width:画布的宽度

  • backgroud_color:背景颜色

  • repeat:是否有重复词,设置为True会使词云图更稠密,同时计算时间更长

  • mode:生成词云图颜色模式,默认为RGB

result = WC.generate(content)WC.to_file("C:/Users/Gan/Downloads/test.jpg")  #用于存储生成的词云图plt.imshow(result)plt.axis('off')plt.show()

将分词后的字符串用选定的背景图片生成出对应的词云图

3f1d98ccd2969b5819a09776b6697d3b.png

完整代码如下

import matplotlib.pyplot as pltimport numpy as npimport wordcloudimport jiebaimport PILimport rewith open(r'C:/Users/Gan/Downloads/test.txt', encoding='utf8') as f:    text = f.readlines()text_filtered = re.sub('[,。、“”‘ ’t \\\ n]','',str(text))tree_mask = np.array(PIL.Image.open(r'C:/Users/Gan/Downloads/cf02e8ede6c411a6daa0b63698db2935.jpg'))remove_lst = ["简单","数据结构"]for ele in remove_lst:    jieba.del_word(ele)content = ' '.join(jieba.lcut(text_filtered))WC = wordcloud.WordCloud(font_path = 'C:/Windows/Fonts/STXINGKA.TTF',max_words=2000,mask = tree_mask,height= 940,width=400,background_color='white',repeat=True,mode='RGB')result = WC.generate(content)WC.to_file("C:/Users/Gan/Downloads/test.jpg")  #用于存储生成的词云图plt.imshow(result)plt.axis('off')plt.show()

PS:除了可从txt文本中读取文字内容外,wordcloud还提供自定义词频字典并直接生成词云图的方法,例如以下词云图就来自直接指定的词频率dict型数据

content = {"Michael":10,"John":20,"Simon":23,"Linda":2,"Mary":21}result = WC.generate_from_frequencies(content)plt.imshow(result)plt.axis('off')plt.show()

410353febcad7f05fe49ec3e4b49f519.png

3. 总结

总的来说wordcloud还是一个比较轻量化的词云生成工具,仅需了解一点python的基础知识即可使用,同时可根据自己的需求更换背景图片及文本内容,或手动设定词频数据

备注:最近被老婆大人催着出稿,时间紧急,如有错误之处,欢迎指出

0bd232fa4114099f0eaf074733e6c3f2.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值