使用 Python 绘制词云图的详细教程

news2024/11/23 15:43:41

如何使用python绘制词云图

词云图(Word Cloud)是数据可视化中常用的一种技术,通过将文字以不同的大小、颜色和方向排列,以展示文本数据中词汇的频次和重要性。对于文本分析、情感分析、关键词提取等应用,词云图都能够直观地展现信息。本文将详细介绍如何使用 Python 中的 wordcloud 库从 Excel 数据绘制词云图,帮助您快速上手词云图的生成和定制化。

一、环境准备

在开始之前,请确保您的开发环境中已经安装了以下库:

pip install wordcloud pandas matplotlib openpyxl
  • wordcloud:用于生成词云图。
  • pandas:处理 Excel 文件中的词频数据。
  • matplotlib:用于展示和保存词云图。
  • openpyxl:读取 Excel 文件。

二、词云图的基本原理

词云图的生成主要基于词汇的频数,频数越高的词汇在图中的字号越大。在 Python 中,wordcloud 库提供了多种自定义选项,例如字体、颜色、形状、最大词数等。接下来,我们将基于一个简单的 Excel 词频表格,逐步实现从数据加载到词云图绘制的过程。

1.步骤一:读取 Excel 文件

首先,使用 pandas 读取 Excel 文件,并确保将词汇和对应的频数提取出来。假设 Excel 文件包含两列:词汇 和 频数。

import pandas as pd

# 读取 Excel 文件
df = pd.read_excel('词汇频数表.xlsx')

# 确保数据按需加载
words = df['词汇'].values
frequencies = df['频数'].values

# 将词汇和频数组合成字典
word_freq = dict(zip(words, frequencies))

此时,word_freq 字典包含了词汇和它们对应的频数,格式如:{‘词汇1’: 10, ‘词汇2’: 15, …}。

2.步骤二:生成词云图

接下来,我们利用 wordcloud 库生成词云图。可以根据实际需求自定义词云图的显示样式。

from wordcloud import WordCloud
import matplotlib.pyplot as plt

# 创建词云对象
wordcloud = WordCloud(
    font_path='simhei.ttf',  # 设置字体路径,确保中文显示
    background_color='white',  # 背景色
    width=800,  # 图像宽度
    height=400,  # 图像高度
    max_words=200,  # 最大词汇数
    max_font_size=100,  # 最大字体大小
    colormap='viridis'  # 颜色方案
).generate_from_frequencies(word_freq)

# 绘制并展示词云图
plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')  # 关闭坐标轴
plt.show()

参数说明

  • font_path:指定字体文件路径,这里使用了 “simhei.ttf” 以确保中文能够正确显示。
  • background_color:设置背景颜色,可选值包括 black, white, gray 等。
  • width 和 height:控制词云图的尺寸。
  • max_words:控制词云图中显示的最大词汇数。
  • max_font_size:控制最大字体的字号。
  • colormap:控制颜色映射方案,支持多种内置方案如 viridis, plasma, inferno 等。

3.步骤三:保存词云图

绘制完成后,您可以将词云图保存为图片文件,便于分享和展示。

# 保存词云图到文件
wordcloud.to_file('wordcloud.png')

一般在该步骤就已经结束啦~

4.步骤四:高级自定义(形状与颜色)

(1)自定义形状
词云图不仅可以是矩形,还可以根据特定的形状生成。例如,将词云限制在一张图片的轮廓内。您可以通过以下方法实现:

from PIL import Image
import numpy as np

# 加载形状模板图片
mask = np.array(Image.open('mask.png'))

# 生成带有形状的词云
wordcloud = WordCloud(
    font_path='simhei.ttf',
    background_color='white',
    mask=mask,  # 设置词云形状
    contour_width=1,  # 轮廓宽度
    contour_color='black'  # 轮廓颜色
).generate_from_frequencies(word_freq)

# 展示词云图
plt.figure(figsize=(10, 10))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()

关键点讲解

  • 高清图片作为 mask
    使用高分辨率的黑白圆形图片,词云的清晰度会显著提升。白色部分将作为背景,黑色部分是生成词云的区域。

  • contour_width 和 contour_color 参数
    设置轮廓宽度和颜色,可以让词云图的形状更加突出。

  • 调整 max_font_size 和 max_words
    通过控制词汇数量和最大字体大小,确保词云图在形状内分布均匀且美观。
    在这里插入图片描述
    这是换了一个爱丽丝Alice的mask的词云图。
    (2)自定义颜色
    如果想让词云中的词汇颜色更加多样,可以使用 ImageColorGenerator 从图片中提取颜色:

