【小白必看】Python词云生成器详细解析及代码实现

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 【小白必看】Python词云生成器详细解析及代码实现

前言

本文介绍了如何使用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)].valuews["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,比如可将wordwords视同为一个词,并将词频算到word头上。如果使用了generate_from_frequencies方法则忽略此参数。

contour_width:如果mask有设置,且contour_width>0,将会绘制mask轮廓。

contour_colormask轮廓的颜色,默认为黑色。

repeat:当词不足以满足设定的max_words时,是否重复词或短语以使词云图上的词数量达到max_words

include_numbers:是否将数字作为词。

min_word_length:设置一个词包含的最少字母数量。

collocation_threshold:界定英文中的bigrams,对于中文不适用。

结束语

本文介绍了如何使用Python编写代码来生成词云图。首先导入所需的库,然后通过循环处理每个词频Excel文件,将它们读取成字典。接下来定义词云的样式并生成词云图。最后将生成的词云图保存到指定文件夹,并在notebook中显示出来。通过本文的学习,我们可以轻松地使用Python生成词云图,从而更好地分析文本数据中的词频信息。

资源

代码中所涉及的资源 可以在文章顶部下载 , 已上传

相关文章
|
1月前
|
搜索推荐 UED Python
实现一个带有昼夜背景切换的动态时钟:从代码到功能解析
本文介绍了一个使用Python和Tkinter库实现的动态时钟程序,具有昼夜背景切换、指针颜色随机变化及整点和半点报时功能。通过设置不同的背景颜色和随机变换指针颜色,增强视觉吸引力;利用多线程技术确保音频播放不影响主程序运行。该程序结合了Tkinter、Pygame、Pytz等库,提供了一个美观且实用的时间显示工具。欢迎点赞、关注、转发、收藏!
134 94
|
21天前
|
存储 缓存 Java
Python高性能编程:五种核心优化技术的原理与Python代码
Python在高性能应用场景中常因执行速度不及C、C++等编译型语言而受质疑,但通过合理利用标准库的优化特性,如`__slots__`机制、列表推导式、`@lru_cache`装饰器和生成器等,可以显著提升代码效率。本文详细介绍了这些实用的性能优化技术,帮助开发者在不牺牲代码质量的前提下提高程序性能。实验数据表明,这些优化方法能在内存使用和计算效率方面带来显著改进,适用于大规模数据处理、递归计算等场景。
58 5
Python高性能编程:五种核心优化技术的原理与Python代码
|
5天前
|
监控 算法 安全
内网桌面监控软件深度解析:基于 Python 实现的 K-Means 算法研究
内网桌面监控软件通过实时监测员工操作,保障企业信息安全并提升效率。本文深入探讨K-Means聚类算法在该软件中的应用,解析其原理与实现。K-Means通过迭代更新簇中心,将数据划分为K个簇类,适用于行为分析、异常检测、资源优化及安全威胁识别等场景。文中提供了Python代码示例,展示如何实现K-Means算法,并模拟内网监控数据进行聚类分析。
28 10
|
23天前
|
存储 算法 安全
控制局域网上网软件之 Python 字典树算法解析
控制局域网上网软件在现代网络管理中至关重要,用于控制设备的上网行为和访问权限。本文聚焦于字典树(Trie Tree)算法的应用,详细阐述其原理、优势及实现。通过字典树,软件能高效进行关键词匹配和过滤,提升系统性能。文中还提供了Python代码示例,展示了字典树在网址过滤和关键词屏蔽中的具体应用,为局域网的安全和管理提供有力支持。
50 17
|
26天前
|
运维 Shell 数据库
Python执行Shell命令并获取结果:深入解析与实战
通过以上内容,开发者可以在实际项目中灵活应用Python执行Shell命令,实现各种自动化任务,提高开发和运维效率。
54 20
|
2月前
|
Python
课程设计项目之基于Python实现围棋游戏代码
游戏进去默认为九路玩法,当然也可以选择十三路或是十九路玩法 使用pycharam打开项目,pip安装模块并引用,然后运行即可, 代码每行都有详细的注释,可以做课程设计或者毕业设计项目参考
78 33
|
1月前
|
SQL Java 数据库连接
如何在 Java 代码中使用 JSqlParser 解析复杂的 SQL 语句?
大家好,我是 V 哥。JSqlParser 是一个用于解析 SQL 语句的 Java 库,可将 SQL 解析为 Java 对象树,支持多种 SQL 类型(如 `SELECT`、`INSERT` 等)。它适用于 SQL 分析、修改、生成和验证等场景。通过 Maven 或 Gradle 安装后,可以方便地在 Java 代码中使用。
239 11
|
1月前
|
数据采集 供应链 API
Python爬虫与1688图片搜索API接口:深度解析与显著收益
在电子商务领域,数据是驱动业务决策的核心。阿里巴巴旗下的1688平台作为全球领先的B2B市场,提供了丰富的API接口,特别是图片搜索API(`item_search_img`),允许开发者通过上传图片搜索相似商品。本文介绍如何结合Python爬虫技术高效利用该接口,提升搜索效率和用户体验,助力企业实现自动化商品搜索、库存管理优化、竞品监控与定价策略调整等,显著提高运营效率和市场竞争力。
83 3
|
3月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
131 2
|
2月前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是"将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。创建型模式分为5种:单例模式、工厂方法模式抽象工厂式、原型模式、建造者模式。
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析

热门文章

最新文章