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 jieba pip install matplotlib pip install wordcloud pip install numpy pip install Image pip install pandas |
2、导入相关的库
1
2
3
4
5
6
|
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文件的相关操作:
1
2
3
|
import pandas as pd df = 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数据的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、绘制基本的词云图
- 词云图的相关代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
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
|
#显示图片 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 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)处理背景图片
- 需要将图片转化为数组,便于用作词云图形状
1
2
3
4
5
6
7
|
# 生成词云图 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)生成指定形状的词云图
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 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、指定词云图形状时,出现数据类型错误的报错
- 一开始生成词云图的数据格式是字典格式,但是后面在指定形状的时候,因为报错就把数据格式转换成字符串了,然后就能正常显示:
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、一次付费只需99元,即可下载本站文章涉及的文件和软件。
共有 0 条评论