首发于 Python与数据分析
Python制作词云图从未如此简单!

Python制作词云图从未如此简单!

五四青年节那天,小笨聪看了下B 站的《后浪》,不禁想到了梁启超先生的一篇绝世散文——《少年中国说》,尤其这篇文章的最后一段,读起来令人激情澎湃、荡气回肠!所以,这次制作词云图的文本就选取了《少年中国说》原文

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


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



本文主要介绍两种制作词云图的方法,分别是 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)

那么我们看一下词云图效果:

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

二. stylecloud

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

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

styleword 制作词云主要利用 gen_stylecloud() 方法,上述几个特点体现在该方法的参数里。

仍然以《少年中国说》为文本内容进行代码示例:

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()

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


Font Awesome 网站:

palettable 网站:


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

以上就是利用 Python 制作词云图的内容,

微信公众号"学编程的金融客"后台回复 “ 词云图 ” 即可获取源码和图片。【完】

4617公司起名测试打分1518免费测试周公解梦穿小鞋小小梦魇安卓破解版起名五行带金有什么字汉堡店起个什么名字好周易取名序列号周公解梦被蛇追生辰八字起名是真是假周易罗盘图周公解梦挖耳屎周易八字起名取名字吗周易取名字大全免费取名大全郭名宝宝起名什么酒店起名好听免费起男孩名周易起名的软件王宝宝起人名商标起英文名周公解梦 佛滔俊字起名男孩名称哪里算命的好婴幼儿店铺起名大全猪宝宝起名考虑事项公司起名网免费测试姓安有什么起名醉西游周易测算运势带俊字的公司起名免费周易八卦下载5行8卦起名起名周易八字淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男子给前妻转账 现任妻子起诉要回网友建议重庆地铁不准乘客携带菜筐月嫂回应掌掴婴儿是在赶虫子重庆警方辟谣“男子杀人焚尸”国产伟哥去年销售近13亿新的一天从800个哈欠开始男孩疑遭霸凌 家长讨说法被踢出群高中生被打伤下体休学 邯郸通报男子持台球杆殴打2名女店员被抓19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警两大学生合买彩票中奖一人不认账德国打算提及普京时仅用姓名山西省委原副书记商黎光被逮捕武汉大学樱花即将进入盛花期今日春分张家界的山上“长”满了韩国人?特朗普谈“凯特王妃P图照”王树国3次鞠躬告别西交大师生白宫:哈马斯三号人物被杀代拍被何赛飞拿着魔杖追着打315晚会后胖东来又人满为患了房客欠租失踪 房东直发愁倪萍分享减重40斤方法“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火手机成瘾是影响睡眠质量重要因素考生莫言也上北大硕士复试名单了妈妈回应孩子在校撞护栏坠楼网友洛杉矶偶遇贾玲呼北高速交通事故已致14人死亡西双版纳热带植物园回应蜉蝣大爆发男孩8年未见母亲被告知被遗忘张立群任西安交通大学校长恒大被罚41.75亿到底怎么缴沈阳一轿车冲入人行道致3死2伤奥运男篮美国塞尔维亚同组周杰伦一审败诉网易国标起草人:淀粉肠是低配版火腿肠外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万杨倩无缘巴黎奥运男子被猫抓伤后确诊“猫抓病”春分“立蛋”成功率更高?记者:伊万改变了国足氛围奥巴马现身唐宁街 黑色着装引猜测

4617 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化