文本挖掘与可视化:生成个性化词云的Python实践【7个案例】

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
Elasticsearch Serverless检索通用型,资源抵扣包 100CU*H
实时计算 Flink 版,5000CU*H 3个月
简介: 词云是文本数据可视化的工具,显示单词频率,直观、美观,适用于快速展示文本关键信息。- 用途包括关键词展示、数据探索、报告演示、情感分析和教育。- 使用`wordcloud`和`matplotlib`库生成词云,`wordcloud`负责生成,`matplotlib`负责显示。- 示例代码展示了从简单词云到基于蒙版、颜色和关键词权重的复杂词云生成。- 案例覆盖了中文分词(使用`jieba`库)、自定义颜色和关键词权重的词云。- 代码示例包括读取文本、分词、设置词云参数、显示和保存图像。

文本挖掘与可视化:生成个性化词云的Python实践【7个案例】

词云(Word Cloud),又称为文字云或标签云,是一种用于文本数据可视化的技术,通过不同大小、颜色和字体展示文本中单词的出现频率或重要性。在词云中,更频繁出现的单词会显示得更大,反之则更小。

词云的好处和作用:

  1. 直观展示关键词:词云可以快速展示文本中的主要概念和关键词,使观众能够一眼识别文本的主要内容。

  2. 强调重要性:通过字体大小的不同,词云可以直观地表达不同单词的重要性,有助于突出显示文本中的核心议题。

  3. 美观:词云可以设计成各种形状和颜色,具有很高的艺术性和观赏性,可以吸引观众的注意力。

  4. 信息压缩:词云将大量文本信息压缩成一张图,便于快速浏览和理解,尤其适合于社交媒体和快速消费的阅读环境。

  5. 数据探索:在数据分析和文本挖掘中,词云可以作为探索性数据分析的工具,帮助发现数据中的模式和趋势。

  6. 报告和演示:词云常用于报告和演示中,以图形化的方式展示研究结果或分析结论。

  7. 情感分析:在社交媒体监控和情感分析中,词云可以帮助快速识别公众对某个话题或品牌的普遍态度。

  8. 教育工具:在教育领域,词云可以作为教学工具,帮助学生理解文本结构和主题。

  9. 交互性:一些词云工具允许交互,用户可以点击词云中的单词以获取更多信息或执行搜索。

  10. 多语言支持:词云不仅限于英文,也支持中文、日文、阿拉伯文等其他语言,使其成为一种跨语言的可视化工具。

词云的生成通常涉及文本预处理(如去除停用词、标点符号等),然后根据单词的权重(如词频或TF-IDF分数)来调整字体大小,最后使用图形库(如PIL/Pillow)生成图像。尽管词云非常有用,但也存在局限性,如难以展示复杂的语法结构和语义关系,因此在实际应用中需要根据具体需求谨慎使用。

词云的实现

主要用到对 wordcloudmatplotlib 这两个Python库

以下是对 wordcloudmatplotlib 这两个Python库的简单介绍:

WordCloud

WordCloud 是一个流行的Python库,用于生成词云。词云是一种通过不同大小的单词来表示文本数据中单词频率的可视化方法。单词出现得越频繁,它们在词云中显示得越大。这个库非常灵活,允许用户自定义词云的许多方面,包括:

  • 词汇的排除和包含
  • 字体、颜色和形状的选择
  • 词云的布局和格式
  • 以及更多...

WordCloud 库通常用于数据分析、文本挖掘和可视化,以直观地展示文本数据的关键特征。

Matplotlib

Matplotlib 是Python中一个广泛使用的绘图库,它提供了一个类似于MATLAB的绘图框架,用于创建各种静态、交互式和动画的可视化图表。Matplotlib 支持多种输出格式,并且可以无缝地与各种Python环境集成,包括IPython、Jupyter notebook等。

Matplotlib 的主要特点包括:

  • 生成线图、散点图、柱状图等多种类型的图表。
  • 丰富的图表定制选项,如标题、图例、坐标轴标签等。
  • 支持多种绘图样式和布局。
  • 提供了多种工具来操作图形元素,如线条、文本、标签和注解。
  • 可以生成高分辨率的栅格图形或矢量图形。

