word_cloud是python的一个三方库,称为词云也叫做文字云,是根据文本中的词频,对内容进行可视化的汇总,可以用来绘制用户画像
下载与安装
安装word_cloud
可以使用 python 自带的 pip 工具来进行
首先确保已经安装python与pip并且pip以及更新到最新版本.
这里使用的python版本为3.7,pip版本为19.2.1
word_cloud
依赖于numpy
与pillow
,当然如果只想将图像保存成图片文件,
使用matplotlib
库代替也可以,此处索性就将三个库都安装好.
pip install numpy
pip install pillow
pip install matplotlib
安装完成后,再安装word_cloud
pip install wordcloud
如果安装失败,可以去github主页下载zip包
根据文本绘制
word_cloud
的使用非常简单,一下的demo展示了如何从字符串中生成词频图并保存的
# -*- coding: utf-8 -*-
from wordcloud import WordCloud
text = "dog cat fish bird cat cat dog"
wc = WordCloud()
wc.generate(text)
wc.to_file("1.png")
word_cloud
从给定的text中按空格读取单词,出现次数越多的单词,在生成的图像越大,效果图如下
控制绘制参数
上面的例子比较粗糙,为了更精细化的控制,word_cloud
提供了大量参数用来控制图像的生
属性名 | 示例 | 说明 |
---|---|---|
background_color | background_color='white' | 指定背景色,可以使用16进制颜色 |
width | width=600 | 图像长度默认400 单位像素 |
height | height=400 | 图像高度 默认200 |
margin | margin=20 | 词与词之间的边距 默认2 |
scale | scale=0.5 | 缩放比例 对图像整体进行缩放 默认为1 |
prefer_horizontal | prefer_horizontal=0.9 | 词在水平方向上出现的频率,默认为0.9 |
min_font_size | min_font_size=10 | 最小字体 默认为4 |
max_font_size | max_font_size=20 | 最大字体 默认为200 |
font_step | font_step=2 | 字体步幅 控制在给定text遍历单词的步幅 默认为1 一般不用修改 对于较大text 增大font_step会加快读取速度 但会牺牲部分准确性 |
stopwords | stopwords=set('dog') | 设置要过滤的词 以字符串或者集合作为接收参数 如不设置将使用默认的 停动词词库 |
mode | mode='RGB' | 设置显色模式 默认RGB 如果为RGBA且background_color不为空时,背景为透明 |
relative_scaling | relative_scaling=1 | 词频与字体大小关联性 默认为5 值越小 变化越明显 |
color_func | color_func=None | 生成新颜色的函数 如果为空 则使用 self.color_func |
regexp | regexp=None | 默认单词是以空格分割,如果设置这个参数 将根据指定函数来分割 |
width | regexp=None | 默认400 单位像素 |
collocations | collocations=False | 是否包含两个词的搭配 默认为True |
colormap | colormap=None | 给所有单词随机分配颜色 指定color_func则忽略 |
random_state | random_state=1 | 为每个单词返回一个PIL颜色 |
font_path | font_path='PangMenZhengDaoBiaoTiTi-1.ttf' | 指定字体 |
mask | mask=None | 指定背景图,会将单词填充在背景图像素非白色(#FFFFFF RGB(255,255,255))的地方 |
利用属性设置一下图像,效果如下
from wordcloud import WordCloud
text = "dog cat fish bird cat cat dog"
wc = WordCloud(
background_color='white',
width=600,
)
wc.generate(text)
wc.to_file("1.png")
简单设置一下背景和长度.png
中文乱码问题解决
在使用word_cloud
处理中文时,会出现乱码,如下
from wordcloud import WordCloud
text = "张三 李四 王五"
wc = WordCloud(
background_color='white',
width=600,
)
wc.generate(text)
wc.to_file("1.png")
默认字体中文乱码.png
这是由于word_cloud
自带的字体DroidSansMono.ttf
不支持中文
解决方法为使用支持中午跟的字体替代(注意版权),下面例子使用旁门正道
字体
from wordcloud import WordCloud
text = "张三 李四 王五"
wc = WordCloud(
background_color='white',
font_path="PangMenZhengDaoBiaoTiTi-1.ttf"
)
wc.generate(text)
wc.to_file("1.png")
指定字体后.png
在指定背景图上生成
使用numpy
与matplotlib
库,可以在指定背景图上生成词云
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
from wordcloud import WordCloud, ImageColorGenerator
text = "dog cat fish bird lino tiger monkey rabbit koala panda snake"
# 加载背景图
color_mask = np.array(Image.open("f.jpeg"))
wc = WordCloud(
mask=color_mask,background_color='white'
)
wc.generate(text)
image_colors = ImageColorGenerator(color_mask)
# 在只设置mask的情况下 会得到一个拥有图片形状的词云 axis默认为on 会开启边框
plt.imshow(wc, interpolation="bilinear")
plt.axis("off")
plt.savefig("a.jpg")
# 直接在构造函数中直接给颜色 这种方式词云将会按照给定的图片颜色布局生成字体颜色策略
plt.imshow(wc.recolor(color_func=image_colors), interpolation="bilinear")
plt.axis("off")
plt.savefig("b.jpg")
原始图
原始图 按轮廓生成.jpg 按轮廓按颜色生成.jpg
给定的词数比较少,导致效果不是太明显,增加一下text内容即可
numpy
与matplotlib
的用法此处不做具体讲解,仅最简单使用
网友评论