Python:wordcloud
1、简介
wordcloud是优秀的词云展示的第三方库
2、导入模块
import wordcloud
3、wordcloud对象初始化
以下参数值均为官方文档给出的默认值
w=wordcloud.WordCloud(
font_path=None,
width=400,
height=200,
margin=2,
ranks_only=None,
prefer_horizontal=0.9,
mask=None,
scale=1,
color_func=None,
max_words=200,
min_font_size=4,
stopwords=None,
random_state=None,
background_color='black',
max_font_size=None,
font_step=1,
mode='RGB',
relative_scaling='auto',
regexp=None,
collocations=True,
colormap=None,
normalize_plurals=True,
contour_width=0,
contour_color='black',
repeat=False,
include_numbers=False,
min_word_length=0,
collocation_threshold=30
)
参数含义:
参数 |
类型 |
默认值 |
说明 |
| font_path | string | 字体文件路径,如果是中文词云,则该路径必须指向一个中文字体,否则会出错 | |
| width | int | 400 | 画布宽度 |
| height | int | 200 | 画布高度 |
| margin | int | 2 | 离画布边缘的距离 |
| prefer_horizontal | float | 0.9 | 水平展示词语与垂直展示词语的数量比 |
| mask |
nd-array 或None |
None | 蒙版;如果给出了mask,那么width与height将不起作用,而是代之以mask——词云将生成于mask区域内;mask以外背景部分将填充以纯白色。 |
| contour_width | float | 0 | 启用mask时,该项表示mask的轮廓线宽度 |
| contour_color | color value | 'black' | mask轮廓线的颜色 |
| scale | float | 1 | 程序运行过程中,用于绘图和计算的时间比。对于大型词云,使用scale会明显更快,但会导致更粗糙的文字图形。更大的scale会有更精细文字图形,因为有更多的时间去参与绘图。 |
| min_font_size | int | 4 | 最小的字体大小。当图形中没有更多的空间可以容纳最小字体时,程序运行完毕。 |
| font_step | int | 1 | 不同等级间文字大小的差异。大于1时,程序运行速度加快,但结果图不太好看 |
| max_words | number | 200 | 词云中的最大词语数 |
| stopwords |
string list 或 None |
None |
一个停用词表,停用词表中的词将不会用于词云构建。当使用generate_from_frequencies()时该参数将会被忽略 |
| random_state |
数字 |
None |
随机数种子,同一个种子对应的随机数序列相同 |
| background_color | color value | 'black' | 背景色 |
| max_font_size |
int 或 None |
None | 最大词的尺寸。如果设置为None,将自动设置为图形高度 |
| mode | string | 'RGB' | 如果设置为'RGBA',并且background_color设置为None时,将采用透明的背景 |
| relative-scaling |
float |
'auto' |
词频对词云中词语大小的重要性。取0时,大小仅与词语等级有关;取1时,如果某词语的词频是另一词语的两倍,那它在词云中的大小也是该词语的两倍。 如果想综合考虑词频与词语等级,0.5附近不错。 默认为'auto'即0.5。 当repeat参数为True时,该项将被设置为0 |
| color_func | callable | None | callable对象,表示为每个单词设置一个PIL color,详见官网 |
| regexp |
string 或 None |
None |
用于分割输入文本的正则表达式,格式为r'表达式';如果设置为None,将采用r'\w[\w']+'; 当使用generate_from_frequencies()时,该参数会被忽略 |
| collocations |
bool |
True |
是否包含双单词词语(bigram)(针对英文); 当使用generate_from_frequencies()时,该参数会被忽略 |
| colormap |
string 或 matplotlib colormap |
'viridis' |
一个Matplotlib颜色表,在词云中绘制时将为每个词语随机取该表中的颜色; 当指定了color_func参数时,该参数会被忽略 |
| normalize_plurals | bool | True |
是否移除复数单词而把它的词频计入其单数形式中。 当使用generate_from_frequencies()时,该参数会被忽略 |
| repeat | bool | False | 当max_words或min_foont_size达到时,是否重复某些单词以填充剩余空白 |
| include_numbers | bool | False | 是否包含数字 |
| min_word_length | int | 0 | 一个词语最少包含的字母数 |
| collation_threshold | int | 30 | 双单词词语(bigrams)被认为是一个正确英文词语的阈值标准,具体见官网 |
补充:
1、画布越大,程序越慢。如果想快速获得大的词云,有两种方法:a、设置小的画布;b、使用scale参数
2、构建词云时,词语等级比词频的权重更大,二者的比重可以通过参数relative_scaling修改,当然默认参数'auto'就已经很好了(至于什么是词语等级,笔者也不清楚,可能是英文专有的某个等级吧,希望有明白的人可以帮我解答一下)
3、处理中文文本时,font_path必须指向一个中文文字的ttf文件,例如
font_path='C:/Windows/Fonts/simhei.ttf'
否则原方法将会识别不了中文
4、参数mask为,从外部通过scipy.misc.imread( filename )读入的png文件,例如:
from scipy.misc import imread
M=imread('picture.png')
w=wordcloud.WordCloud(mask=M)
4、方法
w=wordcloud.WordCloud(...)
w.func()
这里的func可以是以下方法:
| 方法 | 说明 |
| fit_words(frequencies) | 从{词语:词频}的dict对象生成词云 |
| generate_from_frequencies(frequencies) | 同上 |
| generate(text) | 从文本数据(string类型)生成词云 |
| generate_from_text(text) | 同上 |
| process_text(text) | 将一个长文本划分为词语,消除其中的停用词 |
| recolor([random_state , color_func , colormap]) | 重新设置颜色模式 |
| to_array() | 将词云转化为一个数字数组 |
| to_file(filename) | 输出为image文件(文件类型为filename的后缀) |
| to_svg([embed_font , optimize_embedded_font,...]) | 输出为SVG文件 |
补充:
1、在用文本数据生成词云时,由于中英文差异——英文一个单词就表示一个词语,中文词语还需要根据语境识别,所以制作中文词云时,必须先用jieba库进行词性划分(详见:jieba:统计一篇文章中词语数 - ShineLe - 博客园),然后以空格形式将这些词语连接起来,使其具有与英文词语一样的形式(英文词语都是以空格分开),之后再使用generate(text)、generate_from_text(text)方法提取时才不会出错。否则直接读取一篇正常的中文文章并用上述两种方法,一定会出错的!
代码:使用jieba库对中文文章进行词性划分,并用空格连接
import jieba
import re def clean(line):
pattern = re.compile(u'[^\u4e00-\u9fa5]')
line = re.sub(pattern,'',line)
return line with open('《边城》.txt' , 'r' , encoding='utf-8') as f:
s=f.read() #读取原文本
s=clean(s) #删除其中符号、数字等非中文字符
words=jieba.lcut(s)
ch2eng=' '.join(words) #用空格连接中文词语,构成一个完整的字符串
2、如果已经有词语和词频数据,可以通过方法fit_words(frequencies)、generate_from_frequencies(frequencies)构建词云,这里的frequencies是dict对象或Counter对象,数据组织形式为{ '词语1':词频 , '词语2':词频 , ...},例如
{ '翠翠':439 , '祖父':270 , ...},这种数据可以通过collections.Counter()得到(具体方法见:Python:计数器collections.Counter - ShineLe - 博客园 和 jieba:统计一篇文章中词语数 - ShineLe - 博客园 第七部分例子①)。需要注意的是,Counter()的返回值是Counter类型,并不是dict类型,虽然二者很像。
把Counter类型转换为Dict的方法是
result_Counter=Counter(wordlist)
result_list = sorted(result_Counter.items(), key=lambda item: item[1], reverse=True)
result_dict = dict(result_list)
先用sorted()函数进行排序,得到排序后的list类型,再用dict()将list转化为dict类型
5、显示
plt.imshow(w) #w为wordcloud对象
plt.axis('off')
plt.show()
6、保存
w.to_file('cloud.png')
其他:Python数据可视化 -- Wordcloud - MAU - 博客园
(7条消息) 用python实现词频分析+词云_丨小小花丨的博客-CSDN博客_python词云分析
Python:wordcloud的更多相关文章
- Java爬取B站弹幕 —— Python云图Wordcloud生成弹幕词云
一 . Java爬取B站弹幕 弹幕的存储位置 如何通过B站视频AV号找到弹幕对应的xml文件号 首先爬取视频网页,将对应视频网页源码获得 就可以找到该视频的av号aid=8678034 还有弹幕序号, ...
- python 基于 wordcloud + jieba + matplotlib 生成词云
词云 词云是啥?词云突出一个数据可视化,酷炫.以前以为很复杂,不想python已经有成熟的工具来做词云.而我们要做的就是准备关键词数据,挑一款字体,挑一张模板图片,非常非常无脑.准备好了吗,快跟我一起 ...
- python安装wordcloud、jieba,pyecharts
1.安装wordcloud: 适用于无法使用pip install wordcloud安装的情况: 据python和windows 版本 到https://www.lfd.uci.edu/~gohlk ...
- Python:使用threading模块实现多线程编程
转:http://blog.csdn.net/bravezhe/article/details/8585437 Python:使用threading模块实现多线程编程一[综述] Python这门解释性 ...
- Python:渗透测试开源项目
Python:渗透测试开源项目[源码值得精读] sql注入工具:sqlmap DNS安全监测:DNSRecon 暴力破解测试工具:patator XSS漏洞利用工具:XSSer Web服务器压力测试工 ...
- Python:开发Sublime插件,方便PHP开发
Python:开发Sublime插件,方便PHP开发 背景 最近在学习PHP,开发环境选择了Sublime2,开发过程发现执行PHP程序非常不方便,需要自己在浏览器中输入路径以进行调试,这点不如Dre ...
- Python:高级主题之(属性取值和赋值过程、属性描述符、装饰器)
Python:高级主题之(属性取值和赋值过程.属性描述符.装饰器) 背景 学习了Javascript才知道原来属性的取值和赋值操作访问的“位置”可能不同.还有词法作用域这个东西,这也是我学习任何一门语 ...
- Python:Python学习总结
Python:Python学习总结 背景 PHP的$和->让人输入的手疼(PHP确实非常简洁和强大,适合WEB编程),Ruby的#.@.@@也好不到哪里(OO人员最该学习的一门语言). Pyth ...
- 产品经理学Python:参数传递方式
这是关于Python的第5篇文章,主要介绍下参数传递方式和如何设计自己的函数. (一) 本篇主要介绍2种参数传递方式. 位置参数 调用函数时,根据函数定义的参数位置来传递参数. def right_t ...
随机推荐
- linux如何复制文件
目录 一:复制文件 二:文件详细属性 一:复制文件 copy的缩写cp. 格式: cp [参数] [被复制文件的路径] [复制到的新路径] 参数: -r : 递归复制 -a : 保证某些属性不变 案列 ...
- python利用正则表达式提取文本中特定内容
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re 模块使 Python ...
- Arduino+ESP32 之 驱动GC9A01圆形LCD(一),基于Arduino_GFX库
最近买了一块圆形屏幕,驱动IC是GC9A01,自己参考淘宝给的stm32的驱动例程, 在ubuntu下使用IDF开发ESP32,也在windows的vscode内安装IDF开发ESP32,虽然都做到了 ...
- 出现 error: RPC failed; curl 18 transfer closed with outstanding read data remaining 的原因
最近在做全栈项目,前台后台,服务器端,三端在一个文件夹,当git clone 项目的时候就会出现:error: RPC failed; curl 18 transfer closed with out ...
- 从我做起[AutoMapper实现模块化注册自定义扩展MapTo<>()].Net Core 之二
AutoMapper实现模块化注册自定义扩展MapTo<>() 我们都知道AutoMapper是使用的最多的实体模型映射,如果没有AutoMapper做对象映射那么我们需要想一下是怎么写的 ...
- CF954H Path Counting
一开始的想法是枚举路径的 \(\rm LCA\) 然后再枚举两边的深度,但是这样无论如何我都只能做到 \(O(n ^ 3)\) 的复杂度. 只能考虑换一种方式计数,注意到点分治可以解决树上一类路径问题 ...
- 看一遍就懂:MVCC原理详解
MVCC实现原理也是一道非常高频的面试题,自己在整理这篇文章的时候,感觉到网上的资料在讲这块知识点上写的五花八门,好像大家的理解并没有一致. 这里将自己所理解的做一个总结,个人会觉得这是一篇含金量挺高 ...
- js中数组的添加和移除
1.引入js文件 <script src="../plugins/jQuery/jquery-2.2.3.min.js"></script>2.HTML中代 ...
- Swift字符串的介绍
字符串的介绍 字符串在任何的开发中使用都是非常频繁的 OC和Swift中字符串的区别 在OC中字符串类型时NSString,在Swift中字符串类型是String OC中字符串@"" ...
- Maven警告解决:Using platform encoding (UTF-8 actually)
感谢原文作者:Scorpip_cc 原文链接:https://www.jianshu.com/p/9c8c01f6bebc 执行Maven Install打包的时候,提示以下警告信息: [WARNIN ...