Matplotlib 是数据科学、机器学习、科学计算和商业分析中常用的可视化工具之一。

这两个库结合使用时,可以创建出既美观又信息丰富的词云图像,帮助用户快速把握文本数据的关键信息。

环境版本

编辑器: pycharm

环境版本:

  • python3.7

  • wordcloud 1.9.3

  • matplotlib 3.5.3

案例01:最简调用

代码:

# -*- coding: utf-8 -*-

from wordcloud import WordCloud
import matplotlib.pyplot as plt

# 打开文本
text = open('constitution.txt').read()
# 生成对象
wc = WordCloud().generate(text)

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

# 保存到文件
wc.to_file('wordcloud.png')

这段代码是使用Python编写的,它的作用是生成一个词云(WordCloud),词云是一种可视化技术,用于显示文本数据中单词的频率。具体来说,这段代码做了以下几件事情:

  1. 导入必要的库:

    • WordCloud 用于生成词云。
    • matplotlib.pyplot 用于显示词云的图形。
  2. 打开一个名为 constitution.txt 的文本文件,读取其内容,并将其存储在变量 text 中。

  3. 使用 WordCloud 类生成一个词云对象 wc,将文本数据传递给 generate 方法。

  4. 使用 matplotlib 库显示生成的词云:

    • plt.imshow(wc, interpolation='bilinear') 显示词云图像。
    • plt.axis('off') 关闭坐标轴。
    • plt.show() 显示图形。
  5. 将生成的词云保存到一个名为 wordcloud.png 的文件中。

要运行这段代码,你需要确保有 wordcloudmatplotlib 这两个Python库安装在你的系统中,并且有一个名为 constitution.txt 的文本文件存在于代码运行的同一目录下。该文本文件应该包含你想要生成词云的文本数据。运行代码后,你将在当前目录下得到一个名为 wordcloud.png 的词云图片文件。

运行结果如下:

main_1

案例02:中文不分词

代码:

# -*- coding: utf-8 -*-
# 中文不分词
from wordcloud import WordCloud
import matplotlib.pyplot as plt

# 打开文本:吴承恩的西游记,指定使用utf-8编码读取
with open('../xyj.txt', 'r', encoding='utf-8') as f:
    text = f.read()
# 生成对象
wc = WordCloud(font_path='../Hiragino.ttf', width=800, height=600, mode='RGBA', background_color=None).generate(text)

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

# 保存到文件
wc.to_file('main_2.png')

运行结果:

main_2

案例03:中文分词

为什么中文文本需要分词:

分词(Tokenization)是文本处理中的一个术语,指的是将文本分解成更小的单元,通常是单词或者词语。在中文文本处理中,分词尤为重要,因为中文书写时通常不会像英文那样使用空格来分隔单词。

  1. 语言结构:中文书写习惯中,单词之间没有明显的分隔符,一个长句子如果不进行分词,很难确定词与词之间的界限。

  2. 计算和统计:分词后,可以更准确地进行词频统计,这对于文本挖掘、情感分析、机器学习等应用至关重要。

  3. 信息提取:分词可以帮助识别文本中的关键信息,如人名、地名、机构名等。

  4. 搜索和检索:搜索引擎和推荐系统通常依赖于分词来提高搜索和推荐的准确性。

  5. 自然语言理解:分词是自然语言理解(NLP)的第一步,有助于后续的语言模型和机器学习算法更好地处理文本数据。

代码中,使用jieba库进行中文分词:

# 中文分词
text = ' '.join(jieba.cut(text))

这里,jieba.cut(text)会返回一个生成器,其中包含了文本text的分词结果。使用' '.join()将分词结果连接成一个由空格分隔的字符串,以便WordCloud库可以正确地处理和生成词云。

jieba是中文分词领域的一个非常流行的Python库,它支持三种分词模式:

  • 精确模式:试图将句子最精确地切分。
  • 全模式:把句子中所有可以成词的词语都扫描出来,速度非常快,但是不能解决歧义。
  • 搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎构建索引。

