Python词云图的制作与案例分享

news2024/11/25 4:50:59

一、基本知识

Python 有很多可用于制作词云图的库,其中比较常用的有 wordcloudjieba

wordcloud 是一个用于生成词云图的 Python 库,其使用了 Python 的 PIL 库和 numpy 库。您可以使用 pip 命令来安装 wordcloud 库:

pip install wordcloud

jieba 则是一个中文文本处理库,可以用于中文分词,即将一段中文文本切割成一个个独立的词汇。您也可以使用 pip 命令来安装 jieba 库:

pip install jieba

下面我们来看一个简单的例子。首先,我们需要先读取文本文件,并将其内容进行分词处理。此处我们使用 jieba 库来进行分词。下面是代码:

import jieba

# 读取文本内容
file_path = 'sample.txt'
with open(file_path, 'r', encoding='utf-8') as f:
    text = f.read()

# 使用 jieba 库进行分词
seg_list = jieba.cut(text)
words = ' '.join(seg_list)

# 打印分词结果
print(words)

然后,我们使用 wordcloud 库来生成词云图,并将分词结果传入 WordCloud 对象。下面是代码:

from wordcloud import WordCloud, STOPWORDS
import matplotlib.pyplot as plt

# 创建 WordCloud 对象
wc = WordCloud(background_color='white', stopwords=STOPWORDS,
               font_path='msyh.ttc', width=800, height=600)

# 生成词云图
wc.generate(words)

# 显示词云图
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()

在这个例子中,我们使用了 msyh.ttc 字体来显示中文字符,可以根据您的需要选择其他字体。同时使用了 STOPWORDS 来过滤常见的无意义词汇。WordCloud 对象还可以接收一些其他参数,例如 max_font_sizemin_font_size 等等,以调整词语的字体大小。

二、案例

从以下三部小说中挑选一部,给出人物出现的频率统计以及对应的词云图。要求:减少跟任务无关的介词、动词等关键词,需要根据词云图看出人物出场频率。

分别是西游记、三国演义、红楼梦

import os
import re
from collections import Counter
import jieba
from wordcloud import WordCloud

# 读取文件内容
file_path = '红楼梦.txt'
if os.path.exists(file_path):
    with open(file_path, 'r', encoding='utf-8') as f:
        text = f.read()
else:
    print(f'文件 "{file_path}" 不存在!')
    text = ''

# 使用正则表达式去除所有非汉字字符和空白字符
text = re.sub(r'[^\u4e00-\u9fa5]', '', text)

# 使用 jieba 进行分词
seg_list = jieba.cut(text)
words = [word for word in seg_list if len(word) >= 2 and word not in ('他们', '一个', '自己', '没有', '什么', '那些', '就是', '还有', '已经')]

# 使用 Counter 统计每个词出现的次数,并只保留出现频率最高的前 50 个词
word_counts = Counter(words)
top_n = 50
words_top_n = word_counts.most_common(top_n)

# 打印前 top_n 个出现频率最高的词
for i, (word, count) in enumerate(words_top_n):
    print(f'第 {i+1} 高频词:{word}, 出现次数:{count}')

# 指定字体为宋体
# font_path = 'SimSun.ttf'
font_path = 'C:\\Windows\\Fonts\\simsun.ttc'  # Windows 系统下的宋体字体路径
wc = WordCloud(font_path=font_path, width=800, height=600, background_color='white',
               max_words=200, colormap='Dark2', contour_width=1, contour_color='black',
               stopwords={}, min_font_size=10, max_font_size=80)

# 生成词云图
wc.generate_from_frequencies(word_counts)

# 显示词云图
import matplotlib.pyplot as plt
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()

结果:

 三、可能出现的报错

运行结果中可能会出现以下问题:

  1. 缺少文件错误: 如果指定的文本文件不存在,则会在控制台中输出“文件不存在”等提示信息,应该检查实际的文件路径是否正确。

  2. 编码错误: 如果读取的文本文件的编码不是 UTF-8,则可能会出现编码错误,此时程序无法正确地处理文本内容,需要指定正确的编码格式。

  3. 分词错误: 使用 Jieba 库进行中文分词时,可能会有一些无意义的词被保留下来影响词频统计和词云图生成效果,这时可以手动添加停止词列表,将无意义的词排除在外。还有一种情况是分词结果不准确,如将一个人名分成了两个词,需要手动处理。

  4. 字体错误: 如果在生成词云图时无法加载指定的字体文件,则可能会出现“cannot open resource”等错误,此时可以尝试更换字体文件或者重新安装 PIL 库。

  5. 显示问题: 在生成词云图后,可能会出现词云图显示过小或者过大、无法显示等问题,此时可以调整 WordCloud 类的参数,如 widthheight 来设置词云图的大小。

针对不同的问题,可以采取相应的解决方法。

四、一些常见词云图的模板

4.1读取txt文件中的内容生成词云图

