文章目录
- 前言
- 导入所需库
- 将存好的Excel词频表读取成字典
- 循环处理每个词频Excel文件
- 定义词云样式和生成词云图
- 完整代码
- 运行效果截图
- 知识点
- 结束语
前言
本文介绍了如何使用Python编写代码来生成词云图。在生成词云图之前,我们需要导入一些必需的库,包括numpy、wordcloud、PIL、matplotlib.pyplot和openpyxl。其中,numpy用于数据处理,wordcloud用于生成词云,PIL用于图像处理,matplotlib.pyplot用于在笔记本中显示图片,openpyxl用于读取词频Excel文件。此外,还需要准备一个背景图片作为词云的背景。
我们通过读取存放词频Excel文件的文件夹路径,获取文件夹下的所有文件,并将文件名与路径拼接起来,存放在一个列表中。然后,我们使用PIL库中的Image.open()函数读取背景图片,并将其转换为numpy.array格式。
使用循环依次处理每个词频Excel文件。首先,使用load_workbook()函数加载词频Excel文件,并通过wb.active获取活动工作表。然后,初始化一个空的字典wordFreq,用于存储每个单词及其对应的频率。通过遍历活动工作表中的行,获取单词和频率,并将它们存储到wordFreq字典中。
定义了词云的样式,并根据wordFreq字典生成词云图。生成的词云图将保存在指定文件夹下,并在notebook中显示出来。
导入所需库
import numpy as np # numpy数据处理库
import wordcloud # 词云库
from PIL import Image # 图像处理库,用于读取背景图片
import matplotlib.pyplot as plt # 图像展示库,以便在notebook中显示图片
from openpyxl import load_workbook # 读取词频Excel文件
import os # 获取词频Excel文件路径
numpy
:用于处理数据的库。wordcloud
:用于生成词云的库。PIL
:用于图像处理的库,这里主要用于读取背景图片。matplotlib.pyplot
:用于在notebook中显示图片。openpyxl
:用于读取词频Excel文件的库。os
:用于获取词频Excel文件的路径。
将存好的Excel词频表读取成字典
path = '词频' # 文件所在文件夹
files = [path + "/" + i for i in os.listdir(path)] # 获取文件夹下的文件名,并拼接完整路径
maskImage = np.array(Image.open('background.png')) # 定义词频背景图
path
:存放Excel词频表的文件夹的路径。files
:使用列表解析式获取文件夹下的所有文件名,并将文件名与路径拼接起来,存放在files
列表中。maskImage
:使用PIL
库中的Image.open()
函数读取一张背景图片,并将其转换为numpy.array
格式。
循环处理每个词频Excel文件
for file in files:
wb = load_workbook(file) # 加载词频Excel文件
ws = wb.active # 获取活动工作表
wordFreq = {} # 存储单词和对应的频率的字典
for i in range(2, ws.max_row + 1):
word = ws["A" + str(i)].value # 获取单词
freq = ws["B" + str(i)].value # 获取频率
wordFreq[word] = freq # 将单词和频率存储到字典中
- 遍历
files
列表中的每个文件名,用load_workbook()
函数加载词频Excel文件。 - 使用
wb.active
获取活动工作表。 - 初始化一个空的字典
wordFreq
,用于存储每个单词及其对应的频率。 - 遍历活动工作表中的行(从第2行到最后一行),通过
ws["A" + str(i)].value
和ws["B" + str(i)].value
分别获取单词和频率,并将它们存储到wordFreq
字典中。
定义词云样式和生成词云图
wc = wordcloud.WordCloud(
font_path='../PingFangBold.ttf', # 设置字体
mask=maskImage, # 设置背景图
max_words=500, # 最多显示词数
max_font_size=100 # 字号最大值
)
wc.generate_from_frequencies(wordFreq) # 根据字典生成词云图
wc.to_file("词云图/{}.png".format(file.split("/")[1][:4])) # 将词云图保存到指定文件夹
plt.imshow(wc) # 显示词云图
plt.axis('off') # 关闭坐标轴
plt.show() # 显示图像
- 创建一个词云对象
wc
,通过传入参数设置词云的样式,包括字体、背景图、最多显示词数和字号最大值等。 - 使用
generate_from_frequencies()
方法根据字典wordFreq
生成词云图。 - 使用
to_file()
方法将词云图保存到指定文件夹下,文件名以原始文件名的前四个字符命名。 - 使用
plt.imshow()
显示词云图。 - 使用
plt.axis('off')
关闭坐标轴。 - 使用
plt.show()
显示图像。
完整代码
import numpy as np # numpy数据处理库
import wordcloud # 词云库
from PIL import Image # 图像处理库,用于读取背景图片
import matplotlib.pyplot as plt # 图像展示库,以便在notebook中显示图片
from openpyxl import load_workbook #读取词频Excel文件
import os #获取词频Excel文件路径
#将存好的Excel词频表读取成字典
path='词频' #文件所在文件夹
files = [path+"/"+i for i in os.listdir(path)] #获取文件夹下的文件名,并拼接完整路径
maskImage = np.array(Image.open('background.png')) # 定义词频背景图
for file in files:
#将词频Excel文件读取为字典
wb = load_workbook(file)
ws = wb.active
wordFreq = {}
for i in range(2,ws.max_row+1):
word = ws["A"+str(i)].value
freq = ws["B"+str(i)].value
wordFreq[word] = freq
#定义词云样式
wc = wordcloud.WordCloud(
font_path='../PingFangBold.ttf', # 设置字体
mask= maskImage, # 设置背景图
max_words=500, # 最多显示词数
max_font_size=100) # 字号最大值
#生成词云图
wc.generate_from_frequencies(wordFreq) # 从字典生成词云
#保存图片到指定文件夹
wc.to_file("词云图/{}.png".format(file.split("/")[1][:4]))
#在notebook中显示词云图
plt.imshow(wc) # 显示词云
plt.axis('off') # 关闭坐标轴
plt.show() # 显示图像
运行效果截图
知识点
font_path
:字体路径。字体存在的目录,在想要的字体上点右键,选择“属性”可查看其名称,然后连同路径复制,赋给font_path
即可。比如本例使用的黑体。需要注意的是,若是中文词云,需要选中文字体。
width,height
:画布的宽度和高度,单位为像素。若没设置mask
值,才会使用此默认值400*200。
margin
:词间距。
ranks_only
:文档未说明。
prefer_horizontal
:词语横排显示的概率(默认为90%,则竖排显示概率为10%)
mask
:用于设定绘制模板,需要是一个nd-array(多维数组),所以在用Image.open()
读取图片后,需要用np.array
转换成数组。另外mask
参数有设定的话,画布的大小会由词频背景图的大小决定。这个经常使用,因为我们更倾向于自定义模板。
scale
:比例尺,用于放大画布的尺寸。一般使用默认值。
color_func
:颜色函数,一般不用。
max_words
:词云图中最多显示词的字数,设定一个值,可让那些出现次数极少的词不显示出来。
min_font_size
:字号最小值。
stopwords
:设置不想显示的词。
random_state
:文档未说明。
background_color
:词云图背景色,默认为黑色。可根据需要调整。
max_font_size
:字号最大值。
font_step
:字体的步长,一般使用默认。大于1的时候可提升运算速度,但匹配较差。
mode
:当设置为"RGBA" 且background_color
设置为"None"时可产生透明背景。
relative_scaling
:词频对字体大小的影响度,一般使用默认。
regexp
:正则表达式分割输入的字符。一般是先处理好才给到wordcloud
,所以基本不用。
collocations
:是否包含两个词的搭配,若使用了generate_from_frequencies
方法则忽略此参数。一般不用。
colormap
:每个词对应的颜色,若设置了color_func
则忽略此参数。
normalize_plurals
:是否移除英文复数单词末尾的s
,比如可将word
和words
视同为一个词,并将词频算到word
头上。如果使用了generate_from_frequencies
方法则忽略此参数。
contour_width
:如果mask
有设置,且contour_width>0
,将会绘制mask
轮廓。
contour_color
:mask
轮廓的颜色,默认为黑色。
repeat
:当词不足以满足设定的max_words
时,是否重复词或短语以使词云图上的词数量达到max_words
include_numbers
:是否将数字作为词。
min_word_length
:设置一个词包含的最少字母数量。
collocation_threshold
:界定英文中的bigrams,对于中文不适用。
结束语
本文介绍了如何使用Python编写代码来生成词云图。首先导入所需的库,然后通过循环处理每个词频Excel文件,将它们读取成字典。接下来定义词云的样式并生成词云图。最后将生成的词云图保存到指定文件夹,并在notebook中显示出来。通过本文的学习,我们可以轻松地使用Python生成词云图,从而更好地分析文本数据中的词频信息。
资源
代码中所涉及的资源 可以在文章顶部下载 , 已上传