玩蛇的正确姿势

python绘制用户画像---wordcloud

2019-08-12  本文已影响0人  我傻笑你跑掉

word_cloud是python的一个三方库,称为词云也叫做文字云,是根据文本中的词频,对内容进行可视化的汇总,可以用来绘制用户画像

下载与安装

安装word_cloud可以使用 python 自带的 pip 工具来进行

首先确保已经安装pythonpip并且pip以及更新到最新版本.
这里使用的python版本为3.7,pip版本为19.2.1

word_cloud依赖于numpypillow,当然如果只想将图像保存成图片文件,
使用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中按空格读取单词,出现次数越多的单词,在生成的图像越大,效果图如下

默认效果.png

控制绘制参数

上面的例子比较粗糙,为了更精细化的控制,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

在指定背景图上生成

使用numpymatplotlib库,可以在指定背景图上生成词云

# -*- 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内容即可

numpymatplotlib的用法此处不做具体讲解,仅最简单使用

上一篇 下一篇

猜你喜欢

热点阅读