Python(wordcloud):根据词频信息(xlsx、csv文件)绘制词云图

一、前言

本文将介绍如何用python根据词频信息(xlsx、csv文件)绘制词云图,除了绘制常规形状的词云图(比如长方形),还可以指定词云图的形状。

二、安装并引入相关的库

1、安装相关的库
pip install jieba
pip install matplotlib
pip install wordcloud
pip install numpy
pip install Image 
pip install pandas
2、导入相关的库
import jieba
import matplotlib.pyplot as plt
from wordcloud import WordCloud
import numpy as np
from PIL import Image # 图像处理
import pandas as pd

三、数据处理

1、文件读取
  • 本文使用的数据集是excel文件(后缀名是.xlsx),该文件包含2个字段:关键词以及对应的频数
    在这里插入图片描述

  • 以下是对excel文件的相关操作:

import pandas as pd
df=pd.read_excel("data-test.xlsx")# 读取excel数据信息
print(df)
  • 数据读取结果如下:

在这里插入图片描述

  • 只读取文件的前N条数据
# 只获取前5条数据
df_new=df.head(5)
print(df_new)
  • 结果如下:
    在这里插入图片描述
2、数据格式转换

读取到excel文件后,需要把数据转换成字典的格式:

# 生成一个DataFrame文件,index为df数据的index
data = pd.DataFrame(index=df['关键词'])
# 先将词频这一列赋值为0 ,即定义这一列为int格式,后面再赋值
data['词频']=0
# 将excel的数据写入data中
for i in range(0,len(df)):data.iloc[i,0]=df.iloc[i,1]
# 将词频按照从大到小排序
data = data['词频'].sort_values(ascending = False)
# 生成dict格式数据
data = dict(data)
print(data)
  • 结果如下:

在这里插入图片描述

四、绘制词云图

由于excel文件本身已经提供了关键词以及对应的词频,因此这里绘制词云图的时候不用对文本进行结巴分词。

1、绘制基本的词云图
  • 词云图的相关代码:
import matplotlib.pyplot as plt
from wordcloud import WordCloud#关键词有中文,因此需要设置显示字体,否则会乱码
font_path = "C:\Windows\Fonts\Microsoft YaHei UI\msyh.ttc"
# 设置词云图相关参数
wc=WordCloud(font_path=font_path,width=400,height=400,scale=2,mode="RGBA",background_color='white')
# 根据dict制作词云图
wc=wc.generate_from_frequencies(data)
#存储词云图结果
wc.to_file('词云图1.png')
  • 图片展示的相关代码
#显示图片
plt.imshow(wc,interpolation="bilinear")
plt.axis("off")# 不显示图像坐标系
# 显示图像
plt.show()
plt.savefig("词云图2.png")
  • 结果如下:
    在这里插入图片描述

  • 完整代码

import pandas as pd
df=pd.read_excel("data-test.xlsx")# 读取excel数据信息
print(df)# 只获取前5条数据
df_new=df.head(5)
print(df_new)# 生成一个DataFrame文件,index为df数据的index
data = pd.DataFrame(index=df['关键词'])
# 先将词频这一列赋值为0 ,即定义这一列为int格式,后面再赋值
data['词频']=0
# 将excel的数据写入data中
for i in range(0,len(df)):data.iloc[i,0]=df.iloc[i,1]
# 将词频按照从大到小排序
data = data['词频'].sort_values(ascending = False)
# 生成dict格式数据
data = dict(data)
print(data)# 生成词云图
import matplotlib.pyplot as plt
from wordcloud import WordCloud
#关键词有中文,因此需要设置显示字体,否则会乱码
font_path = "C:\Windows\Fonts\Microsoft YaHei UI\msyh.ttc"
# 设置词云图的相关参数
wc=WordCloud(font_path=font_path,width=500,height=500,scale=2,mode="RGBA",background_color='white')# 根据dict制作词云图
wc=wc.generate_from_frequencies(data)
#存储词云图结果
#存储图像
wc.to_file('词云图1.png')
#显示图片
plt.imshow(wc,interpolation="bilinear")
# 不显示坐标系
plt.axis("off")
# 显示图像
plt.show()
# 保存结果
plt.savefig("词云图2.png")
2、绘制指定形状的词云图
(1)准备背景图片
  • 以下面的背景图片为例:
    (注:图片的背景颜色要是白色的;而且不要有水印否则也会被当做背景图片的一部分!!!)
    在这里插入图片描述
(2)处理背景图片
  • 需要将图片转化为数组,便于用作词云图形状
# 生成词云图
import matplotlib.pyplot as plt
from wordcloud import WordCloud
import numpy as np # numpy数据处理库
from PIL import Image # 图像处理库,用于读取背景图片
img = Image.open('图片地址') # 加载背景图片
img_array = np.array(img)    # 将图片变为数组,便于用作词云图形状
  • 将图片数组化之后,结果如下:

在这里插入图片描述

