在Ubuntu 16.04.5 LTS上利用python绘制词云图实战

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tao_627/article/details/85163391

简介

词云图是数据分析中比较常见的一种可视化手段。 正好,Python下也有一款词云生成库wordcloud:
https://github.com/amueller/word_cloud 
下面是我基于网上的例子,自己尝试验证的记录。

安装依赖库

wordcloud依赖numpy和pillow,如果保存到图像的话,还需要matplotlib库,所以,一般都会执行下面的安装命令
需要安装如下扩展库
sudo pip install wordcloud
sudo pip install jieba
sudo pip install numpy
sudo pip install scipy
sudo pip install matplatlib

中文字体库

wordcloud默认只显示英文,不能显示中文,需要我们自行下载中文字体库,并在代码中明确指定字体库文件所在的路径,否则会有乱码。

有两种方式进行配置:

方法一:

目前python 2.7上安装的wordcloud库的路径是:

/usr/local/lib/python2.7/dist-packages/wordcloud/

将其中的位置更换为指定的中文字体库的路径

FONT_PATH = os.environ.get('FONT_PATH', os.path.join(FILE, 'DroidSansMono.ttf'))

方法二:

在wordcloud初始化时即可指定font_path的值,这种方式我个人认为更灵活方便,我一般使用这种方法。

下面是我从网上下载的几种喜欢的字体库:

仿宋体
微软雅黑
苹方
迷你简启体
文泉驿微米黑
文泉驿正黑
Droid Sans Fallback

待分析的语料文本和背景图片

这里以习大大的《习近平:在庆祝改革开放40周年大会上的讲话》为例分析:

习近平:在庆祝改革开放40周年大会上的讲话

当然也可以设置屏蔽词,另外也可以添加自定义的屏蔽词到jieba分词库中

当然这样也需要准备一张背景图片lady.jpg

代码

#!/usr/bin/env python
#encoding: utf-8
#description: 代码实现词云填充照片的效果,有屏蔽词功能
#refer: https://www.cnblogs.com/delav/p/7845539.html
#date: 2018-12-20


import matplotlib.pyplot as plt
from scipy.misc import imread       #这是一个处理图像的函数
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
import jieba


#将黑名单中的词过滤掉,该函数的作用等同于WordCloud中的stopwords参数
#fn是存放屏蔽词的文本, 一行一词
def filter_words(texts, fn):
    wlist = []
    #返回一个迭代器
    word_generator = jieba.cut(texts, cut_all=False)
    with open(fn) as f:
        str_text = f.read()
        #把str转换为Unicode格式
        unicode_text = unicode(str_text, 'utf-8')
        f.close()
    for word in word_generator:
        if word.strip() not in unicode_text:
            wlist.append(word)
    return ' '.join(wlist)



if __name__ == '__main__':

    #得到背景图片
    bg_img = imread('./lady.jpg')

    #打开词源文本
    text_src = open('./习大大改革开放40周年大会讲话.txt').read()

    #添加自定义分词进分词词库
    jieba.add_word('金三胖')

    #移去屏蔽词集合
    text = filter_words(text_src, './blacklist.txt')

    #初始化词云对象
    wc = WordCloud(
            background_color='green',
            max_words=5000,  #最大词数
            mask=bg_img, #以该图片为背景绘图,该参数非空时会忽略width和height
            max_font_size=100,
            stopwords=STOPWORDS.add('苟利国'), #将其添加到内置屏蔽词
            font_path='/home/taoyx/文档/系统字体收集/pinfang.ttc', #解决汉字显示乱码问题
            random_state=42 #为每个词返回一个PIL颜色
            )
    wc.generate(text)

    #基于彩色图像生成相应彩色
    image_colors = ImageColorGenerator(bg_img)
    #显示图片
    plt.imshow(wc)
    #关闭坐标轴
    plt.axis("off")
    #显示图片,关闭后才会显示下面的图片
    plt.show()
    #绘制词云
    plt.figure()
    plt.imshow(wc.recolor(color_func=image_colors))
    plt.axis("off")
    #显示图像,注意如果上一次图像如果没有显示,这次一下子显示两张图像
    plt.show()
    #保存图像
    wc.to_file('改革开放40周年.png')

效果图

执行下面的命令,可以看到下面的效果:

python wordcloud_4.py

在实时显示词云图效果的同时,还会将该图保存到本地文件中。

命令行执行方式

在成功安装worldcloud之后,就可以使用wordcloud_cli命令了,参看下面的使用方法

对上面的例子,执行下面的命令同样可以得到一个词云图

wordcloud_cli --text './习大大改革开放40周年大会讲话.txt' --imagefile './cli_test.png'

在当前目录下面,有下面的图片生成

猜你喜欢

转载自blog.csdn.net/tao_627/article/details/85163391