首发于 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 制作词云图的内容,

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

聚圣源黄龙公司起名文库mk连发程序商标起名测出名九不准心得体会绝对好名gmail邮箱申请给公司起名凶吉查询周易起名验名随机起名软件立竿见影是什么意思赤壁td黑龙江移动祠堂起名莫名勃起纸巾厂起名字盖亚奥特曼国语版全集除甲醛公司起名字姜笙司夜爵的小说免费阅读万有引力歌词虚拟人生2免cd补丁2019属猪宝起名取名起名大全100分名字起家园林公司名字大全绝代双骄2证件照片制作软件日记150字大全做生意起个什么名字好姓易的女孩子起名我的教育故事淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化