数据可视化-WordCloud简单应用

运用词云,也可以做出很多好看的图片,用于数据可视化

简介

官方文档https://amueller.github.io/word_cloud/ ,只要能大概把他的意思弄清楚,把代码拿过来用就行了

词云可以生成很多类型的图片,比如单个单词图云、方形词云、遮罩词云、表情符号词云,还可以自定义颜色等等。

我跟着老师做了一个遮罩的词云,使用遮罩可以生成任意形状的词云,用图片遮罩生成词云,需要图片背景为纯白色

需要的库

制作词云需要很多库,需要自己一个一个的安装

jieba

需要jieba库来分词,jieba是优秀的中文分词第三方库,中文文本需要通过分词获得单个的词语
jieba分词的原理:Jieba分词依靠中文词库,利用一个中文词库,确定汉字之间的关联概率,汉字间概率大的组成词组,形成分词结果,除了分词,用户还可以添加自定义的词组

matplotlib

绘图

wordcloud

词云

PIL

图像处理

numpy

矩阵运算

sqlite3

用数据库里的数据制作图云

词云制作

我跟着老师用如下图所示一张树的图片来做一个词云

image-20210517134110113

准备词云所需的文字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import jieba #中文分词,把句子变成很多词
from matplotlib import pyplot as plt #绘图,数据可视化,
from wordcloud import WordCloud #词云
from PIL import Image #图片处理
import numpy as np #矩阵运算
import sqlite3 #数据库

#准备词云所需的文字
con=sqlite3.connect("movie.db")
cur=con.cursor()
sql="select introduction from movie250"
data=cur.execute(sql)
text=""
for item in data:
text=text+item[0]
#print(text)
cur.close()
con.close()

分词

1
2
3
4
#分词
cut=jieba.cut(text)
string=' '.join(cut)
#print(string)

生成遮罩图片

1
2
3
4
5
6
7
8
9
10
11
#生成遮罩图片
img=Image.open(r"tree.jpg") #打开遮罩图片
img_array=np.array(img) #将图片转换为数组,用于相应的计算
#词云对象的封装
wc=WordCloud(
background_color='white',
mask=img_array,
font_path="msyh.ttc"
#font_path="STXINGKA.TTF" #字体所在位置C:\Windows\Fonts
)
wc.generate_from_text(string)

绘制图片

1
2
3
4
#绘制图片
fig=plt.figure(1)
plt.imshow(wc)
plt.axis('off') #是否显示坐标轴

显示或输出图片

1
2
3
4
#显示生成的词云图片
plt.show()
#输出词云图片到本地
plt.savefig("./word_default.jpg") #dpi设置清晰度

完整代码

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
# -*-coding=utf-8-*-
# @Time : 2021/5/17 10:52
# @Auther : Tianze
# @Email : 1252448508@qq.com
# @File : wordcloud_demo.py
# @Software : PyCharm

#官方文档https://amueller.github.io/word_cloud/
#只要能大概把他的意思弄清楚,把代码拿过来用就行了
#用图片遮罩生成词云,需要图片背景为纯白色
# 需要jieba库来分词
# jieba是优秀的中文分词第三方库
# 中文文本需要通过分词获得单个的词语
# jieba分词的原理
# Jieba分词依靠中文词库
# 利用一个中文词库,确定汉字之间的关联概率
# 汉字间概率大的组成词组,形成分词结果
# 除了分词,用户还可以添加自定义的词组
# jieba库文章https://blog.csdn.net/weixin_39919165/article/details/111083257

import jieba #中文分词,把句子变成很多词
from matplotlib import pyplot as plt #绘图,数据可视化,
from wordcloud import WordCloud #词云
from PIL import Image #图片处理
import numpy as np #矩阵运算
import sqlite3 #数据库

#准备词云所需的文字
con=sqlite3.connect("movie.db")
cur=con.cursor()
sql="select introduction from movie250"
data=cur.execute(sql)
text=""
for item in data:
text=text+item[0]
#print(text)
cur.close()
con.close()

#分词
cut=jieba.cut(text)
string=' '.join(cut)
#print(string)

#生成遮罩图片
img=Image.open(r"tree.jpg") #打开遮罩图片
img_array=np.array(img) #将图片转换为数组,用于相应的计算
#词云对象的封装
wc=WordCloud(
background_color='white',
mask=img_array,
font_path="msyh.ttc"
#font_path="STXINGKA.TTF" #字体所在位置C:\Windows\Fonts
)
wc.generate_from_text(string)

#绘制图片
fig=plt.figure(1)
plt.imshow(wc)
plt.axis('off') #是否显示坐标轴

#plt.show() #显示生成的词云图片
#输出词云图片到文件
plt.savefig("./word_default.jpg",dpi=100) #dpi设置清晰度

结果:

image-20210517134623797

参考

https://www.bilibili.com/video/BV12E411A7ZQ?p=36

jieba库文章 https://blog.csdn.net/weixin_39919165/article/details/111083257

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2020-2021 Blog of Tianze

请我喝杯咖啡吧~

支付宝
微信