生成一张词云图

一. 生成一张词云图的主要步骤

1、首先需要一份待分析的文本数据,由于文本数据都是一段一段的,所以第一步要将这些句子或者段落划分成词,这个过程称之为分词,需要用到Python中的分词库jieba。
2、分词之后,就需要根据分词结果生成词云,这个过程需要用到wordcloud库
3、最后需要将生成的词云展现出来,用到大家比较熟悉的matplotlib

二. 导入相应的库,读取文件

# 导入相应的库
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt

# 导入文本数据并进行简单的文本处理
# 去掉换行符和空格
text = open("./data/2021.2.3微博热搜汇总.txt",encoding='utf8').read()
text = text.replace('\n',"").replace("\u3000","")

可能会出现一下情况:
在这里插入图片描述
装一下wordcloud就好了:
在这里插入图片描述

三. 分词

# 分词,返回结果为词的列表
text_cut = jieba.lcut(text)
# 将分好的词用某个符号分割开连成字符串
text_cut = ' '.join(text_cut)

在这里插入图片描述

四. 导入停用词、使用WordCloud生成词云

# 导入停用词
# 用于去掉文本中类似于'啊''你''我',或者一些特殊符号之类的词
stop_words = open("./data/停用词.txt",encoding="utf8").read().split("\n")

# 使用WordCloud生成词云
word_cloud = WordCloud(font_path="simsun.ttc",  # 设置词云字体
                       background_color="white", # 词云图的背景颜色
                       stopwords=stop_words) # 去掉的停词
word_cloud.generate(text_cut)

此处简单介绍一下停用词的含义:
一、什么是停用词?
停用词(Stop Words) ,词典译为“电脑检索中的虚字、非检索用字”。在SEO中,为节省存储空间和提高搜索效率,搜索引擎在索引页面或处理搜索请求时会自动忽略某些字或词,这些字或词即被称为Stop Words(停用词)。
停用词一定程度上相当于过滤词(Filter Words),不过过滤词的范围更大一些,包含黄色、政治等敏感信息的关键词都会被视做过滤词加以处理,停用词本身则没有这个限制。通常意义上,停用词(Stop Words)大致可分为如下两类:
1、使用十分广泛,甚至是过于频繁的一些单词。比如英文的“i”、“is”、“what”,中文的“我”、“就”之类词几乎在每个文档上均会出现,查询这样的词搜索引擎就无法保证能够给出真正相关的搜索结果,难于缩小搜索范围提高搜索结果的准确性,同时还会降低搜索的效率。因此,在真正的工作中,Google和百度等搜索引擎会忽略掉特定的常用词,在搜索的时候,如果我们使用了太多的停用词,也同样有可能无法得到非常精确的结果,甚至是可能大量毫不相关的搜索结果。
2、文本中出现频率很高,但实际意义又不大的词。这一类主要包括了语气助词、副词、介词、连词等,通常自身并无明确意义,只有将其放入一个完整的句子中才有一定作用的词语。如常见的“的”、“在”、“和”、“接着”之类,比如“SEO研究院是原创的SEO博客”这句话中的“是”、“的”就是两个停用词。

五.运用matplotlib展现结果

# 运用matplotlib展现结果
plt.subplots(figsize=(12,8))
plt.imshow(word_cloud)
plt.axis("off")

在这里插入图片描述
一张简单的词云图就成功生成啦,但其实这个图片特别模糊,可以在WordCloud中添加一个scale属性,进行调节:

word_cloud = WordCloud(scale=4,font_path="simsun.ttc",  # 设置词云字体   #scale 参数可以调节图片清晰度
                       background_color="white", # 词云图的背景颜色
                       stopwords=stop_words) # 去掉的停词

看看更改后的效果:
在这里插入图片描述
同时,如果想要美观,可以将这个图变一下形状,继续下面的内容。

六.改进

想生成带特定形状的词云,首先得准备一张该形状的图片,且除了目标形状外,其他地方都是空白的,如下面这张用于演示的图。
在这里插入图片描述
为了让大家清楚的看到用停用词和不用停用词的区别,下面做一个对比:
(1)、没有导入我们准备好的停用词

import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt
from PIL import Image  #PIL是python的第三方图像处理库
import numpy as np

text = open("./data/2021.2.3微博热搜汇总.txt",encoding='utf8').read()
text = text.replace('\n',"").replace("\u3000","")
text_cut = jieba.lcut(text)
text_cut = ' '.join(text_cut)

#没有导入我们准备好的停用词,直接用了原始的txt文本!!!!
stop_words = open("./data/2021.2.3微博热搜汇总.txt",encoding="utf8").read().split("\n")

# 主要区别
background = Image.open("./data/福_background.jpg")
graph = np.array(background)

word_cloud = WordCloud(font_path="simsun.ttc", 
                       background_color="white", 
                       mask=graph, # 指定词云的形状
                       stopwords=stop_words) 

word_cloud.generate(text_cut)
plt.subplots(figsize=(12,8))
#plt.subplots(figsize=(24,16))
plt.imshow(word_cloud)
plt.axis("off")

在这里插入图片描述

(2)、导入了我们准备好的停用词

import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt
from PIL import Image  #PIL是python的第三方图像处理库
import numpy as np

text = open("./data/2021.2.3微博热搜汇总.txt",encoding='utf8').read()
text = text.replace('\n',"").replace("\u3000","")
text_cut = jieba.lcut(text)
text_cut = ' '.join(text_cut)

# 导入停用词!!!!!
stop_words = open("./data/停用词.txt",encoding="utf8").read().split("\n")

# 主要区别
background = Image.open("./data/福_background.jpg")
graph = np.array(background)

word_cloud = WordCloud(font_path="simsun.ttc", 
                       background_color="white", 
                       mask=graph, # 指定词云的形状
                       stopwords=stop_words) 

word_cloud.generate(text_cut)
plt.subplots(figsize=(12,8))
plt.imshow(word_cloud)
plt.axis("off")

在这里插入图片描述
本篇参考:
https://zhuanlan.zhihu.com/p/106720092?utm_source=wechat_session

https://weibo.zhaoyizhe.com/?source=bky

以上就完成词云图的创建啦,其中的两个文档如果大家有需要可以评论找我获取。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值