【词云】wordcloud安装与使用
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, …])
随机渲染颜色.
1.简单的小栗子
首先我们需要一篇文本文档来显示,作为例子就copy了纽约时报的一篇报道存为demo.txt
,随后使用wordcloud来可视化:
import matplotlib.pyplot as plt #导入画图包
from wordcloud import WordCloud #导入wordcloud api
text = open('./demo.txt').read() #打开刚刚保存的api
wordcloud = WordCloud().generate(text) #利用text生成词云
#显示词云
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()
这时候我们就有一副粗糙的词云图像了,可以看到词云基本上表示了文章的主题:
接下来我们要精炼一下我们的图像,让它变得更漂亮,这就需要详细地了解一下API
的信息了。
修改后的词云图:
2.API–wordcloud.WordCloud
class wordcloud.WordCloud(font_path=None, #可以指定词云的字体
width=400, height=200, margin=2, #词云长宽
ranks_only=None, prefer_horizontal=0.9, #水平竖直方向的比例
mask=None, scale=1, #mask为词云的掩膜,可由图像突入二值BW图
color_func=None, #定义颜色函数,可由ImageColorGenerator定义
max_words=200, #最多显示的词数
max_font_size=None,min_font_size=4,
font_step=1, #定义最小最大字体及其变化步长
stopwords=None, random_state=None, #待清除的词
background_color='black', #定义背景颜色
mode='RGB', #RGBA时可以使得背景透明
relative_scaling='auto', #词频与显示字体的相对大小
regexp=None, #输入分词的正则表达式
collocations=True, #
colormap=None,
normalize_plurals=True, #单复数单词是否看成一致
contour_width=0, contour_color='black', #边缘设置
repeat=False) #小于最大值时是否重复
3.个性化词云
针对api中的设置,我们可以修改刚才的代码来实现更好看的词云:
import matplotlib.pyplot as plt
from wordcloud import WordCloud,ImageColorGenerator
import cv2
text = open('./demo.txt').read()
mask = cv2.imread('./font/Burdick-Scutoid.jpg') #读入用于作为mask的图
image_colors = ImageColorGenerator(mask) #生成颜色
wc = WordCloud(font_path='./font/CabinSketch-Bold.ttf', #设置字体,可以从google/font下载
background_color='white', #设置背景颜色
mask = mask,colormap='autumn', #设置掩膜和colormap,会被color_func覆盖
#color_func=image_colors, #设置颜色生成函数
#repeat=True,
contour_width=1, contour_color='gold' #设置边框
)
#字体下载地址:https://github.com/google/fonts/blob/master/ofl/cabinsketch/CabinSketch-Bold.ttf
wc.generate(text)
plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
plt.show()
运行后就得到了下面的图啦
4.中文词云
同样我们先准备一份cn.txt
的中文文档,保存为utf-8
编码:
import io
import jieba #导入jieba包作为切分词语的工具
import matplotlib.pyplot as plt #导入画图包
from wordcloud import WordCloud #导入wordcloud api
text = io.open('./zh.txt',encoding ='utf-8').read() #python2中需要利用io.open中的编码功能encoding
cut_str = jieba.cut(text) #使用Jieba分词进行 -> generator
text = r' '.join(cut_str) #将分词结果组合为字符串
wordcloud = WordCloud(font_path = './font/simhei.ttf',background_color='white',colormap='jet').generate(text) #利用text生成词云
#必须设定中文字体才能显示 from:http://www.font5.com.cn/font_download.php?id=151&part=1237887120
#显示词云
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()
ref
https://amueller.github.io/word_cloud
https://github.com/amueller/word_cloud
https://blog.csdn.net/fyuanfena/article/details/52038984
http://www.zyy1217.com/
jieba
http://www.cnblogs.com/fonttian/p/9819770.html
https://blog.csdn.net/fontthrone/article/details/72782971
https://blog.csdn.net/sinat_34022298/article/details/75943272
encoding:
https://blog.csdn.net/j2iayu7y/article/details/80193340
http://python.jobbole.com/87145/
http://www.cnblogs.com/fkissx/p/5417363.html