【python 数据可视化】 WordCloud词云图

目录

词云简介

准备工作

安装方法一:

安装方法二:

 生成词云步骤

数据预处理:

分词:

 统计词频出现的次数:

 去除词语:

生成词云:

显示词云:

保存词云:

完整代码


词云简介

词云”这个概念由美国西北大学新闻学副教授、新媒体专业主任里奇·戈登(Rich Gordon)于提出,词云是一种可视化描绘单词或词语出现在文本数据中频率的方式,它主要是由随机分布在词云图的单词或词语构成,出现频率较高的单词或词语则会以较大的形式呈现出来,而频率越低的单词或词语则会以较小的形式呈现。词云主要提供了一种观察社交媒体网站上的热门话题或搜索关键字的一种方式,它可以对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”,从而过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。

准备工作

我们需要安装一些基本的库:(因为wordcloud库,jieba库不是python的内置库)

  • wordcloud
  • jieba

安装方法一:

windows+R,打开cmd,在命令行输入:

pip install wordcloud

等待安装完成即可。同样的方法安装jieba库; 

安装方法二:

直接再pycharm软件中安装:

打开pycharm,找到pythong软件包,在搜索框中搜索要下载的库,点击安装即可。

(如果第一次安装失败的话,直接再次尝试安装,基本上第二次是可以成功的)。

 生成词云步骤

  1.  准备好文本数据,词云背景模板;
  2. 数据预处理:对文本数据处理,如去除标点符号,停用词,数字等,以便更好的生成词云图;
  3. 分词:文本数据处理好后,使用分词工具进行分词,也就是将词分成一个个词语;
  4. 统计词频:也就是统计每个词语出现的次数;
  5. 去除不想要的词语;
  6. 生成词云图:使用wordcloud库的函数生成词云图,设置一些背景颜色,字体,词云形状;
  7. 显示词云图;
  8. 保存词云图;

数据预处理:

file = open(r"test.txt", mode="r",encoding="utf-8")
txt1 = file.read()txt2 = re.sub(r"[^\u4e00-\u9fa5]","",txt1)
  • 这里file是打开文件的操作:如果直接print(file),结果显示的也只是一个操作,不会显示文本内容;要想真正的把文本里面的内容读取出来,就需要file.read()的方法;
  • txt1中存放的就是原始文本,但是只是原始文本并不行,使用re库中的re.sub将文本中的标点进行匹配,替换成空白,优化好的文本我们放到txt2中;

这里re.sub()函数可以看:re.sub()用法的详细介绍_jackandsnow的博客-CSDN博客_re sub

 

分词:

我们平常看到的词云:

如果整个文本直接生成词云肯定是不行的,接下来我们就需要对文本进行分词操作;

txt3 = jieba.cut(txt2)  # 可迭代对象#for i in txt3:
#    print(i)

这里我们就用到了准备工作中的jieba库:

jieba.cut(s) 精确模式:把文本精确的切分开,不存在冗余单词;

这样txt3中的保存的就是一个个的词语:

 统计词频出现的次数:

txt4 = {}
for i in txt3:if i not in txt4:txt4[i]=1else:txt4[i]+=1txt5 = sorted(txt4.items(),key=lambda x :x[1],reverse=True)txt6={}
for word,count in txt5:txt6[word]=count

这里我们把结果存放到字典里面,因为{key:value},可以存放值和出现次数;

存放好后,我们进行排序;

  • sorted函数是默认升序排序,当需要降序排序时,需要使用reverse = Ture;
  • 这里的items是将txt4字典转换为一个列表;

 我们排好序后,还需要将这个列表转换为一个字典;

 

 去除词语:

 统计并排好词后我们打印一下:

如果里面有不想出现的词语,可以把它删去:

list1={'的','和','我','我们','会','可以','是','我会','例如'} #去除不想要的词语
for i in list1:del txt6[i]

生成词云:

img =Image.open("R-C.jpg")//我们想要的词云模板导入img_array = np.array(img)wordcloud = WordCloud(mask=img_array, # 设置词云模板background_color='white', #背景颜色font_path='simsun.ttc', #字体路径max_words=500, #最大显示的单词数max_font_size=100, #单词最大字号width = 500, #宽度height= 500, #高度
).generate_from_frequencies(txt6)

