内容简介:词云是一种数据呈现方式掌握用安装包
词云是一种数据呈现方式
- 不会的时候,感觉很厉害、很高大上
- 会用了之后,感觉到哪都看到别人在用
掌握用 Python
实现词云的方法
准备
安装包
pip install wordcloud matplotlib jieba PIL 复制代码
准备一些文本,英文或中文皆可
一个简单的例子
WordCloud()
可选的参数
-
font_path
:可用于指定字体路径,包括otf
和ttf
-
width
:词云的宽度,默认为400 -
height
:词云的高度,默认为200 -
mask
:蒙版,可用于定制词云的形状 -
min_font_size
:最小字号,默认为4 -
max_font_size
:最大字号,默认为词云的高度 -
max_words
:词的最大数量,默认为200 -
stopwords
:将被忽略的停用词,如果不指定则使用默认的停用词词库 -
background_color
:背景颜色,默认为black
-
mode
:默认为RGB
模式,如果为RGBA
模式且background_color
设为None
,则背景将透明
# -*- coding: utf-8 -*- from wordcloud import WordCloud import matplotlib.pyplot as plt # 打开文本 text = open('constitution.txt').read() # 生成对象 wc = WordCloud().generate(text) # 显示词云 plt.imshow(wc, interpolation='bilinear') plt.axis('off') plt.show() # 保存到文件 wc.to_file('wordcloud.png') 复制代码
由于英文单词之间有空格分隔,因此大多不需要额外的处理
中文词云
中文一般需要经过分词处理,先看下不分词的效果
以《西游记》为例,可以看到结果中会出现各种双字、三字和四字等,但很多并不是合理的词语
# -*- coding: utf-8 -*- from wordcloud import WordCloud import matplotlib.pyplot as plt # 打开文本 text = open('xyj.txt').read() # 生成对象 wc = WordCloud(font_path='Hiragino.ttf', width=800, height=600, mode='RGBA', background_color=None).generate(text) # 显示词云 plt.imshow(wc, interpolation='bilinear') plt.axis('off') plt.show() # 保存到文件 wc.to_file('wordcloud.png') 复制代码
这次我们先用 jieba
进行中文分词,可以看到生成的词云里,基本上都是合理的词语了
# -*- coding: utf-8 -*- from wordcloud import WordCloud import matplotlib.pyplot as plt import jieba # 打开文本 text = open('xyj.txt').read() # 中文分词 text = ' '.join(jieba.cut(text)) print(text[:100]) # 生成对象 wc = WordCloud(font_path='Hiragino.ttf', width=800, height=600, mode='RGBA', background_color=None).generate(text) # 显示词云 plt.imshow(wc, interpolation='bilinear') plt.axis('off') plt.show() # 保存到文件 wc.to_file('wordcloud.png') 复制代码
使用蒙版
这里将 mask
翻译为蒙版,是因为感觉它和Photoshop中蒙版的作用很类似
使用蒙版之后,可以根据提供的蒙版图片,生成指定形状的词云
# -*- coding: utf-8 -*- from wordcloud import WordCloud from PIL import Image import numpy as np import matplotlib.pyplot as plt import jieba # 打开文本 text = open('xyj.txt').read() # 中文分词 text = ' '.join(jieba.cut(text)) print(text[:100]) # 生成对象 mask = np.array(Image.open("black_mask.png")) wc = WordCloud(mask=mask, font_path='Hiragino.ttf', mode='RGBA', background_color=None).generate(text) # 显示词云 plt.imshow(wc, interpolation='bilinear') plt.axis("off") plt.show() # 保存到文件 wc.to_file('wordcloud.png') 复制代码
颜色
词云的颜色可以从蒙版中抽取,使用 ImageColorGenerator()
即可
# -*- coding: utf-8 -*- from wordcloud import WordCloud, ImageColorGenerator from PIL import Image import numpy as np import matplotlib.pyplot as plt import jieba # 打开文本 text = open('xyj.txt').read() # 中文分词 text = ' '.join(jieba.cut(text)) print(text[:100]) # 生成对象 mask = np.array(Image.open("color_mask.png")) wc = WordCloud(mask=mask, font_path='Hiragino.ttf', mode='RGBA', background_color=None).generate(text) # 从图片中生成颜色 image_colors = ImageColorGenerator(mask) wc.recolor(color_func=image_colors) # 显示词云 plt.imshow(wc, interpolation='bilinear') plt.axis("off") plt.show() # 保存到文件 wc.to_file('wordcloud.png') 复制代码
当然也可以设置为纯色,增加一个配色函数即可
# -*- coding: utf-8 -*- from wordcloud import WordCloud from PIL import Image import numpy as np import matplotlib.pyplot as plt import random import jieba # 打开文本 text = open('xyj.txt').read() # 中文分词 text = ' '.join(jieba.cut(text)) print(text[:100]) # 颜色函数 def random_color(word, font_size, position, orientation, font_path, random_state): s = 'hsl(0, %d%%, %d%%)' % (random.randint(60, 80), random.randint(60, 80)) print(s) return s # 生成对象 mask = np.array(Image.open("color_mask.png")) wc = WordCloud(color_func=random_color, mask=mask, font_path='Hiragino.ttf', mode='RGBA', background_color=None).generate(text) # 显示词云 plt.imshow(wc, interpolation='bilinear') plt.axis("off") plt.show() # 保存到文件 wc.to_file('wordcloud.png') 复制代码
关于HSL配色方案可以参考
精细控制
如果希望精细地控制词云中出现的词,以及每个词的大小,可以尝试 generate_from_frequencies()
,包括两个参数
-
frequencies
:一个字典,用于指定词和对应的大小 -
max_font_size
:最大字号,默认为None
generate()
= process_text()
+ generate_from_frequencies()
以下用jieba提取出关键词和权重,再以此绘制词云
# -*- coding: utf-8 -*- from wordcloud import WordCloud, ImageColorGenerator from PIL import Image import numpy as np import matplotlib.pyplot as plt import jieba.analyse # 打开文本 text = open('xyj.txt').read() # 提取关键词和权重 freq = jieba.analyse.extract_tags(text, topK=200, withWeight=True) print(freq[:20]) freq = {i[0]: i[1] for i in freq} # 生成对象 mask = np.array(Image.open("color_mask.png")) wc = WordCloud(mask=mask, font_path='Hiragino.ttf', mode='RGBA', background_color=None).generate_from_frequencies(freq) # 从图片中生成颜色 image_colors = ImageColorGenerator(mask) wc.recolor(color_func=image_colors) # 显示词云 plt.imshow(wc, interpolation='bilinear') plt.axis("off") plt.show() # 保存到文件 wc.to_file('wordcloud.png') 复制代码
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 高端JAVA需要掌握哪些内容
- JAVA,高端的OA软件御用语言
- 如何从低端面畜到高端面霸
- 如何优雅地向别人介绍高端大气上档次的Git
- VirtualBox 6.0.0 发布,改进对高端显示器的 HiDPI 支持
- 技巧:表达式完成一个看上去很高端的日期选择动效
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Blockchain Basics
Daniel Drescher / Apress / 2017-3-16 / USD 20.99
In 25 concise steps, you will learn the basics of blockchain technology. No mathematical formulas, program code, or computer science jargon are used. No previous knowledge in computer science, mathema......一起来看看 《Blockchain Basics》 这本书的介绍吧!
随机密码生成器
多种字符组合密码
Base64 编码/解码
Base64 编码/解码