首页 > 编程笔记 > Python笔记 阅读:17

Python绘制词云图(附带实例)

词云图(Word Cloud)是一种可视化工具,用于展示文本数据中单词的频率或重要性。

词云图通过在一个图形区域内根据单词的频率或重要性来调整单词的大小,并将这些单词以一种修饰性的方式呈现,形成一个图形化的云状图。

词云图可以直观地展示单词的频率或重要性,帮助我们快速了解文本数据的主题、关键词或热点。词云图常用于可视化文本摘要、主题分析、舆情分析等领域。然而,词云图并不能提供详细的语义信息,因此在进行深入分析时,可能需要结合其他文本分析技术或图表。

此外,为了准确地反映文本的特征,词云图的制作过程需要注意合理选择预处理方法和调整词频或重要性的计算方式。

【实例 1】绘制词云图,输入如下代码:
from os import path  # 导入操作系统路径模块中的 path 函数,用于处理文件路径
from PIL import Image  # 导入 PIL 中的 Image 类,用于读取、处理图像
import numpy as np  # 导入 NumPy 库,用于处理数组和矩阵
import matplotlib.pyplot as plt  # 导入 pyplot 模块,用于绘制图形
import os  # 导入操作系统相关的模块,用于获取当前工作目录等操作
from wordcloud import WordCloud, STOPWORDS  # 导入词云库中的 WordCloud 类和 STOPWORDS 集合,用于生成和处理词云图

# 获取当前文件的目录
d=path.dirname(__file__) if "__file__" in locals()else os.getcwd()
# 读取整个文本文件的内容
text=open(path.join(d,"D:/DingJB/PyData/alice.txt")).read()

# 读取蒙版图像(掩码图像)
# 蒙版图像用于控制词云形状,这里使用了一个 Alice in Wonderland 的蒙版图像
alice_mask=np.array(Image.open(
    path.join(d,"D:/DingJB/PyData/alice_mask.png")))

# 设置停用词(在词云中不显示的词语)
stopwords=set(STOPWORDS)  # 添加一个额外的停用词
stopwords.add("said")

# 创建词云对象,指定背景颜色、最大词数、蒙版图像、停用词等参数
wc=WordCloud(background_color="white",max_words=2000,
    mask=alice_mask,stopwords=stopwords,
    contour_width=3,contour_color='steelblue')

wc.generate(text)  # 生成词云图
# 将词云图保存为图片文件
wc.to_file(path.join(d,"D:/DingJB/PyData/alice.png"))
# 显示词云图
plt.imshow(wc,interpolation='bilinear')
plt.axis("off")  # 不显示坐标轴
plt.show()

# 显示蒙版图像(仅为了对比效果)
plt.figure()
plt.imshow(alice_mask,cmap=plt.cm.gray,interpolation='bilinear')
plt.axis("off")  # 不显示坐标轴
plt.show()
上述代码首先读取了文本文件 alice.txt,然后读取了蒙版图像 alice_mask.png。接着,创建了一个词云对象,并生成了一个词云图,使用了指定的蒙版图像。最后,词云图通过 Matplotlib 显示出来。输出的结果如下图所示:


图 1 词云图1

【实例 2】创建词云图,输入如下代码:
import numpy as np  # 导入 NumPy 库,用于处理数组和矩阵
from PIL import Image  # 导入 PIL 中的 Image 类,用于读取、处理图像
from os import path  # 导入操作系统路径模块中的 path 函数,用于处理文件路径
import matplotlib.pyplot as plt  # 导入 pyplot 模块,用于绘制图形
import os  # 导入操作系统相关的模块,用于获取当前工作目录等操作
import random  # 导入 random 模块,用于生成随机数
from wordcloud import WordCloud, STOPWORDS  # 导入词云库中的 WordCloud 类和 STOPWORDS 集合,用于生成和处理词云图

# 定义自定义颜色函数,用于生成词云中词语的颜色
def grey_color(func(word,font_size,position,orientation,
    random_state=None,**kwargs):
    # 使用随机的亮度值来生成灰度颜色,使词云图更加丰富多彩
    return "hsl(0,0%%,%d%%)" % random.randint(60,100)

# 获取当前文件的目录
d=path.dirname(__file__) if "__file__" in locals()else os.getcwd()

# 读取蒙版图像(掩码图像)
# 这里使用了一个星球大战中的 stormtrooper 蒙版图像
mask=np.array(Image.open(
    path.join(d,"D:/DingJB/PyData/stormtrooper_mask.png")))

# 读取星球大战电影《新希望》的剧本文本
text=open(path.join(d,'D:/DingJB/PyData/a_new_hope.txt')).read()

# 对文本进行一些预处理,例如替换文本中的特定词语
text=text.replace("HAN","HAN")
text=text.replace("LUKE'S","Luke")
# 添加剧本特定的停用词
stopwords=set(STOPWORDS)
stopwords.add("int")
stopwords.add("ext")

# 创建词云对象,并生成词云图
wc=WordCloud(max_words=1000,mask=mask,stopwords=stopwords,margin=10,
    random_state=text).generate(text)

default_colors=wc.to_array()  # 保存默认颜色的词云图

# 显示自定义颜色的词云图
plt.title("Custom colors")
plt.imshow(wc.recolor(color_func=grey_color_func,random_state=3),
    interpolation="bilinear")
plt.axis("off")
plt.show()

# 显示默认颜色的词云图
plt.figure()
plt.title("Default colors")
plt.imshow(default_colors,interpolation="bilinear")
plt.axis("off")
plt.show()
上述代码生成了两个词云图,一个使用了自定义颜色函数,另一个使用了默认的颜色:
输出的结果如下图所示:


图 2 词云图2

相关文章