【数据挖掘 | 可视化】 WordCloud 词云(附详细代码案例)

【数据挖掘 | 可视化】 WordCloud 词云(附详细代码案例)

🤵‍♂️ 个人主页: @计算机魔术师
👨‍💻 作者简介:CSDN内容合伙人,全栈领域优质创作者。

开发环境
编辑器: jupyter notebook
解释器: python 3.7

在七夕节中,博主写了一篇为女友收集QQ聊天记录做可视化词云的文章获得广泛好评,一直有小伙伴希望能出一篇教程,今天他来啦! 一文带你速通词云🙋‍♂️

文章链接 — Python | 词云】聊天记录绘制超美词云(七夕快乐 ,曾同学)

【数据挖掘 | 可视化】 WordCloud 词云(附详细代码案例)

后面生成的图片是有些显示违规或奇怪(因为我是用核心价值观作为词库的,所以会被和谐,但学习思路没有问题,大家可以放心食用~)

文章目录

; 一、安装wordcloud

pip install wordcloup

安装失败见:
https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud 去下载符合自己的whl文件
我的Windows 是64 操作系统,python版本为3.9

用cmd进到下载的whl文件的目录执行
pip install wordcloud-1.5.0-cp39-cp39m-win32.whl

查看模块属性和方法

import wordcloud,PIL
import  numpy as np
import jieba
dir(wordcloud)

输出

['ImageColorGenerator',
 'STOPWORDS',
 'WordCloud',
 '__all__',
 '__builtins__',
 '__cached__',
 '__doc__',
 '__file__',
 '__loader__',
 '__name__',
 '__package__',
 '__path__',
 '__spec__',
 '__version__',
 '_version',
 'color_from_image',
 'get_single_color_func',
 'query_integral_image',
 'random_color_func',
 'tokenization',
 'wordcloud']

主要使用其中的
WordCloud 对象 生成词云和显示词云

【数据挖掘 | 可视化】 WordCloud 词云(附详细代码案例)
dir(wordcloud.WordCloud)

输出

['__array__',
 '__class__',
 '__delattr__',
 '__dict__',
 '__dir__',
 '__doc__',
    ······
,]

插入一下 dir的用法


dir()

二、一个简单的词云

我们生成一个简单词云 并用 image绘出来


wcd = wordcloud.WordCloud(background_color='white')
text = 'hello world python windows css html javascript'

wcd.generate(text)
wcd.to_image()

【数据挖掘 | 可视化】 WordCloud 词云(附详细代码案例)

从中可以看见单词很散,很少, 我们对 词云对象 添加两个属性, repeat = true(重复) max_words (最大词数)

三、优化词云

(重复词,限制词数,放大图片,限制最大单词大小)


wcd1 = wordcloud.WordCloud(background_color='white',repeat=True,max_words=100,width=800,height=600,max_font_size=100)

wcd1.generate(text)
wcd1.to_image()

【数据挖掘 | 可视化】 WordCloud 词云(附详细代码案例)

四、中文版词云

zh_hans_text = "自由、平等、公正、法治。自由、平等、公正、法治"

wcd_zh_hans = wordcloud.WordCloud(background_color='white',repeat=True,max_words=100,width=800,height=600,max_font_size=100)

wcd_zh_hans.generate(zh_hans_text)
wcd_zh_hans.to_image()

可以发现 编码问题出现了。

【数据挖掘 | 可视化】 WordCloud 词云(附详细代码案例)

解决方案: 修改 font path 为中文字体路径

中文字体路径在哪里找呢,在 C:\Windows\Fonts

【数据挖掘 | 可视化】 WordCloud 词云(附详细代码案例)

我们直接将所需要的字体复制到项目根路径下使用

wcd_zh_hans = wordcloud.WordCloud(font_path='./../font/Muyao.TTF',background_color='white',repeat=True,max_words=100,width=800,height=600,max_font_size=100)

wcd_zh_hans.generate(zh_hans_text)
wcd_zh_hans.to_image()

【数据挖掘 | 可视化】 WordCloud 词云(附详细代码案例)

4.1colormap 修改主色调

我们希望修改一下颜色风格,我们查看一下 colormap 介绍

【数据挖掘 | 可视化】 WordCloud 词云(附详细代码案例)
也就说只能用 matplotlib库的颜色地图,我们去到对应官网

https://www.matplotlib.org.cn/gallery/color/colormap_reference.html

【数据挖掘 | 可视化】 WordCloud 词云(附详细代码案例)
wcd_zh_hans = wordcloud.WordCloud(font_path='./../font/Muyao.TTF/',colormap='Reds',background_color='white',repeat=True,max_words=100,width=800,height=600,max_font_size=100)

wcd_zh_hans.generate(zh_hans_text)
wcd_zh_hans.to_image()

【数据挖掘 | 可视化】 WordCloud 词云(附详细代码案例)

4.2修改部分字体的颜色

