您现在的位置是:首页 > 技术教程 正文

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

admin 阅读: 2024-03-23
后台-插件-广告管理-内容页头部广告(手机)

一、前言

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

二、安装并引入相关的库

1、安装相关的库
pip install jieba pip install matplotlib pip install wordcloud pip install numpy pip install Image pip install pandas
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
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
  • 2
  • 3
  • 4
  • 5
  • 6

三、数据处理

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

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

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

在这里插入图片描述

  • 只读取文件的前N条数据
# 只获取前5条数据 df_new=df.head(5) print(df_new)
  • 1
  • 2
  • 3
  • 结果如下:
    在这里插入图片描述
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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 结果如下:

在这里插入图片描述

四、绘制词云图

由于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')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 图片展示的相关代码
#显示图片 plt.imshow(wc,interpolation="bilinear") plt.axis("off")# 不显示图像坐标系 # 显示图像 plt.show() plt.savefig("词云图2.png")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 结果如下:
    在这里插入图片描述

  • 完整代码

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")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
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) # 将图片变为数组,便于用作词云图形状
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 将图片数组化之后,结果如下:

在这里插入图片描述

(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')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 结果如下:
    在这里插入图片描述

  • 完整代码

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65

五、待优化

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

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索
排行榜