美文网首页玩蛇的正确姿势
python绘制用户画像---wordcloud

python绘制用户画像---wordcloud

作者: 我傻笑你跑掉 | 来源:发表于2019-08-12 16:58 被阅读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的用法此处不做具体讲解,仅最简单使用

    相关文章

      网友评论

        本文标题:python绘制用户画像---wordcloud

        本文链接:https://www.haomeiwen.com/subject/ipnujctx.html