目录
- 1. 基本知识
- 2. Demo
- 2.1 纯文本
- 2.2 词频
- 2.3 自定义形状
- 2.4 自定义颜色
- 2.5 自定义字体
- 2.6 html文件
1. 基本知识
一种数据可视化工具,主要用于显示文本数据中的关键词,通过字体大小、颜色等维度,词云图直观地展示了文本中各个词语出现的频率或重要性
- 常用于数据分析、自然语言处理、市场营销等领域
- 单词出现的频率越高,其对应的字体大小越大、颜色越深,使得重要词语在视觉上更加突出
基本的应用场景如下:
- 文本分析:从大量文本中提取最重要的关键词,快速识别文本主题
- 社交媒体分析:分析推文、评论等,揭示热点话题
- 市场营销: 分析产品评论或用户反馈,提取用户关注的关键词
- SEO 分析:分析网站上的关键词,优化搜索引擎表现
先安装API库:pip install wordcloud
基本的API如下:
-
WordCloud()
该类是生成词云的核心类,主要用于配置词云的样式和行为
主要参数:
width:图像宽度,默认为400
height: 图像高度,默认为200
max_words:显示的最大单词数,默认为200
background_color: 背景颜色,默认为白色 (“white”)
colormap: 控制词云中单词颜色的色彩映射,默认使用 “viridis”
font_path:设置字体的路径。如果需要使用中文字体,必须指定支持中文的字体路径
mask:词云形状的遮罩图像,使用二值化图像定义形状区域
contour_width: 轮廓线宽度。默认为0,表示没有轮廓
contour_color: 轮廓线颜色。默认与 background_color 一致
max_font_size:单词最大字体大小。默认为None,表示自动调整
min_font_size:单词最小字体大小。默认为4
random_state: 用于生成随机数的种子,使得词云的布局可重复 -
generate(text)
根据输入文本生成词云
text 参数应为字符串,通常是一个长文本或从文档中提取的文本 -
generate_from_frequencies(frequencies)
根据词频字典生成词云
frequencies 是一个包含单词及其频率的字典 {word: frequency} -
recolor()
重新着色生成的词云,可用于更改现有词云的颜色 -
to_file(filename)
将生成的词云保存为图像文件 -
to_image()
将词云转换为 PIL 图像对象,以便进一步处理或显示
2. Demo
2.1 纯文本
基本的生成过程如下:
from wordcloud import WordCloud
import matplotlib.pyplot as plt# 示例文本
text = "Python is a great programming language. Python is widely used for data science, machine learning, AI, and more."# 创建词云对象,设置参数
# width=800, height=400: 设定了生成的词云图像大小为 800x400 像素。
# max_words=100: 限制最多显示 100 个单词。
# background_color='white': 词云的背景颜色为白色
wordcloud = WordCloud(width=800, height=400, max_words=100, background_color='white'
)# 生成词云
wordcloud.generate(text)# 显示词云
plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off") # 关闭坐标轴
plt.show()# 保存词云为文件
wordcloud.to_file("wordcloud_example.png")
2.2 词频
from wordcloud import WordCloud
import matplotlib.pyplot as plt# 定义词频字典
frequencies = {'Python': 100, 'data': 80, 'science': 60, 'machine learning': 50, 'AI': 40}# 根据词频生成词云
wordcloud = WordCloud(width=800, height=400, background_color='white'
).generate_from_frequencies(frequencies)# 显示词云
plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()
2.3 自定义形状
通过 mask 参数,可以将词云显示为指定的形状
需要导入 numpy 和 Pillow 来处理图像作为形状遮罩
import numpy as np
from PIL import Image
from wordcloud import WordCloud
import matplotlib.pyplot as plt# 读取遮罩图像
mask = np.array(Image.open('dog.jpg'))# 定义文本
text = "I love coding and programming, especially in Python, JavaScript, and more."# 生成词云,设置 mask
wordcloud = WordCloud(width=800,height=400,background_color='white',mask=mask,contour_width=1,contour_color='red'
).generate(text)# 显示词云
plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()
2.4 自定义颜色
通过 colormap 参数,可以使用不同的颜色映射来生成颜色多样的词云
from wordcloud import WordCloud
import matplotlib.pyplot as plt# 定义文本
text = "Colorful word clouds are amazing. They help to represent data visually and beautifully."# 创建词云对象,设置颜色映射
wordcloud = WordCloud(width=800,height=400,background_color='white',colormap='plasma' # 使用 'plasma' 颜色映射
).generate(text)# 显示词云
plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()
2.5 自定义字体
生成中文词云时,必须指定支持中文的字体,否则会出现乱码
from wordcloud import WordCloud
import matplotlib.pyplot as plt# 定义中文文本
text = "数据科学是一个跨学科的领域,使用科学方法、流程、算法和系统从数据中提取知识和见解。"# 创建词云对象,设置中文字体
wordcloud = WordCloud(width=800, height=400, font_path='simhei.ttf', # 指定中文字体路径background_color='white'
).generate(text)# 显示词云
plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()
2.6 html文件
此种方式适合给其他的语言直接使用,比如springboot
将词云生成的图像嵌入到 HTML 页面中,实现的思路是使用 wordcloud 库生成词云图并保存为静态图片文件,然后通过 base64 编码的方式嵌入 HTML 中,后端可以直接引用这个 HTML 文件
- 生成词云图:生成词云图并保存为图像文件或通过 matplotlib 转换为 base64 格式
- 生成 HTML 页面:将词云图以 标签嵌入到 HTML 页面中
- 保存 HTML 文件: 最后保存为 HTML 文件,供后端直接使用
import base64
from io import BytesIO
from wordcloud import WordCloud
import matplotlib.pyplot as plt# 示例文本
text = "Python is an amazing programming language. It is widely used in data science, AI, and machine learning."# 创建词云
wordcloud = WordCloud(width=800, height=400, background_color='white'
).generate(text)# 将词云图保存到内存中的图片对象
img_buffer = BytesIO()
wordcloud.to_image().save(img_buffer, format='PNG')
img_buffer.seek(0)# 将图片对象转为base64
img_base64 = base64.b64encode(img_buffer.read()).decode('utf-8')# 生成HTML内容,将base64编码的图片嵌入HTML中
html_content = f"""
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Word Cloud</title>
</head>
<body><h1>Word Cloud Example</h1><img src="data:image/png;base64,{img_base64}" alt="Word Cloud">
</body>
</html>
"""# 将HTML内容保存为文件
with open("wordcloud.html", "w", encoding="utf-8") as f:f.write(html_content)print("HTML 文件生成完毕,可以直接用于后端引用。")