(3)生成指定形状的词云图
wc=WordCloud(mask=img_array,font_path=font_path,width=500,height=500,scale=2,contour_color='purple',contour_width=3,max_font_size=80,max_words=100,background_color='white')
  • 结果如下:
    在这里插入图片描述

  • 完整代码

import pandas as pd
df=pd.read_excel("data-test.xlsx")# 读取excel数据信息
print(df)
print("====================================================")# 只获取前5条数据
# df_new=df.head(5)
# print(df_new)
print("====================================================")# 生成一个DataFrame文件,index为df数据的index
data = pd.DataFrame(index=df['关键词'])
# 先将词频这一列赋值为0 ,即定义这一列为int格式,后面再赋值
data['词频']=0
# 将excel的数据写入data中
for i in range(0,len(df)):data.iloc[i,0]=df.iloc[i,1]
# 将词频按照从大到小排序
data = data['词频'].sort_values(ascending = False)
# 生成dict格式数据
# data = dict(data)
data = str(data)
print(data)
# print(type(data))print("====================================================")# 生成词云图
import matplotlib.pyplot as plt
from wordcloud import WordCloud
import numpy as np # numpy数据处理库
from PIL import Image # 图像处理库,用于读取背景图片img = Image.open('grape.jpg') # 加载背景图片
img_array = np.array(img)    # 将图片变为数组,便于用作词云图形状#关键词有中文,因此需要设置显示字体,否则会乱码
font_path = "C:\Windows\Fonts\Microsoft YaHei UI\msyh.ttc"
# 设置词云图的相关参数
# 设置词云图的相关参数
wc=WordCloud(mask=img_array,font_path=font_path,width=500,height=500,scale=2,contour_color='purple',contour_width=3,max_font_size=80,max_words=100,background_color='white')# 根据dict制作词云图
wc=wc.generate(data)
# wc=wc.generate_from_frequencies(data)
#存储词云图结果
#存储图像
wc.to_file('词云图1.png')
#显示图片
plt.imshow(wc,interpolation="bilinear")
# 不显示坐标系
plt.axis("off")
# 显示图像
plt.show()
# 保存结果
plt.savefig("词云图2.png")

五、待优化

1、指定词云图形状时,出现数据类型错误的报错
  • 一开始生成词云图的数据格式是字典格式,但是后面在指定形状的时候,因为报错就把数据格式转换成字符串了,然后就能正常显示:
# 生成dict格式数据
# data = dict(data)
data = str(data)
2、图片轮廓的提取待改进
  • 在指定形状的时候,对背景图片的要求比较高,比如图片的背景是白色的,图片的轮换不光滑的话提取效果不好,因此在提取背景图片的轮廓方面待改进。
img = Image.open('grape.jpg') # 加载背景图片
img_array = np.array(img)    # 将图片变为数组,便于用作词云图形状

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

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

相关文章

MinIO上传

简介 MinIO是一个开源的对象存储服务器,兼容Amazon S3 API。它提供了可扩展、高性能和高可用性的存储解决方案,适用于大规模数据存储和分发。 MinIO的设计目标是简单易用、轻量级和高度可定制。它可以在企业内部部署,也可以在公有云上使用。…

深度学习笔记(八)——构建网络的常用辅助增强方法:数据增强扩充、断点续训、可视化和部署预测

文中程序以Tensorflow-2.6.0为例 部分概念包含笔者个人理解,如有遗漏或错误,欢迎评论或私信指正。 截图和程序部分引用自北京大学机器学习公开课 要构建一个完善可用的神经网络,除了设计网络结构以外,还需要添加一些辅助代码来增强…

【Macos系统】安装VOSviewer及使用VOSviewer教程!!以ESN网络的研究进行案例分析

【Macos系统】安装VOSviewer及使用VOSviewer教程 以ESN网络的研究进行案例分析 本文介绍如何安装和使用VOSviewer软件,并以ESN(Echo State Network)网络的研究为案例进行分析。利用VOSviewer对相关文献进行可视化分析,并深入了解…

Linux之引导和服务篇

系统引导是操作系统运行的开始,在用户能够正常登录之前,Linux的引导过程完成了一系列的初始化任务,并加载必要的程序和命令终端,为用户登录做好准备。 一. 引导过程 开机自检--->MBR引导--->GRUB菜单--->加载Linux内核-…

商汤书生大模型一次可读 30 万汉字;2023 年 Shopee Live 超100万马来人注册;2023年中国出生人口902万人;

今日精选 • 商汤“书生・浦语”2.0 大语言模型开源:200K 上下文,一次可读 30 万汉字• 2023年中国出生人口902万人• 2023 年 Shopee Live 有超 100 万马来人注册并观看直播 投融资 • Airbnb 2 亿美元收购人工智能初创公司 Gameplanner.AI• 哥伦比…

【JavaEEj进阶】 Spring实现留言板

