赞
踩
今天的Python案例是跟着笔者来打造属于自己的词云图。那么什么是词云图呢?我们在百度中来搜索一下,如图所示:
概念:词云图就是由词汇组成类似云的彩色图形。接下来我们就可以去为自己量身打造一张词云图了,但是笔者在这里的话就不拿自己的照片来进行演示了。最近很火的一部电影冰雪奇缘2,不知道大家有没有看过。无论是美轮美奂的画面质感,还是艾莎的造型如图1所示,都得到了众多人的喜爱,全球各地再度掀起了一股艾莎热潮。
接下来我们用Python来分析下这部电影的剧情并以艾莎为背景绘制词云图,效果如图2所示。
第一步:首先的话我们要准备一张遮照图,用来绘制词云的形状的,如果是想要拿自己的照片来做的话,一定要使用抠图技术将浓烈的背景换为纯色的背景。第二个的话就是我们需要准备相关的文本信息,文本信息越多,生成的图片信息越丰富。如图所示。
第二步:安装第三方模块,此次要使用到5个第三方模块,分别是matplotlib 数据可视化模块,numpy 数值计算模块,jieba 分词模块,wordcloud 词云模块,Pillow(PIL) 图像处理模块,如果不知道Pillow模块怎么使用的话,可以去看笔者的另一篇博文 图片转字符画,以上模块安装命令如下:
pip install --user -i http://pypi.douban.com/simple --trusted-host pypi.douban.com matplotlib pip install --user -i http://pypi.douban.com/simple --trusted-host pypi.douban.com numpy pip install --user -i http://pypi.douban.com/simple --trusted-host pypi.douban.com jieba pip install --user -i http://pypi.douban.com/simple --trusted-host pypi.douban.com wordcloud pip install --user -i http://pypi.douban.com/simple --trusted-host pypi.douban.com pillow
第三步:编写代码。主要是分为6个步骤,
示例代码如下:
import numpy as np from PIL import Image # 导入PIL模块中的Image对象 import wordcloud # 导入词云模块 import matplotlib.pyplot as plt import os import jieba from wordcloud import ImageColorGenerator file_name = "elsa.txt" pic_name = "elsa.png" # 你自己是什么文件名你就写什么文件名 # 判断文件是否存在 if os.path.exists(file_name): with open(file_name, "r") as file: # 读取文件 content = file.read() if content: # 判断文本内容是否为空 # 进行分词处理c 返回的是一个对象 需要使用"".join进行拼接 cut_text = jieba.cut(content) word = " ".join(cut_text) # 拼接 img = np.array(Image.open(pic_name)) # 读取图片 img_colors = ImageColorGenerator(img) # 生成词云图 # mask: 置顶遮罩图 img # font_path: 设置字体 # background_color: 设置背景颜色 wd = wordcloud.WordCloud(mask=img, font_path="simhei.ttf", background_color="white") wd.generate(word) # 生成词云图 # 显示词云图 plt.imshow(wd.recolor(color_func=img_colors), interpolation="bilinear") plt.axis("off") # 关闭显示x轴/y轴下标 plt.savefig("elsa_cy.png") # 保存词云图到本地 plt.show() else: print("大哥,你在逗我吗,没文件我咋读勒!")
运行结果如图所示:
接下来,是读者们自由发挥的时间,你可以尝试找一些自己感兴趣的文本数据进行分析,开启你的脑洞绘制自己想要的词云。
相信大家小的时候,都看过风云这部电视剧吧。最近笔者在抖音上经常看到呢,什么无名满血拉二胡,残血到处浪之类的经典评语。哈哈哈哈哈,言归正传,接下来的任务就是用11行代码完成电视剧风云词云图!首先去百度百科找下风云电视剧的剧情简介,然后粘贴到文本文件,去掉空行后保存为fy.txt。其次使用open方法读取文本文件,然后使用jieba模块分析文本,最后通过wordcloud模块制作词云图,通过matplotlib模块显示词云图。如图所示。
示例代码如下:
import matplotlib.pyplot as plt import wordcloud import jieba with open("fy.txt", "r") as file: content = file.read() # 读取文本文件内容 cut_text = jieba.cut(content) # 分词 返回一个生成器对象 word = " ".join(cut_text) # 字符串拼接 wc = wordcloud.WordCloud(font_path="simhei.ttf", background_color="white") wc.generate(word) # 生成词云图 plt.imshow(wc) # 显示词云图 plt.axis("off") # 关闭x轴和y轴坐标显示 plt.show()
你是否也思考过,怎样用自己喜欢的颜色来绘制词云图?下面你的任务就是实现自定义词云图颜色,使词云图更加形象、靓丽。以外星人为例,相信很多读者觉得这个LOGO眼熟,没错它就是我们和外星人一起学全彩系列图书的LOGO。
图1是原版外星人,我们来看看图2,词云图使用的是默认颜色,与原版相比有些逊色;再来看看图3,使用了红黑色混搭,是不是看起来接近原版了呢?示例代码如下:
import jieba import wordcloud import matplotlib.pyplot as plt from matplotlib import colors from scipy.misc import imread # 注意scipy是要使用pip安装的 # 安装命令如下: # pip install --user -i http://pypi.douban.com/simple --trusted-host pypi.douban.com scipy==1.2.0 with open("wxr.txt", "r") as file: content = file.read() # 读取文件内容 cut_text = jieba.cut(content) # 分词处理 word = " ".join(cut_text) # 拼接 color_list = ["black", "red"] # 红黑色值 # 多种颜色 # color_list = ["LightCoral", "RosyBrown", "IndianRed", "Red", "Brown", "FireBrick" # , "DarkRed", "Maroon", "Gainsboro", "LightGray" # , "Silver", "DarkGray", "Gray", "DimGray", "Black"] color_map = colors.ListedColormap(color_list) # matplotlib色图 img = imread("wxr.png") # 读取图片 wd = wordcloud.WordCloud(mask=img, font_path="simhei.ttf", background_color="white", colormap=color_map) # 生成词云图 wd.generate(word) plt.imshow(wd) # 显示词云图 plt.axis("off") # 关闭x轴和y轴的坐标显示 plt.savefig("图3.png") plt.show() # 显示
在绘制词云图过程中,词云中包括一些无用的字符和一些不想要的词,该如何处理?例如,我们得到一些有关电影小丑的评论内容,然后将其绘制成词云图,但是在文本数据中存在一些特殊字符如《、》、?、...和一些我们不想要的、没有意义的词,如一个、展开、回应、可能、没有、这部等,如图1所示。
实现思路:
示例代码1如下:
import re import matplotlib.pyplot as plt from matplotlib import colors import jieba import wordcloud from wordcloud import WordCloud import imageio # 读取文件 str1 = open('joker.txt','r').read() #文本数据处理 pattern = re.compile(u'\t|\n|\.|-|:|;|\)|\(|\?|\[|\]| ;|,|。|"') str1 = re.sub(pattern, '', str1) #自定义小丑颜色 color_list=['darkslategray','red','orange','darkred'] colormap=colors.ListedColormap(color_list) #文本分词处理制作词云 cut_text = jieba.cut(str1, cut_all=True) # cut_all=False 表示采用精确模式 word = ' '.join(cut_text) #图片背景 pic = imageio.imread('小丑.png') #设置中文停用词 stopwords = set('') stopwords.update(['展开','回应','一个','影评','可能','一部','没有','我们','这个','这部','电影','就是' ,'大家','不是','只是','因为','一些','本片']) #生成词云图 wd = wordcloud.WordCloud( mask=pic, font_path='simhei.ttf', colormap=colormap, stopwords = stopwords, background_color='white' ) #将长文本分词并去除屏蔽词 process_word = WordCloud.process_text(wd,word) #对文本词排序(根据字典中值的大小,对字典中的项排序) sort = sorted(process_word.items(),key=lambda x:x[1],reverse=True) print(sort[:50]) # 输出文本词频最高的前50个词 wd.generate(word) plt.imshow(wd) plt.axis('off') plt.show()
运行结果如图所示:
示例代码2如下:
import re import jieba import wordcloud import matplotlib.pyplot as plt from matplotlib import colors import imageio # 需要安装 # 安装命令如下: # pip install --user -i http://pypi.douban.com/simple --trusted-host pypi.douban.com imageio with open("joker.txt", "r") as file: content = file.read() # 读取文件内容 pattern = re.compile(u'\t|\n|\.|-|:|;|\)|\(|\?|\[|\]| ;|,|。|"') # 正则 str1 = re.sub(pattern, '', content) # 处理文本数据 将上面匹配到的都替换为空字符串 color_list = ['darkslategray', 'red', 'orange', 'darkred'] # 自定义小丑颜色 color_map = colors.ListedColormap(color_list) # cut_all=False: 表示采取精确模式 cut_text = jieba.cut(content, cut_all=True) # 文本分词处理制作词云 word = " ".join(cut_text) # 拼接 img = imageio.imread("小丑.png") # 读取停止词文件并保存到列表中 stopwords = [line.strip() for line in open("stopwords.txt").readlines()] new_word = '' # 滤除停用词 for s in word: if s not in stopwords: new_word += s wd = wordcloud.WordCloud(mask=img, font_path="simhei.ttf", background_color="white", colormap=color_map) # 生成词云图 wd.generate(word) plt.imshow(wd) # 显示词云图 plt.axis("off") # 关闭x轴和y轴的坐标显示 plt.show() # 显示
运行结果如图所示:
到此就结束啦!更多好玩案例和项目代码点这
此文转载。著作权归作者所有,如有侵权联系小编删除!
原文地址:https://blog.csdn.net/xw1680/article/details/105418140
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。