Python开源工具库使用之词云Wordcloud

news2024/12/27 12:02:33

文章目录

  • 前言
  • 一、基本使用
    • 1.1 文本生成词云
    • 1.2 配置项
  • 二、进阶用法
    • 2.1 自定义形状
    • 2.2 自定义着色
    • 2.3 自定义词频
    • 2.4 中文
  • 三、实际案例
    • 3.1 工作报告词云
    • 3.2 周杰伦歌词词云
  • 四、总结
    • 4.1 优点和局限性
    • 4.2 展望未来发展
  • 参考

前言

当我们需要将大量文本数据可视化展示时,WordCloud 库是一个非常有用的工具。它能够将文本中的关键词以词云的形式呈现出来,使得人们可以直观地了解文本的主题和关键词。WordCloud 库不仅能够简单地生成词云,还提供了丰富的配置选项,使用户可以根据自己的需求定制词云的外观和布局。作为Python开源库中的一员,WordCloud 库已经被广泛应用于各种领域,包括数据分析、自然语言处理、社交媒体分析等。

在本文中,我们将深入探讨WordCloud库的使用方法、实际应用案例实践,帮助读者更好地理解和利用这一强大的工具。

  • github:https://github.com/amueller/word_cloud
  • 文档:https://amueller.github.io/word_cloud/

安装

pip install wordcloud

一、基本使用

1.1 文本生成词云

import os

from os import path
from wordcloud import WordCloud

# 获取当前py文件路径
d = path.dirname(__file__) if "__file__" in locals() else os.getcwd()

# 读取文本
text = open(path.join(d, 'constitution.txt')).read()

wordcloud = WordCloud().generate(text)

wordcloud.to_file('1.jpg')
image = wordcloud.to_image()
image.show()

1

1.2 配置项

WordCloud() 可通过下面这些配置项定制词云的外观和布局

配置项类型默认值含义
font_pathstring字体路径
widthint400画布宽度
heightint200画布高度
marginint2词云图像的边距大小,以像素为单位
prefer_horizontalfloat0.9词语水平排列的偏好程度,>=1 水平排列
masknd-array or NoneNone词云的形状遮罩,使得词云图像能够按照指定的形状排列词语
contour_widthfloat0轮廓线的宽度
contour_colorcolor value“black”轮廓线的颜色
scalefloat1词云图像的缩放比例,即词云图像计算出来的大小相对于形状遮罩或者画布的大小的比例
min_font_sizeint4最小字体大小
font_stepint1字体的步长,关系词语间大小间隔
max_wordsnumber200词语最大数量
stopwordsset of strings or NoneSTOPWORDS要排除的词语
random_stateintNone随机数生成器的种子
background_colorcolor value”black”背景颜色
max_font_sizeint or NoneNone最大字体大小
modestring”RGB”主要有"RGB",“RGBA”,后者可以控制透明度
relative_scalingfloat‘auto’单词频率对字体大小影响,较大的值将增加词语之间的大小差异
color_funccallableNone自定义的颜色函数,该函数决定了词云中每个词语的颜色
regexpstring or NoneNone从输入文本中提取满足正则的词语,可选
collocationsboolTrue是否考虑词组
colormapstring or matplotlib colormap”viridis”词云的颜色映射,即词云中每个词语的颜色分布。常见的颜色映射包括单色映射(如灰度"gray")、渐变映射(“viridis”、“magma” 和 “inferno”)
normalize_pluralsboolTrue通过结尾为s 判断复数形式是否被视为同一个词
repeatboolFalse词语是否重复出现
include_numbersboolFalse是否包含数字
min_word_lengthint0个单词必须包含的最小字母数
collocation_thresholdint30词语搭配(Collocations)的显示阈值

二、进阶用法

2.1 自定义形状

先通过一张普通图片制作mask

import cv2
import numpy as np
from PIL import Image

# 读取普通照片
image = cv2.imread('alice_color.png')

# 将图像转换为灰度图
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 二值化图像,将图像转换为黑白二值图像
_, mask_image = cv2.threshold(gray_image, 250, 255, cv2.THRESH_BINARY)

# 保存生成的蒙版图像
cv2.imwrite('mask_image.png', mask_image)

import matplotlib.pyplot as plt

plt.figure(figsize=(10, 5))

# 显示第一张图片
plt.subplot(1, 2, 1)
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
plt.title('Color Image')
plt.axis('off')