最后,使用分词后的文本生成词云,可以更准确地反映出文本中各个词语的重要性和频率,从而生成更有意义的词云图像。

代码:

# -*- coding: utf-8 -*-
# 中文,分词
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import jieba

# 打开文本
with open('../xyj.txt', 'r', encoding='utf-8') as f:
    text = f.read()

# 中文分词
text = ' '.join(jieba.cut(text))
print(text[:100])

# 生成对象
wc = WordCloud(font_path='../Hiragino.ttf', width=800, height=600, mode='RGBA', background_color=None).generate(text)

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

# 保存到文件
wc.to_file('wordcloud.png')

运行结果:

wordcloud

案例04:使用蒙版形状

代码:

# -*- coding: utf-8 -*-

from wordcloud import WordCloud
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import jieba

# 打开文本
with open('../xyj.txt', 'r', encoding='utf-8') as f:
    text = f.read()

# 中文分词
text = ' '.join(jieba.cut(text))
print(text[:100])

# 生成对象
mask = np.array(Image.open("../black_mask.png"))
wc = WordCloud(mask=mask, font_path='../Hiragino.ttf', mode='RGBA', background_color=None).generate(text)

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

# 保存到文件
wc.to_file('main_4.png')

蒙版:

black_mask

运行结果:

main_4

案例05:使用蒙版颜色

代码:

# -*- coding: utf-8 -*-

from wordcloud import WordCloud, ImageColorGenerator
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import jieba

# 打开文本
with open('../xyj.txt', 'r', encoding='utf-8') as f:
    text = f.read()

# 中文分词
text = ' '.join(jieba.cut(text))
print(text[:100])

# 生成对象
mask = np.array(Image.open("../color_mask.png"))
wc = WordCloud(mask=mask, font_path='../Hiragino.ttf', mode='RGBA', background_color=None).generate(text)

# 从图片中生成颜色
image_colors = ImageColorGenerator(mask)
wc.recolor(color_func=image_colors)

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

# 保存到文件
wc.to_file('main_5.png')

运行结果:

main_5

案例06:蒙版-自定义颜色函数

代码:

# -*- coding: utf-8 -*-

from wordcloud import WordCloud
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import random
import jieba

# 打开文本
with open('../xyj.txt', 'r', encoding='utf-8') as f:
    text = f.read()

# 中文分词
text = ' '.join(jieba.cut(text))
print(text[:100])

# 颜色函数
def random_color(word, font_size, position, orientation, font_path, random_state):
    s = 'hsl(0, %d%%, %d%%)' % (random.randint(60, 80), random.randint(60, 80))
    print(s)
    return s

# 生成对象
mask = np.array(Image.open("../color_mask.png"))
wc = WordCloud(color_func=random_color, mask=mask, font_path='../Hiragino.ttf', mode='RGBA', background_color=None).generate(text)

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

# 保存到文件
wc.to_file('main_06.png')

效果图:

main_06

案例07:蒙版-提取关键词和权重

代码:

# -*- coding: utf-8 -*-

from wordcloud import WordCloud, ImageColorGenerator
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import jieba.analyse

# 打开文本
with open('../xyj.txt', 'r', encoding='utf-8') as f:
    text = f.read()

# 提取关键词和权重
freq = jieba.analyse.extract_tags(text, topK=200, withWeight=True)
print(freq[:20])
freq = {
   
   i[0]: i[1] for i in freq}

# 生成对象
mask = np.array(Image.open("../color_mask.png"))
wc = WordCloud(mask=mask, font_path='../Hiragino.ttf', mode='RGBA', background_color=None).generate_from_frequencies(freq)

# 从图片中生成颜色
image_colors = ImageColorGenerator(mask)
wc.recolor(color_func=image_colors)

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

# 保存到文件
wc.to_file('main_07.png')

效果图:

main_07

