Python根据词频信息(xlsx、csv文件)绘制词云图全过程(wordcloud)!
Python根据词频信息(xlsx、csv文件)绘制词云图全过程(wordcloud)!
作者:十八只兔
这篇文章主要给大家介绍了关于Python根据词频信息(xlsx、csv文件)绘制词云图的相关资料,wordcloud是基于Python开发的词云生成库,功能强大使用简单,文中通过代码介绍的非常详细,需要的朋友可以参考下。
一、前言
本文将介绍如何用python根据词频信息(xlsx、csv文件)绘制词云图,除了绘制常规形状的词云图(比如长方形),还可以指定词云图的形状。
二、安装并引入相关的库
1、安装相关的库
|
1
2
3
4
5
6
|
pip install jiebapip install matplotlibpip install wordcloudpip install numpypip install Image pip install pandas |
2、导入相关的库
|
1
2
3
4
5
6
|
import jiebaimport matplotlib.pyplot as pltfrom wordcloud import WordCloudimport numpy as npfrom PIL import Image # 图像处理import pandas as pd |
三、数据处理
1、文件读取
- 本文使用的数据集是excel文件(后缀名是.xlsx),该文件包含2个字段:关键词以及对应的频数

- 以下是对excel文件的相关操作:
|
1
2
3
|
import pandas as pddf=pd.read_excel("data-test.xlsx")# 读取excel数据信息print(df) |
- 数据读取结果如下:

- 只读取文件的前N条数据
|
1
2
3
|
# 只获取前5条数据df_new=df.head(5)print(df_new) |
- 结果如下:

2、数据格式转换
读取到excel文件后,需要把数据转换成字典的格式:
|
1
2
3
4
5
6
7
8
9
10
11
12
|
# 生成一个DataFrame文件,index为df数据的indexdata = 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、绘制基本的词云图
- 词云图的相关代码:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import matplotlib.pyplot as pltfrom 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
|
#显示图片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
|
import pandas as pddf=pd.read_excel("data-test.xlsx")# 读取excel数据信息print(df)# 只获取前5条数据df_new=df.head(5)print(df_new)# 生成一个DataFrame文件,index为df数据的indexdata = 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 pltfrom 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)处理背景图片
- 需要将图片转化为数组,便于用作词云图形状
|
1
2
3
4
5
6
7
|
# 生成词云图import matplotlib.pyplot as pltfrom wordcloud import WordCloudimport numpy as np # numpy数据处理库from PIL import Image # 图像处理库,用于读取背景图片img = Image.open('图片地址') # 加载背景图片img_array = np.array(img) # 将图片变为数组,便于用作词云图形状 |
- 将图片数组化之后,结果如下:

(3)生成指定形状的词云图
|
1
2
3
4
5
6
7
8
|
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
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
|
import pandas as pddf=pd.read_excel("data-test.xlsx")# 读取excel数据信息print(df)print("====================================================")# 只获取前5条数据# df_new=df.head(5)# print(df_new)print("====================================================")# 生成一个DataFrame文件,index为df数据的indexdata = 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 pltfrom wordcloud import WordCloudimport 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、指定词云图形状时,出现数据类型错误的报错
- 一开始生成词云图的数据格式是字典格式,但是后面在指定形状的时候,因为报错就把数据格式转换成字符串了,然后就能正常显示:
|
1
2
3
|
# 生成dict格式数据# data = dict(data)data = str(data) |
2、图片轮廓的提取待改进
- 在指定形状的时候,对背景图片的要求比较高,比如图片的背景是白色的,图片的轮换不光滑的话提取效果不好,因此在提取背景图片的轮廓方面待改进。
|
1
2
|
img = Image.open('grape.jpg') # 加载背景图片img_array = np.array(img) # 将图片变为数组,便于用作词云图形状 |
总结
到此这篇关于Python根据词频信息(xlsx、csv文件)绘制词云图(wordcloud)的文章就介绍到这了。
学习资料见知识星球。
以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。
快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利!
更多技巧, www.excelbook.cn
欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;
1、价值上万元的专业的PPT报告模板。
2、专业案例分析和解读笔记。
3、实用的Excel、Word、PPT技巧。
4、VIP讨论群,共享资源。
5、优惠的会员商品。
6、一次付费只需129元,即可下载本站文章涉及的文件和软件。
