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

news2024/11/19 13:25:27

在这里插入图片描述

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

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

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

文章链接 — Python | 词云】聊天记录绘制超美词云(七夕快乐 ,曾同学)
在这里插入图片描述

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

文章目录

  • 一、安装wordcloud
  • 二、一个简单的词云
  • 三、优化词云
  • 四、中文版词云
    • 4.1colormap 修改主色调
    • 4.2修改部分字体的颜色
  • 五、自定义轮廓(根据图片)
    • 5.1添加边框和边框颜色
    • 5.2保存图片🎉
    • 5.3修改图片背景为透明色
  • 六、处理大块文本
    • 6.1处理分词后的字符串

一、安装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 对象 生成词云和显示词云
img-h2t31Plb-1660636958091)(attachment:image.png

dir(wordcloud.WordCloud)

输出

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

插入一下 dir的用法

# dir 如果没有参数,默认返回 项目属性 和 模块
dir()

二、一个简单的词云

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

# 设置背景为白色

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

# 生成词云
wcd.generate(text) # Generate  wordcloud from text.
wcd.to_image()

在这里插入图片描述

从中可以看见单词很散,很少, 我们对 词云对象 添加两个属性, 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()

在这里插入图片描述

四、中文版词云

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()

可以发现 编码问题出现了。
在这里插入图片描述

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

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

在这里插入图片描述

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

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()

在这里插入图片描述

4.1colormap 修改主色调

我们希望修改一下颜色风格,我们查看一下 colormap 介绍
在这里插入图片描述

也就说只能用 `matplotlib`库的颜色地图,我们去到对应官网

https://www.matplotlib.org.cn/gallery/color/colormap_reference.html
在这里插入图片描述

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()

在这里插入图片描述

4.2修改部分字体的颜色

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

wcd_zh_hans.recolor() # 重新渲染颜色
wcd_zh_hans.to_image()

在这里插入图片描述

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

使用 mask 参数 (面罩)
在这里插入图片描述

对应参数是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()

在这里插入图片描述

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()

在这里插入图片描述

5.2保存图片🎉

wcd_zh_hans.to_file('china_wordcloud.png')

在这里插入图片描述

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,到目前还没有修复😂。
在这里插入图片描述

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

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()

在这里插入图片描述

perfect!!🎉

wcd_zh_hans.to_file('china_wordcloud_transparent.png')

六、处理大块文本

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

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

处理好

通常情况下是这样:

`text="核心价值观是一个国家的重要稳定器。一个民族、一个国家的核心价值观必须同自身的历史文化相契合,同自身正在进行的奋斗相结合,同自身需要解决的时代问题相适应。可以说,社会主义核心价值观培育和践行的过程,也是转型社会重建现代价值秩序的过程。在社会从传统向现代的转型过程中,人们的价值观念也发生了深刻的变化,同自身正在进行的奋斗相结合,同自身需要解决的时代问题相适应.可以说,社会主义核心价值观培育和践行的过程,也是转型社会重建现代价值秩序的过程.在社会从传统向现代的转型过程中,人们的价值观念也发生了深刻的变化,`
  1. 可以使用中文分词第三方库 ieba(结巴库) ,该库适用于快速上手,但是准确率相比之下比较低
  1. 更高的准确率可以使用北京大学开源的中文分词第三方库 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替换: # 删除特殊符号 sentence = re.sub('[\'!"#$%&\'()*+,-./:;<=>?@,。?★、…【】《》?“”‘\'![\\]^_{|}~\s]+', “”, sentence)`
    在这里插入图片描述

  2. 也可以使用 计数好的字典 生成词云
    在这里插入图片描述

jieba_text = ' '.join(jieba.lcut(text))
jieba_text

输出:
在这里插入图片描述

wcd_zh_hans.generate(jieba_text)
wcd_zh_hans.to_image()

wcd_zh_hans.to_file('china_wordcloud_jiaba.png')

在这里插入图片描述

			        🤞到这里,如果还有什么疑问🤞
		🎩欢迎私信博主问题哦,博主会尽自己能力为你解答疑惑的!🎩
			🥳如果对你有帮助,你的赞是对博主最大的支持!!🥳

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

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

相关文章

自学Vue之路——Vue介绍及基本语法

今日内容概要 前端发展介绍Vue的快速使用插值语法指令系统之文本指令指令系统之事件指令指令系统之属性指令 前端发展介绍 HTML(5)、CSS(3)、JavaScript(ES5、ES6、ES13)&#xff1a;编写一个个的页面 -> 给后端(PHP、Python、Go、Java) -> 后端嵌入模板语法 -> 后端…

Arduino基础知识

目录&#xff1a; 第1章 概述 1.1 Arduino简介 1.2 Arduino内部结构 第2章 Arduino编程 2.1 Arduino开发环境 2.2 Arduino语言概述 2.3 Arduino基本函数 第3章 Arduino通信教程 3.1 SPI通信 3.2 红外通信 3.3 WiFi通信 3.4 蓝牙通信 第4章 Arduino实验 1、接收串…

【学生管理系统】权限管理之用户管理—查询所有用户并关联相关角色

目录 一、查询所有用户&#xff08;关联角色&#xff09; 1&#xff09;后端 2&#xff09;前端 &#x1f49f; 创作不易&#xff0c;不妨点赞&#x1f49a;评论❤️收藏&#x1f499;一下 一、查询所有用户&#xff08;关联角色&#xff09; 1&#xff09;后端 修改javaB…

牛客小题练手 | 二叉树(三)

&#x1f308;刷题&#xff0c;面试&#xff0c;求职&#xff0c;快来牛客网一起成为offer收割机&#xff01; 点击注册收割offer 一、BM32 合并二叉树 描述 已知两颗二叉树&#xff0c;将它们合并成一颗二叉树。合并规则是&#xff1a;都存在的结点&#xff0c;就将结点值加…

前端无法渲染CSS文件

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

Air780E模块PPP应用开发指南

目录PPP拨号windows下PPP拨号配置标准调制解调器设置拨号连接验证拨号结果linux下PPP拨号1.安装 PPP 拨号软件2.创建拨号脚本文件/etc/ppp/peers/air-ppp/etc/ppp/peers/air-chat-connect/etc/ppp/peers/air-chat-disconnect3.创建好以上三个文件后就可以通过pppd拨号了4.拨号成…

机械转码日记【21】list使用及list的模拟实现

目录 前言 1.list的使用 1.2sort和unique 2.list的模拟 2.1构造函数 2.2push_back() 2.3迭代器 2.3.1简洁版 2.3.2升级版&#xff08;重要&#xff09; 2.4insert和erase与迭代器失效 2.4.1list的迭代器失效 2.5析构函数 2.6深拷贝构造 前言 list是我们数据结构…

Web前端 | JavaScript(DOM编程)

✅作者简介&#xff1a;一位材料转码农的选手&#xff0c;希望一起努力&#xff0c;一起进步&#xff01; &#x1f4c3;个人主页&#xff1a;每天都要敲代码的个人主页 &#x1f525;系列专栏&#xff1a;Web前端 &#x1f4ac;推荐一款模拟面试、刷题神器&#xff0c;从基础到…

Qt文档阅读笔记-Hello Speak Example

官方的这个例子比较有意思&#xff0c;在此记录下&#xff0c;方便以后查阅。 Hello Speak Example 这个例子主要是使用QTextToSpeech类将用户自定义输入的文本转换为口语&#xff0c;包括高低音、声音大小、读速。并且能够选择语言和声音。 包含的文件如下&#xff1a; 本篇博…

一文搞懂【知识蒸馏】【Knowledge Distillation】算法原理

知识蒸馏算法原理精讲 文章目录知识蒸馏算法原理精讲1. 什么是知识蒸馏&#xff1f;2. 轻量化网络的方式有哪些&#xff1f;3. 为什么要进行知识蒸馏&#xff1f;3.1 提升模型精度3.2 降低模型时延&#xff0c;压缩网络参数3.3 标签之间的域迁移4. 知识蒸馏的理论依据&#xff…

【JavaWeb】初识HTTP学习

文章目录JavaWeb之HTTP学习1、HTTP相关基本概念2、数据格式介绍2.1 请求的数据格式2.2 响应的数据格式案例JavaWeb之HTTP学习 1、HTTP相关基本概念 什么是HTTP&#xff1f; HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是一个简单的请…

Spring Cloud基本介绍

✨ Spring Cloud基本介绍1.微服务中的相关概念1.1服务的注册与实现1.2负载均衡1.3熔断1.4链路追踪1.5API网关2.Spring Cloud的介绍2.1基本认识2.2Spring Cloud的架构2.2.1Spring Cloud的核心组件2.2.2Spring Cloud体系结构2.3Spring Boot和Spring Cloud的区别与联系2.3.1 Sprin…

【Spring】简单的登录案例和配套知识

本篇文章接着介绍 Spring 的相关知识&#xff0c;主要通过一个非常非常简单用户登录案例来介绍&#xff0c;各位大佬们路过记得赏小的一颗赞&#x1f929; 文章目录1. 演示一下 Spring 管理类的模式2. 用户登录案例2.1 准备的对象和其功能2.1.1 User2.1.2 UserController2.1.3 …

05、JavaWeb启程——JDBC详解

1、JDBC概述 1、持久化概述 【简介】&#xff1a; 持久化指的是把内存中的数据存储到可掉电存储设备中以供之后使用。 2、JDBC概述 【简介】&#xff1a; JDBC是一种用于执行SQL语句的Java API&#xff0c;可以为多种关系型数据库提供统一的访问。 【JDBC本质】&#xff1…

【Java】泛型

当你觉得这条路很难走的时候&#xff0c;一定是上坡路 目录 1.初识泛型 1.1 什么是泛型 1.2泛型类语法 1.2.1泛型类定义 1.2.2泛型类使用语法 1.2.3泛型类的使用 1.2.4裸类型 2.泛型如何编译 2.1擦除机制 3.泛型的上界 3.1语法 3.2示范 4.泛型方法 4.1 语法 …

i.MX 6ULL 驱动开发 十九:RGBLCD

一、RGBLCD 硬件原理 【正点原子MP157连载】第十八章 RGB LCD彩条显示实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7_正点原子的博客-CSDN博客 ATK7016 时序参数&#xff1a; 二、eLCDIF 接口 eLCDIF 是 I.MX6U 自带的液晶屏幕接口&#xff0c;用于连接 RGB …

【Linux】没有GDB,何谈Linux C

一、简单的开始 1、有C代码如下 #include <stdio.h>void main() {printf("Hello World!"); }2、通过gcc编译 生成带有调试信息的可运行程序&#xff0c;编译参数-g gcc -g hello.c -o hello3、运行GDB -q表示不打印gdb版本信息&#xff0c;界面较为干净 …

linux内核调试工具之kprobe

目录 一、内核调试的痛点 二、kprobe的优点 三、kprobe探测点的要点 四、探测点的开销与优化 五、内核配置 六、API 七、程序架构 八、实例 一、内核调试的痛点 内核调试&#xff0c;添加打印信息。在运行过程中想看某个函数的变量&#xff0c;需要重新编译内核。这样破…

【C语言】指针(进阶)

目录一、字符指针二、数组指针2.1、数组指针的定义2.2、&数组名和数组名2.3、数组指针的使用三、数组传参、指针传参3.1、一维数组传参3.2、二维数组传参3.3、一级指针传参3.4、二级指针传参四、函数指针五、函数指针数组六、指向函数指针数组的指针七、回调函数一、字符指…

【C语言小游戏】详解三子棋,深刻掌握二维数组

前言&#xff1a; 大家好&#xff0c;我是良辰丫&#xff0c;今天带领大家实现一个C语言小游戏&#xff0c;主要运用的知识点为二维数组&#xff0c;希望这篇文章让大家对二维数组有更深刻的认识。 &#x1f49e;看似不起波澜的日复一日&#xff0c;会突然在某一天让人看到坚持…