文章目录 🎍预期结果🍀前端代码🎄约定前后端交互接⼝🚩需求分析🚩接⼝定义 🌳实现服务器端代码🚩lombok 🌲服务器代码实现🌴运⾏测试 🎍预期结果 可以发布并…

Vcast工程创建

Vcast工程创建 1.新建项目,创建工程名称 2.创建该工程下的项目组 3.设置项目组环境的名字 4.选择需要测试的源代码文件 5.选择被测文件,点击build 6.出现报错,点击报错窗口的按钮 进入报错详细页,查看详细信息 报错内容如下 Unstubbed Enti…

使用原生input模拟器样式正常,但是真机上 input框溢出

目录 一、问题 二、解决方法 三、总结 tiips:如嫌繁琐,直接移步总结即可! 一、问题 1.使用原生input写了一个搜索框,在模拟器和pc上一切正常。但是打包放到手机上,样式就有问题:这个搜索框的布局是正常的&#xf…

广州银行IPO再添堵:原董事长被查,资产质量承压,罚单频现

撰稿|行星 来源|贝多财经 广州银行的上市之路,或因前高管涉嫌违纪再添一层阴云。 前不久,广州市纪委监委披露的信息显示,广州银行原党委书记、董事长姚建军涉嫌严重违纪违法,正在接受纪律审查和监察调查。据贝多财经了解&#…

代码随想录-刷题第五十七天

42. 接雨水 题目链接:42. 接雨水 思路:本题十分经典,使用单调栈需要理解的几个问题: 首先单调栈是按照行方向来计算雨水,如图: 使用单调栈内元素的顺序 从大到小还是从小到大呢? 从栈头&…

【AI】RTX2060 6G Ubuntu 22.04.1 LTS (Jammy Jellyfish) 部署Chinese-LLaMA-Alpaca-2

下载源码 cd ~/Downloads/ai git clone --depth1 https://gitee.com/ymcui/Chinese-LLaMA-Alpaca-2 创建venv python3 -m venv venv source venv/bin/activate安装依赖 pip install -r requirements.txt 已安装依赖列表 (venv) yeqiangyeqiang-MS-7B23:~/Downloads/ai/Chi…

软件测试【测试用例设计】面试题详解

前言 今天笔者想和大家来聊聊测试用例,这篇文章主要是想要写给测试小伙伴们的,因为我发现还是有很多小伙伴在遇到写测试用例的时候无从下手,我就想和大家简单的聊聊,这篇文章主要是针对功能测试的。 一、微信功能测试 1.点击点…

QGroundControl Qt安卓环境搭建及编译出现的问题

记录Qt 5.15.2搭建安卓环境出现的各种问题。 zipalign tool not found: D:/JavaAndroid/Android/sdk/build-tools//zipalign.exe? 答:需要将DANDROID_PLATFORM升级到已下载的版本. bin/llvm-readobj.exe: error: unknown argument ‘–libs’ 答&…

07-微服务getaway网关详解

一、初识网关 在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢?如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去调用。这样的话会产生很多问题,例…

链表的中间节点

链表的中间节点 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/middle-of-the-…

【1】SM4 CBC-MAC 机制

0x01 题目 MSG1: e55e3e24a3ae7797808fdca05a16ac15eb5fa2e6185c23a814a35ba32b4637c2 MAC1: 0712c867aa6ec7c1bb2b66312367b2c8 ----------------------------------------------------- MSG2: d8d94f33797e1f41cab9217793b2d0f02b93d46c2ead104dce4bfec453767719 MAC2: 4366…

Vue3的使用

一 Vue3的变化 1.性能的提升 打包大小减少41% 初次渲染快55%, 更新渲染快133% 内存减少54% 2.源码的升级 使用Proxy代替defineProperty实现响应式 重写虚拟DOM的实现和Tree-Shaking 3.拥抱TypeScript Vue3可以更好的支持TypeScript 4.新的特性 Composition API&#…

【UE 材质】简单的纹理失真、溶解效果

目录 1. 失真效果 2. 溶解效果 3. 失真溶解 我们一开始有这样一个纹理 1. 失真效果 其中纹理节点“DistortTexture”的纹理为引擎自带的纹理“T_Noise01”,我们可以通过控制参数“失真度”来控制纹理的失真程度 2. 溶解效果 3. 失真溶解

kafka简单介绍和代码示例

“这是一篇理论文章,给大家讲一讲kafka” 简介 在大数据领域开发者常常会听到MQ这个术语,该术语便是消息队列的意思, Kafka是分布式的发布—订阅消息系统。它最初由LinkedIn(领英)公司发布,使用Scala语言编写,与2010年…

HTML---Jquery选择器

文章目录 目录 文章目录 本章目标 一.Jquery选择器概述 二.Jquery选择器分类 基本选择器 层次选择器 属性选择器 三.基本过滤选择器 练习 本章目标 会使用基本选择器获取元素会使用层次选择器获取元素会使用属性选择器获取元素会使用过滤选择器获取元素 …