此时我们对主色调已经比较满意,但是我们希望可以对一些特别的字体换另外一种颜色,可以使用 方法 recolor() 重新绘制颜色

wcd_zh_hans.recolor()
wcd_zh_hans.to_image()

【数据挖掘 | 可视化】 WordCloud 词云(附详细代码案例)

五、自定义轮廓(根据图片)

使用 mask 参数 (面罩)

【数据挖掘 | 可视化】 WordCloud 词云(附详细代码案例)

对应参数是numpy 中的 array数组,将图片用 PIL库打开 使用矩阵表示出来(图像本质就是矩阵)

默认mask表示为binary(二进制),如果有对应的 mask 那么会自动忽略长宽,也就是不会进行默认的长方形图片显示,会被所给图片大小替代,其次如果图片有 白底(#ff 或者 #ffffff),那么此白底会被忽略,不会被渲染! 相当于边框!

导入 PIL (Pillow) 导入 numpy

mask = np.array(PIL.Image.open('china.png'))

wcd_zh_hans = wordcloud.WordCloud(font_path='./../font/Muyao.TTF/',mask=mask,colormap='Reds',background_color='white',repeat=True,max_words=200,width=800,height=600,max_font_size=100)

wcd_zh_hans.generate(zh_hans_text)
wcd_zh_hans.to_image()

【数据挖掘 | 可视化】 WordCloud 词云(附详细代码案例)

5.1添加边框和边框颜色

可以看到没有边框,此时我们想要边框可加上 contour 属性

wcd_zh_hans = wordcloud.WordCloud(font_path='./../font/Muyao.TTF/',contour_width=8,contour_color='red',mask=mask,colormap='Reds',background_color='white',repeat=True,max_words=200,width=800,height=600,max_font_size=100)

wcd_zh_hans.generate(zh_hans_text)
wcd_zh_hans.to_image()

【数据挖掘 | 可视化】 WordCloud 词云(附详细代码案例)

5.2保存图片🎉

wcd_zh_hans.to_file('china_wordcloud.png')

【数据挖掘 | 可视化】 WordCloud 词云(附详细代码案例)

5.3修改图片背景为透明色

但是出现一个问题:就是所生成的图片背景是白色的,而不是透明的,这样如果有需求还需要借助第三方工具变成透明

解决方法: 修改 mode (默认为 RGB) 为 RGBA , 并设置背景颜色为 None(必须在 RGBA 下有效,不然默认还是黑色背景)

参数颜色取值R红色值。正整数百分数G绿色值。正整数百分数B蓝色值。正整数百分数AAlpha透明度0~1(颜色的透明度)

此色彩模式与RGB相同,RGB定义了颜色的红绿蓝值,在RGB模式上新增了Alpha透明度.

wcd_zh_hans = wordcloud.WordCloud(font_path='./../font/Muyao.TTF/',mode='RGBA',contour_width=8,contour_color='white',mask=mask,colormap='Reds',background_color=None,repeat=True,max_words=200,width=800,height=600,max_font_size=100)

wcd_zh_hans.generate(zh_hans_text)
wcd_zh_hans.to_image()

根据报错,我们看到 图片和边框线contour的图层 不同,这是一直以来的 bug,到目前还没有修复😂。

【数据挖掘 | 可视化】 WordCloud 词云(附详细代码案例)

解决办法: 去除边框线属性

wcd_zh_hans = wordcloud.WordCloud(font_path='./../font/Muyao.TTF/',mode='RGBA',mask=mask,colormap='Reds',background_color=None,repeat=True,max_words=200,width=800,height=600,max_font_size=100)

wcd_zh_hans.generate(zh_hans_text)
wcd_zh_hans.to_image()

【数据挖掘 | 可视化】 WordCloud 词云(附详细代码案例)

perfect!!🎉

wcd_zh_hans.to_file('china_wordcloud_transparent.png')

六、处理大块文本

有时候我们的文本并不是像

zh_hans_text = "自由、平等、公正、法治。自由、平等、公正、法治"

处理好

通常情况下是这样:

text="核心价值观是一个国家的重要稳定器。一个民族、一个国家的核心价值观必须同自身的历史文化相契合,同自身正在进行的奋斗相结合,同自身需要解决的时代问题相适应。可以说,社会主义核心价值观培育和践行的过程,也是转型社会重建现代价值秩序的过程。在社会从传统向现代的转型过程中,人们的价值观念也发生了深刻的变化,同自身正在进行的奋斗相结合,同自身需要解决的时代问题相适应.可以说,社会主义核心价值观培育和践行的过程,也是转型社会重建现代价值秩序的过程.在社会从传统向现代的转型过程中,人们的价值观念也发生了深刻的变化,
  1. 可以使用 中文分词第三方库 ieba(结巴库) ,该库适用于快速上手,但是准确率相比之下比较低

  2. 更高的准确率可以使用北京大学开源的 中文分词第三方库 pkumsg(peking university segentation)

博客园 优质好文讲解
https://www.cnblogs.com/python-xkj/p/9247265.html

基本使用:

  • jieba.cut 方法接受三个输入参数: 需要分词的字符串; cut_all 参数用来控制是否采用全模式(默认为False);HMM 参数用来控制是否使用 HMM 模型

  • jieba.cut_for_search 方法接受两个参数:需要分词的字符串;是否使用 HMM 模型。该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细
    待分词的字符串可以是 unicodeUTF-8 字符串、 GBK 字符串。注意:不建议直接输入 GBK 字符串,可能无法预料地错误解码成 UTF-8

  • jieba.cut 以及 jieba.cut_for_search 返回的结构都是一个可迭代的 generator,可以使用 for循环来获得分词后得到的每一个词语(unicode),或者用
    jieba.lcut 以及 jieba.lcut_for_search 直接返回 list

  • jieba.Tokenizer(dictionary=DEFAULT_DICT) 新建自定义分词器,可用于同时使用不同词典。 jieba.dt 为默认分词器,所有全局分词相关函数都是该分词器的映射。

结巴分词0.4版本以上支持四种分词模式

模式效果精确模式试图将句子最精确地切开,适合文本分析全模式把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义搜索引擎模式在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词paddle模式利用PaddlePaddle深度学习框架,训练序列标注(双向GRU)网络模型实现分词。同时支持词性标注。(应该是百度提供的分词模型),缺点之一是在面对大数据时耗时很大

text="核心价值观是一个国家的重要稳定器。一个民族、一个国家的核心价值观必须同自身的历史文化\
相契合,同自身正在进行的奋斗相结合,同自身需要解决的时代问题相适应。可以说,社会主义核心价值\
观培育和践行的过程,也是转型社会重建现代价值秩序的过程。在社会从传统向现代的转型过程中,人们\
的价值观念也发生了深刻的变化,同自身正在进行的奋斗相结合,同自身需要解决的时代问题相适应.可以\
说,社会主义核心价值观培育和践行的过程,也是转型社会重建现代价值秩序的过程.在社会从传统向现\
代的转型过程中,人们的价值观念也发生了深刻的变化,"

jieba.lcut(text)

6.1处理分词后的字符串

  1. 使用 .join将每个字符串 ' '连接起来, 词云会自动去除标点符号
    ( 使用方法类似 re.sub替换: # &#x5220;&#x9664;&#x7279;&#x6B8A;&#x7B26;&#x53F7; sentence = re.sub('[\'!"#$%&\'()*+,-./:;<=>?@&#xFF0C;&#x3002;?&#x2605;&#x3001;&#x2026;&#x3010;&#x3011;&#x300A;&#x300B;&#xFF1F;&#x201C;&#x201D;&#x2018;\'&#xFF01;[\\]^_<!--=-->{|}~\s]+’, “”, sentence)`
    【数据挖掘 | 可视化】 WordCloud 词云(附详细代码案例)
  2. 也可以使用 计数好的字典 生成词云
    【数据挖掘 | 可视化】 WordCloud 词云(附详细代码案例)
jieba_text = ' '.join(jieba.lcut(text))
jieba_text

输出:

【数据挖掘 | 可视化】 WordCloud 词云(附详细代码案例)
wcd_zh_hans.generate(jieba_text)
wcd_zh_hans.to_image()

wcd_zh_hans.to_file('china_wordcloud_jiaba.png')

【数据挖掘 | 可视化】 WordCloud 词云(附详细代码案例)
                    &#x1F91E;&#x5230;&#x8FD9;&#x91CC;&#xFF0C;&#x5982;&#x679C;&#x8FD8;&#x6709;&#x4EC0;&#x4E48;&#x7591;&#x95EE;&#x1F91E;
        &#x1F3A9;&#x6B22;&#x8FCE;&#x79C1;&#x4FE1;&#x535A;&#x4E3B;&#x95EE;&#x9898;&#x54E6;&#xFF0C;&#x535A;&#x4E3B;&#x4F1A;&#x5C3D;&#x81EA;&#x5DF1;&#x80FD;&#x529B;&#x4E3A;&#x4F60;&#x89E3;&#x7B54;&#x7591;&#x60D1;&#x7684;&#xFF01;&#x1F3A9;
            &#x1F973;&#x5982;&#x679C;&#x5BF9;&#x4F60;&#x6709;&#x5E2E;&#x52A9;&#xFF0C;&#x4F60;&#x7684;&#x8D5E;&#x662F;&#x5BF9;&#x535A;&#x4E3B;&#x6700;&#x5927;&#x7684;&#x652F;&#x6301;&#xFF01;&#xFF01;&#x1F973;

Original: https://blog.csdn.net/weixin_66526635/article/details/127490970
Author: 计算机魔术师
Title: 【数据挖掘 | 可视化】 WordCloud 词云(附详细代码案例)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/723664/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球