以下是基于 Python 生成词云图的示例代码:

import os
from wordcloud import WordCloud

# 读取文件内容
file_path = 'your.file.txt'
if os.path.exists(file_path):
    with open(file_path, 'r', encoding='utf-8') as f:
        text = f.read()
else:
    print(f'文件 "{file_path}" 不存在!')
    text = ''

# 创建词云对象
wc = WordCloud(background_color='white', max_words=200, font_path='simhei.ttf')

# 生成词云图
wc.generate(text)

# 显示词云图
import matplotlib.pyplot as plt
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()

以上示例代码中,可以通过修改文件路径、背景颜色、生成的最大单词数、字体等参数以及调用 Matplotlib 库来自定义生成的词云图。其中,WordCloud 类提供了丰富的选项来生成高度定制化的词云图,例如可以通过 stopwords 参数指定需要过滤掉的单词列表,也可以通过 colormap 参数指定颜色方案,并可以通过 to_file 方法将词云图保存到文件中。这样我们就可以将学校主页上《学校简介》做成漂亮的词云图。

4.2读取txt文件中的内容生成词云图并安装要求指定形状

基于 Python 生成指定形状词云图的示例代码,以心形为例:

import os
from PIL import Image
import numpy as np
from wordcloud import WordCloud, ImageColorGenerator

# 读取文本文件内容
file_path = 'path/to/your/file.txt'
if os.path.exists(file_path):
    with open(file_path, 'r', encoding='utf-8') as f:
        text = f.read()
else:
    print(f'文件 "{file_path}" 不存在!')
    text = ''

# 加载形状图片并转换为数组
pic_path = 'path/to/your/shape.png'
if os.path.exists(pic_path):
    image = Image.open(pic_path)
    mask = np.array(image)
else:
    print(f'文件 "{pic_path}" 不存在!')
    mask = None

# 创建词云对象
wc = WordCloud(background_color='white', max_words=200, font_path='simhei.ttf', mask=mask)

# 根据文本和形状生成颜色
wc.generate(text)
image_colors = ImageColorGenerator(mask)

# 绘制词云图并显示
import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(12,6))
axes[0].imshow(wc, interpolation='bilinear')
axes[1].imshow(wc.recolor(color_func=image_colors), interpolation='bilinear')
for ax in axes:
    ax.set_axis_off()
plt.tight_layout()
plt.show()

以上示例代码中,PIL 库用于加载形状图片,并将其转换为 NumPy 数组;WordCloud 类的 mask 参数用于指定形状;ImageColorGenerator 类则根据形状图像生成词云的颜色方案。

需要注意的是,指定形状可能会导致词云图中出现很多空白区域,因此一般要使用 recolor 方法将图像重新着色,以填充空白区域。此外还可以通过调整 min_font_sizemax_font_size 参数来控制单词大小,以便更好地适应形状。

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

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

相关文章

《计算机网络——自顶向下方法》精炼——2.6.2-2.7.1

“An investment in knowledge pays the best interest.” - Benjamin 文章目录 分布式散列表(键-值)对散列函数逻辑上的实现环形DHT对等方扰动对等方离开对等方加入 UDP套接字编程客户端代码服务器端代码 分布式散列表 分布式散列表是一种数据库。集中…

NIO基础 - 网络编程

non-blocking io 非阻塞 IO 1. 三大组件 1.1 Channel & Buffer channel 有一点类似于 stream,它就是读写数据的双向通道,可以从 channel 将数据读入 buffer,也可以将 buffer 的数据写入 channel,而之前的 stream 要么是输入…

STM32配置ADC2(DMA)进行采集 DAC 输出-1

1.实验目标 在正点原子的ADC(DMA)例程上,将ADC1改成ADC2来采集电压,并且进行测试 开发板:正点原子探索者STM32F407ZG 2.查看adc.h和开发指南需要修改哪些配置 ADC相关 通过查看开发指南我们发现,ADC1 和…

垃圾分类算法

垃圾分类算法 垃圾分类算法系统整体结构Python环境TensorFlow环境微信小程序及后台服务器环境数据预处理 垃圾分类算法 基于TensorFlow和VGG-16卷积神经网络训练垃圾分类模型,通过服务器实现分类模型移植到移动端,并在微信小程序中进行应用。 系统整体…

【ROS仿真实战】机器人模型描述文件介绍(二)