目录
相关文章
|
2月前
|
数据采集 数据可视化 数据挖掘
基于Python的App流量大数据分析与可视化方案
基于Python的App流量大数据分析与可视化方案
|
3月前
|
数据可视化 前端开发 数据挖掘
使用Folium在Python中进行地图可视化:全面指南
Folium是基于Python的交互式地图可视化库,依托Leaflet.js实现地理空间数据展示。本文从安装、基础使用到高级功能全面解析Folium:包括创建地图、添加标记、保存文件,以及绘制热力图、多边形和Choropleth地图等高级操作。通过展示北京市景点与全球地震数据的实际案例,结合性能优化、自定义样式和交互性增强技巧,帮助用户掌握Folium的核心功能与应用潜力,为数据分析提供直观支持。
168 2
|
3月前
|
搜索推荐 算法 程序员
6个案例15分钟让你了解Python套路
Python以其简洁易读的语法,成为编程初学者的首选。本文通过7个经典代码案例,带你快速了解Python编程的核心概念和常用技巧: 1. **九九乘法口诀**:使用嵌套循环打印乘法表。 2. **列表求和**:展示两种方法(for循环和内置函数sum())计算列表元素之和。 3. **素数判断**:编写函数判断一个数是否为素数。 4. **斐波那契数列**:生成指定长度的斐波那契数列。 5. **冒泡排序**:实现简单的冒泡排序算法。 6. **汉诺塔问题**:通过递归解决经典的汉诺塔问题。 这些案例不仅展示了Python的基础语法,更体现了编程思维的重要性,帮助初学者逐步掌握编程套路。
90 2
|
6月前
|
数据可视化 编译器 Python
Manim:数学可视化的强大工具 | python小知识
Manim(Manim Community Edition)是由3Blue1Brown的Grant Sanderson开发的数学动画引擎,专为数学和科学可视化设计。它结合了Python的灵活性与LaTeX的精确性,支持多领域的内容展示,能生成清晰、精确的数学动画,广泛应用于教育视频制作。安装简单,入门容易,适合教育工作者和编程爱好者使用。
1707 7
|
7月前
|
存储 数据可视化 数据挖掘
使用Python进行数据分析和可视化
本文将引导你理解如何使用Python进行数据分析和可视化。我们将从基础的数据结构开始,逐步深入到数据处理和分析的方法,最后通过实际的代码示例来展示如何创建直观的数据可视化。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。让我们一起探索数据的世界,发现隐藏在数字背后的故事!
257 5
|
7月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析和可视化
【10月更文挑战第42天】本文将介绍如何使用Python进行数据分析和可视化。我们将从数据导入、清洗、探索性分析、建模预测,以及结果的可视化展示等方面展开讲解。通过这篇文章,你将了解到Python在数据处理和分析中的强大功能,以及如何利用这些工具来提升你的工作效率。
|
机器学习/深度学习 人工智能 Python
|
3月前
|
机器学习/深度学习 存储 设计模式
Python 高级编程与实战:深入理解性能优化与调试技巧
本文深入探讨了Python的性能优化与调试技巧,涵盖profiling、caching、Cython等优化工具,以及pdb、logging、assert等调试方法。通过实战项目,如优化斐波那契数列计算和调试Web应用,帮助读者掌握这些技术,提升编程效率。附有进一步学习资源,助力读者深入学习。
|
1月前
|
数据采集 安全 BI
用Python编程基础提升工作效率
一、文件处理整明白了,少加两小时班 (敲暖气管子)领导让整理100个Excel表?手都干抽筋儿了?Python就跟铲雪车似的,哗哗给你整利索!
64 11
|
3月前
|
人工智能 Java 数据安全/隐私保护
[oeasy]python081_ai编程最佳实践_ai辅助编程_提出要求_解决问题
本文介绍了如何利用AI辅助编程解决实际问题,以猫屎咖啡的购买为例,逐步实现将购买斤数换算成人民币金额的功能。文章强调了与AI协作时的三个要点:1) 去除无关信息,聚焦目标;2) 将复杂任务拆解为小步骤,逐步完成;3) 巩固已有成果后再推进。最终代码实现了输入验证、单位转换和价格计算,并保留两位小数。总结指出,在AI时代,人类负责明确目标、拆分任务和确认结果,AI则负责生成代码、解释含义和提供优化建议,编程不会被取代,而是会更广泛地融入各领域。
115 28

推荐镜像

更多