Fate

使用wordcloud统计标签数据

Markdown

标签利器:wordcloud(词云),一起来学(zhuang)习(bi)吧!

安装

  • 安装wordcloud包,pip install wordcloud,如果需要对文本的句子进行分解,比如说我是一名大学生进行分解之后就变成了我是\一名\大学生.可以安装jieba,同运行pip install jieba.

使用

  • 安装完之后,我们来运行一个Demo

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    #!/usr/bin/python
    #-*- coding: utf-8 -*-
    """
    Using custom colors
    ====================
    Using the recolor method and custom coloring functions.
    """
    import matplotlib.pyplot as plt
    import random
    import os
    from wordcloud import WordCloud, STOPWORDS
    #此段代码解决 1.matplotlib中文显示问题 2 '-'显示为方块问题
    from pylab import *
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    mpl.rcParams['axes.unicode_minus'] = False
    font=os.path.join(os.path.dirname(__file__), "FZSTK.ttf")
    text = open(u"test.txt").read().decode('gbk')
    # adding movie script specific stopwords
    stopwords = set(STOPWORDS)
    stopwords.add("int")
    stopwords.add("ext")
    #wc = WordCloud(font_path=font,max_words=2000, mask=mask, stopwords=stopwords, margin=10,random_state=42,max_font_size=20,background_color='black',scale =2).generate(text)
    wc = WordCloud(font_path=font,max_words=30, max_font_size=50,stopwords=stopwords,margin=10,random_state=42,background_color='black',scale =1).generate(text)
    # store default colored image
    default_colors = wc.to_array()
    wc.to_file("a_new_hope.png")
    #设置为 wordcloud 默认
    plt.title('WordCloud Demo')
    plt.imshow(default_colors)
    plt.axis("off")
    plt.show()
  • 运行结果
    Markdown

  • wordcloud里面的基本参数.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    WordCloud(font_path=None, width=400, height=200, margin=5, ranks_only=False, prefer_horizontal=0.9,mask=None, scale=1, color_func=<function random_color_func at 0x2b8b422a31b8>, max_words=200, stopwords=None,random_state=None, background_color='black', max_font_size=None)
    #font_path:用到的字体文件的路径(支持OTF或TTF格式).默认字体是DroidSansMono,但是不能够显示中文,所以可以Windows系统下的C:\Windows\Fonts中找字体替换.
    #width:画布宽度,默认值为400
    #height:画布高度,默认值为200
    #ranks_only:是否只用词频排序而不是实际词频统计值,默认 False
    #prefer_horizontal:词语水平出现的频率,默认0.9(即垂直出现频率为0.1)
    #mask: nd-array or None (default=None)如果参数为空,则使用二维遮罩绘制词云.如果mask非空,设置的宽高值将被忽略,遮罩形状被 mask 取代.除全白(#FFFFFF)的部分将不会绘制,其余部分会用于绘制词云。
    #scale : float (default=1)计算与绘制图像间的比例。对于较大的词云图像,使用比例而非较大的画布会显著提升绘图速度,但是可能会造成词语间的粗糙拟合。
    #max_words :(default=2000)词语的最大数量
    #stopwords : set of strings 屏蔽词
    #max_font_size : int or None (default=None)最大词的最大字号.
  • wordcloud里面的方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    #static fit_words(frequencies) / generate_from_frequencies: 依据词语和频率生成词云.
    参数:frequencies : array of tuples(包含了词语和频率的元组.)
    #static generate(text) / generate_from_text: 从文本中生成词云,调用 _text 和 fit_words.
    #static process_text(text): 将长文本分词并去除屏蔽词(此处指英语,中文分词还是需要自己用别的库先行实现,使用上面的 fit_words(frequencies))
    参数:text : string(需要处理的文本)
    返回:words : list of tuples (string, float)(带有相应频率的词语)
    #static recolor(random_state=None, color_func=None): 对现有输出重新着色。重新上色会比重新生成整个词云快很多。
    #random_state : RandomState, int, or None, default=None
    如果非空,会使用固定的随机状态。
    如果给出一个整数,它会被用作 random.Random 状态的一个种子(根源)
    #color_func : function or None, default=None
    生成新颜色的函数,如果为空,则使用 self.color_func
    #static to_array():转化为 numpy array
    返回:image : nd-array size (width, height, 3)
    numpy 矩阵的词云图像
    #static to_file(filename):输出到文件
    参数:filename : string
    输出的文件路径
    #wordcloud.ImageColorGenerator(image): 基于 RGB 图像生成颜色。词语将会使用一定矩形区域内的平均颜色上色。这个对象可以被调用作为词云或者重新上色方法的颜色函数。
    参数:image : nd-array, shape (height, width, 3)(用来生成词语颜色的图像.)
    #wordcloud.random_color_func(word=None, font_size=None, position=None, orientation=None, font_path=None, random_state=None):随机生成色调,默认的上色方法。仅仅会生成一个随机的色调(80% 颜色值 50% 亮度)

使用mask元素绘制图像

  • 我将我的原博客的标签页里的标签做个词云,先利用BeautifulSoup将网页的信息进行解析,然后使用一张心型图做mask生成一张词云.效果如下:

Markdown

热评文章