接上一篇文章利用jieba和pyecharts做新闻关键词统计可视化
wordcloud 是一个python实现的高效词频可视化工具,除了可以使用各种mask和颜色提供个性化的掩膜,还可以通过api便捷的挑战获得个性化的词云输出。
安装
pip install wordcloud
wordcloud 包含三个主要api
- WordCloud([font_path, width, height, …]) 最重要的函数生成和描绘词云.
- ImageColorGenerator(image[, default_color]) 通过输入rgb图像获得色彩信息.
- random_color_func([word, font_size, …]) 随机渲染颜色.
wordcloud库把词云当作一个WordCloud对象
- wordcloud.WordCloud()代表一个文本对应的词云
- 可以根据文本中词语出现的频率等参数绘制词云
- 绘制词云的形状、尺寸和颜色都可以设定
wordcloud库常规方法
w = wordcloud.WordCloud()
- 以WordCloud对象为基础
- 配置参数、加载文本、输出文件
方法 | 描述 |
---|---|
w.generate(txt) | 向WordCloud对象w中加载文本txt,w.generate("Python and WordCloud") |
w.to_file(filename) | 将词云输出为图像文件,.png或.jpg,w.to_file("outfile.png") |
w.fit_words(frequencies) | 根据词频生成词云 |
w.generate_from_text(text) | 根据文本生成词云 |
process_text(text) | 将长文本分词并去除屏蔽词(此处指英语,使用上面的 fit_words(frequencies) |
recolor([random_state, color_func, colormap]) | 对现有输出重新着色。重新上色会比重新生成整个词云快很多。 |
to_array() | 转化为 numpy array |
- 步骤1:配置对象参数
- 步骤2:加载词云文本
- 步骤3:输出词云文件
配置对象参数
w = wordcloud.WordCloud(<参数>)
参数 | 描述 |
---|---|
width | 指定词云对象生成图片的宽度,默认400像素 |
height | 指定词云对象生成图片的高度,默认200像素 |
min_font_size | 指定词云中字体的最小字号,默认4号 |
max_font_size | 指定词云中字体的最大字号,根据高度自动调节 |
font_step | 指定词云中字体字号的步进间隔,默认为1 |
font_path | 指定字体文件的路径,默认None |
max_words | 指定词云显示的最大单词数量,默认200 |
stop_words | 指定词云的排除词列表,即不显示的单词列表 |
mask | 指定词云形状,默认为长方形,需要引用imread()函数 |
background_color | 指定词云图片的背景颜色,默认为黑色 |
prefer_horizontal : float (default=0.90) | 词语水平方向排版出现的频率,默认 0.9 (所以词语垂直方向排版出现频率为 0.1 ) |
scale : float (default=1) | 按照比例进行放大画布,如设置为1.5,则长和宽都是原来画布的1.5倍。 |
stopwords : set of strings or None | 设置需要屏蔽的词,如果为空,则使用内置的STOPWORDS |
mode : string (default=”RGB”) | 当参数为“RGBA”并且background_color不为空时,背景为透明。 |
relative_scaling : float (default=.5) | 词频和字体大小的关联性 |
color_func : callable, default=None | 生成新颜色的函数,如果为空,则使用 self.color_func |
regexp : string or None (optional) | 使用正则表达式分隔输入的文本 |
collocations : bool, default=True | 是否包括两个词的搭配 |
colormap : string or matplotlib colormap, default=”viridis” | 给每个单词随机分配颜色,若指定color_func,则忽略该方法。 |
生成新闻前十个关键词的词云代码
import jieba
import re
from collections import Counter
cut_words=""
for line in open('text',encoding='utf-8'):
line.strip('\n')
line = re.sub("[A-Za-z0-9\'\:\·\—\,\。\“ \”\n\u3000\?\、\'*\',\']", "", line)
seg_list=jieba.cut(line,cut_all=False)
cut_words+=(" ".join(seg_list))
all_words=cut_words.split()
# print(all_words)
c=Counter()
for x in all_words:
if len(x)>1 and x != '\r\n':
c[x] += 1
print('\n词频统计结果:')
dict={}
for (k,v) in c.most_common(10):# 输出词频最高的前10个词
dict[k]=v
print("%s:%d"%(k,v))
keyList,valueList = [],[]
for k,v in dict.items():
keyList.append(k)
valueList.append(v)
print(keyList,valueList)
print(str(keyList).replace("'", ""))
import matplotlib.pyplot as plt #导入画图包
from wordcloud import WordCloud #导入wordcloud api
wordcloud = WordCloud(font_path='msyh.ttc', width=800, height=600, mode='RGBA', background_color=None,).generate(text = str(keyList).replace("'", "")) #利用text生成词云
#显示词云
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()
# 保存到文件
wordcloud.to_file('wordcloud.png')
效果如下