数据可视化之利用Python制作词云图

一.词云图介绍

词云图可以看作是文本数据的视觉表示,由词汇组成类似云的彩色图形。相对其它诸多用来显示数值数据的图表,词云图的独特之处在于,可以展示大量文本数据。文本数据中每个词的重要性以字体大小或颜色显示,因此词云可以很好地表明每个单词在特定文本体中被提及的频率(即词频分布),通过使用不同的颜色和大小来表示不同级别的相对显着性。

词云图的应用相当广泛,诸如电影-视频-微博-网易云-淘宝-知乎等评论分析、书籍-报告-商品信息-疫情舆论等文本分析,使用词云图能使数据信息的表达一目了然。

Alt
Alt
Alt
Alt
本文主要介绍两种制作词云图的方法,分别是 wordcloud 和 stylecloud 。当然,首先别忘了安装代码中用到的库。

pip  install  wordcloud
pip  install  wordcloud

二.wordcloud方法

wordcloud是制作词云图最常用的工具,上手简单,操作方便,关键在于了解各个参数用法。额,参数貌似有点多(⊙o⊙)…
在这里插入图片描述
不过也不要怕,并不是每个参数都需要自己设置,我们可以根据自己的需要个性化设置。下面就以《少年中国说》作为文本进行代码示例:

import matplotlib.pyplot as plt #数据可视化
import jieba #词语切割
import wordcloud #分词
from wordcloud import WordCloud,ImageColorGenerator,STOPWORDS #词云,颜色生成器,停止词
import numpy as np #科学计算
from PIL import Image #处理图片

def ciyun():
    with open('少年中国说.txt','r',encoding='gbk') as f:  #打开新的文本转码为gbk
        textfile= f.read()  #读取文本内容
    wordlist = jieba.lcut(textfile)#切割词语
    space_list = ' '.join(wordlist) #空格链接词语
    #print(space_list)
    backgroud = np.array(Image.open('test1.jpg')) 
    
    wc = WordCloud(width=1400, height=2200,
			background_color='white',
	        mode='RGB', 
			mask=backgroud, #添加蒙版,生成指定形状的词云,并且词云图的颜色可从蒙版里提取
			max_words=500,
			stopwords=STOPWORDS.add('老年人'),#内置的屏蔽词,并添加自己设置的词语
			font_path='C:\Windows\Fonts\STZHONGS.ttf',
			max_font_size=150,
			relative_scaling=0.6, #设置字体大小与词频的关联程度为0.4
			random_state=50, 
			scale=2 
			).generate(space_list) 		
			
    image_color = ImageColorGenerator(backgroud)#设置生成词云的颜色,如去掉这两行则字体为默认颜色
    wc.recolor(color_func=image_color)
    
    plt.imshow(wc) #显示词云
    plt.axis('off') #关闭x,y轴
    plt.show()#显示
    wc.to_file('test1_ciyun.jpg') #保存词云图
    
def main():
    ciyun()
if __name__ == '__main__':
    main()

值得注意的是当我们制作中文词云图时,一是需要指定显示的中文字体的英文名称,C盘里的中文字体名称有一些为汉字,此时可以将该字体复制到桌面就可看到中文字体的英文名称;二是禁(停)用词stopwords 的设置。

分词时需要去除助词、介词、连词、语气词及标点符号等一些没有实际意义的词语,这些停用词可以从网上自行下载。除此之外,还需要自定义一个停用词表,用以去除那些在文本中没有实际意义的词语,比如:最终、因为、一切、经历等。这里小笨聪给大家一个思路:

def read_stopword(fpath):
    # 读取中文停用词表
    with open(fpath, 'r', encoding='utf-8') as file:
        stopword = file.readlines()
    return [word.replace('\n', '') for word in stopword]
#加载多个停用词表
path = 'E:\WeChatPublicNumber\python\词云图\stopwords'
# 前两个停用词表是网上下载的,第三个是自己设置的
name_list = ['中文停用词.txt', '哈工大停用词.txt', 'stopword.txt']
stop_word = []
for fname in name_list:
    stop_word += read_stopword(os.path.join(path, fname))
stop_word = set(stop_word)

那么我们看一下词云图效果:
Alt
整体来看还说的过去,制作带有蒙版背景的词云图需要注意蒙版的选取,尽量选择主题部分和周围区域区分明显的图片,并且主题颜色可以丰富明亮一些,这样的词云图才会美观一些。

二. stylecloud方法

stylecloud 是一个 Python 包,它基于流行的 wordcloud 包,并添加了一些有用的功能,从而创建出独特的词云。stylecloud 具备以下特点:

  • 支持高级调色板(通过 palettable 实现)
  • 为词云提供(任意大小)的图标形状(通过 Font Awesome 5.11.2 获得)
  • 为调色板提供直接梯度 支持读取文本文件,或预生成的 CSV 文件(包含单词和数字)
  • 提供命令行接口

styleword 制作词云主要利用gen_stylecloud() 方法,上述几个特点体现在该方法的参数里。
Alt
仍然以《少年中国说》为文本内容进行代码示例:

import jieba
import stylecloud
def ciyun():
    with open('少年中国说.txt','r',encoding='gbk') as f:
        word_list = jieba.cut(f.read())
        result = " ".join(word_list) #分词用空格隔开        
    stylecloud.gen_stylecloud(
        text=result, # 上面分词的结果作为文本传给text参数
        size=512,
        font_path='msyh.ttc', # 字体设置
        palette='cartocolors.qualitative.Pastel_7', # 调色方案选取,从palettable里选择
        gradient='horizontal', # 渐变色方向选了垂直方向
        icon_name='fab fa-weixin',  # 蒙版选取,从Font Awesome里选
        output_name='test_ciyun.png') # 输出词云图
def main():
    ciyun()
if __name__ == '__main__':
    main()	

AltAlt
看一下效果,比 wordcloud 的效果更美观。主要原因在于 stylecloud 中的两个重要参数的选取,即蒙版选择 icon_name 和 调色方案选择 palette*。它的蒙版是用 Font Awesome 5 的图标组成的,而 Font Awesome 的图标多达几千种。它的调色方案是从 palettable 选取的。

Font Awesome 网站:
https://fa5.dashgame.com/#/%E5%9B%BE%E6%A0%87
palettable 网站:
https://jiffyclub.github.io/palettable/

当然,制作词云图方法不止上面两种,比如用 Pyecharts 制作,另外也有很多网站不需要任何编程就能快速制作词云图。具体用哪种看自己喜好,但别忘了使用词云图的初衷是为了更好地展示你的数据。

以上就是利用 Python 制作词云图的内容,
微信公众号"学编程的金融客"后台回复 “ 词云图” 即可获取源码和图片。

欢迎关注微信公众号:学编程的金融客,作者:小笨聪

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章