显示词云:

plt.Figure(figsize=(8,8))  #画布大小
plt.imshow(wordcloud,interpolation='bilinear')
plt.axis('off') #关闭坐标轴
plt.show()

保存词云:

wordcloud.to_file('词云图片.jpg')  # 保存图片

完整代码

import re
import matplotlib.pyplot as plt
from wordcloud import WordCloud
import jieba
import numpy as np
from PIL import Imagefile = open(r"test.txt", mode="r",encoding="utf-8")
txt1 = file.read()
# print(txt1)  #原始文本
txt2 = re.sub(r"[^\u4e00-\u9fa5]","",txt1)
# print(txt2) #进化后的文本txt3 = jieba.cut(txt2)  # 可迭代对象
# for i in txt3:
#     print(i)txt4 = {}
for i in txt3:if i not in txt4:txt4[i]=1else:txt4[i]+=1
txt5 = sorted(txt4.items(),key=lambda x :x[1],reverse=True)
# print(txt5)txt6={}
for word,count in txt5:txt6[word]=count
print(txt6)list1={'的','和','我','我们','会','可以','是','我会','例如'} #去除不想要的词语
for i in list1:del txt6[i]
# print(txt6)img =Image.open("R-C.jpg")img_array = np.array(img)wordcloud = WordCloud(mask=img_array, # 设置词云模板background_color='white', #背景颜色font_path='simsun.ttc', #字体路径max_words=500, #最大显示的单词数max_font_size=100, #单词最大字号width = 500, #宽度height= 500, #高度
).generate_from_frequencies(txt6)
plt.Figure(figsize=(8,8))  #画布大小
plt.imshow(wordcloud,interpolation='bilinear')
plt.axis('off') #关闭坐标轴
plt.show()
wordcloud.to_file('词云图片.jpg')  # 保存图片

完结!!

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

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

相关文章

AugmentedReality之路-通过蓝图启动AR相机(2)

本文实现打开AR相机和关闭AR相机功能,在主界面点击Start AR按钮后打开AR相机,在主界面点击Stop AR按钮后关闭AR相机 1、启动AR相关插件 通过Edit->Plugins启用AugmentedReality下面的所有插件 2、自定义Pawn 在Content->ARBase目录右键&…

iOS开发进阶(十一):ViewController 控制器详解

文章目录 一、前言二、UIViewController三、UINavigationController四、UITabBarController五、UIPageViewController六、拓展阅读 一、前言 iOS 界面开发最重要的首属ViewController和View,ViewController是View的控制器,也就是一般的页面,…

Hive详解(3)

Hive 数据类型 struct类型 struct:结构体,对应了Java中的对象,实际上是将数据以json形式来进行存储和处理 案例 原始数据 a tom,19,male amy,18,female b bob,18,male john,18,male c lucy,19,female lily,19,female d henry,18,male davi…

基于ssm网上服装销售系统论文

摘 要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于网上服装销售系统系统当然也不能排除在外,随着网络技术的不断成熟,带动了网上服装销售系统系统,它彻底…

UNDERSTANDING HTML WITH LARGE LANGUAGE MODELS

UNDERSTANDING HTML WITH LARGE LANGUAGE MODELS 相关链接:arXiv 关键字:大型语言模型、HTML理解、Web自动化、自然语言处理、机器学习 摘要 大型语言模型(LLMs)在各种自然语言任务上表现出色。然而,它们在HTML理解方…

【JS笔记】JavaScript语法 《基础+重点》 知识内容,快速上手(六)

面向对象OOP 首先,我们要明确,面向对象不是语法,是一个思想,是一种 编程模式面向: 面(脸),向(朝着)面向过程: 脸朝着过程 》 关注着过程的编程模…

shell脚本发布docker springboot项目示例

docker、git、Maven、jdk8安装略过。 使git pull或者git push不需要输入密码操作方法 约定: 路径:/opt/springbootdemo, 项目:springbootdemo, 打包:springbootdemo.jar, docker容器名字&#x…

Netty 代理TCP 转发集群方案

