数据可视化-利用WordCloud进行词云图绘制

定义

词云图,也叫文字云,是对文本中出现频率较高的“关键词”予以视觉化的展现,词云图过滤掉大量的低频低质的文本信息,使得浏览者只要一眼扫过文本就可领略文本的主旨。

效果


数据可视化-利用WordCloud进行词云图绘制_第1张图片

上图为抓取2016年简书·读书专题文章中的书名,生成的词云图。从该图中可以根据字体的大小,直观地分析出较为热门的图书。

步骤及关键代码

本次实验使用习近平在建党95周年重要讲话做为源文本(xjp.txt),利用WordClound工具进行词云图绘制主要有以下四个步骤:
① 计算关键词
利用JieBa分词工具中的extract_tags工具获取设定数目的关键词。
② 计算关键词词频
计算关键词的词频,用以WordCloud词云图绘制。
③ 加载背景轮廓图
利用WordCloud工具设定关键词呈现区域。
④ 绘制
根据传入的关键词词频,利用WordCloud工具绘制词云图。

# -*- coding:utf-8 -*-
import jieba
from jieba.analyse import extract_tags
from scipy.misc import imread
from wordcloud import WordCloud, ImageColorGenerator
import matplotlib.pyplot as plt


def generater(**kwargs):
    content_name = kwargs['content_name']
    content_path = './{}.txt'.format(content_name)
    top_k = kwargs['top_k']
    bg_name = kwargs['bg_name']
    color = kwargs['color']
    font_type = kwargs['font_type']

    with open(content_path) as f:
        content = f.read()
    '''
    根据TF/IDF提取topK个关键词
    '''
    tags = extract_tags(sentence=content, topK=top_k)
    '''
    得到关键词的词频
    '''
    # 全模式
    words = [word for word in jieba.cut(content, cut_all=True)]
    words_freq = {}
    for tag in tags:
        freq = words.count(tag)
        words_freq[tag] = freq
    '''
    设置背景
    scipy.misc imread():返回的是 numpy.ndarray 也即 numpy 下的多维数组对象
    '''
    bg_path = './{}.png'.format(bg_name)
    bg_img = imread(bg_path)
    font_path = './{}.ttf'.format(font_type)
    word_cloud = WordCloud(font_path=font_path,  # 设置字体
                           background_color=color,  # 背景颜色
                           max_words=top_k,  # 词云显示的最多词数
                           max_font_size=100,  # 字体最大
                           mask=bg_img,  # 背景图
                           )
    word_cloud.generate_from_frequencies(words_freq)
    # # 改变字体颜色
    # img_colors = ImageColorGenerator(bg_img)
    # # 字体颜色为背景图片的颜色
    # word_cloud.recolor(color_func=img_colors)

    # 显示图片
    plt.imshow(word_cloud)
    plt.axis('off')  # 不显示坐标轴
    plt.show()

    # 保存图片
    word_cloud_img = './{}_word_cloud.png'.format(content_name)
    word_cloud.to_file(word_cloud_img)


if __name__ == '__main__':
      generater(content_name='xjp',
                color='white',
                top_k=66,
                bg_name='china',  # 默认png
                font_type='wryh')

说明

generater()中的参数说明:

  • content:需要进行词云图绘制的文本文件名(.txt格式)
  • color:背景颜色
  • top_k:关键词数目
  • bg_name:背景轮廓图文件名(默认为矩形,.png格式)
  • font_type:字体

效果

加载的背景图片(中国地图):
数据可视化-利用WordCloud进行词云图绘制_第2张图片
加载中国地图做为背景轮廓图生成的词云图:


数据可视化-利用WordCloud进行词云图绘制_第3张图片

如果需要让字体颜色与所加载的背景图片的颜色保持一致,则需要在生成词云图之前设置字体颜色:

    # 改变字体颜色
    img_colors = ImageColorGenerator(bg_img)
    # 字体颜色为背景图片的颜色
    word_cloud.recolor(color_func=img_colors)

当然,字体颜色还有很多其他的表现方式,在这就不一一赘述。

源码地址

[ 源码地址 ]

说明:

WordClound.py:源码
china.png:背景轮廓图
xjp.txt:文本文件
wryh.ttf:字体文件
xjp_word_cloud.png:生成的效果图文件

你可能感兴趣的:(Python)