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

 更新时间:2024年06月25日 10:36:22   作者:十八只兔  
这篇文章主要给大家介绍了关于Python根据词频信息(xlsx、csv文件)绘制词云图的相关资料,wordcloud是基于Python开发的词云生成库,功能强大使用简单,文中通过代码介绍的非常详细,需要的朋友可以参考下

一、前言

本文将介绍如何用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)    # 将图片变为数组,便于用作词云图形状

总结 

到此这篇关于Python根据词频信息(xlsx、csv文件)绘制词云图(wordcloud)的文章就介绍到这了,更多相关Python根据词频绘制词云图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python基本语法练习实例

    python基本语法练习实例

    下面小编就为大家带来一篇python基本语法练习实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • 深入解析Python中delattr函数的使用方法和应用场景

    深入解析Python中delattr函数的使用方法和应用场景

    这篇文章主要为大家详细介绍了Python中delattr()函数的使用方法和应用场景,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2026-02-02
  • Django项目如何配置Memcached和Redis缓存?选择哪个更有优势?

    Django项目如何配置Memcached和Redis缓存?选择哪个更有优势?

    这篇文章主要介绍了Django项目如何配置Memcached和Redis缓存,帮助大家更好的理解和学习使用django框架,感兴趣的朋友可以了解下
    2021-04-04
  • 理解Python中函数的参数

    理解Python中函数的参数

    这篇文章主要介绍了Python中函数的参数,掌握函数中的参数传递在任何一门语言的学习过程当中都是基本功,需要的朋友可以参考下
    2015-04-04
  • pygame学习笔记(5):游戏精灵

    pygame学习笔记(5):游戏精灵

    这篇文章主要介绍了pygame学习笔记(5):游戏精灵,本文讲解了什么是精灵、sprite中主要且常用的变量、建立一个简单的精灵、学习精灵组、动画等内容,需要的朋友可以参考下
    2015-04-04
  • python输出后面多一个None问题

    python输出后面多一个None问题

    在Python中,函数如果没有显式指定返回值,会默认返回`None`,例如,计算一个数的平方根并输出,如果没有处理`None`,会输出结果后跟`None`
    2024-11-11
  • numpy中三维数组中加入元素后的位置详解

    numpy中三维数组中加入元素后的位置详解

    今天小编就为大家分享一篇numpy中三维数组中加入元素后的位置详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • 浅谈如何使用Python控制手机(二)

    浅谈如何使用Python控制手机(二)

    这篇文章主要为大家介绍了如何使用Python控制手机,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-11-11
  • Python深度学习实战PyQt5基本控件使用解析

    Python深度学习实战PyQt5基本控件使用解析

    PyQt5 提供了丰富的输入输出控件。本文介绍通过 QtDesigner 工具栏创建常用的基本控件,包括各种按钮控件、文本输入控件和调节输入控件
    2021-10-10
  • 利用Python的PyPDF2库提取pdf中的文字

    利用Python的PyPDF2库提取pdf中的文字

    PyPDF2是一个用于处理PDF文件的Python库,它提供了许多用于读取和操作PDF文件的功能,对于需要处理PDF文件的Python应用程序,PyPDF2是一个非常实用的工具库,本文将给大家详细介绍一下如何通过Python的PyPDF2库提取pdf中的文字,需要的朋友可以参考下
    2023-05-05

最新评论