from wordcloud import ImageColorGenerator

# 基于模板图片生成颜色
image_colors = ImageColorGenerator(mask)

# 绘制词云图并应用颜色
plt.figure(figsize=(10, 10))
plt.imshow(wordcloud.recolor(color_func=image_colors), interpolation='bilinear')
plt.axis('off')
plt.show()

三、常见问题与解决方案

1.中文乱码问题:

使用 wordcloud 生成词云时,若不指定中文字体,中文会显示为方块。解决方法是指定支持中文的字体,例如 “simhei.ttf”。

2.词云生成不均匀:

尝试调整 max_font_size 和 mask 参数,使词云分布更为美观。

四、总结

本文详细介绍了如何从 Excel 表格生成词云图,并通过实例展示了词云图的自定义生成方法。词云图作为一种直观的数据可视化手段,在文本分析中有着广泛应用。可以再结合深度学习的自然语言处理技术,词云图可以进一步扩展用于更复杂的文本挖掘场景。

延伸阅读与学习资源推荐
Word_cloud

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2062084.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件设计师教程(第5版)第3章 数据结构(更新中)

【数据结构】是指数据元素的集合及元素间的相互关系和构造方法。P99 元素之间的相互关系是数据的【逻辑结构】。P99 数据元素及元素之间关系的存储称为【存储结构】(或【物理结构】)。P99 数据结构按照【逻辑关系】的不同分为【线性结构】和【非线性结构】两大类。P99 【非…

计算机组成原理(4):指令系统/控制器

1 指令格式 【补充知识】 计算机语言的层级关系:机器语言 - 汇编语言 - 高级语言; ​ 机器语言用二进制来编写,用来反映硬件的语言。但是二进制编写太难了,就诞生了汇编语言,对其编程进行封装、简化; ​ …

C++ | Leetcode C++题解之第357题统计各位数字都不同的数字个数

题目&#xff1a; 题解&#xff1a; class Solution { public:int countNumbersWithUniqueDigits(int n) {if (n 0) {return 1;}if (n 1) {return 10;}int ans 10, cur 9;for (int i 0; i < n - 1; i) {cur * 9 - i;ans cur;}return ans;} };

8.Java基础概念-方法

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 Facts speak louder than words&#xff01; 什么是方法 方法是程序…

QT 与 C++实现基于[ TCP ]的聊天室界面

TCP客户端 Widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpSocket> //客户端类 #include <QMessageBox> #include <QListWidgetItem> #include <QDebug>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } …

基于YOLO V8的PCB缺陷检测识别系统(python源码+Pyqt5界面+数据集+训练代码)

数据集准备&#xff1a;收集并标注PCB缺陷的图像。模型训练&#xff1a;使用YOLO v8框架训练一个模型来识别这些缺陷。GUI开发&#xff1a;利用PyQt5创建一个用户友好的图形界面。模型部署&#xff1a;在GUI中集成训练好的模型&#xff0c;使用户能够上传PCB图像并得到缺陷检测…

数据结构-树(二叉树)-第三天

结合leetcode学习c 学习资料来源 定义 二叉树&#xff08;binary tree&#xff09;是一种非线性数据结构&#xff0c;代表“祖先”与“后代”之间的派生关系&#xff0c;体现了“一分为二”的分治逻辑。 与链表类似&#xff0c;二叉树的基本单元是节点&#xff0c;每个节点包含…

[数据集][目标检测]停车场空位检测数据集VOC+YOLO格式7959张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;7959 标注数量(xml文件个数)&#xff1a;7959 标注数量(txt文件个数)&#xff1a;7959 标注…

p9 镜像的基本命令

docker的常用命令 帮助命令 查看docker的版本 docker version2. 查看当前安装的docker的详细的信息 docker的系统信息包括镜像和容器的数量 docker info3. 查询帮助命令 image是你想要获取哪一个命令的帮助文档,一般百度或者人工智能就行所有命令的可选项都可以用这个–hel…

DN专业3D图形制作软件win/mac软件安装下载(附下载链接)