文章目录 前言一、URDF与XACRO简介1.1 URDF1.2 XACRO 二、三维模型的选择DAE还是STL?三、 总结 前言 URDF和XACRO是ROS机器人领域中用于描述机器人模型的两种XML格式文件,都是使用XML语法来定义机器人模型的结构、物理特性以及运动学参数等。URDF (Unif…

还在用MySQL存日志?

1. 引言 随着智能硬件成本降低和互联网网络的发展,在生活中场景的设备都已接入了网络中,其中传感器成为了设备获取外界信息的眼睛,网络成为设备交流的桥梁。在设备的交互中,往往存在着触发源,即标识控制指令的来源&am…

大型水利投资集团,打造数智财资管理新范式

随着我国城市化进程的不断推进,城市基础设施在国民经济中的作用愈加重要,其建设水平直接影响一个城市的竞争力。国有城投、水投等企业作为城市基础设施建设的主要参与者,其重要性不言而喻。随着国家、地方对基础设施重要性认识的加深以及政府…

第十章 游戏对象和组件访问

本节我们主要学习GameObject类,该类用于表示任何存在于场景中的游戏对象。这个类继承自Unity Object类(不是C#语言的Object类),我们可以理解这个Unity Object类是所有Unity的基类。这个Unity Object基类比较简单,我们很…

啃完这份笔记,18K妥妥的了......

大家好,最近有不少小伙伴在后台留言,得准备面试了,又不知道从何下手!为了帮大家节约时间,特意准备了一份面试相关的资料,内容非常的全面,真的可以好好补一补,希望大家在都能拿到理想…

MATLAB | 如何使用MATLAB绘制高度自定义的桑基图(sankey)

我之前也出过一个超简单的桑基图绘制函数,但是无法应对很多特殊情况,在这里我将其重构了一些写成了类,加了很多内置修饰函数,实现了流入流出数据不相等或者跨层数据流动的特殊情况绘制,首先展示一下使用我编写的函数能…

基于DSP+FPGA+ADS1282支持32Bit高精度数据采集方案(二)模拟电路设计

如图 4.1 所示是系统硬件系统的信号框图,数字信号处理板上的主要核心是 两个处理芯片,即 FPGA 和 DSP ,其中 FPGA 主要作用是做 DSP 和外围接口的 桥梁及数据预处理, DSP 做为数据解算核心。 FPGA 通过各种的数据总…

【C++初阶】类和对象(一)

​ ​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:C初阶 🎯长路漫漫浩浩,万事皆有期待 上一篇博客:【C初阶】…

一文看懂低代码,5分钟从入门到原理全搞定

全球低代码市场已经走过了近20年,中国低代码市场近5年经历了百花齐放的广泛探索阶段,更旺盛的市场需求逐步在被激发。现在,让我们按下暂停键,看看这些产品给我们呈现了低代码市场一幅怎样的百景图。 低代码平台简介 广义上的低代…

[nesbot/carbon]轻松优雅的驾驭时间处理

简介 这个库的名字其实就很有意思:“carbon”,是化学元素的名字“碳”,为什么叫这个名字呢?在科学界,有一个"放射性碳定年法"的东西,是一种利用碳的同位素14C的放射性来对含有有机物质的物品进行…

废物,我TMD一个985却斗不过专科生(大厂自动化测试2年被裁)

前言 看到标题,可能很多读者朋友恐怕又要骂我了,985这个特殊的字眼也确实异常晃眼,实际上现在985,211也越来越多,它能代表你能够进入到更高的平台,拿到“高级工厂”的入场券,但并不意味着你会成…

每天一道算法练习题--Day14 第一章 --算法专题 --- -----------大话搜索

大话搜索 搜索一般指在有限的状态空间中进行枚举,通过穷尽所有的可能来找到符合条件的解或者解的个数。根据搜索方式的不同,搜索算法可以分为 DFS,BFS,A*算法等。这里只介绍 DFS 和 BFS,以及发生在 DFS 上一种技巧-回…

详解八大排序算法-附动图和源码(插入,希尔,选择,堆排序,冒泡,快速,归并,计数)

目录 🍏一.排序的概念及应用🍏 1.排序的概念 2.排序的应用 3.常用的排序算法 🍎二.排序算法的实现🍎 1.插入排序 1.1直接插入排序 1.2希尔排序(缩小增量排序) 2.选择排序 2.1直接选择排序 2.2堆排序…

LVS负载均衡群集部署—DR直接路由

目录 一、LVS-DR模式二、LVS-DR模式的特点三、LVS-DR中的ARP问题四、LVS-DR的优点与缺点五、为什么谁知lo:0而不是ens33:0六、LVS负载均衡群集-DR模式部署1.配置nfs共享(192.168.154.10)2.部署第一台nginx服务(192.168.154.11)3.部…

常用数据可视化对比类图表大全

优秀的数据可视化从来都不是罗列数据,更要根据自己的数据特征,设计出可以被读者轻松理解的图表。 图表类型有很多,选择正确图表的过程可能会让人混乱。本文将为您介绍数据可视化中比较类图表,以完美地表示您的数据并以最有效的方…

PostgreSQL安装和开启SSL加密连接【配置双向认证】

SSL单向认证和双向认证: SSL单向认证:只有一端校验对端的证书合法性,通常都是客户端来校验服务器的合法性。即在一般的单向认证中,只要求服务器端部署了ssl证书就行,客户端可以无证书,任何用户都可以去访问…