使用 Netty 自定义协议连接物联网设备,业务增大之后,势必需要使用集群方案。 #nginx负载均衡 Nginx 1.9 已经支持 TCP 代理和负载均衡,并可以通过一致性哈希算法将连接均匀的分配到所有的服务器上。 修改配置文件 http{ … } stream{ ups…

Android ImageView以及实现截图

实现效果 截图前 截图后 代码 package cn.jj.huaweiad;import android.annotation.SuppressLint; import android.graphics.Bitmap; import android.os.Bundle; import android.os.Handler; import android.util.Log; import android.view.View; import android.view.ViewGro…

硬件项目中的turn-key 是啥意思?案例应用

在硬件项目中,turn-key是指一种工程项目模式,即交钥匙工程。这种模式通常由独立的第三方软件厂商直接与芯片厂商合作,基于芯片厂商的硬件方案和协议,集成成熟的上层软件和应用,并整套提供给电子产品生产厂商。这种模式…

LLM之RAG实战(三十五)| 使用LangChain的3种query扩展来优化RAG

RAG有时无法从矢量数据库中检索到正确的文档。比如我们问如下问题: 从1980年到1990年,国际象棋的规则是什么? RAG在矢量数据库中进行相似性搜索,来查询与国际象棋规则问题相关的相关文档。然而,在某些情况下&#xff0…

Ioc容器创建 和 读取组件的测试类

A接口 package com.atguigu.Ioc_03;public interface A {void dowork(); }HappyComponent.java package com.atguigu.Ioc_03;public class HappyComponent implements A {// 默认包含无参的构造方法Overridepublic void dowork() {System.out.println("我是:…

平台介绍-搭建赛事运营平台(3)

上文介绍了品牌隔离的基本原理,就是通过不同的前端和微服务来实现。但是确实很多功能是类似的,所以从编程角度还是有些管理手段的。 前端部分:前端部分没有什么特别手段,就是两个独立的项目工程,分别维护。相同的部分复…

I.MX6ULL_Linux_驱动篇(55)linux 网络驱动

网络驱动是 linux 里面驱动三巨头之一, linux 下的网络功能非常强大,嵌入式 linux 中也常常用到网络功能。前面我们已经讲过了字符设备驱动和块设备驱动,本章我们就来学习一下linux 里面的网络设备驱动。 嵌入式网络简介 网络硬件接口 首先…

LeetCode_Java_字符串相加(题目+思路+代码)

415.字符串相加 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。 你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。 思路: 1…

如何降低 BlueNRG-LPS 的开机峰值电流

1. 前言 BlueNRG 系列存在开机瞬间会出现很大的峰值电流的现象,预计有 20ma 左右。针对此现象,经常有客户询问该峰值电流会不会导致设备工作异常?会不会导致电池使用寿命缩短(考虑到一般纽扣电池能承受的峰值电流大概在 15ma 左右…

深度剖析MySQL锁:解开数据库并发控制的神秘面纱

MySQL 锁是 MySQL 数据库管理系统中为了实现并发控制和数据一致性的机制。在多用户并发访问数据库时,锁可以确保多个事务在对同一数据进行操作时不会相互干扰,以防止数据不一致的现象发生。 一、锁分类 MySQL支持多种类型的锁,主要包括…

NGINX安装Stream模块

一.前言 Stream模块是Nginx的一个核心模块,它提供了一种处理TCP和UDP流量的方式。它可以将传入的TCP或UDP流量代理到后端服务器,实现负载均衡和反向代理的功能。它可以根据自定义的规则将流量转发到不同的后端服务器,实现高可用性和性能优化…

定时器的原理和应用

#include<reg51.h> unsigned char s[]{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; unsigned char count0,num0; void inittimer() {TMOD0x01;//0000 0001TH0(65536-50000)/256; //定时50ms50000us 2562^8 初值向右边移动8位TL0(65536-50000)%256;ET01;//开启定…

让Unity的协程变得简单

作者简介: 高科,先后在 IBM PlatformComputing从事网格计算,淘米网,网易从事游戏服务器开发,拥有丰富的C++,go等语言开发经验,mysql,mongo,redis等数据库,设计模式和网络库开发经验,对战棋类,回合制,moba类页游,手游有丰富的架构设计和开发经验。 (谢谢…