# 显示第二张图片
plt.subplot(1, 2, 2)
plt.imshow(cv2.cvtColor(mask_image, cv2.COLOR_BGR2RGB))
plt.title('Mask Image')
plt.axis('off')

# 显示图片
plt.show()

Figure_1

from os import path
from PIL import Image
import numpy as np
import os

from wordcloud import WordCloud, STOPWORDS

d = path.dirname(__file__) if "__file__" in locals() else os.getcwd()

text = open(path.join(d, 'alice.txt')).read()

alice_mask = np.array(Image.open(path.join(d, "mask_image.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("alice.png")

image = wc.to_image()
image.show()

alice.png

2.2 自定义着色

from os import path
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import os

from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator

d = path.dirname(__file__) if "__file__" in locals() else os.getcwd()

# Read the whole text.
text = open(path.join(d, 'alice.txt')).read()


alice_coloring = np.array(Image.open(path.join(d, "alice_color.png")))
stopwords = set(STOPWORDS)
stopwords.add("said")

wc = WordCloud(background_color="white", max_words=2000, mask=alice_coloring,
               stopwords=stopwords, max_font_size=40, random_state=42)
# generate word cloud
wc.generate(text)

# create coloring from image
image_colors = ImageColorGenerator(alice_coloring)

# show
fig, axes = plt.subplots(1, 3)
axes[0].imshow(wc, interpolation="bilinear")
# recolor wordcloud and show
# we could also give color_func=image_colors directly in the constructor
axes[1].imshow(wc.recolor(color_func=image_colors), interpolation="bilinear")
axes[2].imshow(alice_coloring, cmap=plt.cm.gray, interpolation="bilinear")
for ax in axes:
    ax.set_axis_off()
plt.show()

123

2.3 自定义词频

当已经有了词频统计好的数据,或者想要自定义词语的词频时,可以使用 generate_from_frequencies() 函数实现自定义词频

import multidict as multidict

import numpy as np

import os
import re
from PIL import Image
from os import path
from wordcloud import WordCloud
import matplotlib.pyplot as plt


def getFrequencyDictForText(sentence):
    fullTermsDict = multidict.MultiDict()
    tmpDict = {}

    # making dict for counting frequencies
    for text in re.sub(r'\n', ' ', sentence).split(" "):
        if re.match("a|the|an|the|to|in|for|of|or|by|with|is|on|that|be", text):
            continue
        val = tmpDict.get(text, 0)
        tmpDict[text.lower()] = val + 1
    for key in tmpDict:
        fullTermsDict.add(key, tmpDict[key])
    return fullTermsDict


def makeImage(text):
    alice_mask = np.array(Image.open("mask_image.png"))

    wc = WordCloud(background_color="white", max_words=1000, mask=alice_mask)
    # generate word cloud
    wc.generate_from_frequencies(text)

    # show
    plt.imshow(wc, interpolation="bilinear")
    plt.axis("off")
    plt.show()


# get data directory (using getcwd() is needed to support running example in generated IPython notebook)
d = path.dirname(__file__) if "__file__" in locals() else os.getcwd()

text = open(path.join(d, 'alice.txt'), encoding='utf-8')
text = text.read()
makeImage(getFrequencyDictForText(text))

2.4 中文

import jieba
from os import path
from imageio import imread
import matplotlib.pyplot as plt
import os

from wordcloud import WordCloud, ImageColorGenerator

stopwords_path = 'stopwords_cn_en.txt'
font_path = r'C:\Windows\Fonts\simfang.ttf'

# Read the whole text.
text = open('CalltoArms.txt', encoding = 'utf-8').read()

mask = imread('LuXun_mask.png')

userdict_list = ['阿Q', '孔乙己', '单四嫂子']

def jieba_processing_txt(text):
    for word in userdict_list:
        jieba.add_word(word)

    mywordlist = []
    seg_list = jieba.cut(text, cut_all=False)
    liststr = "/ ".join(seg_list)

    with open(stopwords_path, encoding='utf-8') as f_stop:
        f_stop_text = f_stop.read()
        f_stop_seg_list = f_stop_text.splitlines()

    for myword in liststr.split('/'):
        if not (myword.strip() in f_stop_seg_list) and len(myword.strip()) > 1:
            mywordlist.append(myword)
    return ' '.join(mywordlist)


wc = WordCloud(font_path=font_path, background_color="white", max_words=2000, mask=mask,
               max_font_size=100, random_state=42, width=1000, height=860, margin=2,)

wc.generate(jieba_processing_txt(text))
wc.to_file('LuXun.png')

luxun

luxun

三、实际案例

3.1 工作报告词云

数据来源:https://python123.io/resources/pye/%E6%96%B0%E6%97%B6%E4%BB%A3%E4%B8%AD%E5%9B%BD%E7%89%B9%E8%89%B2%E7%A4%BE%E4%BC%9A%E4%B8%BB%E4%B9%89.txt

import jieba
from os import path
from imageio import imread
import matplotlib.pyplot as plt
import os

from wordcloud import WordCloud, ImageColorGenerator

stopwords_path = 'stopwords_cn_en.txt'
font_path = r'C:\Windows\Fonts\simfang.ttf'

# Read the whole text.
text = open('新时代.txt', encoding = 'utf-8').read()

mask = imread('china_mask.png')


# The function for processing text with Jieba
def jieba_processing_txt(text):
   
    mywordlist = []
    seg_list = jieba.cut(text, cut_all=False)
    liststr = "/ ".join(seg_list)

    with open(stopwords_path, encoding='utf-8') as f_stop:
        f_stop_text = f_stop.read()
        f_stop_seg_list = f_stop_text.splitlines()

    for myword in liststr.split('/'):
        if not (myword.strip() in f_stop_seg_list) and len(myword.strip()) > 1:
            mywordlist.append(myword)
    return ' '.join(mywordlist)


wc = WordCloud(font_path=font_path, background_color="white", max_words=2000, mask=mask,
               max_font_size=100, random_state=42, width=1000, height=860, margin=2,)

wc.generate(jieba_processing_txt(text))
wc.to_file('时代.png')

baogao

3.2 周杰伦歌词词云

数据来源:https://github.com/ShusenTang/Dive-into-DL-PyTorch/blob/master/data/jaychou_lyrics.txt.zip

import jieba
from os import path
from imageio import imread
import cv2
import numpy as np
import matplotlib.pyplot as plt
import os

from wordcloud import WordCloud, ImageColorGenerator

stopwords_path = 'stopwords_cn_en.txt'
font_path = r'C:\Windows\Fonts\simfang.ttf'

# Read the whole text.
text = open('jaychou_lyrics.txt', encoding = 'utf-8').read()

image = imread('jay.jpg')
mask = imread('jay_mask.png')



# The function for processing text with Jieba
def jieba_processing_txt(text):
   
    mywordlist = []
    seg_list = jieba.cut(text, cut_all=False)
    liststr = "/ ".join(seg_list)

    with open(stopwords_path, encoding='utf-8') as f_stop:
        f_stop_text = f_stop.read()
        f_stop_seg_list = f_stop_text.splitlines()

    for myword in liststr.split('/'):
        if not (myword.strip() in f_stop_seg_list) and len(myword.strip()) > 1:
            mywordlist.append(myword)
    return ' '.join(mywordlist)


wc = WordCloud(font_path=font_path, background_color="white", max_words=2000, mask=mask,
               max_font_size=100, random_state=42, width=1000, height=860, margin=2,)

wc.generate(jieba_processing_txt(text))

image_colors = ImageColorGenerator(np.array(image))
color = wc.recolor(color_func=image_colors)


plt.figure(figsize=(10, 5))

# 显示第一张图片
plt.subplot(1, 2, 1)
plt.imshow(image)
plt.title('Color Image')
plt.axis('off')

# 显示第二张图片
plt.subplot(1, 2, 2)
plt.imshow(color)
plt.title('WordCloud Image')
plt.axis('off')

# 显示图片
plt.show()

jay

四、总结

4.1 优点和局限性

优点有:

  • 直观:通过生成词云图像,直观展示了文本数据中的关键词和热点内容,使得信息一目了然。
  • 灵活性:可通过调整参数和样式,定制化生成符合需求的词云图像,满足不同场景下的需求。
  • 便捷性:提供了简单易用的API接口,方便用户快速生成词云,无需复杂的编程知识。

在以下方面有局限性:

  • 可解释性有限:词云图像虽然直观,但对于详细的数据分析并不足够,无法提供每个词语在文本中的具体含义和背景。

  • 数据处理能力有限:在处理大规模文本数据时,WordCloud 库的性能可能受到限制,无法处理过大的数据集

4.2 展望未来发展

随着数据可视化技术的不断发展和应用场景的扩展,WordCloud 库可能会朝着以下方向发展:

  • 智能化:未来的WordCloud库可能会引入更多的自动化和智能化功能,如基于自然语言处理技术的关键词提取和主题分析,使得生成的词云更加准确和有针对性。
  • 多模态融合:未来的词云图像可能会与其他形式的可视化技术进行融合,如图表、地图等,实现多模态数据展示,提供更加全面和丰富的信息呈现。
  • 数据互动性:未来的 WordCloud 库可能会加强与用户的交互性,支持用户对词云图像进行实时调整和定制,以及与其他数据进行联动分析,提升用户体验和数据分析效率。

参考

  1. Python—— 文件和数据格式化(模块6: wordcloud库的使用)(实例:自动轨迹绘制&政府工作报告词云)

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

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

相关文章

为了执行SQL语句,MySQL的架构是怎样设计的

1. 把MySQL当个黑盒子一样执行SQL语句 上一讲我们已经说到,我们的系统采用数据库连接池的方式去并发访问数据库,然后数据库自己其实也会维护一个连 接池,其中管理了各种系统跟这台数据库服务器建立的所有连接 我们先看下图回顾一下 当我们的…

【PostmanJMeter】使用Postman和JMeter进行signature签名

一、前言 ​ 有些接口的请求会带上sign(签名)进行请求,各接口对sign的签名内容、方式可能不一样,但一般都是从接口的入参中选择部分内容组成一个字符串,然后再进行签名操作, 将结果赋值给sign; 完整规范的接口文档都会…

使用深度学习集成模型进行乳腺癌组织病理学图像分类

基于预训练的VGG16和VGG19架构训练了四种不同的模型(即完全训练的 VGG16、微调的 VGG16、完全训练的 VGG19 和微调的 VGG19 模型)。最初,我们对所有单独的模型进行了5倍交叉验证操作。然后,我们采用集成策略,取预测概率…

(一)C++自制植物大战僵尸集成开发环境安装

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/uzrnw 1、下载Visual Studio集成开发环境 首先在微软官网下载Visual Studio 2022 Community版本。Community版本是免费的,并且满足个人开发的各种需求。Visual Studio 2022 下载链接:微软官网。选…

maven引入外部jar包

将jar包放入文件夹lib包中 pom文件 <dependency><groupId>com.jyx</groupId><artifactId>Spring-xxl</artifactId><version>1.0-SNAPSHOT</version><scope>system</scope><systemPath>${project.basedir}/lib/Spr…

[lesson33]C++中的字符串类

C中的字符串类 历史遗留问题 C语言不支持真正意义上的字符串C语言用字符数组和一组函数实现字符串操作C语言不支持自定义类型&#xff0c;因此无法获得字符串类型 解决方案 从C到C的进化过程引入自定义类型在C中可以通过类完成字符串类型的定义 标准库中的字符串类 C语言直…

蓝桥杯——玩具蛇

题目 小蓝有—条玩具蛇&#xff0c;一共有16节&#xff0c;上面标着数字1至16。每—节都是一个正方形的形状。相邻的两节可以成直线或者成90度角。 小蓝还有一个44的方格盒子&#xff0c;用于存放玩具蛇&#xff0c;盒子的方格上依次标着字母A到Р共16个字母。 小蓝可以折叠自…

什么是分组分析法

调查数据显示&#xff0c;2019 年年末中国大陆总人口 140005 万人。从年龄构成看&#xff0c;16 至 59 周岁年末人数为 89640 万&#xff0c;占总人口的比重为 64.0%&#xff1b;60 周岁及以上人口 25388 万人&#xff0c;占总人口的 18.1%&#xff0c;其中 65 周岁及以上人口 …

力扣LeetCode138. 复制带随机指针的链表 两种解法(C语言实现)

目录 题目链接 题目分析 题目定位&#xff1a; 解题思路 解题思路1&#xff08;粗暴但是复杂度高&#xff09; 解题思路2&#xff08;巧妙并且复杂度低&#xff09; 题目链接 138. 复制带随机指针的链表https://leetcode-cn.com/problems/copy-list-with-random-pointer/ …

OpenCV基本图像处理操作(一)——图像基本操作与形态学操作

环境配置地址 图像显示 import cv2 #opencv读取的格式是BGR import numpy as np import matplotlib.pyplot as plt#Matplotlib是RGB imgcv2.imread(cat.jpg) img_gray cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) img_gray.shape cv2.imshow("img_gray", img_gray) cv2…

【详解算法流程+程序】DBSCAN基于密度的聚类算法+源码-用K-means和DBSCAN算法对银行数据进行聚类并完成用户画像数据分析课设源码资料包

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法。 与划分和层次聚类方法不同&#xff0c;它将簇定义为密度相连的点的最大集合&#xff0c;能够把具有足够高密度的区域划分为簇&#xff0c; 并可在噪声的空间数据…

使用webpack5+TypeScript+npm发布组件库

一、前言 作为一只前端攻城狮&#xff0c;没有一个属于自己的组件库&#xff0c;那岂不是狮子没有了牙齿&#xff0c;士兵没有了武器&#xff0c;姑娘没有了大宝SOD蜜&#xff0c;你没有了我.... 言归正传&#xff0c;下面将给大家介绍如何通过webpack5编译一个TS组件发布到NPM…

zabbix监控服务

一、监控软件的作用 作为一个运维&#xff0c;需要会使用监控系统查看服务器状态以及网站流量指标&#xff0c;利用监控系统的数据去了解上线发布的结果和网站的健康状态 利用一个优秀的监控软件&#xff0c;我们可以&#xff1a; 对系统不间断实时监控实时反馈系统当前状态保…

进程地址空间(PAS)

"进程地址空间" "虚拟地址空间" "地址空间"&#xff1b; "进程内存" ≠ "虚拟内存"&#xff1b; 32位系统虚拟地址空间为4GB&#xff0c;一般使用不完&#xff0c;用户和内核都使用不完&#xff1b; 前言&#xff1a;一个…

HarmonyOS实战开发-拼图、如何实现获取图片,以及图片裁剪分割的功能。

介绍 该示例通过ohos.multimedia.image和ohos.multimedia.mediaLibrary接口实现获取图片&#xff0c;以及图片裁剪分割的功能。 效果预览 使用说明&#xff1a; 使用预置相机拍照后启动应用&#xff0c;应用首页会读取设备内的图片文件并展示获取到的第一个图片&#xff0c;…

古月·ROS2入门21讲——学习笔记(一)核心概念部分1-14讲

讲解视频地址&#xff1a;1.ROS和ROS2是什么_哔哩哔哩_bilibili 笔记分为上篇核心概念部分和下篇常用工具部分 下篇&#xff1a;古月ROS2入门21讲——学习笔记&#xff08;二&#xff09;常用工具部分15-21讲-CSDN博客 目录 第一讲&#xff1a;ROS/ROS2是什么 1. ROS的诞生…

numpy学习笔记(5),其他实用函数

8. 更多函数 8.1 随机数 8.1.1 常用随机数 8.1.1.1 numpy.random.rand(d0, d1, …, dn) 返回[0.0, 1.0)随机浮点数&#xff0c;即大于等于0.0&#xff0c;小于1.0。d0, d1, …, dn&#xff1a;返回的数组形状 # 使用numpy.random.rand函数 import numpy as np np.random.r…

09 Php学习:超级全局变量

超级全局变量 PHP中预定义了几个超级全局变量&#xff08;superglobals&#xff09; &#xff0c;这意味着它们在一个脚本的全部作用域中都可用。 PHP 超级全局变量列表: $GLOBALS$_SERVER$_REQUEST$_POST$_GET$_FILES$_ENV$_COOKIE$_SESSION $GLOBALS $GLOBALS 是 PHP 中的…

javaee初阶———多线程(三)

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 小比特 大梦想 此篇文章与大家分享多线程专题第三篇,关于线程安全方面的内容 如果有不足的或者错误的请您指出! 目录 八、线程安全问题(重点)1.一个典型的线程不安全的例子2.出现线程不安全的原因3.解决线程不安…

【Entity Framework】聊一聊EF中继承关系

【Entity Framework】聊一聊EF中继承关系 文章目录 【Entity Framework】聊一聊EF中继承关系一、概述二、实体类型层次结构映射三、每个层次结构一张表和鉴别器配置四、共享列五、每个类型一张表配置六、每个具体类型一张表配置七、TPC数据库架构八、总结 一、概述 Entity Fra…