目录 一、软件概述 1.1 Adobe DN简介 1.2 Windows/Mac系统要求 Windows系统&#xff1a; Mac系统&#xff1a; 二、安装步骤 2.1 下载与解压 2.2 安装程序 2.3 启动软件 三、使用教程 3.1 界面介绍 3.2 创建和编辑3D内容 3.3 合成与渲染 四、高级技巧与注意事项 …

.NET内网实战:通过DNS查找出网主机

01阅读须知 此文所节选自小报童《.NET 内网实战攻防》专栏&#xff0c;主要内容有.NET在各个内网渗透阶段与Windows系统交互的方式和技巧&#xff0c;对内网和后渗透感兴趣的朋友们可以订阅该电子报刊&#xff0c;解锁更多的报刊内容。 02基本介绍 03编码实现 在红队活动中&…

Modbus 数据帧解析

Modbus 是一种通信协议&#xff0c;广泛应用于工业自动化系统中&#xff0c;用于连接电子设备。它是一种基于主从结构的通信协议&#xff0c;其中主设备可以与多个从设备通信。数据通过一系列的帧进行传输&#xff0c;每一帧包含多个字段&#xff0c;每个字段都有特定的功能。 …

SQL进阶技巧:最近有效的缺失值填充问题【last_value实现版】

目录 0 场景描述 1 数据准备 2 问题分析 3 小结 0 场景描述 场景:现在有一张商品入库表,包括商品id、商品成本和入库日期3个字段,由于某些原因,导致部分商品的成本缺失(为0或者没有值都是缺失),这样不利于我们计算成本。所以现在要把缺失的商品进价补充完整,补充的…

OpenCTI:开源网络威胁情报平台

OpenCTI 是一个开源平台&#xff0c;旨在帮助组织管理其网络威胁情报 (CTI) 数据和可观察数据。 该平台由 Filigran 开发&#xff0c;使用基于 STIX2 标准的知识模式构建数据。 它采用现代 Web 应用程序架构&#xff0c;配备 GraphQL API 和用户友好的前端。 OpenCTI 与 MIS…

MySQL在Windows和Ubuntu上的安装与远程连接配置

MySQL是一个广泛使用的开源关系数据库管理系统&#xff0c;适用于各种操作系统。本文将详细介绍如何在Windows和Ubuntu系统上安装MySQL&#xff0c;并配置远程连接。 1. 在Windows上安装MySQL 1.1 下载MySQL安装包 首先&#xff0c;访问MySQL官方网站&#xff08;https://de…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《考虑模块冗余和系统状态的多...电系统可靠性的蒙特卡洛分析》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

【Java日志系列】JCL、SLF4J日志门面

目录 前言 一、日志门面概述 1. 门面模式&#xff08;外观模式&#xff09; 2. 日志门面 二、JCL 1. JCL组件结构 2. JCL案例 三、SLF4J 1. SLF4J简介 2. SLF4J桥接技术 3. 快速入门 4. SLF4J集成日志实现 4.1 集成nop 4.2 集成Logback 4.3 集成Log4j 4.4 集成…

一文彻底搞懂Transformer - 总体架构,零基础入门到精通,收藏这一篇就够了

Transformer 一、RNN编码器-解码器架构**** ********序列到序列模型&#xff08;Seq2Seq&#xff09;&#xff1a;Seq2Seq模型的目标是将一个输入序列转换成另一个输出序列&#xff0c;这在多种应用中都具有广泛的实用价值&#xff0c;例如语言建模、机器翻译、对话生成等。 …

网络及ipc内存共享

大字符串找小字符串 调试 1. 信号处理函数注册&#xff1a;•一旦使用 signal 函数注册了信号处理函数&#xff0c;该函数就会一直有效&#xff0c;直到程序结束或者显式地取消注册。2. 注册多次的影响&#xff1a;•如果多次注册同一信号的处理函数&#xff0c;最后一次注册的…

Java 入门指南:List 接口

Collection 接口提供了一系列用于操作和管理集合的方法&#xff0c;包括添加、删除、查询、遍历等。它是所有集合类的根接口&#xff0c;包括 List、Set、Queue 等。 Collection 接口常见方法 add(E element)&#xff1a;向集合中添加元素。 addAll(Collection col)&#xff1…