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个字段:关键词以及对应的频数

    2024062510310282

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

2024062510310283

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

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)
  • 结果如下:

2024062510310285

四、绘制词云图

由于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")
  • 结果如下:

    2024062510310286

  • 完整代码
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)准备背景图片

  • 以下面的背景图片为例:
    (注:图片的背景颜色要是白色的;而且不要有水印否则也会被当做背景图片的一部分!!!)2024062510310287

(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)    # 将图片变为数组,便于用作词云图形状
  • 将图片数组化之后,结果如下:

2024062510310288

(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')
  • 结果如下:

    2024062510310389

  • 完整代码
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

欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;

如何快速写出10W+爆款文章!

你将获得:

1、价值上万元的专业的PPT报告模板。

2、专业案例分析和解读笔记。

3、实用的Excel、Word、PPT技巧。

4、VIP讨论群,共享资源。

5、优惠的会员商品。

6、一次付费只需99元,即可下载本站文章涉及的文件和软件。

文章版权声明 1、本网站名称:Excelbook
2、本站永久网址:http://www.excelbook.cn
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长王小琥进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报。
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。

THE END
分享
二维码
< <上一篇
下一篇>>